EN
Andrey Sokolov
Andrey Sokolov
730 subscribers
goals
21 of 500 paid subscribers
Когда я наберу 500 платных подписчиков, смогу больше времени уделять записи видео и разработке аддонов для Blender.
358.51 of $ 1 128 money raised
Донаты || Donates
37.35 of $ 564 money raised
Cделать аддон True Time Remapping бесплатным для всех желающих навсегда. Make True Time Remapping add-on free for everyone forever.
112.78 of $ 113 money raised
На дисковый накопитель 4Tb для хранения бэкапов курса «Blender Избушка».

Математика в 3Д ► 03. Векторные операции с текстурными координатами

Математические операции с текстурными координатами влияют как на визуальную репрезентацию отдельных осей, так и на то, каким образом будет деформироваться текстура, для которой они используются.
Для векторных операций мы будем использовать разные режимы нода Vector Math, иногда - в сочетании с другими вспомогательными нодами, иногда - в сочетании с текстурными координатами других вспомогательных объектов.
На изображениях сверху будет изменённый результат, снизу - исходное, необработанное изображение.
Буду очень благодарен всем, кто решит стать платными подписчиками или разово задонатить на означенные цели. Это сильно меня замотивирует на продолжение.
↑ Исходные текстурные коодинаты
 Add - сложение, A+B. Сумма значений для каждой оси. Перемещает текстуру вдоль соответствующих осей.
 Subtract - вычитание, А-B. Разность значений для каждой оси. Перемещает текстуру вдоль соответствующих осей.
 Multiply - поэлементное умножение, А🞄B. Произведение значений для каждой оси. При значениях > 1 равномерно сжимает текстуру, при значениях от 0 до 1 равномерно растягивает текстуру, по соответствующим осям.
 Divide - поэлементное деление, А/B. Отношение значений для каждой оси. При значениях > 1 равномерно растягивает текстуру, при значениях от 0 до 1 равномерно сжимает текстуру, по соответствующим осям.
 Multiply Add - умножение и сложение, А🞄B+С. Произведение значений и последующая сумма со значениями третьего вектора для каждой оси. То же самое, что сначала произвести операцию Multiply, а потом Add.
 Scale - умножение вектора на число. Равномерно сжимает или растягивает текстуру по всем трем осям  
 Cross Product - векторное произведение, А×B. Возвращает вектор, перпендикулярный плоскости, образованной векторами A и B с длиной, равной площади параллелограмма, образованного векторами A и B. Разворачивает текстуру перпендикулярно двум входящим векторам
Очень важно для понимания!
Чтобы дальше понимать, что будет происходить, нужно понять, с какими именно векторами будут производиться операции. Велик риск начать ошибочно полагать, что Блендер использует в качестве векторов сами Текстурные Координаты - то есть мысленно рисует от начала системы координат стрелочки, равные одному метру, принимает их за вектор, каким мы его привыкли представлять визуально, и с этими "стрелочками" производит все эти операции. Это не так!
Да, вектор - это направленный отрезок, но поскольку для его определения нужны только его направление и длина, а не точное его расположение в пространстве, то вместо того, чтобы определять его 6-ю значениями - координатами по XYZ его начала и координатами по XYZ его конца, мы определяем его 3-мя значениями - только координатами по XYZ его конца, а начало вектора по умолчанию отсчитывается от (0, 0, 0) по XYZ.
То есть вот эти тройки значений в нодах - это координаты концов векторов, начала которых - всех векторов - лежат в точке (0, 0, 0).
И вот теперь, чтобы понять, что же именно высчитывает Блендер, нужно вспомнить, что значения в любых нодах - это не просто отдельные цифры, а что ноды в Блендер при просчётах присваивают эти числа из своих параметров каждой точке 3Д-пространства, и, соответственно, все вычисления проводятся для каждой точки 3Д пространства индивидуально - а не для каких-то "невидимых стрелочек".  
То есть когда мы подаём на вход Vector Math текстурные координаты, которые, как мы помним из прошлых уроков, для каждой точки 3Д пространства задают свои значения, то фактически это означает, что в каждой точке пространства образуется свой индивидуальный вектор, определяющийся значениями по XYZ. И вот именно с этими индивидуальными векторами в каждой точке 3Д-пространства Блендер и проводит вычисления.
Это понятно? Тогда будет понятно и что происходит дальше при смешивании двух разных систем координат. Одна система координат для каждой точки пространства определяет одни значения, другая - другие, а нод Vector Math смотрит, чему в каждой точке равно значение той и другой системы координат, производит необходимые вычисления и определяет для этой точки новое результирующее значение.
Точных математических формул для некоторых функций в документации не представлено, поэтом ограничусь просто переводом их описания 
 Project - проекция вектора А на вектор B. В качестве вектора B я буду использовать системы координат Object объекта Empty (пустышки). То есть, получается, у нас в каждой точке пространства будут обрабатываться два набора по три значения, определяемых разными системами координат.
 Reflect - отражение вектора А вокруг нормали, представленной вектором B. Вектор B может быть не нормализованным (не приведённым по длине к единице).   
 Refract - для падающего вектора А, вектора нормали поверхности B и индекса рефракции (IOR) возвращает вектор рефракции (преломления).
 Faceforward Ориентирует вектор А по направлению от поверхности B, определяемой нормалью C. Иными словами, если скалярное произведение (Dot Product) векторов B и C меньше 0 - возвращает вектор А, если больше или равно 0 возвращает вектор -А.
 Dot Product - скалярное произведение векторов. Произведение длин векторов А и В на косинус угла между ними. Поскольку Dot Product возвращает не вектор, а число (для каждой точки пространства, напомню), чтобы посмотреть, как он работает в качестве системы координат, мы будем его использовать только для оси X. Для этого с помощью нода Separate XYZ мы разделим исходный вектор на отдельные оси, ось Х заменим на обработанный результат, оси Y и Z оставим нетронутыми, и с помощью Combine XYZ соберём всё обратно в вектор.
 Distance - расстояние между векторами A и B.
 Length - длина вектора. Она же квадратный корень скалярного произведения вектора самого на себя.
 Normalize - у результирующего вектора остаётся то же направление, что и у исходного, но длина вектора становится равной 1. Если вектор равен (0, 0, 0), результирующий вектор также равен (0, 0, 0).
 Absolute - у всех отрицательных значений по каждой оси знак минус меняется на плюс.
 Minimum - возвращает наименьшее значение из двух входящих по каждой оси
 Maximum - возвращает набольшее значение из двух входящих по каждой оси  
 Floor (нижнее пороговое значение) - возвращает новый вектор, элементами которого являются наибольшие целочисленные значения, которые меньше или равны элементам заданного вектора
 Ceil (от ceiling, потолок) - возвращает новый вектор, элементами которого являются наименьшие целочисленные значения, которые больше или равны элементам заданного вектора.
 Fraction (дроби) - возвращает дробные части значений для каждой оси. Таким образом, независимо от входящих значений, результат всегда будет в пределах от 0 до 1 (не включительно).
 Modulo (по модулю) - остаток от деления для каждой оси. Также всегда будет в пределах от 0 до 1 (не включительно).
 Wrap (сворачивание/округление/упрощение). В документации просто ссылка на эту статью. Гугл-переводчик вам в помощь и Блендер для экспериментов в руки.
Я всё же не математик, но как сиджишник могу посоветовать попробовать вот такое использование Wrap для добавления глитчей
 Snap (привязка). Результат округления A до наибольшего целочисленного значения, кратного B, меньшего или равного A. (Что это вообще должно значить??? Но на практике может выглядеть прикольно!)
 Sine (синус). Ну, это пошла тригонометрия, с этим мы уже знакомы. Синус высчитывается для каждой оси индивидуально. Обратите внимание, что картинка попеременно развёрнута то в одну, то в другую сторону.
 Cosine (косинус). То же, что и синус, только со смещённой фазой (ну, это объяснение с поправкой на практическое применение, не вдаваясь в детали).
 Tangent (тангенс). В отличие от синуса и косинуса, у которых "волна" доходит до крайней верхней точки и потом медленно откатывается в обратном направлении, у тангенса после верхней точки происходит резкий скачок к нижней. Обратите внимание, что здесь картинка при дублировании уже смотрит в одну и ту же сторону. Также высчитывается индивидуально для каждой оси. 
Помимо Vector Math, мы можем использовать для математических операций с отдельными осями и нод Math, что ещё больше расширяет возможности. Напоследок несколько примеров:
 Power - возведение значения в степень.
 Ping Pong - пинг-понг.
 Arctan2 - уже знакомый нам по первому уроку арктангенс с двумя входящими параметрами, с помощью которого можно делать лучи или оборачивать текстуру по кругу - но об этом речь пойдёт уже в следующих уроках.
avatar
Огромное спасибо!
avatar
Так же поддержу комментарием
avatar
Владислав Беленко, спасибо! Очень ценю!
avatar
Андрей, посоветуйте, пожалуйста, книги по математике. Чувствуются пробелы в знаниях, когда пытаешься понять весь Ваш материал
Show more replies
avatar
kieshi 48, по видео урокам и на практике. Вот замечательный плэйлист по линейной алгебре на русском языке - https://youtube.com/playlist?list=PLVjLpKXnAGLXPaS7FRBjd5yZeXwJxZil2, вот отличный канал по математике в 3Д, правда уже на чистом английском - https://www.youtube.com/c/Acegikmo. У CG Matter (он же Default Cube) за все годы много всякого было по нодам и математике. Плюс практические занятия, постановка и решение прикладных задач. Конечно, от информации мозг кипит, скрипит и заставляет чувствовать себя тупым и никчёмным. Это нормально. Это он так развивается. Есть люди, от природы одарённые, для них вся математика логичная, увлекательная и понятная, они её чувствуют интуитивно и видят насквозь, у меня был такой одноклассник. Я про себя точно знаю, что я не такой, мне даже на элементарные задачи времени и усилий нужно в разы больше. Что тут поделаешь? Выделяю время, прикладываю усилия и постепенно осваиваю, год за годом.
avatar
Andrey Sokolov, дай бог Вам здоровья D
Comment removed
avatar
Axel Bond, сверху не иерархия шейдеров, а полная иерархия всей системы. У объекта есть данные типа Меш. У данных типа Меш есть Материал. У Материала есть Группа. У Группы есть Встроенная группа. То, что внутри Группы приходит из Group Input, снаружи Группы приходит ей на вход. То есть в вашем примере если векторный вход внутри Встроенной группы используется для определения системы координат, а на векторный вход основной Группы в Материале ничего не приходит, то такая система работать не будет, потому что все значения системы координат в любой точке пространства будут приравнены к 0,0,0 по XYZ. Такая структура, как в вашем примере, подразумевает, что на вход первой Группы обязательно снаружи в материале должен приходить какой-то вектор.
avatar
👍🏻
avatar
Здравствуйте, почему используя систему текстурных координаты object на стандартный плэйн, плоскость делится на 4 картинки, с пересечением в центре объекта, а не просто одна картинка? Причём просто скейлом плоскости это не решается, в таком случае, когда плэйн маленький, то уже от центра плоскость делится на две картинки, с чем это связано? По факту ведь картинок на плоскости должно быть много из за скейла, либо смещённого центра, но почему то центр объекта - ни есть центр изображения
avatar
Estaw Estawich, пиксели картинки распределяются между 0 и 1. В системе Object 0 в центре. Чтобы центр картинки совпадал с центром координат, нужно сместить систему координат на -0.5. Если соотношение сторон картинки неравномерное, нужны обратно пропорциональные корректирующие множители: например, если картинка 16:9, то систему координат по Х нужно разделить на 16, а по Y на 9. До или после можно добавить общий множитель для обоих осей, чтобы регулировать общий масштаб картинки.
avatar
Так это значит, что в уроке номер 3, вне группы нодов, из первой системы координат вы убрали 0,5 и возможно откскейлели картинку?
avatar
Estaw Estawich, возможно, я просто использовал координаты UV. Или, если координаты вне группы были всё-таки Object, то да, всё верно: вычитал 0.5 с последующим умножением по XY, чтобы картинка вписывалась в границы плэйна.
avatar
Андрей, что значит «возвращает»..? Я не могу найти даже в Гугле определение этому термину. 🤪 Ни у кого тут не возникнет такой вопрос, капец.

Subscription levels

1-й уровень

$ 2,26 per month
1-й уровень

2-й уровень

$ 5,7 per month
2-й уровень

3-й уровень

$ 11,3 per month
3-й уровень

4-й уровень

$ 22,6 per month
4-й уровень

5-й уровень

$ 57 per month
5-й уровень

Максимальная поддержка

$ 113 per month
Максимальная поддержка
Go up