Оптимизировать работу между фрагментом и вершинным шейдером - PullRequest
0 голосов
/ 10 мая 2019

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

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

1 Ответ

1 голос
/ 11 мая 2019

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

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

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

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

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

...