Delen via


Lichten en materialen (Direct3D 9)

Lichten worden gebruikt om objecten in een scène te verlichten. Wanneer verlichting is ingeschakeld, berekent Direct3D de kleur van elk objectpunt op basis van een combinatie van:

Notitie

Deze sectie is alleen bedoeld voor de pijplijn met vaste functies. Programmeerbare shaders voeren alle belichting expliciet uit.

 

  • De huidige materiaalkleur en de texelen op een bijbehorende textuurkaart.
  • De diffuse en speculaire kleuren op het hoekpunt, indien opgegeven.
  • De kleur en intensiteit van licht geproduceerd door lichtbronnen in de scène of het omgevingslichtniveau van de scène.

Wanneer u Direct3D-verlichting en -materialen gebruikt, kunt u Direct3D de details van verlichting voor u afhandelen. Geavanceerde gebruikers kunnen desgewenst zelf verlichting uitvoeren.

Hoe u met verlichting en materialen werkt, maakt een groot verschil in het uiterlijk van de gerenderde scène. Materialen bepalen hoe licht uit een oppervlak weerspiegelt. Directe licht- en omgevingslichtniveaus bepalen het licht dat wordt weerspiegeld. U moet materialen gebruiken om een scène weer te geven als verlichting is ingeschakeld. Lichten zijn niet vereist om een scène weer te geven, maar details in een scène die zonder licht wordt weergegeven, zijn niet zichtbaar. Het weergeven van een onbelichte scène resulteert in een silhouet van de objecten in de scène. Dit is niet voldoende detail voor de meeste doeleinden.

Direct Light versus Ambient Light

Hoewel zowel directe als omgevingslicht objecten in een scène verlichten, zijn ze onafhankelijk van elkaar, ze hebben zeer verschillende effecten en ze vereisen dat u er op totaal verschillende manieren mee werkt.

Direct licht is alleen dat: direct. Direct licht heeft altijd richting en kleur en het is een factor voor arceringsalgoritmen, zoals Gouraud-arcering. Verschillende soorten lichten geven op verschillende manieren direct licht uit, waardoor speciale vertenuatie-effecten ontstaan. U maakt een set lichtparameters voor direct licht door de methode IDirect3DDevice9::SetLight aan te roepen.

Omgevingslicht is overal in een scène effectief. U kunt het beschouwen als een algemeen lichtniveau dat een hele scène vult, ongeacht de objecten en hun locaties in die scène. Omgevingslicht heeft geen positie of richting, alleen kleur en intensiteit. Elk licht wordt toegevoegd aan het algemene omgevingslicht in een scène. Stel het omgevingslichtniveau in met een aanroep naar de methode IDirect3DDevice9::SetRenderState, waarbij D3DRS_AMBIENT wordt opgegeven als de parameter State en de gewenste RGBA-kleur als waardeparameter.

Omgevingslichtkleur heeft de vorm van een RGBA-waarde, waarbij elk onderdeel een geheel getal is van 0 tot 255. Dit is in tegenstelling tot de meeste kleurwaarden in Direct3D.

U kunt de D3DCOLOR_RGBA macro gebruiken om RGBA-waarden te genereren. De rode, groene en blauwe componenten combineren om de uiteindelijke kleur van het omgevingslicht te maken. Het alfa-onderdeel bepaalt de transparantie van de kleur. Wanneer u hardwareversnelling of RGB-emulatie gebruikt, wordt het alfaonderdeel genegeerd.

Direct3D Light Model versus Nature

In de natuur, wanneer licht uit een bron wordt uitgezonden, wordt het weerspiegeld van honderden, zo niet duizenden of miljoenen objecten voordat het oog van de gebruiker wordt bereikt. Telkens wanneer het wordt weerspiegeld, wordt een licht geabsorbeerd door een oppervlak, sommige wordt verspreid in willekeurige richtingen en de rest gaat naar een ander oppervlak of naar het oog van de gebruiker. Dit proces gaat door totdat het licht wordt teruggebracht tot niets of een gebruiker het licht waarneemt.

Uiteraard zijn de berekeningen die nodig zijn om het natuurlijke gedrag van licht perfect te simuleren, te tijdrovend om te gebruiken voor realtime Direct3D-afbeeldingen. Daarom, met snelheid in gedachten, het Direct3D-lichtmodel benadert de manier waarop licht in de natuurlijke wereld werkt. Direct3D beschrijft licht in termen van rode, groene en blauwe componenten die combineren om een uiteindelijke kleur te creëren.

Wanneer in Direct3D licht een oppervlak weerspiegelt, communiceert de lichte kleur wiskundig met het oppervlak zelf om de kleur te creëren die uiteindelijk op het scherm wordt weergegeven. Zie Wiskunde van Verlichting (Direct3D 9)voor specifieke informatie over de algoritmen die Direct3D gebruikt.

Het Direct3D-lichtmodel generaliseert licht in twee typen: omgevingslicht en direct licht. Elk heeft verschillende kenmerken en elk werkt op verschillende manieren met het materiaal van een oppervlak. Omgevingslicht is licht dat zo verspreid is dat zijn richting en bron onbepaald zijn: het behoudt overal een laag intensiteitsniveau. De indirecte verlichting die door fotografen wordt gebruikt, is een goed voorbeeld van omgevingslicht. Omgevingslicht in Direct3D, zoals in de natuur, heeft geen echte richting of bron, alleen een kleur en intensiteit. In feite is het omgevingslichtniveau volledig onafhankelijk van objecten in een scène die licht genereren. Omgevingslicht draagt niet bij aan speculatieve reflectie.

Direct licht is het licht dat door een bron binnen een scène wordt gegenereerd; het heeft altijd kleur en intensiteit en het reist in een opgegeven richting. Direct licht communiceert met het materiaal van een oppervlak om speculaire hoogtepunten te creëren, en de richting ervan wordt gebruikt als factor in arceringsalgoritmen, waaronder Gouraud-arcering. Wanneer direct licht wordt weerspiegeld, draagt het niet bij aan het omgevingslichtniveau in een scène. De bronnen in een scène die direct licht genereren, hebben verschillende kenmerken die van invloed zijn op hoe ze een scène verlichten.

Daarnaast heeft het materiaal van een veelhoek eigenschappen die van invloed zijn op hoe die veelhoek het licht weerspiegelt dat het ontvangt. U stelt één reflectantie-eigenschap in die beschrijft hoe het materiaal omgevingslicht weerspiegelt en u stelt afzonderlijke eigenschappen in om de speculatieve en diffuse reflectie van het materiaal te bepalen. Zie Materialen (Direct3D 9)voor meer informatie.

Kleurwaarden voor lichten en materialen

Direct3D beschrijft kleur in termen van vier componenten rood, groen, blauw en alfa-die een uiteindelijke kleur maken. De D3DCOLORVALUE C++-structuur wordt gedefinieerd om waarden voor elk onderdeel te bevatten. Elk lid is een drijvende-kommawaarde die doorgaans varieert van 0,0 tot 1,0, inclusief. Hoewel zowel lichten als materialen dezelfde structuur gebruiken om kleur te beschrijven, worden de waarden in de structuur een beetje anders gebruikt.

Kleurwaarden voor lichtbronnen vertegenwoordigen de hoeveelheid van een bepaald lichtonderdeel dat wordt verzonden. Omdat lampen geen alfa-component gebruiken, zijn alleen de rode, groene en blauwe onderdelen van de kleur relevant. U kunt de drie onderdelen visualiseren als de rode, groene en blauwe lenzen op een projectie-televisie. Elke lens is mogelijk uitgeschakeld (een 0,0-waarde in het juiste lid), het kan zo helder mogelijk zijn (een 1,0-waarde) of het kan een bepaald niveau ertussen zijn. De kleuren die door de lenzen komen, combineren om de uiteindelijke kleur van het licht te maken. Een combinatie als R(1.0), G(1.0), B(1.0) creëert een wit licht, waarbij R(0.0), G(0.0), B(0.0) helemaal geen licht uitzendt. U kunt een licht maken dat slechts één onderdeel uitzendt, wat resulteert in een puur rood, groen of blauw licht; of het licht kan combinaties gebruiken om kleuren zoals geel of paars te verzenden. U kunt zelfs negatieve kleurcomponentwaarden instellen om een 'donker licht' te maken waarmee het licht daadwerkelijk uit een scène wordt verwijderd. Of u kunt de onderdelen instellen op een bepaalde waarde die groter is dan 1,0 om een extreem helder licht te creëren.

Met materialen daarentegen vertegenwoordigen kleurwaarden hoeveel van een lichtonderdeel wordt weerspiegeld door een oppervlak dat met dat materiaal wordt weergegeven. Een materiaal waarvan de kleurcomponenten R(1.0), G(1.0), B(1.0), A(1.0) zijn, weerspiegelt al het licht dat op zijn weg komt. Op dezelfde manier weerspiegelt een materiaal met R(0.0), G(1.0), B(0.0), A(1.0) al het groene licht dat erop wordt gericht. Materialen hebben meerdere reflectantiewaarden om verschillende soorten effecten te maken.

Aanvullende informatie is opgenomen in: Lichttypen (Direct3D 9)en Lichteigenschappen (Direct3D 9).

Aan de slag