Что такое нормальные, касательные и бинормальные векторы и как они используются?

47

Я хотел бы узнать следующую информацию:

  • Кто они такие?
  • Пример использования в разработке игр (область, в которой они используются)

О следующих типах векторов:

  • Normal
  • Tangent
  • Binormal

Достаточно простого объяснения, ориентированного на разработку игр.

Яанус Варус
источник
1
Вы задаете слишком много вопросов. Лучше всего, если вы просто прочитаете, как работают векторы. С нуля. Также исправьте свою тригонометрию по пути.
Сидар
3
Я подумал, что это может быть много, чтобы спросить, но с другой стороны было бы неплохо собрать эту информацию вместе под одним вопросом. По этой же причине я специально попросил простых объяснений.
Яанус Варус

Ответы:

43

Вообще говоря, вектор нормалей представляет направление, направленное непосредственно «наружу» от поверхности, то есть он ортогональн (под углом 90 градусов) к любому вектору, который находится в одной плоскости (в случае плоской поверхности) или касается (в случай неплоской поверхности) поверхности в данной точке.

Касательный вектор обычно рассматривается как один вектор, который существует в плоскости поверхности (для плоской поверхности) или лежит касательной к контрольной точке на криволинейной поверхности (т. Е. Если плоская плоскость была построена с такой же нормалью от контрольной точки). , касательный вектор будет копланарным с этой плоскостью).

Концепция бинормального вектора немного сложнее; в компьютерной графике он обычно относится к вектору битангенса (ссылка здесь ), который фактически является «другим» касательным вектором для поверхности, который ортогонален как вектору нормали, так и выбранному вектору тангенса.Нормальный, Касательный, Битангентный

Что касается того, как они вычисляются, это варьируется в зависимости от сложности поверхности и от того, насколько точной должна быть нормаль (в некоторых случаях, например, с помощью гладких шейдеров, более желательно вычислить нормаль для приближенной поверхности, когда фактическая информация для поверхности нет), но есть несколько обобщенных формул , приведенных здесь .

С точки зрения того, где они происходят, ответ ВЕЗДЕ . Нормальные векторы используются для позиционирования камер и объектов в трехмерном пространстве, для определения траекторий, отражений и углов в физических расчетах, для отображения скинов и текстур в трехмерных моделях, для определения смещений траекторий при программировании ИИ, для подсказок шейдерам о том, как освещать, затенять и окрашивать точки на поверхности относительно источников света, камеры и других объектов и т. д. Они, возможно, являются одной из самых полезных частей информации в 3D-среде, и они даже очень полезны в 2D-среде.

Дробовик ниндзя
источник
2
Блин я бы добавил картинку: p
RobCurr
Спасибо за подробное объяснение! Помечено как ответ.
Яанус Варус
2
Это может помочь прочитать эту статью о том, почему предположение о квадратном пятне неверно и почему все, что все говорят о касательных и битангенсе, в значительной степени поддельные. Он описывает правильную математику, которую следует использовать, но, к сожалению, я не достаточно компетентен, чтобы написать правильный ответ.
Ларс Виклунд
Битангентный и бинормальный векторы эквивалентны. Это имена, относящиеся к одной и той же вещи, и это зависит только от вашей «умственной точки зрения» относительно того, какое имя использовать.
Никос
15

Нормальные векторы обычно используются для расчетов освещения. Предполагается, что это вектор, перпендикулярный поверхности, который аппроксимируется вершинами сетки. Нормы определяются в каждой позиции вершины, но могут быть рассчитаны по-разному, в зависимости от того, как вы хотите, чтобы свет отражался в этой вершине, или от того, что вы хотите делать со своими вычислениями света в шейдере.

Касательные и бинормальные векторы - это векторы, перпендикулярные друг другу, и вектор нормали, которые по существу описывают направление координат текстуры u, v относительно поверхности, которую вы пытаетесь визуализировать. Как правило, они могут использоваться вместе с картами нормалей, которые позволяют создавать детали освещения под поверхностью для вашей модели (неровности).

Очевидно, есть и другие способы использования этих векторов, и я только что описал их среднее использование. Для получения дополнительной технической информации я бы предложил вам взять книгу по компьютерной графике или изучить некоторые статьи в Интернете. Есть много информации об этом.

RobCurr
источник
4
+1 - в следующий раз, хотя; добавить картинку.
Питер Гиркенс
9

Разница между касательной и бинормальным не сразу очевидна на поверхностях, но это не должно вызывать удивления - бинормальное было изначально определено не для поверхностей, а для кривых , где концепция имеет гораздо больше смысла (и где она действительно живет) как «нормальный» в том смысле, что он ортогонален направлению движения, то есть имени). Чтобы быть более конкретным, учитывая пространственную кривую вида p = V (t) = (V x (t), V y (t), V z (t)), то касательная, которая представляет собой вектор, указывающий на Направление движения - определяется как T u = dp / dt = (dV x / dt, dV z / dt, dV z/ дт). (Я использую нижний индекс здесь, чтобы различать «ненормализованный», поскольку здесь у меня нет MathJax.) Тогда (мгновенная) скорость вдоль кривой равна просто s = | T u |, длине касательного вектора и «нормализованный» касательный вектор - это просто T = T u / s.

Тогда вектор нормали к кривой является производной от нормализованного касательного вектора по времени, N u = dT / dt; причина, по которой здесь используется нормализованная касательная, состоит в том, чтобы не допустить перекоса скорости по кривой по кривой - вы можете показать, что при этом определении у нас всегда TN u = 0. Обратите внимание, что N u не обязательно является единичным вектором. больше, чем T u ; на самом деле его величина k = | N u | является (мгновенной) кривизной кривой в данной точке, а точка p + N u является центром так называемой осциллирующей окружности (в данной точке). Нормализованная нормаль тогда просто N = N u/ k, а касательная B представляет собой перекрестное произведение B = TxN; поскольку T и N оба являются единичными векторами и они ортогональны друг другу, то B также является единичным вектором, а (T, N, B) является ортогональным кадром.

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

(К сожалению, это изображение на самом деле не соответствует концепции, но это лучшее, что я могу найти в Интернете, и я не могу с готовностью создать свою собственную ...)

введите описание изображения здесь

Стивен Стадницки
источник