Математика в 3Д ► 02. Текстурные Координаты
Всем привет. Сегодня я хочу подробно разобрать все виды текстурных координат, которые используются в материалах Блендер. Буду очень благодарен всем, кто решит стать платными подписчиками или разово задонатить на означенные цели. Это сильно меня замотивирует на продолжение.
Как уже было отмечено в первом уроке, текстурные координаты определяют для каждой точки 3Д пространства уникальное числовое значение. Эти значения могут быть использованы для определения, каким образом текстура будет проецироваться на 3Д пространство.
Например, если мы возьмём обычный файл-картинку с текстурой - .png, .jpg и т.п. с разрешением 1024 на 1024 пикселя, и расположим на координатной сетке, положение каждого пикселя по ширине и высоте будет определяться значением координатной сетки по осям X и Y между нулём и единицей. Точное положение пикселя высчитывается путём деления единицы на количество пикселей по нужной оси и умножения на его порядковый номер по этой оси. Например 56-е пиксели по горизонтали будут располагаться на том месте координатной сетки, где её значение по оси Х будет равно 1 / 1024 🞄 56 = 0,0546875.
Значения от нуля (эквивалентно чёрному цвету) до единицы (эквивалентно белому цвету) в линейных системах координат, которые мы сейчас будем рассматривать, определяют базисные векторы, задающие направление и размер каждой оси в пространстве. При выходе значений системы координат по любой оси за пределы единицы (2, 3, 10, 100 и т.д.), от конца предыдущего базисного вектора по той же оси начинает отсчитываться новый базисный вектор, равный предыдущему. Таким образом, паттерн текстуры просто зацикливается и начинает повторяться.
Это касается текстур-картинок, паттерн которых ограничен их пикселями. Для процедурно генерируемых текстур, таких как Voronoi Texture, Noise Texture, Musgrave Texture и других, их значения, определяющие цвет, высчитываются напрямую из значений, которые дают текстурные координаты, игнорируя базисные векторы. Это происходит потому, что процедурно генерируемые текстуры, или как их ещё называют - шумы, являются математическими функциями: они получают три значения по X, Y и Z на вход, делают расчёт и выдают одно значение на выходе - и так для каждой точки 3Д простанства.
ТИПЫ ТЕКСТУРНЫХ КООРДИНАТ В BLENDER
GENERATED
Базисные векторы системы текстурных координат Generated - значения от 0 (чёрный) до 1 (белый) - определяются геометрией объекта до её деформаций, с учётом вращения объекта.
Что это значит и как это происходит:
• Сначала Блендер "смотрит", в какую сторону объект развёрнут, чтобы определить, куда направлены оси X, Y и Z, и если параметр вращения (Rotation) объекта изменён, то направление осей меняется вместе с ним
• Далее Блендер "смотрит", где в объекте находятся самые крайние вертексы по оси X с одной и с другой стороны. На месте крайнего вертекса, располагающегося ближе к началу оси X, значение оси Х будет равно 0, а на месте крайнего вертекса, располагающегося ближе к концу оси Х, значение оси Х будет равно 1. Все значения между 0 и 1 линейно распределяются между 0 и 1
• Так же рассчитываются все значения для осей Y и Z
⚠ Обратите внимание! ⚠
Для расчёта Блендер берёт крайние вертексы исходной геометрии ДО любых модификаторов, симуляций, костных и любых других деформаций геометрии, кроме деформаций с помощью Shape Keys.
↑ Распределение значений от 0 до 1 по осям X, Y и Z (сверху вниз) на разных объектах в текстурных координатах Generated, вид слева/спереди
↑ Распределение значений от 0 до 1 по осям X, Y и Z (сверху вниз) на разных объектах в текстурных координатах Generated, вид справа/сзади
↑ Проекция текстуры Voronoi на текстурные координаты Generated
🛈 Текстурные координаты Generated используются в качестве дефолтной системы координат для всех процедурно генерируемых текстур и шумов (Voronoi Texture, Noise Texture, Musgrave Texture и т.д.).
NORMAL
Базисные векторы системы текстурных координат Normal - значения от 0 (чёрный) до 1 (белый) - определяются углом отклонения нормалей поверхности от каждой оси, с учётом вращения объекта.
• Направление каждой оси рассчитывается с учётом вращения объекта - если значение Rotation объекта меняется, система координат вращается вместе с объектом
• Если направление нормали полностью совпадает с направлением оси, то значение оси в этом месте равно 1
• Если нормаль отклонена от оси на 90°, то значение оси в этом месте равно 0
• Если нормаль отклонена от оси на 180°, то значение оси в этом месте равно -1
⚠ Обратите внимание! ⚠
⚠ Обратите внимание! ⚠
Поскольку использование в материале карт нормалей в сочетании с нодом Normal Map и карт высот в сочетании в нодами Bump и Displacement переопределяет нормали, они также будут переопределять и искажать текстурные координаты Normal.
↑ Распределение значений от 0 до 1 по осям X, Y и Z (сверху вниз) на разных объектах в текстурных координатах Normal, вид слева/спереди
↑ Распределение значений от 0 до 1 по осям X, Y и Z (сверху вниз) на разных объектах в текстурных координатах Normal, вид справа/сзади
↑ Проекция текстуры Voronoi на текстурные координаты Normal
Как можно заметить, система координат Normal мало применима для определения проекции текстур, чаще она в разделённом по осям виде используется в качестве масок, например, чтобы добавить материал снега на все поверхности, направленные вверх.
UV
В отличие от двух предыдущих систем координат, у координат UV нет третьего измерения, оси Z. Эта система координат двухмерная - 2Д. Базисные векторы системы текстурных координат UV - значения от 0 (чёрный) до 1 (белый) - определяются сеткой 1 × 1, на которую предварительно проецируются полигоны объекта.
UV-развёртка моделей делается, как вручную, путём разметки швов разреза и расположения отделённых групп полигонов на сетке в UV Editor, так и с применением множества встроенных вспомогательных инструментов и аддонов. Этот процесс требует большого опыта и терпения, ему посвящено множество видео-уроков.
↑ Распределение значений от 0 до 1 в текстурных координатах UV по осям X и Y на разных объектах с разной развёрткой. Ось Z при построении системы координат не учитывается, её значения на протяжении всего 3Д пространства равны 0. Вид слева/спереди
↑ Распределение значений от 0 до 1 в текстурных координатах UV по осям X и Y на разных объектах с разной развёрткой. Ось Z при построении системы координат не учитывается, её значения на протяжении всего 3Д пространства равны 0. Вид справа/сзади
↑ Проекция текстуры Voronoi на текстурные координаты UV
OBJECT
Базисные векторы системы текстурных координат Object определяются трансформациями объекта - Location, Rotation и Scale, независимо от геометрии объекта. Это 3-х мерная система координат.
• Положение (Location) объекта определяет начало системы координат Object, в котором значение осей X, Y и Z равно 0. Положение объекта определяется положением Origin объекта, оранжевой точки, по умолчанию находящейся близко к центру создаваемых объектов.
• Вращение (Rotation) объекта определяет отклонение осей системы координат от глобальных, мировых осей X, Y и Z. Вращая объект, вы вращаете и систему координат Object
• Размер (Scale) объекта определяет размер базисных векторов осей системы координат Object. Если размер равен 1, 1, 1, то значение осей системы координат будет равно 1 в одном метре от центра системы координат или от Location объекта в положительном направлении оси и -1 в одном метре от Location в отрицательном направлении. Увеличивая или уменьшая Scale, вы увеличиваете или уменьшаете и систему координат Object. Фактически значения каждой оси умножаются на значение Scale
• При применении трансформаций Location, Rotation и Scale, система координат также обнуляется.
⚠ Обратите внимание! ⚠
Как бы вы ни перемещали геометрию объекта - в Edit Mode или с помощью модификаторов, симуляций, любых деформаций - это никак не повлияет на систему координат Object, она будет продолжать отсчитываться от местоположения Origin объекта, с учётом его Rotation и Scale трансформаций объекта.
⚠ Обратите внимание! ⚠
Блендер отображает значение 0, как черный цвет, 1 - как белый, значения выше 1 в цветовом пространстве Filmic, установленном по умолчанию, до какой-то степени он может отображать как "белее белого" (с последним мы столкнёмся в примерах других систем координат). Но отрицательные значения, меньше нуля, Блендер всегда отображает чёрным цветом, поскольку в цветовой гамме sRGB, использующейся для отображения цветов в абсолютном большинстве редакторов, 0 - является абсолютным минимальным значением цвета. Имейте в виду, что если вы видите чёрный, то это может быть не только 0, но и отрицательными значения, как в этом примере.
↑ Распределение значений от 0 до 1 по осям X, Y и Z (сверху вниз) на разных объектах в текстурных координатах Object, вид слева/спереди.
↑ Распределение значений от 0 до 1 по осям X, Y и Z (сверху вниз) на разных объектах в текстурных координатах Object, вид справа/сзади.
↑ Проекция текстуры Voronoi на текстурные координаты Object
CAMERA
Базисные векторы системы текстурных координат Camera по X, Y и Z определяются базовыми трансформациями (Location, Rotation, Scale) объекта камеры и работают точно так же, как если бы мы использовали объект Camera в качестве текстурных координат типа Object.
Можно сказать, что система текстурных координат Camera - это частный случай системы координат Object. Только вместо того, чтобы привязывать базисные векторы системы координат в каждом материале к трансформациям каждого объекта, на который этот материал наложен, они привязываются к одному объекту - объекту камеры. Таким образом, при повороте камеры, эта система координат будет как бы "скользить" сквозь другие объекты, двигаясь вместе с камерой.
⚠ Обратите внимание! ⚠
При просмотре вьюпорта вне режима камеры, для определения базисных векторов системы текстурных координат Camera используется не активная камера сцены, а прокси-камера вььюпорта.
↑ Распределение значений от 0 до 1 по осям X, Y и Z (сверху вниз) на разных объектах в текстурных координатах Camera, вид слева/спереди.
↑ Распределение значений от 0 до 1 по осям X, Y и Z (сверху вниз) на разных объектах в текстурных координатах Camera, вид справа/сзади.
↑ Проекция текстуры Voronoi на текстурные координаты Camera
WINDOW
Вторая двухмерная (2Д) система координат. Базисные векторы системы текстурных координат Window по X и Y определяются шириной и высотой текущего открытого окна вьюпорта. Ось Z при построении системы координат не учитывается, её значения на протяжении всего 3Д пространства равны 0
• Значение по оси X равно 0 на крайней левой границе окна и 1 на крайней правой границе окна
• Значение по оси Y равно 0 на крайней нижней границе окна и 1 на крайней верхней границе окна
↑ Распределение значений от 0 до 1 по осям X, Y и Z (сверху вниз) на разных объектах в текстурных координатах Window, вид слева/спереди.
↑ Распределение значений от 0 до 1 по осям X, Y и Z (сверху вниз) на разных объектах в текстурных координатах Window, вид справа/сзади.
↑ Проекция текстуры Voronoi на текстурные координаты Window
С оговоркой, можно допустить, что система координат типа Window может быть использована, как аналог системы координат Generated для объекта камеры. На практике эта система координат может быть удобна для работы с 2Д графикой.
REFLECTION
В качестве базисных векторов системы текстурных координат Reflection используется направление векторов отражения, с учётом нормалей объектов. С математической точки зрения объяснить вычисление этих векторов я не смогу, на практике достаточно знать, что с помощью этой системы координат можно накладывать фейковые отражения на объекты, используя HDRI и Environment текстуры.
↑ Распределение значений от 0 до 1 по осям X, Y и Z (сверху вниз) на разных объектах в текстурных координатах Reflection, вид слева/спереди.
↑ Распределение значений от 0 до 1 по осям X, Y и Z (сверху вниз) на разных объектах в текстурных координатах Reflection, вид справа/сзади.
↑ Проекция текстуры Voronoi на текстурные координаты Reflection
Спасибо за внимание! Если эта тема вам интересна, и вы бы хотели, чтобы я её развивал, пожалуйста, подписывайтесь на эту страничку на Boosty, ставьте лайки и пишите комментарии. И конечно, буду очень благодарен любой финансовой поддержке! Мой интерес будет напрямую зависеть от вашего интереса и активности.