Az alábbiak megértéséhez erősen javasolt a Fény és az emberi látás lecke alapos átolvasása.
A Unity Fény komponens
Ha meg szeretnénk világítani a számítógépes grafikában megjelenített renderelt testeket, egy vagy több virtuális fényforrást rendelhetünk a jelenethez:
Ezt egy GameObjet-hez adott Light komponenssel tudjuk elérni.
A Light komponens legfőbb beállítása, hogy milyen típusú fényt sugároz.
🌞 Directional Light
Egy irányú fény. A nap fényéhez hasonló hatású eredményt ad. A tér minden pontját megvilágítja egy irányból. A virtuális fénysugarak tökéletesen párhuzamosak egymással.
A fényforrást reprezentáló GameObject-nek ezért csak az iránya számít, a pozíciója nem.
💡 Point Light
Egy pontszerű fény. Egy villanykörte, vagy gyertyaláng egyenletes fényéhez hasonló eredményt ad, ám ezen virtuális forrás fénye egy kiterjedés nélküli pontból érkezik, ahonnan minden irányba egyenletese sugároz a komponens.
A fényforrást reprezentáló GameObject-nek ezért csak a pozíciója számít, az iránya nem.
🔦 Spot Light
Egy irányított, de pontból érkező fény. Egy zseblámpa fényéhez hasonló eredményt ad. Hasonló a Point Light-hoz, de ez a sugárzás iránya nem egyenletes.
A fényforrást reprezentáló GameObject-nek ezért az pozíciója és az iránya is számít.
🟨 Area Lights
Egy területről szétszóródó fény. Szórt, tompa, lágy fényt eredményez. Ez globális illuminációs technikák esetén működik. A globális illuminációról bővebben:
Fény komponensek egyéb fontos beállításai
- Color / Szín: Milyen színű legyen a fény.
- Intenzity: A fény erőssége. Minél nagyobb, annál jobban érvényesül, annál erősebb a fény.
- Intenzity Multiplyer: Mennyit veszít egy indirek fényforrás az erősségéből egy visszaverés esetén. Egyedül globális illuminációs technikák esetén van jelentősége.
- Range: Milyen távolságban legyen érvényes a pontszerű és spotlight fényforrás hatása.
- Shadow Type: Vessen-e árnyékkot a fény és ha igen, akkor az puha vegy éles legyen.
- Culling Mask: Milyen rétegekre hasson a fény. Rétegekről bővebben: Layer, Tag és Sorting Layer
Ezen hatás hagyományos Unity renderer (mem SRP) esetén lineárisan csökken a távolsággal a megfelelő sugáron belül.
A fényforráshoz közel maximális az intenzitás.
A Range-en (sugáron) kívül nulla.
A kettő között lineárisan, arányosan csökken. Tehát egy ponton a fény erőssége = Max intenzitás * (1 - (pont és fényforrás távolsága / Range))
Fények megjelenése a felületen
Azt, hogy a fény hogyan jelenik meg a felületen azt nem csak a fényforrás és annak térbeli helyzete határozza meg, a felület materialja is számít.
Erősen leegyszerűsítve a mögöttes fizikát, három féle módon árnyalhat egy fény egy felületet: Diffúz, Spekuláris, és Ambiens módon. Ezek technikai megvalósítása és minősége nagyban függ a renderelési algoritmustól: Lásd: Renderelési stratégiák
- Diffúz árnyalás: Diffúz árnyalás esetén feltételezzük, hogy nincsen kapcsolat aközött, hogy milyen irányból esik be a fény az anyagra és, hogy ez a fény milyen irányba verődik vissza. Ennek oka, hogy a diffúz felület mikroszkopikus szinten nagyon erősen barázdált, recés és az egyes fényrészecsék ezen a egyenetlen felületen megjósolhatatlan, milyen irányba verődnek vissza.
- Távolság a fényforrástól - Pontszerű és spotlight (zseblámpa típusú) fényforrás esetén az azonos területre érkező fénymennyiség csökken a távolság növekedésével. A messzi gyertya nem sokat ér. A fénymennyiség fordítottan arányos a távolság négyzetével. (Ennek nincs jelentősége irányított fénynél.)
- Beesési szög - Bármely típusú fény esetén számít, hogy milyen szögben érkezik be a fény a felülethez képest, hiszen alacsony beesés esetén az egységnyi fény nagyobb felületen oszlik el. Ezért is van különbség a tél és a nyár közt. nyáron a nap magasabb szögben delel.
- Spekuláris árnyalás / Specuar lighting:
- Ambiens fény
Diffúz árnyalás erőssége egy felület pontján csak attól függ tehát, hogy mennyi fényt érkezik rá, a megfigyelő betekintésének szöge nem számít. Ez a erősség kiszámolható, a következők alapján:
A fénymennyiség egyenesen arányos a beesési szög szinuszával.
Legegyszerűbben úgy lehetne ezt az árnyalást köznapira fordítani, hogy a spekuláris fény a “tükröződés” vagy “becsillanás” effektet jelenti.
Mikor egy felület nem annyira komplikált, hogy a visszaverés iránya ne függjön a beeső fény szögétől, hanem részben vagy teljesen megjósolható a kimenő irány, akkor spekuláris árnyalásról beszélünk.
A felület egy pontjától a kamera, valamint a fény irányába mutató sugarak közti szöget kell ekkor felhasználni a számításhoz. Minél tompább ez a szög annál erősebb a becsillanás mértéke.
A valóságban nem csak közvetlenül fényforrásokból érkezik fény egy felületre, hanem a fény részecskéi változatosan pattognak a tér felületein mielőtt szemünkbe jutnak. Emiatt ritkán látunk teljesen sötét felületeket, még akkor sem, ha közvetlenül nem jut rájuk fény egy fényforrásból. Bővebben: Fény és az emberi látás
Bizonyos esetekben valami módon megpróbáljuk szimulálni ezt a “pattogást, ám ez valós időben nehézkes lehet. Gyakran csak “odacsaljuk” ezt a fényt egy egyszerű színértékkel, amit a felület minden pontja egyformán megkap. Bővebben: Renderelési stratégiák
Globális fénybeállítások, Skybox
Egész Scene-re nézve is vannak lehetőségein fénybeállításokra, amikkel a környezet színét és a globális ambiens fényeket adhatjuk meg. Ezen beállítások a következő módon érhetők el:
Felső menüsáv / Window / Rendering / Lighting / Environment
Az ezen menüben történt módosítások a megnyitott Scene-re érvényesek.
Egy fontos ilyen globális beállítás a Skybox. Ez azt adja meg, hogy végtelen távolságban milyen színe legyen a környezetnek. Tehát, ha a kamera előtt valamilyen irányban nincsen semmi, akkor annak a pixelnek a színét a SkyBox adja meg.
A Skybox egy speciális material, amit elképzelhetünk úgy mint egy hagyományos mesh-en használatos materiált, amit egy tökéletesen gömbölyű labda modellre tennénk. Ez a material valami módon megadja a gömb felszínének színét minden egyes pontban. Most képzeljük el, hogy nem kívülről nézünk rá a labdára, hanem összezsugorodunk annak sugarához képest elhanyagolhatóan kicsire, és bekerülünk ezen gömb közepébe. Ekkor bármerre nézünk azt a színt látjuk, ami a gömb felszíne az adott pontban.
Tehát egy gömb és az ég ilyen formán megfeleltethető egymásnak. Mivel 3D grafikában a material tudja megadni bármilyen alakzat felszínét, ezt használhatjuk Skybox-ként is.
Az ebben a példában vett gömb, helyett néha kockát használunk. Innen a Skybox név.
Úgy hozzuk létre a Skybox materialt, mint bármely másikat. Először létrehozunk egy szimpla materialt és aztán annak beállításai közt kiválasztjuk a shaderek közül azt, ami képes skybox-ként viselkedni.
Négy ilyen beépített Skybox shader van Unity-ben.
Cubemap:
Kocka alakú vetítés, ahol az ég minden pontja egy textúrában van benne megfelelő elrendezésben:
Ezzeh a textúra beállítása a következő kell legyen
Texture type: Default Texture Shape: Cube
6 oldalú kocka:
Hasonló a Cubemap-hoz, de az egyes oldalak külön texturában vannak eltárolva.
Panoráma:
Gömb alakú vetítés, ahol az ég minden pontja egy textúrában van benne megfelelő elrendezésben:
Procedurális:
Az ég minden pontjának színe procedurálisan van kiszámolva textúrák használata nélkül.