Per specular highlight o più brevemente highlight, si intende la macchia luminosa che appare su un oggetto lucido quando viene illuminato. In italiano tale termine viene tradotto, nella forma più letterale, con alta luce[1], oppure con punto luce[2] o lumeggiatura[3]. Gli specular highlight sono importanti nella computer grafica 3D, in quanto forniscono un segno visivo forte che suggerisce la forma di un oggetto e la sua posizione rispetto a una sorgente luminosa nella scena.
La figura 1 mostra il vettore normale N {\displaystyle {\text{N}}} in un punto Q {\displaystyle {\text{Q}}} su una superficie, il vettore di direzione verso l'osservatore V {\displaystyle {\text{V}}} , il vettore di direzione della luce L {\displaystyle {\text{L}}} , e il vettore di riflessione diretta R {\displaystyle {\text{R}}} calcolato usando l'equazione[4]
R = L − 2 ⊥ N L = L − 2 [ L − ( N ⋅ L ) N ] = 2 ( N ⋅ L ) N − L {\displaystyle {\begin{aligned}{\text{R}}&={\text{L}}-2\perp _{\text{N}}{\text{L}}\\&={\text{L}}-2[{\text{L}}-({\text{N}}\cdot {\text{L}}){\text{N}}]\\&=2({\text{N}}\cdot {\text{L}}){\text{N}}-{\text{L}}\end{aligned}}}
I punti luce sono più intensi quando la direzione di riflessione R {\displaystyle {\text{R}}} punta verso l'osservatore, e decresce di intensità quando aumenta l'angolo fra R {\displaystyle {\text{R}}} e la direzione dell'osservatore V {\displaystyle {\text{V}}} . Un modello che produce una resa credibile dei punti luce (ma che non ha alcuna base fisica reale), usa l'espressione[4]
S C max { R ⋅ V , 0 } m ( N ⋅ L > 0 ) {\displaystyle SC\max\{{\text{R}}\cdot {\text{V}},0\}^{m}\quad ({\text{N}}\cdot {\text{L}}>0)}
per calcolare il contributo speculare da una singola sorgente luminosa, dove S {\displaystyle S} è il colore di riflessione speculare della superficie, C {\displaystyle C} è l'intensità della luce incidente, e m {\displaystyle m} è detto esponente speculare. L'espressione ( N ⋅ L > 0 ) {\displaystyle ({\text{N}}\cdot {\text{L}}>0)} è un'espressione booleana che calcola 1 se vera, o altrimenti 0. Questo previene che i punti luce si mostrino su punti della superficie che guardano lontano dalla sorgente luminosa.
L'esponente speculare controlla la nettezza dei punti luce. Un piccolo valore di m {\displaystyle m} produce un punto luce netto che si dissolve per una distanza relativamente larga, invece un grande valore di m {\displaystyle m} produce un punto luce che si dissolve velocemente quando i vettori V {\displaystyle {\text{V}}} e R {\displaystyle {\text{R}}} divergono (figura 2).
Il termine speculare significa che la luce è perfettamente riflessa, in un modo simile allo specchio, dalla sorgente luminosa all'osservatore. La riflessione speculare è visibile solo quando la normale della superficie è orientata precisamente a metà strada fra la direzione della luce incidente e la direzione dell'osservatore; questa è chiamata direzione ad angolo mediano perché biseziona (divide a metà) l'angolo fra la luce incidente e l'osservatore. Perciò una superficie specularmente riflettente mostrerà un punto luce come immagine perfettamente netta e riflessa di una sorgente luminosa. Tuttavia, molti oggetti lucidi mostrano punti luce sfocati. Questo può essere spiegato con l'esistenza di microsfaccettature[5]. Assumiamo che le superfici che non sono perfettamente lisce siano composte da molte sfaccettature davvero piccole, ognuna rappresentato un perfetto riflettore speculare.
Dato un halfway vector H {\displaystyle {\text{H}}} (il vettore che giace esattamente a metà strada fra il vettore di direzione dell'osservatore V {\displaystyle {\text{V}}} e il vettore di direzione della luce L {\displaystyle {\text{L}}} [4], vedi figura 3) , la funzione di distribuzione delle microsfaccettature (microfacet distribution function) restituisce la frazione di microsfaccettature il cui vettore normale punta lungo la direzione H {\displaystyle {\text{H}}} . Per superfici ruvide, la funzione di distribuzione di Beckmann[6] è data da
D m ( V,L ) = 1 4 m 2 ( N ⋅ H ) 4 exp ( ( N ⋅ H ) 2 − 1 m 2 ( N ⋅ H ) 2 ) {\displaystyle D_{m}({\text{V,L}})={\frac {1}{4m^{2}({\text{N}}\cdot {\text{H}})^{4}}}\exp \left({\frac {({\text{N}}\cdot {\text{H}})^{2}-1}{m^{2}({\text{N}}\cdot {\text{H}})^{2}}}\right)}
che descrive la distribuzione dell'orientamento delle microsfaccettature in termini di inclinazione della media di radice quadrata m {\displaystyle m} . Valori grandi di m {\displaystyle m} corrispondono a superfici ruvide che perciò producono un'ampia distribuzione di orientamenti delle microsfaccettature. Valori più piccoli di m {\displaystyle m} corrispondono a superfici più lisce e producono relativamente distribuzioni esigue, che presentano una specularità più netta.
I punti luce sono più intensi quando H {\displaystyle {\text{H}}} punta nella direzione del vettore normale N {\displaystyle {\text{N}}} .[4]
La funzione data dall'equazione sopra è isotropica, ciò che è invariante sotto la rotazione attorno al vettore normale N {\displaystyle {\text{N}}} .[4] Purché l'angolo fra la direzione dell'osservatore V {\displaystyle {\text{V}}} e la direzione della luce L {\displaystyle {\text{L}}} rimanga costante, e l'angolo fra ognuno di questi vettori e il vettore normale rimanga anch'esso costante, la distribuzione delle microsfaccettature rimane allora costante. Molte superfici, tuttavia, possiedono differenti gradi di ruvidità per differenti direzioni. Queste superfici sono dette riflettori anisotropici e includono materiali come per esempio metallo spazzolato, capelli, e alcuni tipi di tessuto.[4]
Possiamo modificare la funzione di distribuzione delle microsfaccettature per fornire la spiegazione della ruvidità delle superfici anisotropiche, cambiando l'equazione soprascritta in
D m ( V,L ) = 1 4 m x m y ( N ⋅ H ) 4 exp [ ( ( T ⋅ P ) 2 m x 2 + 1 − ( T ⋅ P ) 2 m y 2 ) ( N ⋅ H ) 2 − 1 ( N ⋅ H ) 2 ] {\displaystyle D_{\text{m}}({\text{V,L}})={\frac {1}{4m_{x}m_{y}({\text{N}}\cdot {\text{H}})^{4}}}\exp \left[\left({\frac {({\text{T}}\cdot {\text{P}})^{2}}{m_{x}^{2}}}+{\frac {1-({\text{T}}\cdot {\text{P}})^{2}}{m_{y}^{2}}}\right){\frac {({\text{N}}\cdot {\text{H}})^{2}-1}{({\text{N}}\cdot {\text{H}})^{2}}}\right]}
dove m {\displaystyle {\text{m}}} è un vettore bidimensionale di ruvidità, T {\displaystyle {\text{T}}} è la tangente alla superficie allineata alla direzione nella quale la ruvidità è m x {\displaystyle m_{x}} , e P {\displaystyle {\text{P}}} è la proiezione normalizzata dell'halfway vector H {\displaystyle {\text{H}}} sul piano tangente:
P = H − ( N ⋅ H ) N ‖ H − ( N ⋅ H ) N ‖ {\displaystyle {\text{P}}={\frac {{\text{H}}-({\text{N}}\cdot {\text{H}}){\text{N}}}{\|{\text{H}}-({\text{N}}\cdot {\text{H}}){\text{N}}\|}}}