Вычисление освещения в фрагментном шейдере для интегрированных нормалей на каждую вершину определенно даст лучшие результаты (при условии, что вы правильно перенастроили интерполированные нормали в фрагментном шейдере), и оно составляет действительно на пиксель,Хотя сила различия может сильно зависеть от тесселяции модели и вариации освещения.Вы только что попробовали это?
Пока у вас нет каких-либо изменяющихся нормалей внутри грани (подумайте о рельефном отображении) и только интерполируйте нормали для каждой вершины, карта нормалей совершенно не нужна, так каквы все равно получите интерполированные нормали от растеризатора.Принимая во внимание, что нормальное отображение может дать более хорошие эффекты, если у вас действительно есть нормальные вариации на пиксель (например, очень шероховатая поверхность), это не обязательно правильный способ сделать освещение на пиксель.
Это имеет огромное значение, если вы вычисляете освещение для каждой вершины и интерполируете цвета или если вы вычисляете освещение для фрагмента (даже если вы просто интерполируете нормали для каждой вершины, это то, о чем идет речь о классическом затенении Фонга), особенно когда у вас естьдовольно большие треугольники или очень блестящие поверхности (очень высокочастотное изменение освещения).
Как уже говорилось, если у вас нет высокочастотных нормальных вариаций (изменение нормалей внутри треугольника), выне нужна карта нормалей и не интерполирует нормали для каждой вершины самостоятельно.Вы просто генерируете нормали для каждой вершины, как вы делали для освещения для каждой вершины (например, усредняя смежные нормали лица).Растеризатор выполняет интерполяцию за вас.
Сначала вы должны попробовать простое попиксельное освещение, прежде чем углубляться в методы, такие как нормальное отображение.Если у вас не такая точная мозаика геометрии или очень блестящие поверхности, вы наверняка увидите разницу с простым освещением на вершину.Затем, когда это сработает, вы можете попробовать обычные методы картирования, но для их работы вам, безусловно, нужно сначала понять значение освещения на пиксель и затенения Фонга в отличие от затенения Гуро.