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