Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / про особенности OIT11 и прозрачности в целом

про особенности OIT11 и прозрачности в целом

Поделиться
BernsПользовательwww7 дек. 201713:19#0
когда впервые реализовывал данный алгоритм, несколько охренел от его низкой производительности. пример мелкософта выдавал жалкие 30 кадров при сцене с 4-мя неплоноэкранными перекрытиями, минимуме полигонов и эффектов, в разрешении 640x480. недавно копнул сам, использовав два буфера RWByteAddressBuffer и RWStructuredBuffer, добился производительности в 300-600 кадров (пустая сцена с отложенным освещением выдает 800- 1100 кадров) в разрешении 1600x900. причины тормозов примерно осознаю. больше всего жрет ClearUnorderedAccessViewUint, что сажает фреймрейт с 1000 кадров до 600. в целях оптимизации не применял его для очистки структурированного буфера, а просто клэмпил по маске из счетчика. почему очистка UAV такая затратная?
есть подозрения, что после OMSetRenderTargetsAndUnorderedAccessViews глубина сцены начинает работать несколько иначе. пока не разобрался, но ни сохраненная в текстуру, ни хардварная глубина не совпадает. прозрачные объекты без отсечения адекватно отрисовываются только тогда, когда убран [earlydepthstencil]
и есть еще один момент, в котором, OIT не является решением, рефракция. до этого я использовал для реализации прозрачности пилинг глубины + отложенный расчет. полагаю, многие просто миксят рефракцию из непрозрачной сцены игнорируя всю прозрачность.

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

2001—2017 © GameDev.ru — Разработка игр