Короткий ответ
Карты нормалей и нормали - это две разные вещи: нормали - это геометрическое свойство любой сетки / поверхности, ее использование не является исключительным для расчета затенения и освещения, но на самом деле имеет много других применений, например в физике. Карты нормалей - это текстуры, которые кодируют альтернативные векторы нормалей, используемые в компьютерной графике для имитации неровностей.
Длинный ответ
Нормалы в геометрии нормаль - это вектор или линия, перпендикулярная данному объекту (например, нормаль к плоскости, нормаль к вершине). Нормы в графике обычно используются для расчета освещенности, например, для расчета диффузного отражения на поверхности путем помещения точечного произведения между направлением света и нормалями поверхности. Нормалы обычно рассчитываются на основе геометрических свойств сетки (грани / вершины) путем взятия перекрестного произведения любых двух непараллельных ребер, лежащих на одной плоскости.
В OpenGL нормали задаются для каждой вершины (следовательно, они называются атрибутами вершин), даже если они могут быть рассчитаны только для каждой грани, в этом случае вам необходимо указать одну и ту же нормаль для каждой вершины грани. Нормы можно интерполировать с помощью OpenGL по каждой вершине грани (треугольника), чтобы вы могли рассчитать отраженный свет на пиксель, а не на вершину, что дает более точный результат.
Отображение нормалей: с другой стороны, это методика компьютерной графики, которая кодирует нормали в текстурной карте, поэтому каждый нормаль кодируется для каждого текселя. Он обычно используется для фальсификации освещения ударов и вмятин (например, картографирование выпуклостей, отображение параллакса).
Так как нормали рассчитываются на основе геометрических свойств сетки / поверхности, Карты нормалей предоставят вам альтернативные нормали, которые могут имитировать неровности, чтобы добавить детали к поверхности, не добавляя больше полигонов.
Карты нормалей обычно создаются с использованием гораздо более детальной трехмерной модели, а затем вычисляются нормали на основе этой модели и кодируются в карту нормалей.
Зачем нам оба?
Говоря только о рендеринге, нормали и карты нормалей обычно используются вместе для достижения окончательного эффекта освещения, хорошим примером может служить рельефный шейдер, где вам нужна нормаль карты нормалей для достижения эффекта рельефного освещения, и вам все равно понадобится геометрическая нормаль для расчета того, что называется касательным пространством . Касательное пространство обычно используется для повторного использования для карт нормалей.
Имейте в виду, что нормаль считается геометрическим атрибутом поверхности и имеет гораздо больше применений, чем только легкие вычисления. Карты нормалей, с другой стороны, обычно используются для поверхностных эффектов.
Расширяем ответ, чтобы объяснить, почему касательные пространства важны:
Краткий ответ:
касательные пространства используются для того, чтобы сделать карты нормалей независимыми от базовой геометрии.
[EDIT] Добавлено изображение для представления карты нормалей в касательном пространстве и карты нормалей в мировом пространстве.
![введите описание изображения здесь](https://i.stack.imgur.com/Xo3Ln.png)
Длинный ответ:
На приведенном ниже рисунке показана плоскость UV и нормаль, которая определяет касательное пространство, при создании карты нормалей мы уже будем знать, что используемое пространство всегда будет иметь направление Normal в направлении Z (поэтому карты нормалей выглядят голубоватыми) , это поможет нам игнорировать кривизну поверхности **,.
Касательное пространство дает нам преимущество в том, что наша кодировка карт нормалей не привязана к определенной сетке нормалей. Предположим, что мы кодируем нашу карту нормалей в мире или пространстве объектов, тогда каждая кодируемая нами нормаль будет иметь направление, основанное на том, как исходные нормали сетки изменяются в мировом пространстве, не говоря уже о том, что преобразования вашей модели будут влиять на вашу карту нормалей.
![введите описание изображения здесь](https://i.stack.imgur.com/5qLNk.png)
На двух приведенных выше рисунках довольно ясно, что пространство касательных делает карты нормалей (справа) независимыми от базовой геометрии, поскольку все нормали кодируются практически в одном и том же направлении с небольшими вариациями для имитации эффекта выпуклостей.
** кривизна поверхности определяется величиной, от которой геометрический объект отклоняется от плоской или прямой в случае линии, но это определяется по-разному в зависимости от контекста.
![Касательное пространственное представление](https://i.stack.imgur.com/vH3RDm.png)