Vilka är de bästa tipsen för OpenGL®-belysning?

OpenGL®-belysning är en av de mest komplexa, och ibland minst förstådda, aspekterna av tredimensionell (3D) datorgrafikprogrammering. Den kan användas för att lägga till de nödvändiga, realistiska finesserna till en renderad scen, men den kan också vara beräkningskrävande och i slutändan förvirrande när effekter inte lätt uppnås. Vissa element, som att definiera ytnormaler, kan lätt förstås medan andra delar av belysningsmodellen, såsom uppdelningen av de olika ljustyperna, kan kräva mer studier för att helt förstå. Två bekymmer är vanligtvis närvarande när man arbetar med OpenGL®-belysning: renderingshastighet och kvalitet. Det finns några tips som kan hjälpa till att uppnå en acceptabel andel av båda, men avvägningar mellan kvalitet och hastighet kommer i slutändan att behöva göras.

Ett problem som man ofta stöter på, särskilt för de som är nya inom OpenGL®-belysning, är att varje hörn i en scen måste ha sin yta normaldefinierad. Utan normalerna kommer renderaren istället att använda en enda konstant, vilket effektivt får allt i en scen att se platt och oskuggat ut. Ett knep när man definierar normaler är att använda värden som inte är vinkelräta mot ytan utan istället vänder sig åt en annan riktning. Detta kommer att förändra hur ljuset återges på ytan och kan användas för att enkelt skapa brus eller steniga texturer, en process som kallas bumpmapping.

För att få bra, och potentiellt unika, effekter i en scen med OpenGL®-belysning är det nödvändigt att helt förstå vad omgivande, spegelbildande, diffusa och emitterande ljuskällor innebär. En scen full av dimma kan fås att se mer realistisk ut med ett högt, grått omgivningsvärde. På samma sätt kan specialeffekter som brand eller exponerade ljus göras med emitterande material och ljuskällor. Lagringen och kombinationen av de fyra grundmodellerna är det som kan få en scen att framstå som mer realistisk.

Det är viktigt att förstå att OpenGL®-belysning kräver en stor mängd processorkraft för varje renderad ram. Detta innebär att optimering av en scen kan hjälpa till att uppnå en bättre bildhastighet. Några saker som kan minska renderingstiden är att använda så få ljuskällor som möjligt, minimera mängden ytor som belyses och undvika algoritmer eller tillägg som bearbetar den slutliga bildbufferten flera gånger. Att flytta belysningen i en scen kan också ha vissa skadliga effekter på prestandan och bör undvikas när renderingshastigheten blir problematisk.

Ett sista tips om att använda OpenGL®-belysning är att veta när du inte ska använda OpenGL®-belysning. Det kan vara lätt att tänka sig att placera emitterande föremål och ljus i en scen vid varje punkt där man skulle vara i verkligheten, men det kan snabbt bli opraktiskt. Istället kan många ljusknep göras genom illusioner med hjälp av välgjorda texturbilder som har belysningen redan ritad på ytan. På samma sätt kan geometrin hos en scen ibland eliminera behovet av flera ljuskällor genom att dölja några problemområden eller genom att låta en enda källa inuti ett ihåligt sammansatt föremål lysa ut genom flera planerade öppningar.