Чому нормальні карти переважно сині?


44

Чому звичайні карти переважно сині замість випадкового кольору?

Я здогадуюсь, що звичайні вектори 3D-об’єкта можуть вказувати в будь-який бік, наприклад:

(1.0, 0.1, 0.5), (0.1, -0.5, 0.3), (-0.51, 0.46, -1.0) ... 

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

Відповіді:


71

Існує два типи звичайних карт, які зазвичай використовуються при розробці ігор. Те, як ви думаєте, що вони повинні працювати, - це те, як працює один тип (звичайні карти-простір-карти), але більшість ігор використовують інший тип (звичайні карти дотичного простору), тому ви асоціюєте в основному сині текстури із звичайними картами.

Приклад звичайної картки моделі-простору

З карти звичайних просторів моделей кожен канал кодує точне значення нормалі, використовуючи ту саму систему координат, що і вершини моделі, з якою він використовується. Це означає, що різні частини звичайної карти матимуть різні відтінки, але пікселі поруч один з одним зазвичай мають подібні кольори. Приклад нормальної карти моделі-простору відображається вище ( джерело ).

Нормальні карти дотичного простору зазвичай світло-синього кольору. Цей тип карти визначає нормалі в просторі координат, унікальному для положення кожного пікселя на поверхні сітки. Він використовує (інтерпольовану) вершину, нормальну як вісь Z, та два інші ортогональні вектори, звані дотичною та бітангенсними, як осі X та Y. По суті, ви можете вважати нормали на карті як "зміщення" від нормального для цього пікселя, обчисленого інтерполяцією вершинних нормалей. Дотичні та бітангенсні вектори також інтерполюються з вершинних даних і визначають, який напрямок на сітці відповідає «вгору» та «вліво» у звичайній карті. Зображення, подане у запитанні, є чудовим прикладом того, як виглядає типова карта дотичного простору, тому я не наводжу іншого прикладу.

Компоненти звичайного нормального (не призначеного для каламбуру) діапазону від [-1, 1]. Але компоненти кольору в зображенні варіюються від [0, 1](або [0, 255]зазвичай вони нормалізовані [0, 1]). Тож норми масштабуються і компенсуються таким чином, що нормальний (0, 0, 1)стає кольором (0.5, 0.5, 1). Це світло-синій колір, який ви бачите на звичайних картах, і він не вказує на відхилення від нормальної інтерпольованої вершини при використанні нормальних дотичних просторів.

Причина дотичних дотичних просторів є перевагою перед модельно-просторовими нормалами через те, що їх легше створити і їх можна використовувати для декількох сіток. Крім того, якщо використовується з анімованою сіткою, завжди використовуються нормали дотичних просторів, оскільки норма постійно змінюється.


6
Подобається це пояснення - стисле, включає математику, деталізує різні типи, які використовуються для звичайних карт і чому вони використовуються.
Том 'Блакитний' Піддок

Дякуємо вам за те, що ви отримали відмінність між правильним bitangentта binormalправильним.
imallett

2
@imallett Так, поверхні мають нормальний, дотичний і бітангенс, в той час як криві мають дотичну, нормальну і бінормальну. Принаймні, це моє розуміння.
bcrist

8

Звичайна карта в основному вказує назовні від поверхні. Якщо припустити, що звичайне відображення Z-компонента нормальних векторів XYZ є "глибинним" напрямом, а також відображення B-компонента кольорового простору RGB, ви отримаєте, що більшість звичайних векторів мають бути переважно синіми.

Якби текстура була, скажімо, червоною, то це означало б, що нормальна карта - це поверхня, яка в основному спрямована праворуч. Цю особливість ви можете бачити на зразковому зображенні, оскільки права частина краю шишки має до них червонуватий відтінок.

Повна поверхня червонуватого кольору не мала б сенсу. Це вказувало б на поверхню, яка повністю спрямована праворуч. Це було б просто за зразком геометрії, а не частиною звичайної карти.


3
Щоб уточнити це трохи далі, нормальна карта тримає НЕ нормальний вектор з вашої точки зору, але він тримає нормальний вектор з точки зору обличчя, тому після того, як ви отримали нормальний з обличчя, ви змішуєте це з normalmaps-normalvector. А оскільки його здебільшого синій колір, який становить (0, 0, 1), це означає, що нормальний вектор, який ви вже отримали, не змінюється. (Подумайте про це, як би ви поклали кожне обличчя плоско на підлогу, перш ніж намалювати його, а потім скористайтеся звичайним вектором з нормальної карти; це здебільшого буде вгору, якщо справа чи зліва справа щось не так з вашою сіткою).
tkausl
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.