Bump mapping

Bump mapping це накладення рельєфу (нерівностей) на ділянку поверхні. Для цього використовується дві текстури одна для ділянки поверхні назвемо її базовою, а інша для карти нормалей, що імітують нерівності. Нормалі з огляду на кут освітлення створюють ілюзію нерівної поверхні. Тому базова текстура має бути зіставлена, з картою нормалей.

поверхні

bump

mapping

Якщо повертати полігон, то його власні нормалі також змінюватимуть напрямок, а значить джерело має це врахувати. Адже, повернувши полігон, ми не повертаємо вектор джерела, відповідно у нас є проблема. Вирішити її можна за допомогою матриці tangent – ​​spase (TBN), яка трансформує джерело щодо полігону. TBN являє собою базис взаємно перпендикулярних векторів окремого полігону. Цей базис обчислюється один раз до висновку.

Для кожної поверхні ми маємо два базиси: texture space, що містить текстурні координати і object space, що зберігає координати полігону, джерела освітлення. Щоб джерело правильно світило на повернутий полігон, його потрібно перетворити з object space в texture space.

Нехай object space використовує базис [(1,0,0), (0,1,0), (0,0,1)], а texture space - [T, B, N] де N = [T x B] . Нам залишається обчислити Т та У.

Нехай V4 певна точка лежить всередині полігону, С4 відповідна їй текстурна координата. Розкладемо вектор (С4 - С1) за компонентами Т і В:

Як я зрозумів текстурні координати ділянки (V4 - V1), є сума компонентів Т і В:

V4 - V1 = (C4 - C1)T * T + (C4 - C1)B * B

Отже для двох сторін поверхні отримуємо систему рівнянь із двома невідомими Т і В:

V2 - V1 = (C2 - C1)T * T + (C2 - C1)B * B V3 - V1 = (C3 - C1)T * T + (C3 - C1)B * B

Запишемо її в матричномувигляді

t1 = (C2 - C1) T, t2 = (C3 - C1) T b1 = (C2 - C1) B, b2 = (C3 - C1) B v1 = V2 - V1, v2 = V3 - V1

Щоб у матричному рівнянні [B] = [A] [X] знайти [X], знадобиться зворотна матриця [A] -1 для множення на обидві частини рівняння.

[A] -1 [B] = [A] [A] -1 [X] т.к. [A] [A] -1 є одинична матриця, зн [A] -1 [B] = [X]