Основы синтеза фотореалистических изображений: трассировка лучей Боголепов Д.К. Кафедра МОЭВМ ВМК ННГУ Основные модели и алгоритмы трассировки лучей
Часть 3 Модель наблюдателя
Фактически камера представляет собой систему координат: для нее задано положение, а также направления взгляда, вверх и вправо Направления взгляда, вверх и вправо образуют ортонормированный базис Модель камеры… Нижний НовгородIntel Winter School – View Up RightPosition
С камерой связана усеченная пирамида видимости: вектор взгляда задает ее направление и основания, а векторы вправо и вверх – боковые стороны Для пирамиды видимости задается угол раствора, a также ближнее и дальнее расстояния отсечения Модель камеры… Нижний НовгородIntel Winter School – View Up RightPosition Near Far FieldOfView Width Height
Задавать ориентацию камеры при помощи трех ортонормированных векторов на практике не очень удобно. Гораздо удобнее использовать в этих целях углы Эйлера Модель камеры Нижний НовгородIntel Winter School – X Y Z Pitch Yaw Roll
P(x s, y s ) = view + [ y s up + x s right aspect ] tg(α / 2), x s, y s – экранные координаты [-1, 1], α – угол раствора Генерация первичного луча… Нижний НовгородIntel Winter School – View Up RightPosition α xsxs ysys 2 tg(α / 2) 2 aspect tg(α / 2) P
R(x s, y s ) = position + normalize(P(x s, y s ) - position) t, x s, y s – экранные координаты [-1, 1], t – параметр 0 Генерация первичного луча Нижний НовгородIntel Winter School – View Up RightPosition α xsxs ysys P R(x s, y s )
Часть 4 Точки соударения и их атрибуты
Атрибуты точек пересечения удобно вычислять в локальном пространстве объекта С объектом связано преобразование T(p) = R S p + P, придающее ему желаемые размер (матрица масштабирования S ), ориентацию (матрица поворота R ) и положение (вектор параллельного переноса P ) на сцене Что происходит с уравнениями и результатами, полученными в локальном пространстве объекта? Преобразования объектов… Нижний НовгородIntel Winter School – 20099
Преобразование Т отображает базовую сферу W в эллипсоид W. Когда луч o + d t пересечется с W ? Допустим, что может быть найдена неявная форма G ( p ) = 0 для преобразованного объекта W. Тогда требуется решить уравнение G(o + d t) = 0 Преобразования объектов… Нижний НовгородIntel Winter School – o d W F(p) = 0 T o d W G(p) = 0
Если неявная функция исходного базового объекта равна F(p), то для преобразованного объекта она приобретает вид F(T -1 (p)), где T -1 – обратное преобразование. Значит, нужно решить уравнение: F(T -1 (o + d t)) = 0 Это уравнение означает решение для времени, при котором обратно преобразованный луч (inverse transformed ray) T -1 (o + d t) соударяется с исходным базовым объектом! Исследуем пересечение обратно преобразованного луча с базовым объектом Преобразования объектов… Нижний НовгородIntel Winter School –
Для пересечения луча o + d t с преобразованным объектом: –Обратно преобразуем луч: T -1 (o + d t) = T -1 (o) + T -1 (d) t = [S -1 ·R -1 ·(o - P)] + [S -1 ·R -1 ·d] · t –Находим время соударения t этого луча с базовым объектом; –Используем это же время t в луче o + d t для нахождения фактической точки соударения Требуется разработать код, относящийся только к пересечению с базовым объектом. Можно применять аффинные преобразования без усложнения кода подпрограмм, вычисляющих пересечение! Преобразования объектов… Нижний НовгородIntel Winter School –
Знание нормалей к объектам необходимо для расчета освещенности, лучей отражения и преломления и даже текстурных координат Как преобразование T(p) = R S p + P влияет на изменение локальных нормалей? На первый взгляд, нормаль в локальном пространстве необходимо умножить на матрицу R S. Это неверно: для нормалей нужно использовать обратную транспонированную матрицу [(R S) -1 ] T : [(R S) -1 ] T = S -1 R Преобразования объектов… Нижний НовгородIntel Winter School –
Рассмотрим простой пример: прямоугольный равнобедренный треугольник растягивается вдвое вдоль оси x Проблема вызвана операцией масштабирования с разными коэффициентами по осям (NUS – non- uniform scale)! Преобразования объектов Нижний НовгородIntel Winter School – x local y local P local n local = (1, 1) x world y world O world S n local = (2, 1) S -1 n local = (1/2, 1) T = S S = S -1 = 1/
В какой точке луч o + d t пересекается с плоскостью: F(x, у, z)=0 ~ z = 0 ? Пересечение с плоскостью… Нижний НовгородIntel Winter School – x local y local z local P local x world y world z world
Луч o + d t пересекает базовую плоскость, когда o z + d z t = 0 Решение дается формулой: t = -o z / d z Если d z = 0, то луч движется параллельно плоскости и пересечения нет (за исключением случая, когда o z также равно нулю). В остальных случаях луч пересекается с плоскостью в одной точке Р = o – d (o z / d z ) Пересечение с плоскостью Нижний НовгородIntel Winter School –
В какой точке луч o + d t пересекается со сферой: F(x, у, z) = x 2 + y 2 + z 2 - R 2 =0 ? Пересечение со сферой… Нижний НовгородIntel Winter School – x local y local z local P local x world y world z world
Подставляя o + d t в уравнение F(P) = 0, получаем: |o + d t| 2 - R 2 = 0 |d| 2 t (o, d) t + (|o| 2 - R 2 ) = 0 Решение дается формулой: t 1,2 = [-B ± sqrt(B 2 - A C)] / A Если D=B 2 - A C 0 существуют две точки соударения Пересечение со сферой Нижний НовгородIntel Winter School – ABC
Поверхность куба – совокупность точек, отвечающих трем группам выражений: |x| = 1, |y| 1, |z| 1; |x| 1, |y| = 1, |z| 1; |x| 1, |y| 1, |z| = 1 Пересечение с кубом… Нижний НовгородIntel Winter School – x local y local z local P local x world y world z world
В какой точке луч o + d t пересекается с кубом, заданным таким образом? Самый простой и очевидный подход: тестирование луча на соударение с каждой гранью куба и выбор ближайшего (если соударение имеет место, то луч пересекается с двумя различными гранями куба) Каждая грань – это часть плоскости, поиск пересечения с которой уже рассматривался выше. Необходимо добавить одно из трех условий: |y| 1, |z| 1; |x| 1, |z| 1; |x| 1, |y| 1 Пересечение с кубом Нижний НовгородIntel Winter School –
Неявная форма уравнения координатной плоскости XOY имеет вид: F(x, у, z) = z = 0 Очевидно, что ее нормаль в локальном пространстве есть вектор k = (0, 0, 1) Для вычисления нормали в мировом пространстве необходимо воспользоваться описанным выше преобразованием: n world = norm(S -1 R k) = norm(S -1 R (0, 0, 1)) После преобразования необходима нормировка! Нормаль к плоскости Нижний НовгородIntel Winter School –
Неявная форма уравнения сферы имеет вид: F(x, у, z) = x 2 + y 2 + z 2 - R 2 = 0 Очевидно, что координаты всякой точки на данной сфере являются в то же самое время и координатами нормали в данной точке Для перехода в мировое пространство необходимо воспользоваться описанным выше преобразованием: n world (p) = norm(S -1 R p), где p – точка на сфере После преобразования необходима нормировка! Нормаль к сфере Нижний НовгородIntel Winter School –
Куб можно рассматривать как совокупность шести граней – прямоугольников Для отыскания нормали к кубу необходимо определить, какой грани принадлежит точка: if p.x = size.x then n local = i else if p.y = size.y then n local = j else if p.z = size.z then n local = k Далее выполняется переход в мировое пространство и нормировка: n world (p) = norm(S -1 R n local ) Нормаль к кубу Нижний НовгородIntel Winter School –
Часть 5 Локальные модели освещенности
В простейшей модели диффузного освещения свет, падающий на точку P, считается равномерно рассеивающимся по всем направлениям полупространства, содержащего источник света Диффузная модель освещения… Нижний НовгородIntel Winter School – l P источник света l
Освещенность точки зависит только от ориентации участка поверхности (определяется вектором n ): C out = C · [k a · L a + k d · L d · max(0, (n · l))] Диффузная модель освещения… Нижний НовгородIntel Winter School – источник света l P n
Реализация в среде RenderMonkey Диффузная модель освещения Нижний НовгородIntel Winter School –
Модель освещения Блинна… Нижний НовгородIntel Winter School – Расширение диффузной модели освещения для включения в нее бликов (ярких пятен), введение h В модели Блинна освещенность задается формулой: C out = I diffuse + L s · k s · max{0, (n · h)} p, h = (l + v) / ||l + v|| l P n v h r
Модель освещения Блинна… Нижний НовгородIntel Winter School – Показатель степени p – это коэффициент резкости бликов (shininess coefficient) При увеличении показателя p блик концентрируется в зоне, близкой к углу идеального отражения p = 16p = 32p = 64 p = 128p = 256p = 512 Интенсивность отраженного света в зависимости от показателя p
Реализация в среде RenderMonkey Модель освещения Блинна Нижний НовгородIntel Winter School –
Модель освещения Фонга… Нижний НовгородIntel Winter School – Расширение диффузной модели освещения для включения в нее бликов (похожа на модель Блинна) В модели Фонга освещенность задается формулой: C out = I diffuse + L s · k s · max{0, (v · r)} p, r = reflect(l, n) l P n v r
Реализация в среде RenderMonkey Модель освещения Фонга Нижний НовгородIntel Winter School –
Модель освещения Гуч… Нижний НовгородIntel Winter School – Модель Эми Гуч – одна из простейших и вместе с тем дает красивые визуальные эффекты Похожа на модель диффузного освещения, но использует величину ( n · l ) для перехода от одного цвета (теплого) к другому (холодному) Когда ( n · l ) < 0 возникает ощущение, что свет проходит сквозь объект и приобретает другой цвет Формула освещенности точки по модели Гуч: C out = mix(C cool, C warm, [(n · l) + 1] / 2) + I specular
Реализация в среде RenderMonkey Модель освещения Гуч Нижний НовгородIntel Winter School –
Эффект мультипликации… Нижний НовгородIntel Winter School – Похожа на модель диффузного освещения, но использует величину ( n · l ) для выбора одного из трех цветов – цвет тени, собственный цвет объекта и цвет блика При таком способе освещения возникает ощущение, что объекты нарисованы карандашом или кистью Формула освещенности точки имеет вид: C out = C shadow, |(n, l)| < ShadowEdge C diffuse, иначе C specular, |(n, l)| > SpecularEdge
Реализация в среде RenderMonkey Эффект мультипликации Нижний НовгородIntel Winter School –
Модель освещения Кука-Торренса… Нижний НовгородIntel Winter School – Шероховатая поверхность в модели освещения Кука- Торренса: совокупность блестящих микрограней, ориентированных различным образом Каждая микрогрань – совершенное маленькое зеркальце. Только те из них, которые ориентированы правильно, вносят свой вклад в отражаемый свет v P n l φ
Модель освещения Кука-Торренса… Нижний НовгородIntel Winter School – Модель освещения Кука-Торренса предназначена для уточнения зеркальной (бликовой) составляющей, представленной тремя основными компонентами: D · G · FD · G · F (n · v) I specular = l P n v h
Модель освещения Кука-Торренса… Нижний НовгородIntel Winter School – Микрогрань вносит вклад, если она направлена вдоль вектора h = (v + l) / ||v + l|| Для этого угол между микрогранью и нормалью к поверхности должен быть равен δ = [θ – φ] / 2 Предложены распределения D(δ), задающие долю микрограней, составляющих угол δ с нормалью l φ P n v θ h δ
Модель освещения Кука-Торренса… Нижний НовгородIntel Winter School – Кук и Торренс использовали распределение Бекмана: D(δ) – среднеквадратический наклон микрограней. Достигает максимума при δ = 0 (идеальное отражение) и быстро уменьшается при возрастании δ Параметр m – степень шероховатости, m [0.2, 0.6] e -[tg(δ) / m] 2 4 · m 2 · cos 4 (δ) D(δ) = l φ P n r
Модель освещения Кука-Торренса… Нижний НовгородIntel Winter School – Выражение D(δ) можно преобразовать в векторную форму, избавившись от тригонометрических функций: Данное выражение удобнее использовать в программном коде (и фрагментных шейдерах) Возможно сохранение значений в одну текстуру! e [(n · h) 2 - 1] / [m 2 · (n · h) 2 ] 4 · m 2 · (n · h) 4 D(δ) = cos(δ) = (n · h) sin 2 (δ) cos 2 (δ) tg 2 (δ) =, sin 2 (δ) = 1 - cos 2 (δ),
Модель освещения Кука-Торренса… Нижний НовгородIntel Winter School – Торренс и Спэрроу учитывали также эффекты затенения и экранирования, что привело к появлению геометрического масштабного коэффициента G Весь падающий свет уходит с грани G = 1 Часть света экранирует соседняя грань G < 1 Освещена часть грани, остальная часть затенена G < 1
Модель освещения Кука-Торренса… Нижний НовгородIntel Winter School – Блинн выразил геометрический множитель G через стандартные скалярные произведения. В качестве множителя берется минимум из трех значений Величины G m и G s определяют соответственно часть неэкранированного и незатененного света G = min(1, G m, G s ) G m = 2 · (n · h) · (n · l) / (v · h) G s = 2 · (n · h) · (n · v) / (v · h) l φ P n v θ h δ
Модель освещения Кука-Торренса… Нижний НовгородIntel Winter School – Блестящие микрограни не являются идеальными зеркалами, а отражают только часть падающего света (оставшаяся часть передается внутрь поверхности) Доля отраженного света определяется коэффициентом Френеля F(φ,η), где φ – угол падения, а η – показатель преломления материала F(φ, η) = 1 2 (g – c) 2 (g + c) 2 c · (g + c) – 1 c · (g – c) c = cos(φ) = (n · l) и g 2 = η 2 + c 2 – 1
Модель освещения Кука-Торренса… Нижний НовгородIntel Winter School – Коэффициент Френеля F(φ, η) зависит от материала при нормальном падении ( φ = 0 ) и возрастает до 1 при касательном угле ( φ = π / 2 ) φ = π / 2φ = 0 F(φ, η) η 10 η 2
Модель освещения Кука-Торренса… Нижний НовгородIntel Winter School – Для непосредственного использования точная формула слишком сложна, поэтому обычно используются различные ее приближения Хорошие результаты дает аппроксимация Шлика (Christophe Schlick): Коэффициент F(0) при нормальном падении обычно неизвестен и служит предметом экспериментов F(φ) = F(0) + [1 – (v · h)] 5 · [1 – F(0)] F(0) = (η – 1) 2 (η + 1) 2
Реализация в среде RenderMonkey Модель освещения Кука-Торренса Нижний НовгородIntel Winter School –
Эффект микрорельефа… Нижний НовгородIntel Winter School – До сих пор нормаль в каждой точке рассчитываласьправильно получается гладкое освещение Наиболее простой и эффективный способ добавить микрорельеф – использование карт нормалей Карта нормалей (bump map) – текстура, содержащая закодированные тройками (R, G, B) единичные нормали к поверхности объектов. Формулы перехода: R = 0.5 · (n x + 1)n x = 2 · R – 1 G = 0.5 · (n y + 1) n y = 2 · G – 1 B = 0.5 · (n z + 1)n z = 2 · B – 1
Эффект микрорельефа… Нижний НовгородIntel Winter School – Наложив такую карту на объект, для каждой точки получаем единичный вектор – нормаль к поверхности в данной точке:
Эффект микрорельефа… Нижний НовгородIntel Winter School – Карта нормалей задает ориентацию нормалей относительно данной грани: неискаженная нормаль равна (0, 0, 1) Для расчета освещенности фрагмента необходимо переходить в касательное пространство (tangent space)
Эффект микрорельефа… Нижний НовгородIntel Winter School – В качестве базиса выбираются три вектора: –Вектор нормали n – ортогонален грани в данной точке; –Вектор бинормали b – лежит в плоскости грани и t ; –Касательный вектор t – лежит в плоскости грани Координаты вектора p в касательном пространстве вычисляются по формулам: ( p · t ), ( p · b ), ( p · n ) n t b
Эффект микрорельефа… Нижний НовгородIntel Winter School – В касательном пространстве координаты вектора нормали всегда равны (0, 0, 1) можно свободно использовать карты нормалей Все векторы для расчета освещения необходимо перевести в касательное пространство! Для модели Фонга можно преобразовывать векторы v и l Перед пересчетом координат все векторы должны быть заданы в одном пространстве! Например, все векторы – v, l, n, t, b – можно сначала перевести в мировое пространство или пространство обзора
Реализация в среде RenderMonkey Эффект микрорельефа Нижний НовгородIntel Winter School –