Обрабатывать много источников света в сцене (с помощью шейдеров)


9

Мне интересно, как справиться со многими источниками света в сцене. Учитывая очень большую карту в ролевой игре, с подземельями (со светом там) и т. Д. Я знаю об отсроченном освещении, но это только ответ, как сделать много источников света. Но мой вопрос больше: как не сделать много огней. Очевидно, что желательно визуализировать только свет, воздействующий на сцену, но я не знаю технику / алгоритм для архивирования этого. Никто не хочет или даже не может сделать 500 точечных источников света, просто потому, что где-то на карте. Но нельзя просто провести прямую линию от света к игроку и проверить, если что-то находится между ними. Расстояние также не выглядит хорошим показателем. (Солнечный лучик?)

tl; dr: Как я могу выяснить, какие источники света влияют на сцену, только чтобы визуализировать их?


OpenGL или DirectX?
Кравемир

6
на самом деле, 500 источников света вполне возможно при отсроченном освещении, если вы не хотите, чтобы тени для всех них;)

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

4
@Darkwings Вы в основном описываете здесь то, что просил blubb. Как мне ходить? Ну, я думаю, что решение здесь просто гулять! (Работал для меня.) ;-) «Вам нужно знать, освещает ли этот источник что-то по вашему усмотрению». <- Это именно то , что он просит, он хочет знать, как он может это сделать. ^^ Хотя конус / сфера от Кикаймару, вероятно, полезны.
cooky451

1
Для ОП не было очевидным проверить усеченный вид, так как он упомянул только расстояние. Каждый источник света будет иметь некоторые параметры, чтобы определить это. Если используются направленные источники света, они будут охватывать всюду, у прожекторов будет целевая зона (так что это может быть решено с помощью пересечения вектор-плоскость) и так далее. Вы должны больше думать о том, какие источники света вы хотите повлиять на сцену, учитывая, что если у вас действительно много источников света, расположенных очень близко друг к другу, вам лучше будет приблизиться (для отбрасывания теней). То есть: 100 свечей на старинной люстре можно обрабатывать как один источник света.
Darkwings

Ответы:


5

Даже проще, чем ограничивающие объемы;

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

Просто немного сложнее, в зависимости от того, насколько важна производительность:

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


5
+1 - звучит подозрительно, как ограничивающая сфера, хотя;)
Gyan aka Gary Buyn

Немного поздно ... во всяком случае, это "ограничивающая сфера". Используя этот метод, вы все равно будете визуализировать источники света, которые полностью скрыты стенами и т. Д. И, следовательно, не имеют отношения к сцене. Кроме того, не каждый свет идет во всех направлениях.
Darkwings

5

Самый простой способ, которым я могу придумать (давайте будем честным, единственный способ, о котором я подумал), это дать каждому свету ограничивающий объем . Если ограничивающий объем пересекается с усечением вида (или ограничивающим объемом усеченного вида), примените свет.

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

Нечто подобное солнцу может не иметь ограничивающего объема (для обозначения его всегда следует применять).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.