Войти
Вячеслав ЕгоровСтатьи

Deferred Shading, AA, alpha blending.

Внимание! Этот документ ещё не опубликован.

Играл в GTA4, и не мог не заметить повсеместного использования функции Alpha To Coverage. В последнее время её использовали для создания AA на треугольниках с альфа-тестом1, но в игре никакого сглаживания нету, а фича используется для «плавного» возникновения объектов.

И тут в голову пришла идея сделать deferred shading c полупрозрачными поверхностями и полноэкранным сглаживанием без разложения по слоям, как например в depth peeling2.
Для реализации нужно уметь получать значения отдельных семплов multisampled буфера, поэтому, вооружившись DX help и туториалами 01, 02 начал писать демку под DX10.

Первоначальная идея заключалось в том, что заполняя G-buffer, для полупрозрачных поверхностей будем задавать маску (SampleMask) с количеством активных семплов таким, чтобы оно по отношению к общему количеству было приблизительно равно значению прозрачности (для ААх8 возможны 8 значений прозрачности). Сразу возникли проблемы с прозрачными элементами в несколько слоёв. Пришлось руками задавать разные маски семплов. И следить за качеством результата.

В шейдере освещения для каждого семпла считается двустороннее диффузное освещение, блики и добавляется упрощённое объёмное освещение3. Вес каждого семпла – 1/количество. Понял, что можно присваивать каждому семплу разные веса, а именно – рисовать полупрозрачный объект только в один семпл при заполнении G-buffer’а и по особой формуле преобразовывать прозрачность в весовой коэффициент. Проблему order-independent transparency это не решило, но теперь полупрозрачная поверхность могла занять выделенное ей место. Ну и прозрачность больше не ограничена 8 значениями.

1 http://developer.download.nvidia.com/SDK/9.5/Samples/samples.html… hTransparency
2 http://developer.download.nvidia.com/SDK/10.5/direct3d/samples.ht… RoutedKBuffer
3 http://humus.name/index.php?page=Comments&ID=44&start=16

Страницы: 1 2 3 Следующая »

#antialiasing, #blending, #deferred shading, #dx10, #dx9, #transparency

10 июня 2009