Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Irradiance map generator

Irradiance map generator

AMM1AKПостоялецwww11 июля 201818:51#0
Добрый вечер!
Была поставлена задача - навернуть в существующий проект ibl с целью получения более реалистичного эмбиента и, возможно, отказа от некоторых источников света, заданных аналитически.
Технологию реализовал. Теперь встал вопрос о получении irradiance и Specular кубомап по развёртке окружения. Тим-лид сказал воспользоваться утилитой IBLBaker. На общих картах окружения даёт неплохой результат, да и настройки можно крутить. Попробовал в качестве окружения взять просто однотонную кубомапу с нарисованным в неё маленьким источником. В итоге irradiance получился с шумом:( Стал копать, почему так? Как выяснилось, при генерации irradiance идёт цикл по верхней полусфере(для рассчитываемого пиксела) с заданным смещением угла. В связи с этим в районе маленьких, но интенсивных источников получается шум. Так как для одного пиксела мы можем попасть в этот источник, а для соседнего уже можем не попасть. Или попасть другое число раз. Стал копать статьи.
https://learnopengl.com/PBR/IBL/Diffuse-irradiance
Здесь точно такой же алгоритм.
Вопрос: Почему для offline расчета нельзя пройтись по всем пикселям верхней полусферы кубомапы, а не идти с заданным шагам?
Есть готовые утилиты, которые рассчитывают качественные irradiance, Specular кубомапы?
Mr FПостоялецwww11 июля 201820:28#1
Есть очень быстрый способ, притом разницы с брутфорсом почти нет - сгенерировать стандартным способом мипмапы, а затем для каждого уровня roughness лучи швырять не по хайресной кубмапе, а по уже одному из даунсемпленных мипов. То бишь большой рафнес - читаешь там из 32х32, маленький - из хайреса.
Писал как-то заметки: https://ndotl.wordpress.com/2015/03/07/pbr-cubemap-filtering/
Шойдыр к ним: https://github.com/playcanvas/engine/blob/master/src/graphics/pro… rCubemap.frag

Правка: 11 июля 2018 20:28

MrShoorУчастникwww11 июля 201820:42#2
Mr F
> а затем для каждого уровня roughness лучи швырять не по хайресной кубмапе, а по
> уже одному из даунсемпленных мипов. То бишь большой рафнес - читаешь там из
> 32х32, маленький - из хайреса.
Irradiance - он для диффузки. А если диффузка делается ламбертом (что вероятнее всего так), то какой рогнесс?

AMM1AK
> Была поставлена задача - навернуть в существующий проект ibl с целью получения
> более реалистичного эмбиента и, возможно, отказа от некоторых источников света,
> заданных аналитически.
Запечь гармоники будет пореалистичнее я думаю. А вообще Cubemapgen может генерить Irradiance : https://seblagarde.wordpress.com/2012/06/10/amd-cubemapgen-for-ph… ed-rendering/

Правка: 11 июля 2018 20:42

AMM1AKПостоялецwww11 июля 201820:43#3
Mr F
Это для specular, как я понял?
Я про diffuse говорил. Со specular такой проломы нет, она проще строится)
Mr FПостоялецwww11 июля 201820:51#4
Протупил. Ну в любом случае, и для дифузных гармоник я сперва жму кубмапу в 32х32, а потом по каждому пикселю прохожусь, а то уснуть можно. Код тащил из выше указанного кубмапгена.
SuslikМодераторwww12 июля 20185:51#5
Mr F
> Есть очень быстрый способ, притом разницы с брутфорсом почти нет -
> сгенерировать стандартным способом мипмапы, а затем для каждого уровня
> roughness лучи швырять не по хайресной кубмапе, а по уже одному из
> даунсемпленных мипов. То бишь большой рафнес - читаешь там из 32х32, маленький
> - из хайреса.
так делает мармосет. а вообще самый дешёвый способ (хоть и немного фейк) — это всё то же самое, только обходиться ещё и всегда одним зеркальным лучом.
AMM1AKПостоялецwww18 июля 201814:29#6
MrShoor
CubemapGen то что нужно, спасибо! Ibl взлетел:) правда он, зараза, на cpu походу считает. Уж очень долго..
SuslikМодераторwww18 июля 201815:27#7
cubemapgen — говно мамонта, уже давно не поддерживается. cmft/cmftStudio — лучше, мощнее, современнее, открыты исходники. умеет OpenCL.

Правка: 18 июля 2018 15:27

MrShoorУчастникwww18 июля 201815:43#8
Suslik
У cubemapgen тоже открыты исходники. Но мне аж интересно стало, чем именно cmft/cmftStudio лучше, мощнее и современнее по части генерации irradiance map? Расскажи.
SuslikМодераторwww18 июля 201815:55#9
MrShoor
да просто когда запускаешь одно и запускаешь другое, неужели у тебя ещё какие-то вопросы остаются? cmft поддерживает батчинг через командную строку, поддерживает миллион разных форматов кубмап с возможностью конвертировать всё во всё, поддерживает все мыслимые форматы на выходе, включая экзотические вроде rgb32f dds с мипами и dx11 хедером, миллион настроек фильтрации кубмапы для разных моделей освещения, нормальная превьюилка. есть ещё куча мелочей, о которых даже не задумываешься, пока не понадобится применить на деле — например, есть возможность не трогать нулевой мип для сохранения его чёткости, есть возможность гамму применять(причём раздельно указать гамму при чтении и при записи), есть возможность считать параллельно на CPU и GPU, можно генерить кубмапы без швов для убогого dx9, который не умеет между фейсами интерполировать, исходники написаны нормально, в них чёрт ногу не сломит и у проекта нет зависимостей, так что пересобрать самому — дело 5 минут.

короче, моё основное впечатление по cmft — на каждый чих, который можно хотеть, оказывается, уже есть ключ командной строки. видно, что в него вносилось огромное количество мелких изменений, чтобы покрыть все возможные юзкейсы.

моя единственная претензия к нему — он написан на брутальном plain C со всеми вытекающими. в нём может иногда где-то биться память и успехов её среди void* без смартпойнтеров найти.

Правка: 18 июля 2018 15:59

MrShoorУчастникwww18 июля 201816:01#10
Suslik
Понятно, в контексте генерирования irradiance map у cmft только одно преимущество: можно сгенерировать через командную строку.

/ Форум / Программирование игр / Графика

2001—2018 © GameDev.ru — Разработка игр