sunLoadingImage
whowedImag
decoration left 1
decoration left 2
transhome
transprojects
transgallery
transarticles
decoration rigth
English
Українська
Show/Hide search bar
black cat logo variable logo
[12 Гру 2012]

Розрахунок карти нормалей

Карта нормалей – зображення, кожен піксель якого містить значення нормалі, і використовується в методі попіксельної модифікації нормалей. Карта нормалей будується по карті висот. Чим менша інтенсивність пікселя карти висот, тим він “нище” на поверхні, чим значення більше – тим “вище” піксель. Приклад карти висот і карти нормалей наведений нище. Можна уявити, що біле коло - монета, висота якої є більша, ніж висота навколишньої поверхні.
Карта висот І відповідна карта нормалей
Карту нормалей можна згенерувати в Adobe Photoshop з допомогою плагіна NVIDIA plugin for Photoshop, в програмі Mudbox на основі високодеталізованої моделі та в багатьох інших програмах.
Нормаль розраховується для кожного пікселя і будується в просторі дотичних. В даному випадку це означає, що осі X та Y простору йдуть паралельно до сторін зображення, а вісь Z спрямована перпендикулярно до зображення, тобто виходить з екрану. Нище наведений збільшений фрагмент карти висот, його ізометрична інтерпретація, та простір дотичних, який утворюється векторами X,Y та Z. Піксель з координатами (i,j) для якого буде розраховуватися нормаль позначений помаранчевою цяткою. Суміжні пікселі по осі X - зеленими цятками, а по Y - червоними.
Фрагмент карти висот Ізометрична репрезентація карти висот
Для найпростішого розрахунку нормалі пікселя використовуються значення висот чотирьох суміжних пікселів. Спочатку розраховується різниця висот суміжних пікселів по кожній осі (X та Y). H(i,j) – функція, яка повертає висоту пікселя по координатам i,j, а α – число для маштабування, чим воно менше, тим менш помітні зміни нормалі.
Значення зміни висот у напрямку X та Y
З цих двох значень зміни висоти можна сформувати вектори А і B, які представляють собою зміну висоти вздовж осі X та Y відповідно. Векторний добуток цих векторів буде нормаллю даного пікселя. Кількість обчислень можна скоротити, врахувавши константні значення в векторах A та B. Також нормаль потрібно нормалізувати.
Останій рядок - шукана нормаль пікселя. Перед збереженням її потрібно нормалізувати.
Тепер нормаль потрібно зберегти в карті нормалей. Зазвичай кожен піксель зображення вміщає три компоненти (відповідно для кожного каналу – червоного, зеленого та синього). Значення кожного компонента нормалі лежить в межах [-1,1], а значення кожного каналу в пікселі зберігається в інтервалі від [0,255]. Потрібно перевести значення нормалі в необхідний діапазон:
Кодування нормалі в значення кольору RGB
Це значення і зберігається у карті нормалей. Синюватий відтінок карти нормалей пояснюється тим, що Z компонента завжди рівна 1, яка відповідає синьому каналу в зображені. Якщо суміжні пікселі мають однакове значення висоти, то нормаль пікселя буде рівна (0,0,1), що відповідає рівній поверхні. Така нормаль буде закодована наступним чином:
Рівна поверхня в карті нормалей має синюватий відтінок
Також нормаль можна розраховувати використовуючи більшу кількість сусідніх пікселів, що приведе до більш плавних переходів нормалей.



Sun and Black Cat- Ігор Дихта (igor dykhta email) © 2007-2014