Quando implemento la legge di Beer (assorbimento del colore a distanza attraverso un oggetto), per qualche motivo non sembra mai molto bello.
Quando ho il colore dietro l'oggetto, calcolo il colore modificato in questo modo:
const vec3 c_absorb = vec3(0.2,1.8,1.8);
vec3 absorb = exp(-c_absorb * (distanceInObject));
behindColor *= absorb;
Questo mi darà qualcosa che assomiglia a questo (nota un po 'di rifrazione applicata):
Si noti che questo è implementato come un giocattolo shader qui .
Ciò soddisfa la descrizione di ciò che fa la legge di Beer, ma non sembra molto buono, non rispetto a scatti come questo:
Punti salienti speculari a parte, sto cercando di capire la differenza. Potrebbe essere che la mia geometria sia troppo semplice per mostrarla davvero molto bene? O lo sto implementando in modo errato?