13. ledna 2011

UDK materiály - cubemap odrazy

Dnes zkusíme vytvořit trochu složitější materiál v UDK - statické odrazy pomocí tzv. cubemaps a efekt fresnel. Výsledek bude vypadat asi takto:



Cubemap je vlastně kombinace šesti textur na stěnách krychle, ta se potom používá většinou právě pro odrazy v materiálu. Nejde tedy o dynamické odrazy, které by zachytily i třeba postavu hráče odrážející se v lesklém povrchu, ale pouze předrenderované odrazy statické scény. Vytvořit dynamické odrazy v UDK je také možné, ale nevyužívá se tak často kvůli náročnosti na výkon PC - v každém snímku se musí scéna renderovat ještě jednou kvůli odleskům. Fresnel efekt zajistí realističtější vykreslení odrazivých materiálů jako např. sklo. Podíváme-li se na skleněnou sklenici, zjistíme, že více odrazů je vidět u jejích okrajů - tam, kde světlo dopadá pod menším úhlem k povrchu; naopak uprostřed je téměř dokonale průhledné - světlo jím prochází k našemu oku pod velkým úhlem.



Vytvoříme tedy novou cubemap (New>cubemap) a importujeme do příslušných slotů 6 textur (můžeme cubemap najít na webu vytvořenou z fotografie, jak vytvořit cubemap ze scény v UDK si povíme zas někdy příště).



Vytvoříme nový materiál a přidáme do něj diffuse a normálovou texturu. Ještě přidáme cubemap (stejně jako jiné textury, zatím nikam nepřipojujeme) a případně černo-bílou masku, která bude určovat, kde se mají odrazy použít (můžeme využít compresi TC_OneBitAlpha). Potom z kontextové nabídky vytvoříme nový node Reflection vector a připojíme jej k UVs slotu naší cubemapy. Jde o vektor, který je vždy nastaven jako směr odrazu od normály právě zpracovávaného pixelu.

Pro zamaskování části odrazů vytvoříme node Lerp (Linear interpolate). Do slotu A připojíme konstantu nastavenou na hodnotu 0 (černá barva), do B potom cubemapu. A jako vlastnost Alpha použijeme texturu masky. Lerp tedy vlastně přiřadí pixelům, které jsou v parametru alpha bílé hodnotu B a pixelům, které jsou v masce černé hodnotu A, pokud v textuře masky je i nějaký odstín šedé, interpoluje se lineárně mezi hodnotami A a B.

Dále můžeme pomocí Power (mocnina) zvýšit kontrast cubemapy, a případně ještě zvýšit jas pomocí multiply (viz. obrázek dále).

Nyní vytvoříme efekt fresnel. Vložíme tedy nový node fresnel a do jeho Normal slotu připojíme naši normálovou texturu. Podle potřeby může být nutné k němu ještě přičíst nějakou konstantu (pro mírné přidání efektu i při velkých úhlech) nebo použít násobení (pro zvýšení efektu), s hodnotami můžeme experimentovat po sestavení celé sítě. Aplikujeme fresnel na naši cubemapu pomocí multiply. Část sítě vytvářející fresnel můžeme pro přehlednost vložit do skupiny - z kontextové nabídky vybereme New comment.

Celý efekt odrazu aplikujeme na diffuse texturu přičtením (Add) a pro efekt skla můžeme ještě přidat odlesky - v příkladovém materiálu je jako specular využita diffuse s přičtením masky pro zvýšení odlesků v místě skla a šířka odlesku je zůžena pomocí specular power. A ještě poznámka nakonec, místo určené pro přidávání odlesku by na diffuse textuře mělo být černé, případně tmavě šedé.

Žádné komentáře:

Okomentovat