Подтвердить что ты не робот

Фокс-конус, отслеживаемый мягкими тенями

Недавно я реализовал мягкие тени, используя трассировку кодов в вокселе в OpenGL 4.3, отслеживая конус в направлении света и накапливая значения непрозрачности. enter image description here

Ключевым моментом, который я пытаюсь решить или скрыть, является очень эффект вокселизированного эффекта затенения, когда окклюдированная поверхность становится ближе к окклюдеру, а также скрывает четкие пятна в тени из-за поверхностной вокселизации. Я использую voxels с низким разрешением 64x64x64; однако, даже если я использую voxels с более высоким разрешением, некоторые из низкоуровневых вокселов на более высоком уровне мип-карты все еще фиксируются в трассировке.

Итак, вот моя первая идея: я хочу, чтобы удержать самые мягкие части тени, которая находится дальше всего, и заменить части тени, которая ближе к окклюдеру с теневой картой. Теневая карта будет исчезать, так как она находится дальше от каждого окклюдера, и я каким-то образом вложу ее в конус, прослеженный тени.

enter image description here

Может ли кто-нибудь подумать о способе угасать тень от расстояния от каждого объекта для теневой карты, а затем плавно переплыть ее в тени с конусом?

Еще одна идея, которую я хотел бы сделать, - это как-то проследить тени на поверхностях, которые ближе к окклюдеру, но это, вероятно, будет слишком дорого.

В качестве альтернативы, я хотел бы приветствовать любые другие идеи, которые помогут улучшить алгоритм мягкой тени.

Я также поставил видео, чтобы показать его в движении:

https://www.youtube.com/watch?v=SUiUlRojBpM

По-прежнему не найдено способа разрешения проблемы теневого копирования.

4b9b3361

Ответ 1

Я предполагаю, что артефакты "чистого пятна" происходят из-за больших размеров вокселей, которые частично заполнены геометрией: "накапливать значения непрозрачности". Сколько образцов вы принимаете при преобразовании из растеризованных пикселей в вокселы? Если объем выборки/объем вокселей мал, тогда могут быть проблемы с правильной прозрачностью рендеринга - там будет шум, обозначенный более светлыми областями.

Кроме того, зависит ваше направление видимости вокселей? На основе оригинальной статьи автора. Направленная зависимость важна для обеспечения правильной визуализации полупрозрачных вокселей.

Быстрая фотография для объяснения

"для теневой карты, а затем плавно перемещайте ее в тени с конусом?"

Это похоже на то, что вы стреляете себе в ногу. Вы получаете еще больший удар по производительности и получаете недостатки как теневого отображения, так и трассировки конуса вокселей. Трассировка конуса Voxel дорогая, но может дать приятные мягкие тени и сделать глобальное освещение. Теневое сопоставление лучше выполняется при теневых тенях и быстрее для небольших сцен, но по мере добавления геометрии вы в конечном итоге перерисовываете один и тот же материал несколько раз, по крайней мере один раз для каждого света.

Отличная работа кстати. Я столкнулся с вашей проблемой, проводя предварительные исследования для собственной реализации DirectX трассировки кодов на вокксе.

[изменить]

Я понял, что сделал опечатку на картинке. Изображение справа должно быть 4/64, а не 4/16. Я забыл о размере Z.

Ответ 2

Ну, в этом случае вы можете сделать это, добавив больше огней. Вы можете добавить больше световых лучей ближе к оригиналу, а затем составить тень света с тенями более близкого света. Это эффект "облачного света".