Schaduw volume

Schaduw volume is een techniek die gebruikt wordt in 3D computer graphics om schaduwen toe te voegen aan een gerenderde scene. Ze werden eerst door Frank Crow voorgesteld in 1977 de geometrie waarin de 3D vorm van het gebied ingesloten door een lichtbron. Een schaduw volume verdeelt de virtuele wereld in twee: gebieden die in de schaduw en gebieden die niet.

De stencil buffer implementatie van shadow volumes wordt algemeen beschouwd als een van de meest praktische algemene real-time shadowing technieken voor gebruik op moderne 3D grafische hardware. Het is gepopulariseerd door de video game Doom 3, en een bijzondere variant van de techniek die gebruikt wordt in dit spel is bekend als Carmack's Reverse geworden.

Schaduw volumes zijn uitgegroeid tot een populaire tool voor real-time schaduwen, naast de meer eerbiedwaardige schaduw mapping. Het belangrijkste voordeel van de schaduw volumes is dat zij nauwkeurig met de pixel, terwijl de nauwkeurigheid van een schaduw map afhankelijk van de textuur geheugen toegewezen aan het evenals de hoek waaronder de schaduwen gegoten. Echter, de schaduw volume techniek vereist het creëren van schaduw geometrie, die CPU intensief kan zijn. Het voordeel van de schaduw mapping is dat het vaak sneller, omdat schaduwvolume polygonen vaak zeer groot qua schermruimte en vergen veel vultijd, terwijl schaduwbestanden niet deze beperking.

Bouw

Om een ​​schaduw volume bouwen, project een straal van de lichtbron door elk hoekpunt in de schaduw casting object om een ​​bepaald punt. Deze projecties zullen samen een volume; elk punt binnen dat volume in de schaduw, alles buiten wordt verlicht door het licht.

Voor een polygonale model wordt het volume gewoonlijk gevormd door het classificeren van elk vlak in het model ofwel de richting van de lichtbron of afgekeerd van de lichtbron. De verzameling van alle randen van een richting-face aansluiten op een weg-face vormen het silhouet ten opzichte van de lichtbron. De randen die het silhouet zijn weg geëxtrudeerd uit het licht om de gezichten van de schaduw volume te bouwen. Dit volume moet uitstrekken over het bereik van de gehele zichtbare tafereel; vaak de afmetingen van de schaduw volume worden uitgebreid tot oneindig om dit te bereiken om een ​​gesloten volume vormen, moet de voor- en achterkant van de extrusie bedekt. Deze bekledingen worden "caps". Afhankelijk van de methode voor de schaduw volume, kan het vooreinde worden door het object zelf, en het achtereinde soms worden weggelaten.

Er is ook een probleem met de schaduw waar de vlakken langs het silhouet rand relatief ondiep. In dit geval is de schaduw van een object werpt zichzelf scherp zullen zijn, openbaren de veelhoekige vlakken, terwijl de gebruikelijke verlichtingsmodel een geleidelijke verandering in de belichting langs de facet zal hebben. Dit laat een ruw schaduw artefact nabij het silhouet rand die moeilijk te corrigeren. Het verhogen van de veelhoekige dichtheid zal het probleem minimaliseren, maar niet elimineren. Als de voorzijde van de schaduw volume wordt afgedekt, kan de gehele schaduw volume iets weg van het licht worden gecompenseerd om een ​​schaduw-zelf-kruisingen binnen de offset afstand van het silhouet rand te verwijderen.

De basisstappen voor het vormen van een schaduw volume zijn:

  • Vind alle silhouetranden
  • Verleng alle silhouet randen in de richting van de lichtbron
  • Voeg een front-cap en / of back-cap aan elk oppervlak een gesloten volume te vormen

Stencilbuffer implementaties

Na Crow, Tim Heidmann toonde in 1991 hoe de stencil buffer gebruiken om schaduwen met schaduw volumes snel genoeg voor gebruik in real-time toepassingen maken. Er zijn drie gangbare varianten deze techniek diepte pas, diepte mislukken en exclusieve-of, maar ze gebruiken hetzelfde proces:

  • Render de scène alsof het volledig in de schaduw.
  • Voor elke lichtbron:
    • Met behulp van de diepte-informatie van die scène, de bouw van een masker in de stencil buffer die gaten enkel wanneer de zichtbare oppervlak is niet in de schaduw heeft.
    • Render de scène weer alsof het volledig verlicht waren, met behulp van de stencil buffer om de beschaduwde gebieden maskeren. Gebruik additief mengen toe te voegen deze verlenen aan de scène.

Het verschil tussen deze drie methoden optreedt bij het genereren van het masker in de tweede stap. Sommige betrekken twee passes, en sommige slechts één; sommige vereisen minder precisie bij het stencilbuffer.

Shadow volumes neiging om grote delen van het zichtbare tafereel bedekken, en als gevolg verbruiken kostbare rasteren time 3D graphics hardware. Dit probleem wordt verergerd door de complexiteit van de schaduw gieten objecten, zoals elk object zijn eigen schaduw volume van alle potentiële omvang scherm kan uitbrengen. Zie optimalisatie hieronder besproken technieken om de vultijd te bestrijden.

Diepte pas

Heidmann voorgesteld dat als de voorvlakken en achterkant van de schaduwen werden gesmolten in aparte doorgangen, het aantal voorvlakken en achtervlakken voor een object kunnen worden geteld met behulp van de stencil buffer. Als het oppervlak van een object in de schaduw, zal er meer voorkant schaduw vlakken tussen haar en de ogen dan weer geconfronteerd met schaduw oppervlakken. Als de getallen gelijk, echter het oppervlak van het object niet in de schaduw. Het genereren van het sjabloonmasker werkt als volgt:

  • Uitschakelen schrijft de diepte en kleur buffers.
  • Gebruik back-face culling.
  • Stel het stencil operatie op te hogen op diepte pass.
  • Maken de schaduw volumes.
  • Gebruik voorzijde gezicht doden.
  • Stel het stencil operatie te verlagen op diepte pass.
  • Maken de schaduw volumes.

Hierna wordt bewerkstelligd, worden alle verlichte vlakken corresponderen met een 0 in het stencilbuffer, waarbij het aantal voor- en achterkant van schaduw volumes tussen het oog en dat oppervlak gelijk.

Deze aanpak heeft problemen bij het oog zelf is in een schaduwvolume. Vanuit dit oogpunt, het oog ziet de achterzijde van dit volume schaduw voordat er iets anders, en dit voegt een -1 voorkeur voor het hele stencil buffer, effectief het omkeren van de schaduwen. Dit kan worden verholpen door toevoeging van een "cap" tot aan de voorkant van de schaduw volume tegenover het oog, zoals aan de voorzijde snedevlak. Er is een andere situatie waar het oog kan de schaduw van een volume gegoten door een object achter de camera, die ook op andere manier worden afgedekt met een soortgelijk probleem te voorkomen. In de meest voorkomende implementaties, omdat de juiste aftopping voor diepte-pas kan moeilijk zijn te bereiken, kan de diepte-fail methode licentie voor deze speciale situaties. Als alternatief kan men geven de stencil buffer een 1 vooringenomenheid voor elke schaduw volume van de camera is binnen, maar het doen van de opsporing kan vertragen.

Er is een potentieel probleem als het stencilbuffer niet genoeg bits naar aantal schaduwen zichtbaar tussen het oog en het object oppervlak geschikt, omdat het gebruik maakt verzadiging rekenkunde.

Depth pas test is ook bekend als z-pas testen als de diepte buffer wordt vaak aangeduid als de z-buffer.

Diepte fail

Rond het jaar 2000, een aantal mensen ontdekt dat methode Heidmann's kunnen worden gemaakt voor alle camera-posities aan het werk door het omkeren van de diepte. In plaats van het tellen van de schaduw vlakken tegenover oppervlak van het object, kan de oppervlakken achter evengoed worden geteld, met hetzelfde resultaat. Dit lost het probleem van het oog die in de schaduw, want schaduw volumes tussen de ogen en het object niet geteld, maar introduceert de voorwaarde dat de achterkant van de schaduw volume moet worden afgedekt, of schaduwen zullen gaan missen, waar het volume punten achteruit tot in het oneindige.

  • Uitschakelen schrijft de diepte en kleur buffers.
  • Gebruik voorzijde gezicht doden.
  • Stel het stencil operatie op te hogen op diepte falen.
  • Maken de schaduw volumes.
  • Gebruik back-face culling.
  • Stel het stencil operatie te verlagen op diepte falen.
  • Maken de schaduw volumes.

De diepte mislukken methode heeft dezelfde overwegingen met betrekking tot de precisie van de stencil buffer als de diepte pas methode. Ook, vergelijkbaar met diepte pass, wordt soms aangeduid als de z-methode falen.

William Bilodeau en Michael Songy ontdekte deze techniek in oktober 1998, en presenteerde de techniek op Creativiteit, conferentie een Creative Labs ontwikkelaar, in 1999. Sim Dietrich gepresenteerd deze techniek aan beide GDC maart 1999, en op creativiteit in eind 1999. Een paar maanden later, William Bilodeau en Michael Songy diende een Amerikaanse octrooiaanvraag voor de techniek die het zelfde jaar, US 6384822, getiteld "Methode voor het renderen van schaduwen met een schaduw volume en een stencil buffer" uitgegeven in 2002. John Carmack van id Software onafhankelijk ontdekt het algoritme in 2000 tijdens de ontwikkeling van Doom 3. Aangezien hij geadverteerd de techniek om het grote publiek, wordt het vaak aangeduid als Carmack's Reverse.

Exclusieve-of

Één van de bovengenoemde soorten kunnen worden benaderd met een exclusieve-of variatie, die niet goed doet omgaan met kruisende schaduw volumes, maar bespaart een rendering pas, en vereist slechts een 1-bit stencil buffer. De volgende stappen zijn voor de diepte pas versie:

  • Uitschakelen schrijft de diepte en kleur buffers.
  • Stel het stencil operatie XOR op diepte pass.
  • Maken de schaduw volumes.

Optimalisatie

  • Een werkwijze voor versnelde schaduwvolume geometrische berekeningen bestaande delen van de rendering pipeline gebruiken om een ​​deel van de berekening uit te voeren. Bijvoorbeeld met homogene coördinaten, de w-coördinaat kan worden ingesteld op nul op het punt naar oneindig verlengen. Dit moet gepaard gaan met het bekijken van een afgeknotte dat een veel knippen vliegtuig dat zich uitstrekt tot in het oneindige om deze punten, tot stand gebracht met behulp van een gespecialiseerde projectie matrix geschikt is. Deze techniek vermindert de nauwkeurigheid van de diepte buffer enigszins, maar het verschil is meestal verwaarloosbaar. Zie 2.002 papier Praktisch en robuust Stenciled Shadow volumes voor hardware-versnelde Rendering, C. Everitt en M. Kilgard, voor een gedetailleerde implementatie.
  • Rastering moment van de schaduw volumes kan worden verminderd door toepassing van een in hardware scissor test om de schaduw tot een specifiek scherm rechthoek beperken.
  • NVIDIA heeft een hardware vermogen genaamd de diepte grenzen test die is ontworpen om delen van de schaduw volumes die geen invloed hebben op de zichtbare scène verwijderen geïmplementeerd. Een bespreking van deze mogelijkheid en het gebruik ervan met schaduw volumes werd gepresenteerd op de Game Developers Conference in 2005.
  • Aangezien de diepte-methode biedt niet alleen een voordeel ten opzichte diepte pas in het speciale geval waar het oog binnen een schaduwvolume het de voorkeur om te controleren dat geval en gebruik diepte door waar mogelijk. Dit vermijdt zowel de onnodige back-capping gevallen waarin diepte niet overbodig, evenals het probleem van passende front-afsluitingen voor speciale gevallen van diepte door.
  • Op meer recente GPU pijpleidingen, kan de geometrie shaders worden gebruikt om de schaduw volumes genereren.
(0)
(0)
Commentaren - 0
Geen commentaar

Voeg een reactie

smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile
Tekens over: 3000
captcha