На векторах строится графика

В освещении, материалах, механиках, частицах, камере большинство упирается в векторы и операции с ними. Разберем с понимаем, зачем это нужно и примерами.

–––

Вектор - это…

Стрелка с направлением и длиной. Отвечает на «куда» и «как сильно», а не «где» (это точка).

–––

В разработке векторы повсюду:

· 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) — вверх.

Все три ортогональны.

В графике: основа любой системы координат.

7