La componente diffusa di un materiale è individuabile in natura come la quantità di luce riflessa in maniera diffusa da un oggetto. È presente sia su superfici speculari che su quelle completamente "opache" (opaco qui ha il significato di superficie senza spot speculare ne riflessione dell'ambiente circostante).
La sua intensità è variabile secondo l'angolo di incidenza della luce (quindi secondo la legge di Lambert vista nei capitoli precedenti) e secondo la distanza dalla sorgente luminosa. In natura quest'ultimo decadimento è uguale all'inverso del quadrato (dec = 1 / dist2), ma nei motori grafici questa legge fisica viene spesso accantonata in luogo di un decadimento lineare (dec = 1 / dist), o dell'introduzione di un raggio che definisce la distanza massima oltre la quale l'intensità luminosa è zero; questa scelta è dettata soprattutto a vantaggio di un maggior controllo che i grafici ed i level-designer possono avere sull'illuminazione del mondo virtuale.
diff = normal · LightVec
Codice HLSL da implementare nel Pixel Shader.
// Calcolo dell'intensità dell'illuminazione diffusa
float diff = saturate(dot(normal, LightVec));
Tuttavia negli ultimi anni, grazie all'incremento in prestazioni delle GPU, si stanno iniziando ad implementare modelli di illuminazione sempre più aderenti alle leggi fisiche (integrando ad esempio l'algoritmo radiosity o la global illumination).
