Оптимизировать работу между фрагментом и вершинным шейдером

Я учусь создавать графический движок с OpenGL. Я хотел знать, следует ли перемещать повторяющиеся операции из вершинного шейдера в фрагментный шейдер, поскольку, насколько я понял, вершинный шейдер запускается только один раз для каждой вершины?

Например, при нормализации вектора для направления света, поскольку этот источник света одинаков во всей вершине, следует ли его перемещать в вершинный шейдер вместо того, чтобы рассчитывать его для каждого пикселя? Есть ли особая причина хранить его во фрагментном шейдере?


person Oscar Sjöstedt    schedule 10.05.2019    source источник


Ответы (1)


Если вычисление точно такое же: да, обычно должно быть более эффективно выполнять это в вершинном шейдере, чем во фрагментном шейдере. Некоторые ситуации, когда это может быть не более эффективно:

  • при рисовании геометрии, которая приводит к меньшему количеству затененных пикселей, чем трансформируемых вершин - либо из-за плотной геометрии, либо из-за чрезмерного отбрасывания / окклюзии. Если это так, обычно вы хотите решить эту проблему, переключившись на геометрию с более низким уровнем детализации или более интеллектуальную отсечку геометрии.

  • когда выполнение вычислений в вершинном шейдере требует, чтобы вы отправили больше данных во фрагментный шейдер, чтобы использовать результаты вычислений. Отправка большего количества данных может быть медленнее, потому что для этого требуется больше манипуляций с памятью и потому, что растеризатор должен интерполировать больше «различных» значений по каждому многоугольнику.

В частности, при расчетах освещения помните, что перемещение вычислений из фрагментного шейдера в вершинный шейдер может повлиять на качество рендеринга. В частности, нормализованные векторы направления в каждой вершине могут стать короче после "изменяющейся" интерполяции, что может немного затемнить внутреннюю часть треугольника, если используется напрямую без перенормировки. И, конечно же, перенос всего расчета освещения в вершинный шейдер имеет еще более серьезные последствия.

Но насколько заметны эти эффекты, зависит от частоты текстур, разрешения геометрии, размера экрана, расстояния до источников света и т. Д. - в некоторых случаях компромисс между качеством и производительностью может иметь смысл.

person Joe Lee    schedule 11.05.2019