Вопрос 1.
В буфер ярких участков записывается полностью пиксель, яркость которого выше 1. Или только те компоненты, яркость каких выше 1.
Вопрос 2.
Как добиться, что на ярких участках центр белый, а к краям переходит в цвет света (например красная лампочка в центре белая, а блум от нее красный)
вопрос 3. В буфер ярких участков пишем до или после тонмапинга?
Можно после tonemapping'а сделать smoothstep между luma (grayscale значение) и цветом который получился после tonemapping'a. Яркости больше какого-то значения будет белой, а меньше цветной...
Когда-то для другой темы делал пример:
Исходная картинка:
Выделяем самое яркое:
Размываем блуром:
Суммируем с первой картинкой:
Mikle
Только у тебя grayscale пороговый буффер почему-то.
Для ситуации с HDR следует во время tone mapping прохода записывать значения выше порога в пороговый буффер через MRT, при этом еще вычитая оттуда значение порога, а дальше идет как Mikle уже сказал - размытие и аддитивный блендинг с буффером цвета после tone mapping'а.
Порог это еденица, обычно. Но можно больше, а можно меньше, если чувствуешь себя забавненько.
oxotnik
> Как добиться, что на ярких участках центр белый, а к краям переходит в цвет
> света (например красная лампочка в центре белая, а блум от нее красный)
> вопрос
Центр тоже красный, просто все каналы больше 1.0 и после отсечения остаётся белый.
Вопрос 1 не корректный какой-то вообще или так сформулирован..
oxotnik
> Вопрос 1.
У меня пишется полностью, так как размываются все составляющие цвета.
> Вопрос 2.
Этот вопрос решается тональной компрессией (HDR Tone Mapping). Буферы нужно делать 16-битными, иначе итоговый цвет у тебя будет как в 1-м Квейке.
> вопрос 3.
Тональная компрессия выполняется уже после всех постэффектов перед коррекцией гаммы и выводом финальной картинки.
Да вот даже тупо пример посмотри: https://learnopengl.com/Advanced-Lighting/Bloom
реализация bloom через разблюривание с порогом — это старый способ реализации, когда с floating point rendertarget'ами были проблемы. сейчас гораздо лучше рендерить в hdr, блюрить в hdr без всяких фейковых порогов, а потом уже применять экспозицию через tone mapping и переводить в srgb.
Suslik
> реализация bloom через разблюривание с порогом — это старый способ реализации,
> когда с floating point rendertarget'ами были проблемы.
это классический пример же
Suslik
> гораздо лучше рендерить в hdr, блюрить в hdr без всяких фейковых порогов
для этого нужен HDR монитор?
Misanthrope
> для этого нужен HDR монитор?
для этого нужен рендертаргет c float форматом. перед отображением на мониторе всё равно нужно будет tone mapping'ом переводить в цветовое пространство обычного монитора.
Suslik
> блюрить в hdr без всяких фейковых порогов
По физике блюрить надо ту часть, которую мы отрезаем, потому что неотрезанная часть разблюрится сама внутри глаза. Ну и использовать гауссиан тоже не особо правильно, но тут уже соображения производительности.
> через tone mapping и переводить в srgb
Любой tone mapping, отличный от простого sRGB преобразования (с опциональной экспозицией) — это чистый фейк, не имеющий накакого отношения к физике. Лично я считаю, что после этого рендеринг не имеет права называться PBR.
Suslik
То есть для hdr имеет смысл разблюривать весь буфер без учета порога?
Звучит разумно, надо попробовать.
Сейчас для блума все так же гаус применяют или какие-то другие алгоритмы?
oxotnik
да возьми простой пример hdr из dxsdk :)
innuendo
Да чет не нравятся мне эти примеры все...
Вот был бы пример из frostbite :)
oxotnik
> Да чет не нравятся мне эти примеры все...
> Вот был бы пример из frostbite :)
лучше синица в руках чем утка под кроватью ...
Тема в архиве.