Kinetix

"Aki másnak felbontás...!"


  • Gabo
    #204
    xCSAbo:
    Kicsit járj utána a dolgoknak!
    Mind a radiosity, mind a ray-trace, mind a GI-nél használt Monte-Carlo ray-tracing a fény valós fizikai viselkedésére épít. A scanline ellenben csak trükközésekkel oldja meg ezt.
    Radiosity esetében a fény energia voltát veszik alapul és lényegében fényenergia átadással-megmaradással-elnyelődéssel számolnak. Első sorban zárt tereknél használható jól. Ez a módszer alkalmatlan a fénytörés és a tükröződések kezelésére. Miután az előszámítások elkészültek, ezt követően végzik el a képalkotást a scanline-hoz hasonló módszerekkel. Az előszámítások eredménye eltárolható, ismét felhasználható, egészen addig, míg a modelltérben változás nem történik.(!)
    Ray-trace eljárások esetében a fény sugár voltára építenek. A kamerától kiindulva, visszafelé haladva, a fénysugár pattogását követik addig, míg egy fényforrást el nem érnek, vagy a semmibe nem veszik a sugár. Az indirekt fényt semmilyen formában nem kezelik le.
    Monte-Carlo raytracing, annyiban különbözik, hogy itt a sugárkövetést két irányba végzik el. Első lépésben a fényforrásoktól bocsátanak ki néhány "photont" és ezek pattogását követve "feltérképezik" a környezetet. Az egyes ütközések során a photon magával visz némi információt a felületről és ezt a következő felületnek is átadj. (Szín átadás, Colorbleeding) Az egyes ütközések folyamán a photon útja, tulajdonságai kvázi véletlen szerűen módosulnak. Mivel sugárkövetés közben lehetőség van a tükröződések, a fénytörések számítására is, ezért ezzel a módszerrel már le lehet kezelni a fény fókuszálódásának (caustic), visszatükröződésének, anyagon belüli szóródásának (SSS) jelenségét is. Ezt hívják photon-mapping-nak. A számítások eredménye itt szintén eltárolható és később újra felhasználható (lévén kamera és nézet független), és egészen addig helyes eredményt ad, míg a modelltérben változás nem történik. (!) A photon-mapping után történik meg a hagyományos ray-trace képalkotás a photon-mapping eredményeit is felhasználva a megvilágítási számítások során. Sebesség szempontjából talán ez a gyorsabb módszer a radiosity-vel szemben. Ráadásul pontos és helyes fénytörést és tükröződést ad.

    És hogy miért is nehézkes bármely GI módszer (radiosity vagy MC-raytracing vagy bármi) használata animációk során jelenleg?
    Az előszámítások eredménye egészen addig használható, amíg a modelltérben változás nem áll be. Ha elmozdítasz egy tárgyat, megváltoztatod valamelyik fényforrás helyét, erejét, megváltozik a fény terjedésének környezete is. Megváltozik az energia eloszlás, megváltozik a pattogó photon-ok útja. Leegyszerűsítve, ha a fehér fal mellől eltávolítod a piros labdát, akkor igen feltűnő lenne az, hogy a fal még mindig rózsaszínnek látszik. Ez egészen addig így marad, míg az előszámítások újra el nem lesznek végezve.
    Tehát statikus anim esetén, ahol csak a kamera mozog, elég egyszer kiszámítani a fény terjedését. Ezért is használják az építészek és a látványtervezők a radiosity rendszerét. Ott nincsenek mozgó tárgyak a jelenetben, tehát ezzel nem kell számolni. Az elsőre kiszámított adatokkal le lehet generálni az egész animot. (A GI is is alkalmas erre.)
    Dinamikus anim esetén, ahol több mozgó tárgy is található, viszont majdnem minden képkocka számításakor szükség lenne a fényeloszlás újra számolására. Ez sacra legalább háromszorosára növeli a renderidőt még MC-raytracing alapú GI esetében is.
    Konklúzió: GI-t (bármely módszert) csak akkor érdemes használni dinamikus animációkhoz, ha teljes élethűségre törekvő időmilliomos renderfarm tulaj vagy. Ha a radiosity tényleg alkalmas lenne gyors, dinamikus animokhoz élethű fényszámítások elkészítésére, akkor már rég használták volna a film gyártásban is. (Lévén nem mai találmány.) De a viszonylag gyorsan számítható GI-t is csak mostanában kezdik itt-ott alkalmazni.
    Köztes megoldás, hogy az anim egy-egy fontosabb képkockájához előzőleg elvégzed a GI-s képszámítást. Majd ezeknek megfelelően trükközöl a normál fényforrásokkal az anim végleges számításához. (Tehát ott már nem használsz GI-t.)
    A "Reusing GI data" pedig pontosan ugyan azt jelenti, mint amit a radiosity esetében is, az előszámítások újra felhasználását. A textura baking pedig nem csak játékoknál használható. Radiosity-nél ez az alapértelmezett módja annak, hogy a megvilágítási adatokat a jelenetben is eltárolják.

    Viszont az eredeti kérdés az üveg tárgyak környékéről indult ki. Mivel a Max ray-trace rendszere kegyetlenül lassú, animációk során sem lesz gyorsabb. Tehát ha van rá lehetőség érdemes a külső renderelőt használni. (Vagy nem ray-trace-szel kell az üvegeket az animba elkészíteni...) A megvilágítási modell ettől lényegében teljesen független.