D · GGXG · SMITHF · SCHLICKα = ROUGHNESS²
Rozdział 11 / Realizm i jakość obrazu

PBR: rozkład GGX i pełny model Cook-Torrance'a

Rozdział 10 przedstawił D (rozkład orientacji fasetek), G (ułamek fasetek nie zasłoniętych sąsiadami) i F (Fresnel — ułamek odbitego światła) jako koncepcje. Ten rozdział daje im konkretne wzory — te, które dosłownie stoją za każdym „Principled”/„Standard Surface” shaderem, jakiego dotknąłeś w Blenderze, Arnoldzie czy Unrealu.

TL;DR
Pass: Rozkład D

GGX: ile fasetek jest zwróconych w stronę H

Standardem od połowy 2010. jest rozkład GGX (Trowbridge-Reitz), spopularyzowany przez kursy Disneya o PBR. Mówi, jaka część mikrofasetek ma normalną wystarczająco bliską H, żeby wziąć udział w odbiciu:

D(H) = α² / (π · ((N·H)²·(α²−1) + 1)²)α = roughness² — artyści ustawiają „roughness”, ale wzór używa jego kwadratu; to sprawia, że slider czuje się bardziej liniowy percepcyjnie

GGX wyróżnia się na tle starszych rozkładów (jak wykładnik Blinn-Phonga z Rozdziału 5) długim „ogonem” — nawet bardzo gładkie materiały zachowują subtelną, miękką poświatę wokół ostrego jądra błysku. To właśnie ten ogon dał GGX-owi przewagę: fotografie realnych materiałów też mają taką poświatę, a starsze modele jej nie miały.

GGX.vs.BlinnPhongtail comparison
roughness = 0,30 · α = 0,090 · D(H=0) ≈ 39,3
0° 20° 40° 60° kąt od H 0 1,0 D(H) GGX Blinn-Phong
Przesuń Roughness: to dokładnie ten sam parametr α = roughness² z wzoru wyżej — węższy szczyt (mały α) oznacza dużo wyższe D(H=0), nie tylko inny kształt.

Ten sam parametr, na żywej kuli

Ten sam Roughness co wyżej — teraz renderowany naprawdę, tym samym wzorem D(H), oświetlony jednym miękkim światłem. Przesuń suwak nad krzywą powyżej.

To dokładnie ta sama matematyka co krzywa D(H) wyżej — tylko teraz scałkowana po całej hemisferze światła i naprawdę oświetlona, zamiast odczytywana z wykresu. Wąski, wysoki szczyt D(H) przy niskim α daje ostry, mały błysk; szeroki, niski szczyt przy wysokim α daje rozmyty, przygaszony błysk — ten sam „ogon", o którym mowa wyżej, teraz widoczny na powierzchni, nie na osi wykresu.

Pass: Człon G

Samo-zasłanianie i samo-zacienianie mikrofasetek

Nie każda mikrofasetka zwrócona w stronę H faktycznie bierze udział w odbiciu. Sąsiednia, wyższa fasetka może ją zacienić od strony światła (promień L nigdy nie dociera) albo zamaskować od strony widza (odbity promień nigdy nie dociera do V) — to ten sam mechanizm samo-zacieniania, który poznałeś w Rozdziale 6, tylko teraz w mikroskali i liczony statystycznie, wzorem, bez śledzenia promieni.

Smith.G1shadowing vs masking
ZACIENIANIE · od L MASKOWANIE · do V L w cieniu V zamaskowane
Ta sama chropowata powierzchnia — po lewej sąsiedni szczyt blokuje L, po prawej blokuje ścieżkę do V.

Standardowy wybór to człon Smitha, rozdzielony na dwie niezależne części — jedną dla L, jedną dla V:

G(L,V) = G1(L) · G1(V)
G1(V) = 2(N·V) / ( (N·V) + √(α² + (1−α²)(N·V)²) )ten sam wzór dla G1(L), z L w miejsce V; bez tego członu BRDF „traci” energię przy dużym roughness i płytkich kątach
Pass: Kompozycja

Składanie kompletnego PBR: metallic-roughness

Mamy trzy człony osobno: D mówi, ile mikrofasetek jest ustawionych pod H, G ile z nich faktycznie widać, a F ile światła taka fasetka odbija pod danym kątem. Cook-Torrance skleja je w jedną BRDF odbicia lustrzanego:

f_spec = D(H) · G(L,V) · F(V·H) / ( 4 · (N·L) · (N·V) )f_spec — BRDF odbicia lustrzanego, czyli funkcja f z równania renderowania (Rozdział 15) dla części specular. Mianownik 4·(N·L)·(N·V) przelicza statystykę z mikropowierzchni na jednostkę powierzchni makroskopowej — bez niego BRDF nie zachowywałaby energii i model przestałby być fizycznie poprawny. F(V·H) — Fresnel liczony względem normalnej mikrofasetki (czyli H), nie względem N powierzchni

Ten mianownik to najczęściej gubiony element całego modelu. Nie jest współczynnikiem korekcyjnym „na oko” — wynika wprost z przeliczenia gęstości mikrofasetek na gęstość odbicia i to on odpowiada za to, że przy płytkich kątach (gdy N·V dąży do zera) odbicie jaśnieje, zamiast gasnąć razem z cosinusem.

Zwróć uwagę na argument Fresnela: V·H, nie N·V. To odbicie zachodzi na mikrofasetce, więc kąt liczy się od jej normalnej — czyli od H. Shader liczący F od N·V da poprawny wynik tylko dla idealnie gładkiej powierzchni, gdzie H i N się pokrywają.

↑ Rozdział 7 — pełny wzór Schlicka na F, z R0

Zostaje ostatnia nowość: F0 (odbicie przy patrzeniu na wprost, z Rozdziału 7) przestaje być stałą — zależy od tego, czy materiał jest dielektrykiem czy metalem:

F0 = mix(0.04, albedo, metallic)
color = (1−metallic)·albedo·diffuse(N·L) + f_spec·(N·L)metallic = 0 → F0 ≈ 0,04 (dielektryk, biały specular, pełny diffuse); metallic = 1 → F0 = albedo (metal, kolorowy specular, zero diffuse). Oba człony mnożone przez (N·L), bo to cosinus z równania renderowania, wspólny dla całej BRDF

To jest dosłownie to samo równanie, które Rozdział 10 opisał słowami — teraz z każdym symbolem podłączonym do konkretnego wzoru z poprzednich sześciu rozdziałów. Nic tu nie jest już arbitralne.

Z praktyki

„Principled BSDF” w Blenderze, „Standard Surface” w Arnoldzie/USD, materiał „Metallic-Roughness” w glTF, Unrealu i Unity — to wszystko ten sam przepis: GGX + Smith + Schlick + parametryzacja metallic-roughness, czasem z dodatkami (multi-scatter GGX naprawiający utratę energii przy bardzo chropowatych metalach, clearcoat, anizotropia).

↓ Dodatek A — anizotropia, clearcoat, multi-scatter ↓ Dodatek X — a co z chropowatym szkłem

α = roughness² to nie szczegół implementacyjny bez znaczenia — właśnie dzięki tej reparametryzacji przesuwanie slidera „Roughness” od 0 do 1 daje wizualnie równomierną progresję błysku, zamiast skoku „ostro / od razu bardzo rozmyto” w pierwszych kilku procentach.

Słowniczek
Rozkład GGX (Trowbridge-Reitz)
Standardowy człon D; charakteryzuje się długim ogonem.
Człon geometryczny (G) / Smith
G(L,V) = G1(L)·G1(V); koryguje D o samo-zasłanianie fasetek.
Samo-zacienianie / maskowanie mikrofasetek
Blokowanie L (zacienianie) albo V (maskowanie) przez sąsiednie fasetki.
α (alpha)
roughness²; parametr wejściowy do D i G.
F0
Odbicie przy N·V=1; mix(0,04, albedo, metallic).
Model Cook-Torrance
f_spec = D·G·F / (4(N·L)(N·V)); mianownik przelicza mikrofasetki na powierzchnię makro.
Metallic-roughness workflow
Standard PBR: dwa slidery zamiast osobnych map na każdy parametr.
Principled BSDF / Standard Surface
Nazwy tego samego modelu w Blenderze i Arnoldzie/USD.
Idź głębiej
Dodatek A — Warianty materiałów PBR Dodatek J — Złożoność sieci shaderów Dodatek X — Rough dielectric BSDF Dodatek AB — BRDF w praktyce: zmierzone dane i parametryzacja Dodatek AC — Warstwowe materiały: pełna matematyka Dodatek AD — Importance sampling dla BRDF Dodatek AF — Prefiltered IBL: irradiance i split-sum Dodatek AI — MaterialX i OSL