Megosztás a következőn keresztül:


Világos típusok (Direct3D 9)

A fénytípus tulajdonság határozza meg, hogy milyen típusú fényforrást használ. A fénytípus beállítása a fény D3DLIGHTTYPE C++ számbavételének értékével történik a fény D3DLIGHT9 szerkezetének típuselemében. A Direct3D-ben háromféle fény található : pontfények, reflektorfények és irányjelző lámpák. Minden típus másként világítja meg a jelenet objektumait, különböző számítási többletterheléssel.

Pont fénye

A pontfények színnel és pozícióval rendelkeznek a jeleneten belül, de egyetlen irányban sem. Minden irányban egyformán bocsátanak ki fényt, ahogy az az alábbi ábrán is látható.

pontfényes illusztrációja

A villanykörte jó példa egy pont fény. A pontfényeket a csillapítás és a tartomány befolyásolja, és csúcspontonként megvilágítja a hálót. A világítás során a Direct3D a pont fényének helyét használja a világűrben, valamint a kigyulladt csúcs koordinátáit, hogy vektort nyerjen a fény irányára és a fény által megtett távolságra. Mindkettőt a normál csúcsponttal együtt használják a fénynek a felület megvilágításához való hozzájárulásának kiszámításához.

Irányfény

Az irányfények csak színnel és iránysal rendelkeznek, a helyzetük nem. Párhuzamos fényt bocsátanak ki. Ez azt jelenti, hogy az irányfények által generált összes fény ugyanabban az irányban halad át egy jeleneten. Képzeljen el egy irányfényt, mint egy fényforrást, közel végtelen távolságra, mint például a Nap. Az irányfényeket nem befolyásolja a csillapítás vagy a tartomány, ezért a Megadott irány és szín az egyetlen tényező, amikor a Direct3D kiszámítja a csúcsszíneket. A kevés megvilágítási tényező miatt ezek a legkevésbé számításilag intenzív fények.

Reflektorfény

A reflektorfények színekkel, pozícióval és irányokkal rendelkeznek, amelyekben fényt bocsátanak ki. A reflektorfényből kibocsátott fény egy fényes belső kúpból és egy nagyobb külső kúpból áll, és a fény intenzitása csökken a kettő között, ahogy az alábbi ábrán látható.

reflektorfény illusztrációja egy belső kúp és egy külső kúp

A reflektorfényekre hatással van a leesés, a csillapítás és a tartomány. Ezeket a tényezőket, valamint az egyes csúcsok felé megtett távolságokat a jelenetben lévő objektumok fényeffektusainak számítása során kell figyelembe venni. Ha ezeket a hatásokat az egyes csúcspontokhoz használja, akkor a direct3D-ben a legtöbb számítással időt igénylő fény jelenik meg a reflektorfényekben.

A D3DLIGHT9 C++ szerkezet három tagot tartalmaz, amelyeket csak a reflektorfények használnak. Ezek a tagok - Falloff, Theta és Phi - szabályozzák, hogy mekkora vagy kicsi egy reflektor tárgy belső és külső kúpja, és hogy a fény mennyire csökken közöttük.

A Theta érték a reflektorfény belső kúpjának radián szöge, a Phi érték pedig a fény külső kúpjának szöge. A Falloff érték azt szabályozza, hogy a fényintenzitás hogyan csökken a belső kúp külső széle és a külső kúp belső széle között. A legtöbb alkalmazás 1.0-ra állítja a Falloffot, hogy a két kúp között egyenletesen előforduló falloffot hozzon létre, de igény szerint más értékeket is beállíthat.

Az alábbi ábra bemutatja a tagok értékei közötti kapcsolatot, és azt, hogy ezek hogyan befolyásolhatják a reflektorfény belső és külső fénykúszását.

ábra arról, hogyan viszonyulnak a phi és a theta értékek a reflektorfény-kúpokhoz

A reflektorfények két részből álló fénykondenzát bocsátanak ki: egy világos belső kúpot és egy külső kúpot. A fény a legfényesebb a belső kúpban, és nem jelenik meg a külső kúpon kívül, a két terület közötti fényintenzitás csillapításával. Ezt a csillapítási típust gyakran falloffnak nevezik.

A csúcsok által kapott fény mennyisége a csúcsok belső vagy külső kúpokban elfoglalt helyétől függ. A Direct3D kiszámítja a reflektorfény irányvektorának (L) pont szorzatát és a vektort a fénytől a csúcsig (D). Ez az érték megegyezik a két vektor közötti szög koszinuszával, és a csúcs pozíciójának jelzéseként szolgál, amely összehasonlítható a fény kúpszögével annak meghatározásához, hogy a csúcs a belső vagy külső kúpokban hol lehet. Az alábbi ábra a két vektor közötti társítás grafikus ábrázolását mutatja be.

reflektor irányvektor és a csúcsponttól a reflektorfényig

A rendszer összehasonlítja ezt az értéket a reflektorfény belső és külső kúpszögeinek koszinuszával. A fény D3DLIGHT9 szerkezetében a Theta és a Phi tagok a belső és külső kúpok összes kúpszögét képviselik. Mivel a csillapítás akkor következik be, amikor a csúcspont távolabb kerül a megvilágítás középpontjától (nem pedig a teljes kúpszögben), a futásidő felére osztja ezeket a kúpszögeket, mielőtt kiszámítja a koszinuszokat.

Ha az L és D vektorok pont szorzata kisebb vagy egyenlő a külső kúpszög koszinuszával, a csúcs a külső kúpon túl helyezkedik el, és nem kap fényt. Ha az L és D pont szorzata nagyobb, mint a belső kúpszög koszinusza, akkor a csúcspont a belső kúpon belül van, és a maximális fénymennyiséget kapja, még mindig a távolságon belüli csillapítást fontolgatja. Ha a csúcspont valahol a két régió között van, akkor a rendszer a következő egyenlettel számítja ki a kieső értéket.

csúcspont fényintenzitásának képlete a leesés után

Hol:

  • Én f könnyű intenzitás után falloff
  • Az alfa az L és a D vektorok közötti szög
  • A theta a belső kúpszög
  • A Phi a külső kúpszög
  • p a falloff

Ez a képlet egy 0,0 és 1,0 közötti értéket hoz létre, amely a fény intenzitását a csúcsponton skálázza a leesés figyelembevétele érdekében. A csillapítást a csúcs fénytől való távolságának tényezőjeként is alkalmazzuk. Az alábbi grafikon bemutatja, hogy a különböző falloff értékek hogyan befolyásolhatják a falloff görbét.

fényintenzitás gráfja a fénycsúcs távolságával szemben a fény

A különböző tartalék értékek hatása a tényleges világításra finom, és egy kis teljesítménybírság azzal jár, hogy a falloff görbét az 1,0-stól eltérő esési értékekkel alakítják. Ezen okok miatt ez az érték általában 1,0.

Fények és anyagok