Shadowing

Lo shadowing e la pratica di computare le ombre dato un oggetto, una fonte luminosa e un osservatore, un punto e in ombra se la fonte luminosa non lo raggiunge ed e visibile dall’osservatore

Le ombre variano molto a seconda delle dimensioni dell’oggetto, le condizioni di illuminazione e la posizione dell’osservatore, risultano perciò molto complesse da computare

Ombra vs penombra

L’ombra e quella che una fonte luminosa proietta nei punti non direttamente raggiungibili da essa, mentre la penombra e una zona di punti non raggiunti completamente dalla luce

Per poter avere condizioni di penombra la fonte luminosa non deve essere puntiforme!

se la posizione relativa della fonte luminosa e dell'osservatore varia e necessario computare di nuovo tutte le ombre ( molto costoso)

Ombre su piani

Algoritmo che punta a disegnare data una fonte luminosa e un oggetto una geometria piana da poter colorare con il colore ombra, questo viene fatto per mezzo di una proiezione su piano

Ombre su piani cartesiani

IN questo caso speciale e sufficiente trovare la coordinata sul piano del punto ottenuto come proiezione e lo si può fare con una similitudine fra triangoli:

si ha quindi che i triangoli di lati e sono paragonabili

Nel caso in cui il piano non sia cartesiano e necessario proiettare i vertici del poligono sul piano arbitrario

Ombre nello z-buffer: shadow-buffer

Per implementare le ombre nello z-buffer si ricorre a un algoritmo detto shadow-buffer

Lo shadow buffer e un buffer in memoria che computa l’algoritmo z-buffer ma dal punto di vista della sorgente luminosa

flowchart TD
A[compute shadow buffer value]
B{shadowbuffer<br/>< <br/>z-buffer}
C[cast shadow]
D[visible point]
A --> B 
B --yes--> C
B --no --> D

Lo shadow buffer risulta fattibile solo per scene con singole fonti di luce in quanto per poter computare multiple fonti si necessita di una fonte di luce per ognuna di esse

Gestire l’aliasing

Quando si computano le ombre si hanno sempre problemi di aliasing dovuti al fatto che l’algoritmo shadow buffer compie una decisione netta sul mettere in ombra o meno un pixel, in questo caso si applicano tecniche simili a quanto visto per le textures

Luci non puntiformi

Nella realtà le luci non sono mai puntiformi, questo porta a ombre morbide come visto in precedenza in questo caso si adottano tecniche di blur delle ombre per simulare l’effetto di una luce non puntiforme

PREVIOUS NEXT