Fények és anyagok (Direct3D 9)
A fények a jelenet objektumainak megvilágítására szolgálnak. Ha a világítás engedélyezve van, a Direct3D a következő kombinációk alapján számítja ki az egyes objektumcsúcsok színét:
Jegyzet
Ez a szakasz csak a rögzített függvényű folyamathoz tartozik. A programozható árnyékolók az összes megvilágítást explicit módon hajtják végre.
- Az aktuális anyagszín és a texelek egy társított textúratérképen.
- A csúcspont diffúz és spekuláris színei, ha meg van adva.
- A jelenetben vagy a jelenet környezeti fényszintjében lévő fényforrások által előállított fény színe és intenzitása.
Ha Direct3D világítást és anyagokat használ, lehetővé teszi, hogy a Direct3D kezelje az Ön számára a megvilágítás részleteit. A speciális felhasználók igény szerint önállóan is elvégezhetik a világítást.
A világítás és az anyagok működése nagy különbséget tesz a renderelt jelenet megjelenésében. Az anyagok határozzák meg, hogyan tükröződik a fény egy felületről. A közvetlen fény- és környezeti fényszintek határozzák meg a tükröződő fényt. Ha a világítás engedélyezve van, anyagokat kell használnia a jelenet megjelenítéséhez. A jelenet megjelenítéséhez nem szükséges fény, de a fény nélkül renderelt jelenet részletei nem láthatók. A legjobb esetben a kivilágítatlan jelenet megjelenítése a jelenet objektumainak sziluettjét eredményezi. Ez a legtöbb esetben nem elég részletes.
Közvetlen fény és környezeti fény
Bár a közvetlen és a környezeti fény is megvilágítja a tárgyakat egy jelenetben, függetlenek egymástól, nagyon különböző hatásuk van, és megkövetelik, hogy teljesen különböző módon dolgozzunk velük.
A közvetlen fény csak az, hogy: közvetlen. A közvetlen fény mindig rendelkezik iránysal és színnel, és ez az árnyékolási algoritmusok, például a Gouraud árnyékolás egyik tényezője. A különböző típusú fények különböző módokon bocsátanak ki közvetlen fényt, ami speciális csillapítási hatásokat eredményez. Az IDirect3Device9::SetLight metódus meghívásával világos paramétereket hozhat létre a közvetlen fényhez.
A környezeti fény gyakorlatilag mindenhol jelen van egy jelenetben. Úgy tekinthet rá, mint egy általános fényszintre, amely kitölt egy teljes jelenetet, függetlenül attól, hogy milyen objektumok és azok helye van az adott jelenetben. A környezeti fénynek nincs helye vagy iránya, csak szín és intenzitás. Minden fény hozzáadja a jelenet általános környezeti fényét. Állítsa be a környezeti fényszintet az IDirect3DDevice9::SetRenderState metódus meghívásával, D3DRS_AMBIENT megadva a State paramétert, és a kívánt RGBA-színt értékparaméterként.
A környezeti fény színe RGBA-érték, ahol minden összetevő 0 és 255 közötti egész szám. Ez ellentétben áll a Direct3D legtöbb színértékeivel.
A D3DCOLOR_RGBA makróval RGBA-értékeket hozhat létre. A piros, zöld és kék összetevők kombinálják, hogy a végső színét a környezeti fény. Az alfa összetevő szabályozza a szín átlátszóságát. Hardveres gyorsítás vagy RGB-emuláció használatakor a rendszer figyelmen kívül hagyja az alfa-összetevőt.
Direct3D Light Model vs. Nature
A természetben, amikor fény bocsát ki egy forrásból, akkor tükröződik le több száz, ha nem több ezer vagy több millió objektum, mielőtt eléri a felhasználó szemét. Minden alkalommal, amikor tükröződik, bizonyos fény elnyelődik a felszínen, néhány véletlenszerű irányban van szétszórva, a többi pedig egy másik felületre vagy a felhasználó szemére kerül. Ez a folyamat addig folytatódik, amíg a fény nem csökken a semmire, vagy a felhasználó érzékeli a fényt.
Nyilvánvaló, hogy a fény természetes viselkedésének tökéletes szimulálásához szükséges számítások túl időigényesek a valós idejű Direct3D-ábrák használatához. Ezért, a sebesség szem előtt tartva, a Direct3D fény modell megközelíti a fény működését a természetes világban. A Direct3D a piros, zöld és kék összetevők fényét írja le, amelyek a végső szín létrehozásához egyesülnek.
A Direct3D-ben, amikor a fény visszaveri a felületet, a világos szín matematikailag lép kapcsolatba magával a felülettel, hogy létrehozza a képernyőn végül megjelenő színt. A Direct3D által használt algoritmusokról további információt A világítás matematika (Direct3D 9)című témakörben talál.
A Direct3D fénymodell két típusra általánosítja a fényt: környezeti fényre és közvetlen fényre. Mindegyik különböző attribútumokkal rendelkezik, és mindegyik különböző módon kommunikál egy felület anyagával. A környezeti fény olyannyira szétszórt fény, hogy iránya és forrása meghatározhatatlan: mindenhol alacsony intenzitást tart fenn. A fotósok által használt közvetett világítás jó példa a környezeti fényre. A Direct3D környezeti fénye, mint a természetben, nem rendelkezik valós iránysal vagy forrással, csak színnel és intenzitással. Valójában a környezeti fény szintje teljesen független a jelenetben lévő minden olyan objektumtól, amely fényt hoz létre. A környezeti fény nem járul hozzá a spekulatív tükröződéshez.
A közvetlen fény az a fény, amelyet egy forrás egy jeleneten belül hoz létre; mindig van színe és intenzitása, és egy meghatározott irányba halad. A közvetlen fény kölcsönhatásba lép a felület anyagával, hogy spekuláris kiemeléseket hozzon létre, és iránya az árnyékolási algoritmusok tényezője, beleértve a Gouraud árnyékolást is. Ha a közvetlen fény visszatükröződik, az nem járul hozzá a jelenet környezeti fényszintjéhez. A közvetlen fényt létrehozó források különböző jellemzőkkel rendelkeznek, amelyek befolyásolják a jelenet megvilágítását.
Emellett a sokszög anyaga olyan tulajdonságokkal rendelkezik, amelyek befolyásolják, hogy ez a sokszög hogyan tükrözi a kapott fényt. Egyetlen tükrözési tulajdonságot állít be, amely leírja, hogy az anyag hogyan tükrözi a környezeti fényt, és egyéni tulajdonságokat állít be az anyag spekulatív és diffúz tükrözésének meghatározásához. További információ: Anyagok (Direct3D 9).
Fények és anyagok színértékei
A Direct3D négy összetevőből áll: piros, zöld, kék és alfa, amelyek összefűzve végleges színt alkotnak. A D3DCOLORVALUE C++ szerkezet úgy van definiálva, hogy az egyes összetevők értékeit tartalmazza. Minden tag egy lebegőpontos érték, amely általában 0,0 és 1,0 között mozog, beleértve az értéket is. Bár a fények és az anyagok ugyanazt a szerkezetet használják a színek leírására, a szerkezet értékeit mindegyik egy kicsit másképp használja.
A fényforrások színértékei az általa kibocsátott fényösszetevő mennyiségét jelölik. Mivel a fények nem használnak alfa-összetevőt, csak a szín piros, zöld és kék összetevői relevánsak. A három összetevőt a kivetítő televízió piros, zöld és kék objektívjeként jelenítheti meg. Előfordulhat, hogy minden objektív ki van kapcsolva (a megfelelő tag 0,0-s értéke), lehet, hogy a lehető legfényesebb (1,0 érték), vagy lehet, hogy valamilyen szinten van közötte. A lencséken keresztül érkező színek kombinálják a fény végső színét. Az R(1.0), G(1.0), B(1.0) kombináció fehér fényt hoz létre, ahol az R(0.0), G(0.0), B(0.0) egyáltalán nem bocsát ki fényt. Létrehozhat egy olyan fényt, amely csak egy összetevőt bocsát ki, ami tiszta piros, zöld vagy kék fényt eredményez; vagy a fény kombinációkkal bocsáthat ki színeket, például sárga vagy lila színeket. Negatív színösszetevő-értékeket is beállíthat, hogy létrehozhasson egy "sötét fényt", amely ténylegesen eltávolítja a fényt egy jelenetből. Vagy beállíthatja az összetevőket 1,0-nál nagyobb értékre, hogy rendkívül fényes fényt hozzon létre.
Az anyagok esetében viszont a színértékek azt jelzik, hogy a fényösszetevők mekkora részét tükrözi az anyaggal renderelt felület. Egy anyag, amelynek színösszetevői R(1.0), G(1.0), B(1.0), A(1.0) tükrözik az utat. Hasonlóképpen, egy R(0.0), G(1.0), B(0.0), A(1.0) elemet tartalmazó anyag az arra irányuló összes zöld fényt tükrözi. Az anyagok több tükrözési értékkel rendelkeznek a különböző effektusok létrehozásához.
További információk a következőkben találhatók: Fénytípusok (Direct3D 9)és Fénytulajdonságok (Direct3D 9).
Kapcsolódó témakörök