Лайтмэппинг с воксельной геометрией

Кажется, в данный момент я нахожусь в затруднительном положении, когда пишу часть рендеринга моего игрового движка. Мой первоначальный план состоял в том, чтобы реализовать, как минимум, динамическое попиксельное освещение с помощью HLSL и иметь световой буфер, взаимодействующий с шейдером максимум для 8 источников света.

Важно отметить, что на данный момент вся моя карта представляет собой трехмерный массив блоков (64x64x64). После ОЧЕНЬ простого алгоритма уменьшения лица я смотрю на лица 32x32x32x6 для рендеринга в худшем случае. Я собираюсь использовать другие методы, чтобы уменьшить нагрузку, но сначала я хотел решить эту проблему.

В настоящее время с 8 источниками света в шейдере я получаю частоту кадров около 60-120 с GTX 470, которая является приличной картой. Очевидно, что есть много других оптимизаций, на которые я должен обратить внимание, но поскольку динамическое освещение не имеет для меня решающего значения (по крайней мере, не для 8 источников света), я изучал картирование освещения.

Если бы у меня было 4x4 люмеля на лицо, я бы посмотрел на атлас текстур для моей карты освещения всего уровня размером 32x32x32x6x16 с 4 байтами на пиксель. В результате получается текстура, которую я бы использовал, размером 2048x2048 (ближайшее разрешение power-2).

Я уже просмотрел несколько источников, особенно этот, http://www.flipcode.com/archives/Light_Mapping_Theory_and_Implementation.shtml, и хотя я понимаю, как реализовать это с базовой сценой, я не понимаю, как я могу реализовать это с моей текущей геометрической ситуацией.

Вот мой вопрос. Есть лучший способ сделать это? Можно ли использовать световую карту такого размера? Я чувствую себя комфортно, используя люмели 4x4 на лицо, поскольку билинейная фильтрация, кажется, в конце концов действительно сглаживает ситуацию. Кроме того, было бы довольно просто объединить статическую систему карт освещения с динамической попиксельной картой с HLSL?


person Joseph Pla    schedule 27.02.2013    source источник
comment
Каждое лицо имеет разную текстуру? Вы вызываете drawprimitive отдельно для каждого куба? Кроме того, если вы увеличите плотность вокселей в 4 раза, насколько это повлияет на частоту кадров? Я подозреваю, что вы меньше ограничены освещением и больше ограничены неоптимальным выбором рендеринга ...   -  person Goz    schedule 01.03.2013
comment
Нет, я сделал совсем немного, чтобы минимизировать количество пакетов. Я визуализирую каждый куб примерно с 32 вызовами отрисовки, и без шейдеров я получаю около 900 кадров в секунду.   -  person Joseph Pla    schedule 02.03.2013
comment
Кроме того, мне не нужна сверхвысокая плотность вокселей для того, что я делаю. Поле охвата 64-128 было бы достаточным, и с обоими я получаю очень хорошую частоту кадров.   -  person Joseph Pla    schedule 02.03.2013
comment
32 вызова на розыгрыш!? Сколько вызовов отрисовки на кадр?   -  person Goz    schedule 02.03.2013
comment
Всего я использую около 40 вызовов отрисовки на кадр, что на самом деле довольно мало.   -  person Joseph Pla    schedule 03.03.2013
comment
правильно ... я думал, вы говорите, что рисуете каждый куб с 32 вызовами;)   -  person Goz    schedule 03.03.2013
comment
Выложи свой HLSL тогда...   -  person Goz    schedule 03.03.2013


Ответы (1)


http://www.rastertek.com/dx10tut18.html

Текстуры, которые вы используете, будут мини-текстурами 4x4 внутри вашей «супертекстуры». Проверьте эту ссылку, но, честно говоря, вы не даете очень много, чтобы продолжить.

person Voula11    schedule 23.07.2013