Mamy punkt trafienia i normalną z Rozdziału 4. Czas zamienić to w kolor na ekranie — pierwsze wzory, które faktycznie decydują, jak wygląda materiał w Twoim renderze.
Powierzchnia matowa — kreda, nieszkliwiona ceramika, papier — rozprasza padające światło równomiernie we wszystkie strony. Ilość odbitego światła zależy tylko od kąta, pod jakim światło pada na powierzchnię. To prawo cosinusów Lamberta (1760 r., najstarszy wzór w tej książce).
Intuicja: światło padające pod kątem „rozmazuje się” na większej powierzchni, więc na jednostkę powierzchni przypada go mniej. Padające prostopadle skupia całą energię w jednym miejscu — a dokładnie tyle mówi cosinus kąta między N i L, czyli iloczyn skalarny dwóch wersorów z Rozdziału 2. max(0, …) obcina wynik, gdy światło jest za powierzchnią — ten sam rodzaj odrzucenia, co przy ujemnym t w Rozdziale 2 czy backface culling w Rozdziale 4.
Sam diffuse wygląda płasko — jak niewykończone drewno albo gips. Prawdziwe materiały mają błysk (specular highlight), który zależy od tego, skąd patrzysz, nie tylko skąd świeci światło. Do wzoru wchodzi trzeci wektor: V, kierunek do kamery.
Oryginalny Phong (1975): policz R = 2(N·L)N − L, czyli odbicie L względem N, a potem specular = ks · I · max(0, R·V)^shininess.
Blinn-Phong (1977): zamiast liczyć R, użyj wektora half-way H = normalize(L + V) — leżącego w połowie drogi między L i V — i policz max(0, N·H)^shininess. Inny wzór matematycznie, ale wizualnie bardzo podobny błysk, a dużo taniej: żadnego liczenia odbicia, tylko dodawanie i normalizacja.
Wykładnik shininess kontroluje rozmiar i ostrość błysku: niski (np. 8) daje szeroki, rozmyty refleks — plastik, matowa farba; wysoki (128+) daje mały, ostry punkt — polerowany metal, mokra powierzchnia. To dokładnie ten sam parametr, który w silnikach PBR chowa się pod nazwą „glossiness”, albo odwrotnością „roughness”.
Klasyczny model Phonga to suma trzech składników: ambient (stała, przybliżająca odbite światło otoczenia — ta sama „sztuczka” co light probes z Rozdziału 1, tylko w najprostszej możliwej wersji), diffuse i specular, zsumowane dla każdego światła w scenie.
To dosłownie ta sama logika co warstwy w kompozycji albo AOV-y w Nuke: beauty = ambient + diffuse + specular (i czasem więcej). Model Phonga po prostu liczy je analitycznie, wzorem, zamiast renderować każdą warstwę osobno.
Jeśli budowałeś kiedyś graf materiału w Unreal, Unity albo Blenderze — „Roughness” i „Glossiness” to w praktyce ten sam shininess, tylko przeliczony i odwrócony: niższy roughness = wyższy shininess = mniejszy, ostrzejszy błysk.
Blinn-Phong jest wciąż wszędzie: w prostych shaderach mobile/VR, w starszych silnikach gier, i jako punkt odniesienia przy uczeniu shadingu — ale nie zachowuje energii (może „świecić” jaśniej niż padające światło). Właśnie to naprawia PBR i modele mikrofasetkowe, które budują na dokładnie tych samych wektorach N, L, V, H.
Wzór na kolor już mamy — ale zakłada, że światło zawsze dociera do punktu trafienia. W następnym rozdziale to sprawdzimy: promień cienia w praktyce, i dlaczego niemal każdy pierwszy raytracer produkuje tzw. „shadow acne”.