Dela via


Ljustyper (Direct3D 9)

Egenskapen ljustyp definierar vilken typ av ljuskälla du använder. Ljustypen anges med hjälp av ett värde från D3DLIGHTTYPE C++-uppräkning i typmedlemmen i ljusets D3DLIGHT9 struktur. Det finns tre typer av lampor i Direct3D – punktljus, spotlights och riktningsljus. Varje typ lyser upp objekt i en scen på olika sätt, med olika nivåer av beräkningskostnader.

Punktljus

Punktljus har färg och position inom en scen, men ingen enskild riktning. De avlyser lika mycket i alla riktningar, som du ser i följande bild.

bild av punktljus

En glödlampa är ett bra exempel på ett punktljus. Punktljus påverkas av attenuation och räckvidd och belyser ett nät på hörn-för-hörn-basis. Under belysningen använder Direct3D punktljusets position i världsrymden och koordinaterna för hörnen som tänds för att härleda en vektor för ljusets riktning och avståndet som ljuset har färdats. Båda används, tillsammans med hörnen normal, för att beräkna ljusets bidrag till belysningen av ytan.

Riktningsljus

Riktningsljus har bara färg och riktning, inte position. De avger parallellt ljus. Det innebär att allt ljus som genereras av riktningsljus färdas genom en scen i samma riktning. Föreställ dig ett riktningsljus som en ljuskälla på nästan oändligt avstånd, till exempel solen. Riktningsljus påverkas inte av attenuation eller intervall, så riktningen och färgen du anger är de enda faktorer som beaktas när Direct3D beräknar hörnfärger. På grund av det lilla antalet belysningsfaktorer är dessa de minst beräkningsintensiva lamporna som ska användas.

Spotlight

Spotlights har färg, position och riktning där de avger ljus. Ljus som avges från en spotlight består av en ljus inre kon och en större yttre kon, med ljusintensiteten minskar mellan de två, som visas i följande bild.

bild av en spotlight med en inre kon och en yttre kon

Spotlights påverkas av falloff, dämpning och intervall. Dessa faktorer, liksom avståndet ljuset färdas till varje hörn, räknas i när databehandling belysning effekter för objekt i en scen. Att beräkna dessa effekter för varje hörn gör spotlights till den mest beräkningsmässigt tidskrävande av alla lampor i Direct3D.

Strukturen D3DLIGHT9 C++ innehåller tre medlemmar som endast används av spotlights. Dessa medlemmar – Falloff, Theta och Phi – styr hur stora eller små ett spotlight-objekts inre och yttre koner är och hur ljuset minskar mellan dem.

Theta-värdet är radianvinkeln för spotlightens inre kon, och Phi-värdet är vinkeln för den yttre konen av ljus. Falloff-värdet styr hur ljusintensiteten minskar mellan den inre konens yttre kant och den yttre konens inre kant. De flesta program ställer in Falloff på 1.0 för att skapa en minskning som sker jämnt mellan de två konerna, men du kan ange andra värden efter behov.

Följande bild visar relationen mellan värdena för dessa medlemmar och hur de kan påverka en spotlights inre och yttre ljuskoner.

bild av hur phi- och theta-värdena relaterar till spotlight-konerna

Spotlights avger en kon av ljus som har två delar: en ljus inre kon och en yttre kon. Ljuset är ljusast i den inre konen och finns inte utanför den yttre konen, med ljusintensitet som dämpar mellan de två områdena. Den här typen av dämpning kallas ofta för falloff.

Mängden ljus som ett hörn tar emot baseras på hörnens plats i de inre eller yttre konerna. Direct3D beräknar punktprodukten för strålkastarljusets riktningsvektor (L) och vektorn från ljuset till hörnet (D). Det här värdet är lika med vinkelns cosiné mellan de två vektorerna och fungerar som en indikator på hörnens position som kan jämföras med ljusets konvinklar för att avgöra var brytpunkten kan ligga i de inre eller yttre konerna. Följande bild ger en grafisk representation av associationen mellan dessa två vektorer.

bild av strålkastarriktningens vektor och vektorn från brytpunkten till spotlight-

Systemet jämför det här värdet med cosininen för spotlightens inre och yttre konvinklar. I ljusets D3DLIGHT9 struktur representerar Theta- och Phi-medlemmarna de totala konvinklarna för de inre och yttre konerna. Eftersom attenuationen inträffar när brytpunkten blir mer avlägsen från mitten av belysningen (snarare än över den totala konvinkeln), delar körningen dessa konvinklar i hälften innan de beräknar sina cosines.

Om punktprodukten av vektorerna L och D är mindre än eller lika med cosininen i den yttre konvinkeln ligger hörnen bortom den yttre konen och får inget ljus. Om punktprodukten av L och D är större än cosinusen i den inre konvinkeln, är brytpunkten inom den inre konen och får den maximala mängden ljus, som fortfarande överväger att dämpa över avståndet. Om hörnen finns någonstans mellan de två regionerna beräknas falloff med följande ekvation.

formel för ljusintensitet vid hörn, efter falloff

Var:

  • Jag f är lätt intensitet efter falloff
  • Alfa är vinkeln mellan vektorerna L och D
  • Theta är den inre konvinkeln
  • Phi är den yttre konvinkeln
  • p är falloff

Den här formeln genererar ett värde mellan 0,0 och 1,0 som skalar ljusets intensitet vid brytpunkten för att ta hänsyn till falloff. Attenuation som en faktor av brytpunktens avstånd från ljuset tillämpas också. Följande diagram visar hur olika falloff-värden kan påverka falloff-kurvan.

graf med ljusintensitet jämfört med hörnavståndet från ljuset

Effekten av olika falloff-värden på den faktiska belysningen är subtil, och en liten prestandastraff uppstår genom att forma falloff-kurvan med andra falloff-värden än 1,0. Därför är det här värdet vanligtvis inställt på 1,0.

ljus och material