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

Lightmap с использованием 3D текстуры

Страницы: 1 2 3 Следующая »
#0
19:59, 28 июля 2018

Я давно разрабатываю эту тему.
Идея в том, чтобы весь игровой уровень "утопить" в одной 3D текстуре. Точнее в двух текстурах, замысел в том, чтобы каждый тексель данной текстуры содержал информацию об освещённости данной точки пространства с шести базовых направлений, которых, очевидно, шесть. Используя две RGB текстуры, мы как раз получаем шесть независимых каналов.

Польза для геометрии уровня:
Нет нужды прописывать в вертексы текстурные координаты для этой карты, ведь в качестве текстурных координат для 3D карты можно использовать само пространство.

Польза для других объектов:
Такая карта освещённости работает не только для стен, но и для всего пространства, освещая все, в том числе подвижные, предметы - оружие, персонажей, даже частицы дыма.

Проще генерировать и использовать:
Нет нужды генерировать атлас для 2D карты освещённости, вся генерация заключается в обычном рендере в текстуру игровой карты с шести направлений с каждой точки пространства, соответствующей текселю будущей 3D текстуры, геометрию рендерим чёрным материалом, источники света - серым, яркость можно варьировать, задавая яркость самого источника света. Источники света могут быть протяжёнными, их может быть очень много, и это никак не повлияет на время генерации карты освещённости.

Демо, тут один источник света, зато очень протяжённый - небо, просто выбранная сцена не содержит других источников света. Применена 3D текстура размером 256*128*256, содержится в папке Data в виде двух PNG файлов, это для удобства сохранения и загрузки, объём послойно нарезан в атлас. Размер демо 39 Мб:
https://yadi.sk/d/N8-i3EAY3Zfc48

Если интересно, могу подробнее рассказать про генерацию такой карты освещённости.

#1
20:14, 28 июля 2018

Mikle
> Точнее в двух текстурах, замысел в том, чтобы каждый тексель данной текстуры
> содержал информацию об освещённости данной точки пространства с шести базовых
> направлений, которых, очевидно, шесть.
Звучит, как переизобретение сферических гармоник.

#2
21:06, 28 июля 2018

MrShoor
> Звучит, как переизобретение сферических гармоник.
Я до сих пор знал этот термин, как чисто математическое понятие, без практического применения в геймдеве.

#3
21:16, 28 июля 2018

Поздравляю, ты изобрёл irradiance volume

#4
21:45, 28 июля 2018

>irradiance volume
Ага. И проблемы которого в

- множестве ничем не юзаемых вокселей, занимающих память. Можно делать sparse octree какое-нибудь, но это всяко сложнее (но было в quantum break, например)
В watch dogs просто вокруг зданий/дорог расставляли маленькие боксы с 3д текстурками подобными. Применялись дефером. Опять же в плане памяти поэффективнее одного огромного бокса (внутри непроходимых зданий и высоко над улицей вокселей нет).

- протечках света (например если тонкая стена). Это как-то решается, опять же стоит глянуть пейперы по квантуму.

#5
21:55, 28 июля 2018

Mr F
> Можно делать sparse octree какое-нибудь
Mr F
> В watch dogs просто вокруг зданий/дорог расставляли маленькие боксы с 3д
> текстурками подобными.
Это оптимизации, как бы само собой.

Battle Angel Alita
Почитал про Irradiance Volume, я так понял, у меня используется куб фонового освещения (Ambient Cube) техника.

#6
23:29, 28 июля 2018

Такая схема используется сейчас в Unigine. Только там не в тупую 3d текстура используется, а какой-то свой собственный хитрый принцип хранения данных.

Mr F
> Это как-то решается, опять же стоит глянуть пейперы по квантуму.
В том же Unigine такая проблема решается элегантно - бентнормал в скринспейсе. Хотя при очень низком разрешении сетки "лайтмапы" даже они не помогают. В критичных случаях для аутдура используется одна сетка, а для индура - другая. А уж каким макаром определять с какой из них для какого пикселя брать данные - это уже дело техники.

#7
0:16, 29 июля 2018

Очень низкое разрешение у такой лайтмапы получается. Упираемся в память

#8
5:03, 29 июля 2018

Mikle
irradiance volumes, да. более интересная, на мой взгляд, техника — это вместо хранения 3д текстуры в мировых координатах, хранить несколько вложенных 3д текстур увеличивающейся точности и уменьшающегося размера вокруг камеры. тогда близкие к камере объекты всегда будут иметь подробную детализацию вторичного освещения, дальние — низкую. называется cascaded camera space light propagation volumes. однако, те же самые проблемы с light bleeding и нужен нетривиальный солвер, чтобы считать это в реалтайме.

#9
8:31, 29 июля 2018

marggob
> бентнормал в скринспейсе
Что такое "бентнормал"? Поиск не дал ответа.
g-cont
> Очень низкое разрешение у такой лайтмапы получается. Упираемся в память
Это смотря для карт какого размера это применять. Я тоже заранее сомневался в том, что будет достаточная детализация, но оказалось очень даже ничего. Это из-за направленности такого освещения, взаимодействие с нормалями освещаемых объектов создаёт впечатление гораздо большей детализации, чем есть на самом деле.

Кто-нибудь демо смотрел?
Suslik
> вместо хранения 3д текстуры в мировых координатах, хранить несколько вложенных
> 3д текстур увеличивающейся точности и уменьшающегося размера вокруг камеры
То есть постоянная подгрузка детальных текстур при движении.

#10
9:41, 29 июля 2018

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

#11
9:42, 29 июля 2018

Mikle
> освещённости данной точки пространства с шести базовых направлений, которых,
> очевидно, шесть. Используя две RGB текстуры, мы как раз получаем шесть
> независимых каналов.
А цвет ты хранить не собираешься? Только интенсивность?

#12
9:49, 29 июля 2018

Panzerschrek[CN]
> А цвет ты хранить не собираешься? Только интенсивность?
Да, только интенсивность. Хотя есть кое-какие мысли на счёт цвета.
Panzerschrek[CN]
> протекание света
Посмотри демку, его практически нет, немного появляется только когда стенка тоньше 1 текселя и при этом расположена под углом к осям. В демке видно полоску света под длинной наклонной крышей вдоль стены.

#13
9:56, 29 июля 2018

Посмотрел. Но кодом было бы лучше. А статьёй с картинками - ещё лучше.

#14
10:32, 29 июля 2018

А, всё, допёр.
Так эту текстуру можно рассчитать уже с учётом статической геометрии.
Тем более что предлагается делать рендер в текстуру из каждой точки пространства.
Вот и протечек света вроде не будет.

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.