Воксельный конус, отслеживающий мягкие тени направленного света

В настоящее время я пытаюсь реализовать мягкие тени с конической трассировкой, как описано в разделе 8.3.1 документа эту статью.

У меня есть иерархическая структура вокселей с мип-отображением в 3D-текстуре, вокселизированная путем рисования сцены Sponza во фрагментном шейдере и сохранения «фрагментов вокселей» в 3D-текстуре. MIP-отображение выполняется в вычислительном шейдере.

Автор объясняет, как создавать мягкие тени для точечных источников света и площадных источников света, что довольно просто понять, но он не объясняет направленных источников света, которые используются в сцене Sponza.

Для точечных источников света конус отслеживается от точечного источника света, и его радиус увеличивается по мере того, как он проходит к каждой части сцены, описанной как «объем» в сцене. Однако у направленных источников света нет определенной точки источника света, только направление. Как бы я применил эту концепцию для работы с направленным светом? Конус должен быть другой формы, не так ли?


person gboxentertainment    schedule 20.01.2013    source источник


Ответы (3)


Простите меня, если я слишком наивен, но, возможно, вы могли бы вычислить ограничивающую сферу для сцены и рассмотреть один цилиндр, который проходит через центр сферы с тем же радиусом, ориентированный в соответствии с направлением света. Затем вы действуете так же, как с точечными источниками света (или прожекторами), но вместо этого сохраняете постоянный радиус (то есть цилиндр вместо конуса).

person Gato    schedule 20.01.2013

Если это еще не исправлено, вы можете попробовать перейти от точки запроса (например, на один конус), пока не дойдете до края своей 3D-текстуры. Поскольку текстура, вероятно, имеет большой размер, вы можете подумать о марше с параметризованным размером шага. Чтобы сгенерировать мягкие тени, сгенерируйте дополнительные случайные выборки, близкие к точке вашего запроса.

person Trylz    schedule 28.06.2016

В случае (бесконечных) направленных источников света вы хотите очертить плотный конус по направлению к свету и накапливать непрозрачность. Если непрозрачность достигает 1.0, он полностью блокируется. Если конус выходит за пределы сцены в широком AABB, вы также можете безопасно завершить трассировку конуса и вернуть окклюзию, которая будет использоваться для определения того, сколько тени попадает в начало конуса.

Температура конуса здесь будет определять, насколько мягкими станут тени.

person Entalpi    schedule 04.12.2019