Každý model 3D objektu (například nějaké postavy nebo monstra) ve scéně má svou vlastní nezávislou soustavu souřadnic, které se říká prostor modelu (model space) nebo také lokální prostor (local space). Vlastní soustavu souřadnic má i samotná scéna – tato soustava je označována jako prostor scény (scene space) nebo prostor světa (world space). Jedním z kroků, které je třeba během tvorby výsledného obrazu učinit, je transformace všech nezávislých souřadných soustav, které se ve scéně vyskytují, na jedinou soustavu vztahující se k zornému bodu: na prostor pozorovatele (view space). Pro tuto transformaci se používají maticové operace (pokud si ještě ze střední školy vzpomenete, o co jde :-).
Podobný proces transformace souřadných soustav vyžaduje i nasvícení (lighting) scény. Existuje mnoho typů zdrojů světla, od těch, co vyzařují do všech směrů až po zdroje osvětlující jen malé plochy (baterky atd.), a každý z nich vyžaduje jiný způsob matematického zpracování.
Prvním krokem renderování 3D obrazu je zpracování geometrie, jehož hlavní součástí jsou transformační a osvětlovací výpočty (T&L). Pokud nemáte ve svém počítači grafickou kartu s čipem, který umí tyto výpočty provádět (např. GeForce2 nebo Radeon), musí je vykonávat procesor (CPU). Mohou-li být tyto nezáživné kalkulace přenechány čipu grafické karty, má CPU „volné ruce“ a může se věnovat například výpočtům souvisejícím s modelováním fyzikálních vlastností objektů (pohyb, kolize, deformace atd.) a algoritmy umělé inteligence.
Konverze trojrozměrného obrazu na dvojrozměrnýJakmile máme k dispozici výslednou množinu souřadnic vrcholů v 3D prostoru, můžeme přistoupit ke konverzi těchto souřadnic do prostoru obrazovky (screen space). Pro zobrazení na monitoru potřebujeme znát jednak souřadnice x a y těchto vrcholů v souřadné soustavě obrazovky a jednak hodnotu, která udává vzdálenost vrcholů od zorného bodu. Převod mezi souřadnicemi prostoru pozorovatele a prostoru obrazovky je poměrně jednoduchý a provádí ho všechny současné 3D karty bez účasti CPU. Vyřazování a ořezávání polygonů
Během výše uvedených geometrických a konverzních výpočtů se mj. ukazuje, které polygony nebudou ve viditelném výřezu (viewport) vidět. Tyto polygony je samozřejmě vhodné co nejdříve vyloučit z dalších výpočtů, aby se neprováděla zbytečná práce. Tomuto procesu se říká vyřazování (culling). I samotná aplikace může o některých prvcích ze scénové databáze vědět, že nebudou z daného zorného bodu vidět, a vyřadit je sama – tomuto se pak říká databázové vyřazování. Nachází-li se například zorný bod v jedné uzavřené místnosti domu, je možné z výpočtů okamžitě vyloučit objekty nacházející se v jiných místnostech.
Všechny polygony, které se nacházejí částečně ve výřezu a částečně mimo něj, musejí být při konverzi příslušně oříznuty (clipping), aby se negenerovaly souřadnice mimo rozsah podporovaný zobrazovacím zařízením.
Hloubkové tříděníVyřazováním a ořezáváním se však ještě se všemi neviditelnými polygony nevypořádáme – některé se totiž stanou neviditelnými proto, že je překryjí objekty nacházející se blíže k zornému bodu. Asi nejjednodušším způsobem, jak při vykreslování zohlednit hloubku, je vykreslovat všechny objekty postupně od nejvzdálenějšího až po nejbližší, takže bližší objekty překryjí ty vzdálenější. Tento algoritmus však vyžaduje, aby byly před renderováním všechny polygony hloubkově setříděny, což klade zvýšené nároky na výpočetní i paměťovou kapacitu; mimoto musí být vykresleny všechny polygony bez ohledu na to, zda budou v konečném důsledku viditelné. Další nevýhodou je, že takto nelze řešit případy polygonů, které se protínají – ani jeden z nich totiž není zcela před tím druhým (viz obrázek).
Dnešní renderovací enginy obvykle použijí informaci o vzdálenosti, kterou jim předá konverzní engine, aby zjistily, zda se aktuální pixel na aktuálním polygonu nachází před nebo za posledním polygonem vykresleném na dané pozici. Pro každý pixel se ukládá jeho vzdálenost od posledního polygonu do zvláštního pole tzv. Z hodnot – toto pole se nazývá Z buffer nebo hloubkový buffer (depth buffer), je dvojrozměrné a jeho velikost odpovídá grafickému rozlišení obrazovky. Počet překrývajících se polygonů ve scéně se nazývá hloubková složitost (depth complexity).
Zdroj: MicroDesign Resources