Дошли руки написать очередное дополнение к [моему краткому курсу компьютерной графики.][1] Итак, тема для очередного разговора — использование [карт нормалей][2]. В чём основное отличие использования карт нормалей от затенения Фонга? Основная разница в плотности задания информации. Для затенения Фонга мы использовали нормальные вектора, заданные к каждой вершине нашей полигональной сетки, интерполируя нормали внутри треугольников. Использование же карт нормалей позволяет задавать нормали для каждой точки нашей поверхности, а не лишь изредка, что просто драматическим образом влияет на детализацию изображений. В принципе, в [лекции про шейдеры][3] мы уже использовали карту нормалей, но только заданную в глобальной системе координат. Сейчас же разговор пойдёт про [касательное пространство][4]. Итак, вот две текстуры, левая задана в глобальном пространстве (RGB напрямую превращается в вектор XYZ), а правая — в касательном. ![][5] [Читать дальше →][6]
[1]:
https://habrahabr.ru/post/249139/
[2]:
https://en.wikipedia.org/wiki/Normal_mapping
[3]:
https://github.com/ssloy/tinyrenderer/wiki/Lesson-6:-Shaders-for-the-software-renderer
[4]:
https://en.wikipedia.org/wiki/Frenet%E2%80%93Serret_formulas
[5]:
https://raw.githubusercontent.com/ssloy/tinyrenderer/gh-pages/img/06b-tangent-space/nm_textures.jpg
[6]:
https://habrahabr.ru/post/279143/#habracut