Комментарии 3
За статью, конечно, плюсик, на хабре статьи по рендерингу бывают очень редко. Немного критики:
Мир рендерится один раз – геометрический шейдер автоматически выбирает нужную сторону для записи

Я бы поспорил с этим высказыванием. Геометрический шейдер ничего не выбирает, вы просто клонируете геометрию 6 раз, а каждая копия попадает в свой surface cubemap'а. Затем лишняя (для каждого surface своя лишняя) геометрия отсекается и, вуаля получили то, что хотели, как бы за дешево :) По большому счету, все отличие от олдскульного варианта в том, что цикл от 1 до 6 выполняется на GPU. Справедливости ради замечу, что если сцена будет высокополигональна, то теоретически копирование в геометрическом шейдере может по быстродействию уступить циклу на стороне CPU, где мы можем отсекать лишнюю геометрию по frustum'у или придумать что-либо еще.

взамен эмита новой геометрии – можно использовать инстансинг, выбирая нужный RTIndex исходя из InstanceID. Да, можно, но я получил заметный проигрыш в перфомансе. В подробности, почему так получилось – не вдавался. Оказалось куда проще заимитить новые треугольники, чем использовать полученные от инстансинга.

Это как-то не серьезно :) ИМХО надо или разобраться в чем дело, или не писать про это :)

В общем, спасибо за статью. Жду следующих!
Первый пункт верен, да.

Во втором пункте, если, опять же, углубленно не вдаваться — при инстансинге GPU больше работы выполняет из-за полного прохождения каждого инстанса по графическому конвейеру, в GS же такого не происходит.
Хорошо написано! Пару слов меня одёрнули, впрочем («первоманс», «заимитить»), но это мелочи.

По представлению карты теней для всенаправленного источника света — помимо cube map и dual-paraboloid есть ещё такая интересная экзотика как тетраэдральные карты (tetrahedral shadow maps). Они требуют 4 клона геометрии вместо 6 и при этом не искажают результат как параболоиды. К сожалению, данный подход недостаточно изучен до сих пор, трудно найти приличные примеры кода.

Про depth bias — в DirectX 9 он ведь тоже был, пусть и в несколько ином формате. В принципе, ничего не мешало его использовать там, просто для подсчёта абсолютного смещения нужно было учитывать разрядность карты глубины.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.