====== Phongův model osvětlení, textury ====== ===== Phongův model osvětlení ===== [[wp>Phong reflection model]], [[http://www.root.cz/clanky/pov-ray-a-phonguv-osvetlovaci-model|POV-Ray a Phongův osvětlovací model – Root.cz]] Osvětlování znamená určování odstínu pixelu na základě normálového vektoru, pozice kamery, světelného zdroje a materiálu. V OpenGL se zapíná pomocí povolení ''GL_LIGHTNING''. Vektory musí být normalizovány! {{ http://upload.wikimedia.org/wikipedia/commons/6/6b/Phong_components_version_4.png?600 }} ==== Složky ==== === Ambient light === * Světlost prostředí * Konstantní, nezáleží na poloze objektu * //Iₐ// = //kₐLₐ// * //kₐ// – konstanta materiálu * //Lₐ// – konstanta světelného zdroje === Diffuse light === * Rozptýlené světlo materiálem * Odraz rovnoměrně do všech směrů (záleží jen na náklonu plochy od světelného zdroje – skalární součin vektorů) * Pozorovatelné na matných površích * Pro výpočet je použit Lambertův osvětlovací model * //Id// = //kdLd// (//I// · //n//) * //kd// – vlastnost materiálu * //Ld// – konstanta světelného zdroje * //I// – je osvětlovací vektor * //n// – normálový vektor === Specular light === * Odlesk, odraz úzkého svazku paprsků ideálně odražených od povrchu * //Iₛ// = //kₛLₛ cosᵅ//(//φ//) = //kₛLₛ// (//e// · //r//)//ᵅ// * //kₛ// – konstanta materiálu * //Lₛ// – konstanta světelného zdroje * //α// – //vyleštěnost//, vyšší hodnota dává užší průběh * //e// – vektor směrem k pozorvateli * //r// – vektor odraženého světla ==== Materiál === Materiál je charakterizován odpovídajícími složkami: * Ambient * Diffuse * Specular * Emissive (není považován za zdroj, pouze ovlivňuje barvu) * Vyleštěnost ==== Výpočet ==== * Počítá se pro každou barevnou složku (RGB) zvlášť, kde finální intenzita každé složky je dána součtem: **//Iₐ// + //Id// + //Iₛ//** * Intenzita z ambientní složky se započítává vždy (všudypřítomné světlo), difuzní a spekulární složky jen pokud není světelný zdroj zastíněn * Při použití více světel se sčítají jejich jednotlivé vypočítané intenzity ===== Textury ===== [[wp>Texture mapping]] **Textury** v OpenGL mohou být 1D, 2D i 3D. Pixely textury se nazývají **texely**, tyto se aplikují na povrch objektu. Je zapotřebí asociovat **texturovací souřadnice** s odpovídajícími vrcholy pro správné nanesení textur (definuje programátor, v OpenGl ''glTexCoord''). Algoritmu nanášení textury se pak říká **texturování**. Je možné využít opakování nebo roztažení v daných směrech. Při texturování může docházet k aliasingu, pokud není dodržen vzorkovací teorém. ==== MIP textury ==== {{ http://upload.wikimedia.org/wikipedia/en/e/ed/Mipmap_illustration2.png?300}} [[wp>mipmap]] Multum in Parvo (více v jednom). Několik textur (jedna ve více rozlišeních) je uložena v jedné textuře, vybere se podle vzdálenosti od kamery (LoD). Mimo jiné se tak zabraňuje aliasingu. //Interpolace// (bilinear, trilinear, anisotropic filtering) MIP textur je důležitá pro neznatelné přechody mezi jednotlivými úrovněmi detailu. ==== Multitexturování ==== Multitexturování umožňuje nanést více textur najednou (např. textura a světelná mapa). Jedná se o rozšíření standardu. ==== Rastrová textura ==== Předem připravený obrázek. ==== Procedurální textura ==== * Není dána rastrem * Zobrazení do barvy: f(x, z, y) -> C * Pomalé vyhodnocení, ne všechny povrchy lze matematicky vyjádřit * Dřevo, mraky, šum apod. * Hrozba aliasingu, řešení: * Post-filtering (supersampling) * Pre-filtering – filtrace ve spojité oblasti (před vzorkováním) * Stochastické vzorkování ==== Speciální textury==== Bump maps, Environment maps, Normal maps, ...