На векторах строится графика
В освещении, материалах, механиках, частицах, камере большинство упирается в векторы и операции с ними. Разберем с понимаем, зачем это нужно и примерами.
–––
Вектор - это…
Стрелка с направлением и длиной. Отвечает на «куда» и «как сильно», а не «где» (это точка).
–––
В разработке векторы повсюду:
· Velocity — куда и как быстро летит частица.
· Normal — куда «смотрит» поверхность.
· View Direction — куда смотрит камера.
· Light Direction — откуда светит свет.
· RGB-цвет — тоже вектор (R = X, G = Y, B = Z)
Математические формулы, завязанные на векторах:
Dot Product (скалярное произведение): число от -1 до 1, показывающее, насколько нормализованные векторы смотрят в одну сторону.
На примере:
Два персонажа смотрят друг на друга → Dot ≈ 1 (сонаправлены).
Один смотрит на север, другой на восток → Dot = 0 (перпендикулярны).
Смотрят в противоположные стороны → Dot = -1.
–––
Cross Product (векторное произведение): третий вектор из двух векторов, который перпендикулярен обоим.
Для понимания может помочь правило правой руки:
Указательный палец — A, средний - B. Большой палец → направление A × B.
На примере: Луч (рейкаст) падает на поверхность под углом. Есть Normal и направление луча. Через Cross получаем вектор вдоль поверхности — для направления потока частиц или декалей.
–––
Сложение и вычитание векторов
Сложение: A + B. Стыкуем стрелки.
Вычитание: A − B. Направление от B к A.
В разработке: Позиция врага − Позиция игрока = вектор, показывающий, в какой стороне враг.
–––
Длина вектора: отвечает на вопрос «насколько далеко?» или «насколько близко?», измеряется в дистанции без направления.
В поиске чего можно применить:
· Расстояния между объектами: Distance = Length(A − B).
· Скорости: Speed = Length(Velocity).
· Силы затухания: чем больше длина от источника, тем слабее эффект.
Формула: √(X² + Y² + Z²), но в нодах Unreal это просто Length и Distance.
–––
Нормализация — приводит длину вектора к единице, не меняя направления.
В Unreal используется нода Normalize. Встроенные векторы (CameraVector, VertexNormalWS и т.д.) уже нормализованы, но если вы считаете что-то своё — проверяйте, т.к. ненормализированный вектор в Dot/Cross дает искаженный результат.
–––
Lerp (Linear Interpolation): Создает плавный переход от A к B.
Dot часто используют как alpha для Lerp, например при:
· Смешивании цветов, текстур, прозрачности.
· Плавном движении объекта между двумя точками.
–––
Remap: значение из [A, B] перевести в [C, D], с сохранением пропорции.
Пример: Возраст частицы: 0..3 секунды → Remap в Альфа: 1..0 (исчезновение).
–––
Дополнение: Типы векторов относительно друг друга
Тут запоминаем три типа:
1. Коллинеарные векторы
Лежат на одной прямой (или на параллельных прямых). Один — это другой, умноженный на число. Могут быть как сонаправленными, так и противоположно направленными.
В графике: частицы летят в одну сторону с разной скоростью — их скорости коллинеарны. Лучи от одного источника в одном направлении — коллинеарны.
2. Компланарные векторы
Лежат в одной плоскости. Не обязательно на одной прямой, но все — на одном плоском листе.
Пример: частицы, разлетающиеся по плоской поверхности.
3. Ортогональные (перпендикулярные) векторы
Угол между ними = 90°. Dot = 0.
a = (1, 0, 0) — право.
b = (0, 1, 0) — вперёд.
c = (0, 0, 1) — вверх.
Все три ортогональны.
В графике: основа любой системы координат.