Zobrazování prostorových dat

Kurz počítačové grafiky

Autor: Jiří Hnídek / jiri.hnidek@tul.cz

Zobrazení

  • Úkolem je převést 3D data uložená v paměti počítače na 2D rastrový obrázek, který je následně možné zobrazit.
  • Tento proces se nazývá rendering:
    • Real-timové zobrazení (většinou prováděno na grafickém akcelerátoru)
    • Fotorealistické zobrazení

Real-timové zobrazení

  • Používá se v interaktivních aplikacích.
  • Nekladou se tak vysoké požadavky na kvalitu/realističnost zobrazení.
  • Hlavním kritériem je dostatečná rychlost zobrazení.

Zobrazovací řetězec

Orientace podle kamery
Ořezávání pohledovým objemem
Promítání
Transformace do okna obrazovky
Lokální osvětlení
Rasterizace
Mapování textur
Určení viditelnosti pixelů

Alternativní zobrazovací řetězec

Orientace podle kamery
Výběr dat pro zpracování
Ořezávání a promítání
Transformace do okna obrazovky
Rasterizace
Lokální osvětlení
Mapování textur
Určení viditelnosti pixelů

Orientace podle kamery

  • Smyslem této operace je zjednodušit následující operace a to především promítání.
  • Všechny objekty ve scéně se transformují (posunou a otočí), aby kamera ležela v počátku soustavy souřadné a směřovala ve směru osy $-Z$. Orientace ostatních objektů vůči kameře musí zůstat zachována.
  • Tento krok zobrazovacího řetězce spočívá v nalezení transformační matice $T_{cam}$ převádějící bod z WCS (World Coordinate System) do VCS (View Coordinate System) a aplikování této matice na všechny vertexy ve scéně.

Transformační matice - odvození

Definujeme polohu kamery: $K = [k_{x}, k_{y}, K_{z}]$ a bod na který se kamera dívá: $C = [c_{x}, c_{y}, c_{z}]$

Tyto dva body určují směr pozorování: $\vec{l} = C - K = (l_{x}, l_{y}, l_{z})$.

Dále musí mít kamera určený směr vzhůru: $\vec{u} = (u_{x}, u_{y}, u_{z})$ a vektor ukazující směrem doprava:

$$ \vec{p} = \vec{l} \times \vec{u} = (p_{x}, p_{y}, p_{z}) $$

Transformace vektorů

Při aplikování transformační matice na vektory kamery musí platit následující vztahy

$$ \begin{bmatrix} 0 \\ 0 \\ -1 \\ 0 \\ \end{bmatrix} = T_{cam} \begin{bmatrix} l_{x} \\ l_{y} \\ l_{z} \\ 0 \\ \end{bmatrix} \quad \begin{bmatrix} 0 \\ 1 \\ 0 \\ 0 \\ \end{bmatrix} = T_{cam} \begin{bmatrix} h_{x} \\ h_{y} \\ h_{z} \\ 0 \\ \end{bmatrix} $$

$$ \begin{bmatrix} 1 \\ 0 \\ 0 \\ 0 \\ \end{bmatrix} = T_{cam} \begin{bmatrix} p_{x} \\ p_{y} \\ p_{z} \\ 0 \\ \end{bmatrix} $$

Předchozí tři vztahy můžeme přepsat do následující matice:

$$ \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix} = T_{cam} \begin{bmatrix} p_{x} & h_{x} & -l_{x} & 0 \\ p_{y} & h_{y} & -l_{y} & 0 \\ p_{z} & h_{z} & -l_{z} & 0 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix} = T_{cam} M_{cam} $$

Ze vztahu je zřejmé, že $T_{cam} = M_{cam}^{-1}$ a jelikož je matice $T_{cam}$ ortonormální, tak řešení inverzní matice se zjednoduší na $T_{cam} = M_{cam}^{T}$

Transformační matice

Výsledný vztah transformační matice má následující vztah:

$$ T_{cam} = \begin{bmatrix} p_{x} & p_{y} & p_{z} & 0 \\ h_{x} & h_{y} & h_{z} & 0 \\ -l_{x} & -l_{y} & -l_{z} & 0 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix} $$

Ořezávání pohledovým objemem

Z promítání jsou vyřazeny plošky, které nebudou promítnuty na průmětnu, protože jsou mimo pohledový řetězec.

Promítání

Body z 3D prostoru jsou touto transformací přeneseny na stínítko. V praxi se používají dva způsoby promítání:

  • Rovinné
  • Perspektivní

Matice rovinného promítání

Matice rovinného promítání na stínítko kamery ležící s rovinou $XY$ rovnoběžně ve vzdálenosti $z_{0}$:

$$ T_{XY} = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & z_{0} \\ 0 & 0 & 0 & 1 \\ \end{bmatrix} $$

Matice perspektivního promítání

Perspektivní promítání více připomíná způsob jakým vnímáme okolní reálný svět.

Matice perspektivního promítání na stínítko kamery ležící s rovinou $XY$ rovnoběžně ve vzdálenosti $z_{0}$:

$$ T_{persp} = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 1/z_{0} & 0 \\ \end{bmatrix} $$

Osvětlovací model

  • Určení osvětlení pomocí zvoleného osvětlovacího modelu
  • Například Phongovým osvětlovacím modelem:

Rasterizace

  • Převod z vektorové grafiky do rastrové.

Mapování textur

  • Pro mapování textur se používá převážně UV mapování.
  • Každému rohu plošky je přiřazena UV (2D) souřadnice, která provádí mapování obrázku z jeho souřadného systému.

Určení viditelnosti pixelů

  • Pro určování viditelnosti fragmentů se používá tzv. Z-buffer
  • Každý fragment si kromě své barvy (v barevném bufferu) uchovává svoji vzdálenost od stínítka.
  • Nejbližší fragment přepíší ty více vzdálené.

Děkuji za pozornost.