izmenjeno 1 put, poslednji put dragansm 10.12.2005. u 19:34
Izmene poruke
- dragansm10.12.2005. u 19:34zapis iz teksta poruke
Potrebno je da projektujem senku na ravan recimo y = 0.
Frustum kamere je tako orijentisan da uvek u ravni sece trapez.
Recimo da je svetlo orijentisano normalno na ravan. Tada frustum svetla sece rect u koji je upisan trapez. Taj rect odgovara povrsini teksure shadow mape, i deo teksture koji nije obuhvacen trapezom je neiskoriscen. To je posebno izrazeno kad je kamera mnogo oborena (tada je jako velika razlika paralelnih stranica trapeza). Prva pomisao koja mi je pala na pamet je da frustum svetla treba da ima kao bazu trapez i tada bi bilo 100% iskoriscenje teksture i delovi senke koji su blizu bottom clipping plane frustuma kamere bi bile maksimalno ostre (u slucaju obicnog ortogonalnog ili oblique frustuma svetla, ostrina se povecava kako se ide prema top clipping ravni). Medjutim, previd u tom "razmisljanju" je taj sto preslikavanje trapeza u jedinicni ili bilo kakav kvadrat cije su stranice paralelne sa paralelnim stranicama trapeza ima oblik (recimo da je trapez simetrican u odnosu na z osu i da lezi na x osi):
x' = k1*x*z
z' = k2*z
Forma x*z ne dozvoljava formiranje projekcione matrice sa trapezom kao osnovom.
Da li ima nesto sto nedovoljno kapiram o shadow map tehnici ili resenje moram da potrazim u pisanju vertex shadera koji ne koristi matricno mnozenje nego matematiku kojom cu trapez koji vidi svetlo preslikati u kvadrat pri upisivanju u shadow mapu, i "inverzno" preslikavanje (iz kvadrata u trapez) pri iscrtavanju scene i citanju shadow mape.
Video sam neke tehnike koje ovaj problem resavaju koriscenjem vise shadow mapa, ali nadam se da je moguce dobro resenje i sa jednom.
Problem se, dakle, svodi na pitanje kako naterati da svetlo "vidi" potpuno isti deo scene koji vidi i kamera.
Frustum kamere je tako orijentisan da uvek u ravni sece trapez.
Recimo da je svetlo orijentisano normalno na ravan. Tada frustum svetla sece rect u koji je upisan trapez. Taj rect odgovara povrsini teksure shadow mape, i deo teksture koji nije obuhvacen trapezom je neiskoriscen. To je posebno izrazeno kad je kamera mnogo oborena (tada je jako velika razlika paralelnih stranica trapeza). Prva pomisao koja mi je pala na pamet je da frustum svetla treba da ima kao bazu trapez i tada bi bilo 100% iskoriscenje teksture i delovi senke koji su blizu bottom clipping plane frustuma kamere bi bile maksimalno ostre (u slucaju obicnog ortogonalnog ili oblique frustuma svetla, ostrina se povecava kako se ide prema top clipping ravni). Medjutim, previd u tom "razmisljanju" je taj sto preslikavanje trapeza u jedinicni ili bilo kakav kvadrat cije su stranice paralelne sa paralelnim stranicama trapeza ima oblik (recimo da je trapez simetrican u odnosu na z osu i da lezi na x osi):
x' = k1*x*z
z' = k2*z
Forma x*z ne dozvoljava formiranje projekcione matrice sa trapezom kao osnovom.
Da li ima nesto sto nedovoljno kapiram o shadow map tehnici ili resenje moram da potrazim u pisanju vertex shadera koji ne koristi matricno mnozenje nego matematiku kojom cu trapez koji vidi svetlo preslikati u kvadrat pri upisivanju u shadow mapu, i "inverzno" preslikavanje (iz kvadrata u trapez) pri iscrtavanju scene i citanju shadow mape.
Video sam neke tehnike koje ovaj problem resavaju koriscenjem vise shadow mapa, ali nadam se da je moguce dobro resenje i sa jednom.
Problem se, dakle, svodi na pitanje kako naterati da svetlo "vidi" potpuno isti deo scene koji vidi i kamera.