Koji su najbolji savjeti za OpenGL® rasvjetu?

OpenGL® rasvjeta je jedan od najsloženijih, a ponekad i najmanje razumljivih aspekata trodimenzionalnog (3D) programiranja računalne grafike. Može se koristiti za dodavanje potrebnih, realističnih završnih detalja renderiranoj sceni, ali također može biti računski zahtjevan i na kraju zbunjujući kada se efekti ne postižu lako. Određeni elementi, kao što je definiranje površinskih normala, mogu se lako razumjeti, dok bi drugi dijelovi modela rasvjete, kao što je podjela različitih tipova svjetla, mogli zahtijevati više proučavanja da bi se potpuno shvatili. Kod rada s OpenGL® rasvjetom obično su prisutna dva problema: brzina renderiranja i kvaliteta. Postoje neki savjeti koji mogu pomoći u postizanju prihvatljivog omjera i jednog i drugog, ali u konačnici će se morati napraviti kompromis između kvalitete i brzine.

Jedan problem s kojim se često susrećete, posebno za one koji su novi u OpenGL® rasvjeti, jest da svaki vrh u sceni mora imati definiranu normalu površine. Bez normalnih vrijednosti, renderer će umjesto toga koristiti jednu konstantu, učinkovito uzrokujući da sve u sceni izgleda ravno i nezasjenjeno. Jedan trik pri definiranju normala je korištenje vrijednosti koje nisu okomite na površinu, već su okrenute u drugom smjeru. To će promijeniti način na koji se svjetlost prikazuje na površini i može se koristiti za jednostavno stvaranje buke ili kamenih tekstura, proces poznat kao mapiranje neravnina.

Da biste dobili dobre i potencijalno jedinstvene efekte u sceni korištenjem OpenGL® rasvjete, potrebno je u potpunosti razumjeti što podrazumijevaju ambijentalni, spekularni, difuzni i emitirajući izvori svjetlosti. Scena puna magle može se učiniti realističnijom uz visoku, sivu ambijentalnu vrijednost. Slično, specijalni efekti kao što su vatra ili izložena svjetla mogu se izvesti pomoću materijala koji emitiraju i izvora svjetlosti. Slojevitost i kombinacija četiriju osnovnih modela ono su što scenu može učiniti realističnijom.

Važno je razumjeti da OpenGL® osvjetljenje zahtijeva veliku količinu procesorske snage za svaki renderirani okvir. To znači da optimizacija scene može pomoći u postizanju boljeg broja kadrova. Neke stvari koje mogu smanjiti vrijeme renderiranja su korištenje što manje izvora svjetlosti, minimiziranje količine osvijetljenih površina i izbjegavanje algoritama ili proširenja koji obrađuju konačni framebuffer više puta. Pomicanje rasvjete u sceni također može imati štetne učinke na performanse i treba ga izbjegavati kada brzina renderiranja postaje problematična.

Posljednji savjet o korištenju OpenGL® rasvjete je znati kada ne koristiti OpenGL® rasvjetu. Može biti lako razmišljati o postavljanju objekata i svjetla koje emitiraju u scenu na svakoj točki gdje bi se netko nalazio u stvarnosti, ali to može brzo postati nepraktično. Umjesto toga, mnogi se trikovi s rasvjetom mogu izvesti kroz iluzije koristeći dobro izrađene slike teksture koje imaju već nacrtanu rasvjetu na površini. Na isti način, uređenje geometrije scene ponekad može eliminirati potrebu za više izvora svjetlosti prikrivanjem nekih problematičnih područja ili dopuštajući da jedan izvor unutar šupljeg složenog objekta zasja kroz više planiranih otvora.