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


47

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

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

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

  • Normal
  • Tangent
  • Binormal

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


1
Вы задаете слишком много вопросов. Лучше всего, если вы просто прочитаете, как работают векторы. С нуля. Также исправьте свою тригонометрию по пути.
— Сидар

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

Ответы:


43

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

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

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

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

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


2
Блин я бы добавил картинку: p
— RobCurr

Спасибо за подробное объяснение! Помечено как ответ.
— Яанус Варус

2
Это может помочь прочитать эту статью о том, почему предположение о квадратном пятне неверно и почему все, что все говорят о касательных и битангенсе, в значительной степени поддельные. Он описывает правильную математику, которую следует использовать, но, к сожалению, я не достаточно компетентен, чтобы написать правильный ответ.
— Ларс Виклунд

Битангентный и бинормальный векторы эквивалентны. Это имена, относящиеся к одной и той же вещи, и это зависит только от вашей «умственной точки зрения» относительно того, какое имя использовать.
— Никос

15

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

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

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


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) является ортогональным кадром.

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.