Компьютерная графика

Освещение: Phong, PBR

1973 год. Bui Tuong Phong защищает диссертацию в Университете Юты. Модель освещения из трёх компонентов: ambient, diffuse, specular. Через 50 лет эта модель до сих пор в OpenGL tutorial'ах и игровых шейдерах. Но в 2012 году Unreal Engine 4 внедрил PBR и всё изменилось: roughness вместо shininess, metallic вместо specular color, energy conservation вместо подобранных вручную констант. Путь от Phong до PBR занял 35 лет - и ещё не закончен.

  • Unreal Engine 5: Nanite + Lumen используют PBR для реалистичного real-time освещения - 100М лучей в секунду на PS5
  • Disney's Hyperion renderer: physically-based path tracing для Frozen, Moana, Big Hero 6 - экспорт принципов PBR в open source как Disney BRDF
  • Adobe Substance 3D: PBR material authoring - metallic/roughness карты, используемые в каждой AAA игре и кино-конвейере
  • NeRF/3D Gaussian Splatting: учат appearance как neural BRDF из фотографий, неявно аппроксимируя subsurface scattering и view-dependent effects

Ambient: хак вместо глобального освещения

1973 год. Bui Tuong Phong защищает диссертацию в Университете Юты. Проблема: как имитировать рассеянный свет от окружающей среды без трассировки тысяч лучей? Решение - константа. Ambient-компонент $I_a = k_a I_L$ добавляет базовую яркость ко всем поверхностям равномерно, независимо от направления к источнику света и нормали. Это не физика - это костыль. Но костыль, который работает 50 лет.

**Ambient Occlusion** - следующий шаг: затемнять углы и щели, где рассеянный свет физически не мог бы проникнуть. **Screen Space Ambient Occlusion (SSAO)** в играх (Crysis, 2007) вычисляет AO прямо в экранном пространстве: для каждого пикселя сэмплирует глубину соседей и считает, насколько точка 'зажата' геометрией.

**NeRF (Neural Radiance Fields)** обходит проблему ambient принципиально иначе: нейросеть учит функцию $(x, y, z, \theta, \phi) \to (r, g, b, \sigma)$, где $\sigma$ - плотность, и интегрирует вдоль лучей. Ambient-терм не нужен - сеть неявно учит глобальное рассеивание из данных.

Почему ambient-терм в модели Phong не имеет зависимости от нормали поверхности?

Diffuse: закон Ламберта и albedo

Закон Ламберта (1760) - настоящая физика: поверхность отражает свет пропорционально косинусу угла между нормалью $N$ и вектором к источнику $L$. Формула: $I_d = k_d (L \cdot N) I_L$. Dot product $(L \cdot N)$ вычисляет косинус - при $90°$ свет скользит по поверхности и не освещает её, при $0°$ падает перпендикулярно с максимальной интенсивностью. Lambertian reflectance - идеальный матовый материал: рассеивает свет равномерно во все стороны.

**Albedo texture (diffuse map)** - карта цвета поверхности: значение $k_d$ для каждого текселя. В PBR-workflow albedo хранит только цвет, без запечённых теней (в отличие от старого diffuse baking). **Subsurface Scattering (SSS)**: у кожи, воска, мрамора свет не отражается от поверхности - проникает внутрь, многократно рассеивается и выходит в другом месте. Lambertian модель для кожи даёт восковой, 'мёртвый' вид.

NeRF и **3D Gaussian Splatting** учат appearance maps нейронно: каждый gaussan хранит SH (Spherical Harmonics) коэффициенты для view-dependent цвета - это нейронная аппроксимация BRDF, включая diffuse и specular одновременно.

Почему закон Ламберта использует dot product (N · L) как множитель интенсивности?

Specular: Phong, Blinn-Phong и блики

Phong specular: $I_s = k_s (R \cdot V)^n$, где $R = 2(N \cdot L)N - L$ - вектор идеального отражения, $V$ - направление к камере, $n$ - shininess (глянцевость). Большой $n$ - узкий яркий блик (металл), малый $n$ - широкий тусклый (пластик). **Blinn-Phong** заменяет $R \cdot V$ на $N \cdot H$, где $H = \frac{L+V}{|L+V|}$ - halfway вектор. Дешевле ($H$ вычисляется раз на фрагмент), и при определённых условиях даёт более правдоподобный результат для больших углов.

Физического смысла у shininess экспоненты $n$ нет - это параметр подгонки. Выглядит похоже на реальность, но не предсказуем: невозможно сказать, какому реальному материалу соответствует $n = 64$. В PBR это заменено на **roughness** - физически интерпретируемый параметр (среднеквадратичное отклонение микрограней).

Blinn-Phong использует halfway вектор H вместо reflected вектора R. Какое главное преимущество?

PBR: Cook-Torrance BRDF и микрограни

Cook-Torrance BRDF (1982): $f_r = \frac{DFG}{4(\omega_o \cdot n)(\omega_i \cdot n)}$. Три множителя: **D** - Normal Distribution Function (NDF, распределение ориентаций микрограней), **F** - Fresnel term (сколько света отражается vs преломляется), **G** - geometry function (самозатенение микрограней). GGX NDF популярна в играх: длинный хвост блика, похожий на реальные материалы. Metallic/Roughness workflow: два параметра вместо Phong shininess - физически интерпретируемые, предсказуемые. Unreal Engine 4 (2012) популяризировал PBR в real-time рендеринге.

**Metallic** параметр: $0$ - диэлектрик (пластик, дерево, кожа), $1$ - металл. Разница физическая: диэлектрики отражают $4\text{-}5\%$ света (Fresnel при нормальном падении), металлы - $60\text{-}90\%$ и окрашивают отражение. F0 (Fresnel при $0°$) для диэлектриков $\approx 0.04$, для металлов берётся из albedo-текстуры.

**Specular/Glossiness workflow** (альтернатива Metallic/Roughness) используется в Substance Painter legacy и Unreal pre-PBR: specular map задаёт F0 напрямую, glossiness = 1 - roughness. Оба workflow дают одинаковый результат при правильном использовании, но Metallic/Roughness менее подвержен ошибкам художников.

PBR (Physically Based Rendering) - это физически точный рендеринг, результат которого идентичен реальности

PBR - энергосберегающая аппроксимация, которая выглядит физически правдоподобно. Cook-Torrance BRDF - аппроксимация микрофасеточной теории, которая сама является аппроксимацией электромагнетизма

Phong не conserves energy: при $k_d + k_s > 1$ поверхность излучает больше света, чем получает. PBR исправляет это ограничением: Fresnel определяет соотношение diffuse/specular так, что сумма не превышает входящий поток. Но NDF, G-функция и Schlick Fresnel - все аппроксимации. Real-time PBR также игнорирует multi-bounce inter-reflection, area lights, diffraction. Физическая точность - не цель; цель - интуитивные параметры и энергосбережение

Что означает Fresnel term в Cook-Torrance BRDF и почему он зависит от угла?

Ключевые идеи

  • **Ambient** - константный хак для глобального освещения; SSAO добавляет AO-затемнение в экранном пространстве без трассировки лучей
  • **Diffuse по Ламберту**: $I_d = k_d (L \cdot N) I_L$ - dot product как косинус угла падения, физически точен для матовых поверхностей; subsurface scattering ломает эту модель для кожи
  • **Phong/Blinn-Phong specular**: shininess экспонента без физического смысла; Blinn-Phong устойчивее при больших углах и дешевле за счёт halfway вектора
  • **Cook-Torrance PBR**: D (GGX NDF) + F (Schlick Fresnel) + G (Smith) = физически-мотивированные параметры roughness/metallic; energy conservation - главное преимущество над Phong

Связанные темы

Освещение в cg-05 - центральная тема рендеринга, связывающая геометрию, материалы и восприятие:

  • Растеризация треугольников — Растеризация (cg-04) определяет фрагменты, для которых cg-05 вычисляет освещение
  • Texture mapping — Текстуры (cg-06) хранят albedo, normal map и PBR-параметры, используемые в shading
  • Трансформации и проекции — Матрицы из cg-02 переводят векторы L, N, V в нужное пространство для расчёта освещения
  • Intrinsic Image Decomposition — Computer vision решает обратную задачу: восстановить albedo и shading из фотографии
  • AR/VR рендеринг — AR/VR использует PBR с ограничениями real-time: оптимизированные PBR approximations для 90fps

Вопросы для размышления

  • Почему Disney перешёл на physically based principled BRDF для Frozen (2013), хотя path tracing значительно дороже Phong? Какой производственный выигрыш оправдал затраты?
  • SSAO вычисляет ambient occlusion в экранном пространстве и теряет информацию о скрытой геометрии. В каких сценах SSAO даёт артефакты, и как с ними справляются современные движки?
  • Metallic параметр в PBR бинарен физически (материал либо металл, либо диэлектрик), но художники иногда используют промежуточные значения. Что это означает физически и когда это оправдано?

Связанные уроки

  • cg-04
  • cg-06
  • cg-01
  • cg-02
  • cg-03
  • la-04-lines-planes
Освещение: Phong, PBR

0

1

Войти