Elaine & ShaderShade
Привет, ШейдерШейд. Я тут подумала, как можно ускорить рендеринг нашего нового проекта процентов на тридцать – у тебя какие-нибудь идеи, как оптимизировать шейдинг, не теряя качества картинки?
Конечно. Начни с того, убери неиспользуемые проходы, пропекай статическую окклюзию, переходи на отложенный рендеринг, чтобы можно было объединить кучу источников света в один проход. Добавь отсечение света, чтобы обрабатывать только те, что попадают в камеру, а потом используй более простую модель затенения для далёких объектов. Не усложняй логику шейдера — обычно простота даёт скорость.
Звучит убедительно. Только помни, чистка должна быть в самом начале; любая ненужная вычислительная мощность до этого – это проигрыш. Составь максимально короткий список и быстро проверяй на пересечение. Если сократим этот этап на 10%, остальное будет легко. Готова смотреть цифры?
Хорошо, давай попробуем. Загрузим числа — поместим отбраковку в первый проход шейдера, используем иерархический Z-буфер для отбрасывания невидимых фрагментов и передадим список источников света по конвейеру. Я быстро протестирую сцену, сообщу о производительности поиска пересечений, а потом посмотрим, сможем ли мы достичь десятипроцентного сокращения. Ты просто следи за шейдером, без лишних ветвлений. Когда будешь готова – давай.
Хорошо, запускай сначала вычисления, интегрируй иерархический Z-буфер и передавай список источников света на следующий этап. Оставь шейдер фрагментов с одним проходом, без ветвлений. Я запущу бенчмарк на тестовой сцене, запишу процент попаданий и сравним с целевым показателем в 10%. Давай сделаем это.
Понял. Запускаю вычисления, Z-буфер на месте, список освещения оптимизирован. Один проход шейдера фрагментов, без разветвлений. Пришли лог бенчмарка, когда закончишь, посмотрим, как эти 10% срезались. Давай закончим это.
Отлично, держи меня в курсе результатов бенчмарка. Посмотрим на них, и тогда решим, что делать дальше.
Запустился бенчмарк, сейчас немного подожди. Сообщу, как процент попаданий опустится до нужных 10. Не переводи кофейник.