Vad är självskuggning?

”Självskuggning” är en term som beskriver den omständighet då en del av ett föremål kastar en skugga på sig själv. Exempel på självskuggning är skuggan som kastas av en mänsklig näsa i ansiktet eller överläppen när ljuskällan kommer från ovan, eller skuggan som kastas av en stol på stolens ben. När termen används i datorgrafik – speciellt datorgrafikprogrammering – är det en referens till skuggor som kastas av en scens tredimensionella (3D) objekt på sig själva, eller skuggor som kastas av dynamiska objekt på dem själva och objekt runt dem. . Naturen hos programmering av 3D-datorgrafik i realtid gör att många applikationer använder tekniker som ofta tar bort möjligheten att rendera självskuggor till förmån för andra optimeringar, även om, när hastigheten och kapaciteten hos datorer ökar, metoder för självskuggning i realtid har blivit mer tillgängliga. Det finns flera metoder för att rendera självskuggande objekt i realtid, men hårdvarubegränsningar ger vanligtvis resultat som har vissa nackdelar, såsom felaktiga skuggor, skuggor med konstgjorda hårda kanter eller scener som renderas mycket långsamt på grafikkort som inte är otroligt snabba. .

En skillnad att göra när man talar om självskuggning är skillnaden mellan statiska och dynamiska objekt i realtidsgrafik. Statiska objekt är 3D-objekt i en scen som inte rör sig och som inte har någon del av sin geometri förändrad under renderingen. Ett dynamiskt objekt, å andra sidan, är ett objekt som inte är direkt kopplat till scenen på något sätt och kan vara olika från en bildruta till nästa. För det mesta gör de flesta statiska objekt och icke-realtidsscener självskugga, antingen på grund av renderingsmotorn eller på grund av andra grafikknep som kan användas.

Flera optimeringar som används för att rendera 3D-grafik i realtid gör det svårt att implementera dynamisk självskuggning. Några exempel inkluderar en grafikmotor som bara tillämpar ljuseffekter på en statisk bakgrund, ignorerar dynamiska objekt som karaktärer i en scen, eller en motor som bara behandlar objekt som silhuetter, utan medvetenhet om intern geometri. Med ökningen av grafikprocessorer och datorer tillåter nya tekniker att självskuggade objekt visas i en realtidsscen, med vissa begränsningar och kompromisser.

Skuggvolymer är ett sätt som självskuggning kan implementeras i en 3D-scen. Denna metod skapar i huvudsak 3D-objekt som upptar en innesluten volym i en scen där en skugga kastas, vilket gör att renderaren eller skuggaren kan utföra tester på om någon punkt är inom en skuggad volym för att avgöra hur den lyser. Andra metoder skapar skuggkartor, eller ungefärliga skuggor från vertexpositioner, för att skapa mycket diffusa skuggor som inte nödvändigtvis följer en kants trohet.

Nästan alla metoder för självskuggning måste byta ut antingen hastighet eller kvalitet för att få ett acceptabelt resultat. Kvalitetsproblem kan uppstå genom användning av snabba men lågupplösta eller luddiga tekniker som kan få vissa självskuggor att verka fel eller malplacerade. Hastighetsproblem uppstår när de använda algoritmerna kräver för mycket overhead per bildruta eller försöker beräkna skuggprojektioner för exakt. Även om det inte finns någon enskild standardalgoritm för självskuggproducerande, innehåller vissa grafikkort inbyggd acceleration för olika metoder som kan öka hastigheten för vissa tekniker.