Использую оператор тонового маппинга Рейнхарда (тот, который в DXSDK HDR Pipeline).
1) Если в сцене большое черное пятно в середине экрана, и некоторые детали по бокам, то средняя яркость близка к нулю, а потому множитель 1 / La стремится к бесконечности и я получаю черное-белую картинку ( черное пятно посередине и белые края ). Как то довольно неестесственно выглядит. Как бороться с такими ситуациями? Сцены, где дисперсия яркости мала, не предлагать =)
2) Нужно размазывать блумом исходное HDR изображение или помаппенное, но неприведенное? Ведь если оператор маппинга превратил область средней яркости в белый цвет, потому что вокруг нее было темно (как в пункте 1), то она, наверное, должна светиться =) Но поскольку я блумю незамапенные области, она даже не проходит BrightPass.
В принципе, можете отправлять на хорошие паперы. В своем ShaderX ничего кроме вышеупомянутого оператора Реунхарда не нашел =((
-- Правка - точку на вопросительный знак )
Вот что сейчас получается:
Засветка стены если переместить камеру так, чтобы она видела только кусок стены и тьму =).
Если надо, могу запостить код Final-pass шейдера.
кажется у тебя luminance не правильно считается
Там в r канале лежит средняя яркость, в g - максимальная.
а может оно и верно, когда в темной сцене чтото очень ярко светиться - оно тебя слепит, я думаю в реальном уровне таких вещей не должно быть
ограничивай среднее значение яркости снизу и сверху.
Просто тупо константами? Тогда нужны логичные обоснованные значения. Вы как делаете?
>>Просто тупо константами?
Да
>>Тогда нужны логичные обоснованные значения
Нужны просто хорошо подходящие значения. Причина - человеческий глаз не может расширить зрачёк на километр в темноте, и не может сузить до нанометра, при просмотре солнца.
Это я понимаю. А какие значения лучше подойдут? Ну или примеры какие-нибудь в зависимости от сцены исходя из личного опыта.
И вот еще вопрос: у меня создается чувство, что сцена с HDR сильно уж пересвечена, если сравнивать ее со сценой без tone mapping (см. Скриншоты). Это нормально или маппинг все-же должен как-то поравномерней сжимать яркие области. Тут Ambient сцены 0.3, Light intensity - 5 ( и у зеленого, и у белого ).
hr0nix
Я делал HDR по этому же методу и у меня был точно такой же глюк если это так можно назвать. Советую посмотреть другие методы и примеры (например HDR with 2x FP16 MRTs из NVSDK или дизассемблировать шейдеры из того же Rthdribl)
_zerg_
А в итоге на чем ты остановился?
hr0nix
>А в итоге на чем ты остановился?
Я пока без адаптации оставил. И так неплохо выглядит) Просто не было времени переделывать. Кстати в Dark Messiah of M&M адаптация неплохо сделана. Надо будет потом шейдеры выдрать да поизучать ))
Так я и делаю без адаптации. Как в DXSDK HDR Pipeline (а не HDR Lighting).
И все еще открыт вопрос про яркость сцены (см. выше) =)
Ох-ха. Один из лучших математиков моего курса немного поработал над тоновым маппингом + я добавил адаптацию по времени. Получилось во сто крат лучше. Если кому интересно - пишите, дам скрины и формулы )
Интересно, конечно.
Тема в архиве.