Kas yra OpenGL® šešėlis?

„Open Graphics Library®“ (OpenGL®) šešėlis yra vizualinis apytikslis vaizdas trimatėje (3D) OpenGL® scenoje, kaip šešėlis būtų metamas realiame gyvenime panašiomis apšvietimo sąlygomis. Šešėliai yra sudėtinga vaizdinė funkcija, kurią reikia įdiegti „OpenGL®“, daugiausia todėl, kad scenoje nėra įgimto šešėlių metimo palaikymo. Vietoj to, yra įvairių metodų, kuriuos galima naudoti kuriant šešėlius iš objektų ir geometrijos scenoje naudojant įvairius įrankius, tokius kaip įvairūs galimi buferiai, šešėliai ir kai kuriais atvejais plėtiniai, suteikiantys prieigą prie specialių tam tikros grafikos funkcijų. kortelės. Daugeliu atvejų „OpenGL®“ šešėlių atvaizdavimo kokybė, tikslumas ir greitis yra tiesiogiai susiję su kompiuteryje ar įrenginyje esančios grafinės įrangos apdorojimo galia ir atmintimi. Kai kurie iš populiaresnių OpenGL® šešėlių diegimo metodų apima šešėlių tūrį, šešėlių atvaizdavimą ir spindulių sekimą.

Norint sukurti programą, kuri palaiko OpenGL® šešėlinį palaikymą, reikia matematinių žinių ir gilaus supratimo, kaip veikia OpenGL®. „OpenGL®“ dažniausiai naudojamas kuriant dinamiškas ir realiu laiku atvaizduojamas 3D scenas, todėl algoritmai, naudojami šešėliams kurti, turi būti ne tik optimizuoti greičiui, bet ir turi būti kruopščiai išmatuoti, atsižvelgiant į jų išteklių suvartojimą ir galimus trikdžius. gali atsirasti dėl grafikos konvejerio, naudojamo atvaizdavimui. Dėl šių priežasčių paprasčiausias šešėlio kūrimo būdas, vadinamas spindulių sekimu, dažnai yra nepraktiškas pilnoms 3D scenoms, nes tai gali užtrukti labai ilgai.

Spindulių sekimas iš esmės seka įsivaizduojamą liniją arba spindulį nuo žiūrėjimo plokštumos arba fotoaparato padėties per sceną iki objekto paviršiaus, o tada apskaičiuoja paviršiaus spalvą pagal vieno ar kelių šviesos šaltinių padėtį ir kitus veiksnius. Rasterizacijos proceso metu, kai 3D scena piešiama į dvimatį (2D) paviršių, kad ją būtų galima atvaizduoti, spindulių sekimo procesas turi būti atliktas kiekviename piešiame pikselyje ir ypač naudojant tekstūras ar kt. paviršiaus savybes, gali tekti kelis kartus įvertinti tuos pačius pikselius. Tai reiškia, kad spindulių sekimas realiuoju laiku, nors jis tiksliai atvaizduotų šešėlius, paprastai nėra praktiškas.

Kitas metodas, kurį galima naudoti kuriant OpenGL® šešėlį, yra žinomas kaip šešėlių atvaizdavimas. Šis metodas naudoja gylį arba trafaretinį buferį, kad vaizdas būtų atvaizduojamas šviesos šaltinio kampu kaip atstumų nuo šviesos šaltinio iki skirtingų scenoje objektų paviršių seka. Tada scena antrą kartą atvaizduojama teisingu žiūrėjimo kampu, tikrinant, ar kiekvienas pikselis patenka į tam tikrą buferio atstumo diapazoną, nurodant, ar pikselis yra apšviestas, ar šešėlis. Naudojant šešėlių sudarymą, gali prireikti atminties, o scenose, kuriose yra daugiau nei vienas šviesos šaltinis, gali prireikti sudaryti kelis žemėlapius iš kelių kampų.

Šešėlių tūriai yra būdas sukurti OpenGL® šešėlį, kuris yra tikslesnis nei kai kurie kiti metodai, tačiau jis kelia savo problemų. Šešėlio tūris iš esmės yra nematoma geometrijos dalis scenoje, kuri plečiasi nuo apšviesto objekto paviršiaus toliau nuo šviesos šaltinio. Šį tūrį galima palyginti su kitais objektais, kad pamatytumėte, ar jie nepatenka į paviršiaus, nuo kurio atsirado tūris, šešėlį. Ši procedūra gali būti labai sudėtinga ir galiausiai sukuria vaizdinius artefaktus, kai optimizuojama greičiui.