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


11

Я дізнаюся про звичайне картографування. Я зрозумів, що значення RGB перетворюються на XYZ, але моє питання полягає в тому, як воно перетворюється і чому нормальна карта синього та фіолетового кольору?

Відповіді:


12

Оскільки звичайна карта охоплює вектори від -1 до 1, є сенс розтягнути цей діапазон на 0-> 1, щоб все це могло бути вписане в діапазон RGB.

Тому зазвичай ми застосовуємо перетворення на звичайне, щоб перетворити його в те, що ми можемо бачити.

vec3 colour = vec3(0.5) + normal * 0.5;

Синій колір обумовлений тим, що звичайні карти повинні використовуватися відносно примітиву (трикутник / тощо), звичайний (0,0,1) напрямок, щоб вказати на відхилення від нормального трикутника. Зазвичай шейдер фрагмента повинен обертати цю норму по відношенню до поточної норми на піксель під час виконання.


Цей код vec3 colour = vec3(0.5) + normal * 0.5;перетворює RGB ​​в XYZ?
Абхінай Сінгх Негі

1
@AbhinaySInghNegi немає, колір RGB, а нормальний - XYZ, тому це перетворює XYZ в RGB. Якщо ви хочете RGB для XYZ, ви використовуєтеvec3 normal = (colour - vec3(0.5)) * 2.0;
bram0101

20

Тільки дотичні простори звичайних карт в основному синього кольору. Це пояснюється тим, що синій колір являє собою норму (0,0,1), яка була б незмінною нормою, коли трикутник лежить у площині х і у, тобто перпендикулярно поверхні. Дотична, x і bi-дотична, y (також її називають бі-нормальною) кодуються в червоному і зеленому каналах, і ці форми створюють дотичний простір, нормальний для точки на поверхні трикутника.

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

Нормальні карти всесвітнього простору кодують одиницю нормальної над сферою, тому можуть бути передусім різні кольори, кодовані колись від [-1, 1] до [0, 1] на канал.

Порівняння можна побачити тут:

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

На практиці звичайні карти зазвичай кодуються у двоканальному форматі, такому як BC5, який фактично зберігає лише x та y з реконструйованим z, оскільки ми знаємо, що це одиничний вектор. Це дозволяє підтримувати більш високу точність за допомогою більшої кількості бітів, не збільшуючи розмір файлу.


Дотичні простори не є однозначно параметризованими, але я знаходжу безліч сітчастих + нормальних зображень-карти-в-дотичних простору. Чи є звичайний спосіб визначення основи дотичного простору?
Алек Якобсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.