Я дізнаюся про звичайне картографування. Я зрозумів, що значення RGB перетворюються на XYZ, але моє питання полягає в тому, як воно перетворюється і чому нормальна карта синього та фіолетового кольору?
Я дізнаюся про звичайне картографування. Я зрозумів, що значення RGB перетворюються на XYZ, але моє питання полягає в тому, як воно перетворюється і чому нормальна карта синього та фіолетового кольору?
Відповіді:
Оскільки звичайна карта охоплює вектори від -1 до 1, є сенс розтягнути цей діапазон на 0-> 1, щоб все це могло бути вписане в діапазон RGB.
Тому зазвичай ми застосовуємо перетворення на звичайне, щоб перетворити його в те, що ми можемо бачити.
vec3 colour = vec3(0.5) + normal * 0.5;
Синій колір обумовлений тим, що звичайні карти повинні використовуватися відносно примітиву (трикутник / тощо), звичайний (0,0,1) напрямок, щоб вказати на відхилення від нормального трикутника. Зазвичай шейдер фрагмента повинен обертати цю норму по відношенню до поточної норми на піксель під час виконання.
vec3 normal = (colour - vec3(0.5)) * 2.0;
Тільки дотичні простори звичайних карт в основному синього кольору. Це пояснюється тим, що синій колір являє собою норму (0,0,1), яка була б незмінною нормою, коли трикутник лежить у площині х і у, тобто перпендикулярно поверхні. Дотична, x і bi-дотична, y (також її називають бі-нормальною) кодуються в червоному і зеленому каналах, і ці форми створюють дотичний простір, нормальний для точки на поверхні трикутника.
Якщо нормальна карта дотичного простору повинна кодувати колір лише червоним кольором (1,0, 0,0, 0,0), це створило б дотичний простір, нормальний паралельно поверхні трикутника. Це ніколи не спостерігається, тому що це означатиме, що трикутник буде колись засвічуватися на відстані 90 градусів від поверхні та переглядати вектор, в який момент ви не зможете побачити трикутник у будь-якому випадку.
Нормальні карти всесвітнього простору кодують одиницю нормальної над сферою, тому можуть бути передусім різні кольори, кодовані колись від [-1, 1] до [0, 1] на канал.
Порівняння можна побачити тут:
На практиці звичайні карти зазвичай кодуються у двоканальному форматі, такому як BC5, який фактично зберігає лише x та y з реконструйованим z, оскільки ми знаємо, що це одиничний вектор. Це дозволяє підтримувати більш високу точність за допомогою більшої кількості бітів, не збільшуючи розмір файлу.
vec3 colour = vec3(0.5) + normal * 0.5;
перетворює RGB в XYZ?