Forrás: a http://freespace.virgin.net/hugo.elias/radiosity/radiosity.htm
Fordította: stewet as Szabó István
Radiosity
Egy egyszerű jelenet
Kezdjük egy (az ábrákon is látható) egyszerű tér létrehozásával – szoba 3 ablakkal.
1. A tér I.
2. A tér II.
3. A tér III.
Van néhány pillér és beugró, melyek érdekes árnyékhatást tudnak produkálni. Válasszuk ki a felületek közül az egyiket és nézzük ezen a világítást!
4. A kiválasztott felületet
A kiválasztott felületet – a képen is látható, az egyik oszlop ablak felé néző oldala - az eljárás felosztja kisebb területekre. Ezen kicsi terület a patch, magyarul folt. Remélhető, hogy az írás végén a kedves olvasó (felhasználó) is érteni fogja a „folt” fogalmát.
Nade haladjunk tovább…
A felosztott felület foltokból épül fel, és most megpróbáljuk ezeknek a foltoknak a szemszögéből nézni a világot.
5. A kiválasztott folt
Kiválasztottunk egy foltot.
… és most képzeld el, hogy te vagy ez a folt!
Gondold végig… ebben a helyzetben mit látsz a világból?
6. Kilátás a foltból
(remélhető, hogy a kedves olvasó is valami hasonlót képzelt el még az előző fejezetben leírtak után – megj.: a fordító)
Tehát a foltból való „kinézéskor” ezt látjuk. A szoba nagyon sötét, mert fény még nem lépett be sehonnan. Az élek láthatósága nem része a jelenetnek, csak azért látszik a fehér körvonal, hogy jobban érthető legyen a vizuális információ.
A folt szemszögéből jól látható majd a teljes fénymennyiség, amit ki tudunk számolni, egészen addig, míg a fény el nem éri a foltot.
Azt a fényt, amit a folt láthat, TELJES BEESÉSI FÉNY-ként kell értelmezni.
A folt a szobában most a külső sötétséget látja. Miközben a beeső fény összeadódik, láthatnánk, hogy az a foltot közvetlenül nem éri el. Ezt a foltot ilyenkor „sötéten meggyújtottnak értelmezzük.
7. Kilátás egy alacsonyabb foltból
A pilléren, egy másik kiválasztott folt nézőpontjából már látható a fényforrás – hívjuk most az egyszerűség kedvéért Napnak – a baloldali ablak felső sarkában. Ekkor az összeadódó fény látható lesz, ami nagyon erős fényt jelent.
Ezt a foltot ilyenkor „fényesen meggyújtottnak” értelmezzük.
8. Világítás a pilléren
A foltok mindegyikénél értelmezett ismétlődő folyamat – a fény folyamatosan „jön” a fényforrásból - végeredményeként a beeső fény hatására látható, hogy milyen megvilágítást kap a pillér. (pontosabban a pillér felosztott egyes foltjai)
A pilléren felfelé haladva látható, hogy mely foltok látják teljesen, melyek kevésbé teljesen és melyek egyáltalán a Napot. Azok a foltok, melyek elől az ablak szegélye valamely mértékben eltakarja a Napot, kevésbé lesznek „kigyújtva”, homályosnak értelmezzük.
Ahogy az látható, a természetes árnyék létrejön a jelenetben, annak függvényében, hogy a felosztott felület – maga a folt – milyen mértékben látja a fényforrást.
9. A teljes szoba kigyújtása – először
A szobában lévő, összes foltra kiterjedő ismétlődő eljárás adja a jelenetet. Minden sötétnek látszik, kivéve azokat a felületeket, melyek a Naptól kaptak fényt.
Tehát megállapíthatjuk, hogy ez nem éppen a legszebben létrehozott jelenet bevilágítás és renderelés szempontjából.
Figyelmen kívül hagyja, hogy a világítás nehézkes, de javíthatunk a helyzeten, ha több felosztást – foltot – alkalmazunk. Összefoglalva: a lényeg, hogy a szoba sötét, kivéve azokat a területeket, melyek látják a Napot.
Nade ezzel itt nincs vége… Nézzük a továbbiakat!
10. Kilátás a foltból az első verzió után.
Látható, hogy az a folt, ami eddig nem látta a napot, most lát olyan, más foltot (foltokat), amiket a Nap kigyújtott. Ebben a folyamatban ez a folt – amiből most „kinézünk” – kissé világosabb lesz.
11. A teljes szoba kigyújtása – másodszor
Amikor a beeső fény minden folton „kiszámítódik”, látható, hogy az eddig sötét folt (foltok) kigyújtódnak. A szoba elkezd valószerű megjelenést ölteni. Ennek oka, hogy a beeső napfény visszaverődik egyrészt a padlóról, másrészt a falakról vagy más felületekről. (pillér, beugró)
12. A teljes szoba kigyújtása: harmadszor
A harmadik folyamat szemlélteti, hogy a beeső fény kétszeresen verődik vissza a felületekről. A folyamat így halad lépésről lépésre, ami lassúnak tűnhet, de a jelenet már így is látható, hogy világosodik.
A 16. lépésnél már ekkora változás nem tapasztalható. A radiosity eljárás lassan halad a végső kialakítás felé. Minden számítás után csak kissé változik a jelenet. Ez függ a jelenet „bonyolultságától”, a felszínektől. A számítások egymásutánisága tarthat néhányszor, de lefuthat több ezerszer is. Rajtad áll, hogy mikor állítod le a folyamatot és tekinted a jelenetet befejezettnek.
13. A számítás hatodik és a tizenhatodik lefutása után
A FOLTOK
A leíró algoritmus részletesebben (és remélem érthetően is):
Emission: A világban – értsd: a valóságban - néhány tárgy fényt bocsát ki és bizonyos mértékig fényt nyel el. Egy jelenetben meg kell különböztetnünk ilyen tárgyakat, amik „fénykibocsátók”. Vagyis vannak foltok, amik fényt bocsátanak ki, de a legtöbbjük nem. Ezt a folt-tulajdonságot nevezzük emissziónak.
Reflectance: Amikor a fény egy tárggyal találkozik, akkor annak egy részét elnyeli (ezt a radiosityben elhanyagoljuk), a többit visszatükrözi. Ezt a fénymennyiséget visszaverődési együtthatónak nevezzük.
Fontos megemlíteni két dolgot: mennyi fény esik a foltra, és mennyi hagyja el. A beeső fényt incident_light-nak a visszaverődő fényt excident_light-nak nevezzük. Most, hogy tudjuk a folt(ok) tulajdonságainak fogalmát, ideje, hogy – hacsak leíró nyelven is – meghatározzunk egy foltot.
Structure PATCH emision reflectance incident excident end structure
(A leírás programozási részének fordításától itt eltekintek – a fordító)
Radiosity megvalósítása
Az első dolog, amivel a radiosityben foglalkoznunk kell, meg kell oldania annak a problémáját, hogy megnézzük a világot mindegyik folt nézetének a pontjáról. Használhatunk egy un. Halszem-objektív nézetet, hogy lássuk, mit lát a folt a jelenetben. Ez viszont nem nagyon gyakorlatias.
The Hemisphere – A Félgömb
A hely, amit a folt lát, egy félgömb belső felületén, perspektivikusan így néz ki. (Szokták halszem-optikának is hívni, most nem térek ki a látott és a valódi halszem-optika közötti különbségre) A fekete vonalak a horizontális és vertikális felezőt mutatják. Ha a jelenetben egy kamerát helyeznénk el, és képet alkotnánk a folt szemszögéből, valami ilyet látnánk. Ennek a módszernek egyik hátránya, hogy a beeső fény – beleértve a foltra és a foltról visszaverődő fényt is - kiszámítása matematikai értelemben elég körülményes
14. Félgömb nézet
15. Renderelt kép
HemiCube – Félkocka
Tehát keresni kell egy másik módszert, ami a számítást gyorsabban és pontosabban elvégzi. Ez pedig a HemiCube – Félkocka eljárás. A Félkocka eljárásba helyezett kamera renderelt képe pontosan megegyezik a Félgömb módszerrel létrehozott renderelt képpel.
16. Félkocka eljárás I.
17. Félkocka eljárás II.
Képzeld el, hogy a Félkockát „szétnyitod”. Mit is látnál? Segítek – nézd meg a lenti képet!
18. Szétnyitott félkocka
Ezzel azonban felmerül egy újabb probléma. A kiterítés azokon a tárgyakon, amik a bal/jobb/lent/fent területre kerülnek bizonyos torzulások keletkeznek. Ha arra használtad a Félkockát, hogy kiszámítsad a teljes beeső fényt, ami egy foltra esik, és együtt adtad össze ezeket az értékeket, ami pixelként jelentkezik a képalkotásban, a Félkockában torzulás jön létre a tárgyakon, amik a sarkokban helyezkednek el.
Hogy ezt kiküszöböljük, szükséges elhalványítani a pixeleket az éleknél és sarkoknál, annyira, hogy minden tárgy egyformán kerüljön a beeső fénybe. Tudom, nem könnyű megérteni, de nézd meg a lenti ábrát magyarázatul.
19. Félkocka eljárás III.
20. Félkocka eljárás IV.
Jól látható a fentebb leírt jelenség. A zöld gömb, a kamera látómezőjében nem szenvedett torzulást, de a másik két gömb (piros és kék színű) nem a való képet mutatják. Ezt a jobboldali képen ábrázolt módon lehet kompenzálni. A felszín fényessége függ a kamera nézőpontja és a sík által bezárt szög koszinuszától. (Ezen fordítás nem tér ki a módszer tárgyalására, de a lényeget Lambert koszinusz törvénye jelenti. Vagyis: Egy felszín látszólagos ragyogása arányos a felszín normálisa, és a fény iránya által bezárt szög koszinuszával – megjegyzés: a fordító)
Gyakorlati példa
Ennyit arról a matematikai és egyéb háttérről, amivel reményeim szerint érthetőbbé vált ennek az eljárásnak az alapja, de nézzünk egy gyakorlati példát a fentebb leírtakra:
Indítsuk el a Blendert és hozzuk létre a képen látható jelenetet.
21. Minta I.
22. Minta II.
A második képen Edit Mode-ban van a jelenet, csak azért, hogy látható legyen a felületek normálja, ami fontos lesz a későbbiekben! Lássuk, az egyes beállításokat. A legfontosabb, a mennyezeten lévő kis négyzetek. Ezek lesznek a fényforrások, vagyis amikor létrehozzuk őket, adjunk nekik emit értéket ami az ábrán látható:
23. Beállítások
Az asztal felett látható egy fekete vonal, ami valójában egy plane. Fontos, hogy ő nem vesz részt a jelenet radiosity számításában, egyetlen szerepe a fény/árnyékhatás tompítása. Normálja felfelé álljon. (Az emittáló tárgyak, amikor kibocsátják a fényt, az nem megy át tárgyakon, hanem visszaverődik róluk, halad tovább és egészen addig „él”, míg energiája el nem fogy, vagy ameddig a számítás műveletét meg nem szakítjuk.)
Amikor készen vagyunk, Joinoljuk (egyesítsük – [+]) az előbb említett plane kivételével az összes objektumot. Nem kell megijedni, ilyenkor az egész jelenet egy objektum, vagy ha úgy tetszik tárgy lesz, 0.246 emit értékkel. Váltsunk át radiosity nézetre ezzel a kapcsolóval:
24. Radiosity kapcsoló
25. Panel I.
Collect Meshes: A látható mesh-eket konvertálja foltokká
Replace Meshes: Lecseréli a régi jelenetet a kiszámított jelenettel
Add new Meshes: A kiszámított jelenetet hozzáadja a régihez
A zöld gombok a megjelenítés minőségére vannak hatással
ElMax/ElMin: A felosztandó elem méretének max/min beállítása
PaMax/PaMin: A foltok méretének max/min beállítása
Limit Subdivide: a foltok alfelosztása (kisebb rész(ek)re)
Click a Collect Meshes gombra:
26. Panel II.
Go: indítja a számítást
SubSh Patch/Element: hányszor tesztelje a környezetében érzékelt folto(ka)t/Elemeket
Subdiv Shoot Element: újabb felosztásért, magas energia érzékelésének változtatása és új felosztás (Elemek/Foltok)
MaxEl: Elemek max beállítható értéke
Face Filter: Extra simítás
Element Filter: a szűrő elemeiről eltávolítja az élsimítást
Remove Doubles: duplák eltávolítása
Lim: a duplák eltávolításának értéktartománya
Nos nézzük, mit látunk, ha a GO-ra kattintunk:
27. GO
A fentebb említett zöld gombbal most megmutatom, hogy mit is osztott fel az eljárás
28. Wire
29. Solid
Nos nincs más hátra, választani kell, hogy a létrejövő jelenetet megtartva és a régit „eldobva” folytatjuk a munkát: Replace…, de megtarthatjuk a régi jelenetet és hozzáadhatjuk az újat az Add… gombbal.
Ne feledjük a következőt: Bármelyik módszert is választjuk, ez a jelenet 1 objektum. (az egészből újabb részeket képezni sem ördöngősség, de nem része a tutorialnak)
Kilépni a Radiosity-ből a Free Radio Data gombbal lehet.
Tartozom még egy megjegyzéssel: Ez az eljárás nyugodtan alkalmazható (UV) textúrázott jelenetekben is. Mivel a foltok létrehozása során a számítás „hozzányúl” ezekhez a koordinátákhoz, az utólagos korrekció szinte megoldhatatlan, de nem lehetetlen. Viszont a jól feltextúrázott objektumokhoz utólag nem kell hozzányúlni.
Saját tapasztalatom és korábbi, ehhez az eljáráshoz kapcsolódó leírások, fórumok ajánlata szinte egybehangzó volt, mégpedig abban, hogy sok-sok kísérlettel tapasztalható ki az alapértelmezett beállítás. Kiindulásnak javaslom, hogy a jelenet face számának a kétszerese esetleg majdnem háromszorosa is beállítható MaxEl értékének.
Tisztában vagyok, hogy nem beszéltem a Radiosity panel Radio Render részéről (a legtöbb esetben az alapértelmezett beállítások is kielégítő eredményt adnak), és sok egyébről, azonban bízom benne, hogy ennyi segítséggel a kezdeti nehézségen hamar túllendülhet a kedves olvasó.
Figyelem: a beállításoktól függően a számítás hosszú időt is igénybe vehet, de az eredmény kárpótólni fog mindenkit. Csak javasolni tudom akár a Blender belső renderelője, akár a Yafray kiegészítőjeként ezt az eljárást.
Lássunk néhány képet az elmondottak illusztrálására:
30. Minta I.
31. Minta II.