Shadermania - texturování, ale bez textur - 3D grafika - 3Dscena.cz: 3D grafika jako na dlani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



3D grafika

Shadermania - texturování, ale bez textur

28. července 2005, 00.00 | Trochu podivný nadpis, ale pravdivý. Existují totiž technologie, které nám to umožňují. A co víc, dokonce nemusíme mít připravenou UV mapu modelu. Vše je jednoduché, přehledné a přitom v zásadě můžeme například tvář animovat bez obav z toho, že by povrch „tekl“ po povrchu. Prostě takový malý zázrak. A kdo jej má na svědomí? Shader Vertexová mapa v CINEMĚ 4D R 8.5 a vyšší.

Shaderu Vertexová mapa jsme se jednou již dotkli, to když jsem kdysi řešil problematiku artefaktů na povrchu efektu SubSurface Scattering. Tehdy mi ale nedošla celá šíře možností, které tento shader, či možná bychom přímo mohli říci technologie, nabízí. Ale nejdříve vlastně musíme říci, kdo tento shader může využívat. Jednoduše ten, kdo má CINEMU 4D R8.5 a vyšší (alespoň myslím, že shader Vertexová mapa byl prvně v masivní aktualizaci R8.5).

Samotný shader Vertexová mapa by ale byl k ničemu, kdybychom také neměli ostatní shadery standardní výbavy C4D R8.5 a vyšší, protože shader Vertexová mapa se používá jen jako „maska“ ploch, které chceme ovlivnit nějakou barvou povrchu. Ale to jsme pro začátek řekli snad  až příliš. Začít musíme přeci jen více zvolna.

Nejdříve pro ty méně zkušené musíme popsat, co to vlastně vertexová mapa je. Tedy co je to obecně, nikoliv ve smyslu shaderu. Tedy vertexová mapa je hodnota od 0 do 1, která definuje v tom kterém bodě polygonového objektu (tedy nelze ji definovat u primitiv a generátorů) vliv nějakého případného efektu. Tedy primárně se vertexové mapy používají u deformátorů, zejména kostí, kdy definují oblasti, kde případná kost působí a kde ne. Každý objekt může mít vertexových map vícero a definovat je můžeme jak v režimu bodů, tak v režimu polygonů, kdy ale nejde o nic jiného, jak o definování bodů, mezi kterými příslušné polygony leží.

Vertexovou mapu můžeme definovat několika způsoby. Nejjednodušší je začít tak, si vybrat oblast, kde má efekt působit v plné míře a zvolit Výběr > Nastavení vlivu – vertexová mapa. Dialog se nás otáže, jakou že váhu chceme vybraným elementům nastavit a pak, po potvrzení, se vytvoří námi požadovaná vertexová mapa. V té jsou ale všechny dříve vybrané elementy nastavené na stejnou váhu (ve výchozím stavu je červená plocha s nulovým vlivem a žlutá s maximálním). Takové nastavení je ale krajně nedokonalé, můžeme přeci potřebovat definovat přechodové oblasti vlivu, kde intenzita efektu postupně slábne. Jak ale na to? Velmi prostě, stačí mít vybraný příslušný polygonový objekt, aktivovat režim polygonů a nebo bodů, a zapnout si výběrový nástroj Přímý výběr, a ve Správci nastavení zadat volbu tvorby vertexové mapy. Ve Správci objektů bychom také měli mít vybranou vlastnost příslušné vertexové mapy, kterou jsme případně vytvořili předchozím krokem.

Pokud jsme všechno výše uvedené splnili, můžeme si ve Správci nastavení nastavit nanášení vertexové mapy tak, jak potřebujeme. Pokud máme tablet, můžeme aktivovat možnost řízení nanášení přítlakem pera, můžeme si nastavit zda chceme hodnotu nanášení přičítat k nanesenému výběru, odečítat a podobně. Pokud nad modelem stiskneme tlačítko myši a nebo potáhneme pero tabletu po desce, nanášíme na body váhu vlivu vertexové mapy. Žlutá je hodnota 100%, červená 0%.

Přímý výběr, respektive jeho režim nanášení vertexové mapy je velmi efektní, ale není tím posledním ani nejefektivnějším nástrojem, který lze použít. Asi tím nejvýkonnějším nástrojem (mimo nástroje MOCCY Claude Bonet, ale ten nevytváří vlastnosti vertexových map jako takové) je nástroj Štětec. Kdysi, při popisu novinek, které byly v C4D R9, jsem se tohoto nástroje velmi široce dotknul a nezapomněl jsem poměrně podrobně zmínit, že tento nástroj obsahuje celkem čtyři režimy, které jsou pro nanášení vertexové mapy velmi efektní.

Víme, co je vertexová mapa, ale jak ji využít pro tvorbu materiálu? Je to poměrně prosté. V jakémkoliv kanálu materiálu můžeme použít shader Vertexová mapa (ten je v seznamu shaderů, položce Efekty), ve kterém lze pouhým přenesením ikony ze Správce objektů definovat příslušnou vertexovou mapu objektu. Tento shader pak definuje barvu tak, že bílé oblasti jsou oblasti s maximálním vlivem vertexové mapy, černé s minimálním. Samozřejmě lze celý efekt také invertovat.

Pokud víme, jak vytvořit shader Vertexová mapa, pokud víme, jak vertexovou mapu jako takovou vyrobit, tak nám nebrání nic v tom, abychom si například do kanálu Barva materiálu dali shader Fůze, do jehož základního kanálu dáme například nějaký šum. A do krycího kanálu můžeme dát třeba naší vertexovou mapu. Pokud zadáme režim krytí Závoj a předtím ještě v nastavení vertexové mapy aktivujeme Inverzní efekt, tak se stane to, že šum se na povrchu objektu objeví jen tam, kde je nastavený vliv vertexové mapy.

Otázka zní, co nám brání v tom, abychom měli shader Vrstvy a v něm několik shaderů Fůze, vždy každý jeden pro šum či barvu a vertexovou mapu, která definuje oblast, kde se vzorek projeví, které budou míchány se základní barvou povrchu, například pomocí režimu krytí Násobení. Zcela podle popsaného principu tomu je u následující tváře (mimochodem je to Otto, který je ve standardní knihovně C4D).

Zkusíme si tedy trochu projít princip, kterým je povrch Otty vytvořen (tedy přesněji kanál Barva). Není to vlastně nic těžkého a základem je shader Vrstvy, ve kterém jsou, jak jsme se již zmínili, několik shaderů Fůze, vždy jeden, každý pro nějakou oblast a povrch na ní. Nejdříve se ale podíváme na to, jaké vertexové mapy na Ottovi máme. Je jich dohromady poměrně dost, ale jednu z nich můžeme pro další popis trochu vynechat, protože je určena pro definování odlesku tváří. Je to samozřejmě ta, která je popsaná jako Odlesk.


Ústa


Oči


Tváře


Obočí


Ústa uvnitř, nos a pod.


Odlesk

Tedy na dalším obrázku jsou jednotlivé vrstvy očíslované, první vrstva je samozřejmě ta nejvíce dole, protože ta definuje základní barvu povrchu. Čím vyšší číslo, tím výše umístěná vrstva a její efekt na vzhled povrchu. Postupně si všechny vrstvy popíšeme a vždy zmíníme, kterou vertexovou mapu vrstva ve svém shaderu Fůze případně zpracovává.

1. Zcela dole je, jak jsme se již zmínili, základní barva povrchu, kterou dále upravujeme.

2. Druhý v pořadí je šum, který má nastavené barvy bílou jako základní a tmavě cihlovou jako barvu skvrn. Celý šum je totiž nastaven tak, aby tmavě cihlové vzorky tvořily pihy na povrchu objektu. Proto má také tato vrstva nastavený režim krytí na Násobit, kdy bílá nemá na níže ležící povrch vliv a tmavá je znásobená s barvou pozadí (tedy pokud je jas 1 = 100%, pak se jas 0.2 bude násobit s pozadím (max 1, ale v tomto případě nižší) a výsledkem je tmavší barva. Tím vytvoříme na tváři vzorek pih.

3. Fresnel je efekt, který je řízen úhlem normály povrchu a úhlem paprsku kamery. V tomto případě je barva oranžová v případě, že je tento úhel velký a černá tehdy, je-li tento úhel malý. Díky režimu Závoj, který má ten efekt, že černá je vzhledem k níže položeným vrstvám „průhledná“ a světlejší tóny jsou vzhledem ke zvyšující se hodnotě celkového jasu (asi bychom spíše měli užívat pojmu hodnot všech kanálů) stále více kryjící, tak tím získáme na okrajích povrchu obličeje světlejší barvy jak v oblastech směřující na kameru.

4. V této vrstvě je další šum s malým vzorkem s bílou a růžovo-červenou barvou. Tento vzorek je násoben s pozadím s nižším krytím vrstvy. Vznikne tak přirozeně se jevící šum – póry na povrchu.

5. Zde máme náš první shader Fůze, který si popíšeme. Tento shader v sobě obsahuje také první vertexovou mapu. A to mapu definující ústa, či lépe řečeno rty a tváře. Podkladovým kanálem je opět šum, kterým definujeme barvu rtů. Shader Vertexová mapa má invertovaný výstup (v nastavení shaderu Vertexová mapa jako takovém) a díky tomu, a režimu krytí Závoj je ve výstupu „vymačkována“ právě jen oblast rtů. Barvu rtů pak násobíme s níže uvedenými vrstvami hlavního shaderu Vrstvy. Krytí je sníženo na 75%.

6. I v této vrstvě máme shader Fůze, i v tomto shaderu (který je mimochodem nastavený velmi podobně jako shader předchozí, tedy i následující, tedy shader Vertexová mapa je vždy invertovaný a režim je nastavený na Závoj) máme jako krycí shader Vertexová mapa, v tomto případě definující oblast vnitřku úst, nosu, očí a podobně. Tedy podkladovým shaderem je prostý shader Barva, který má nastavenou tmavě červenou až tmavě cihlovou barvu. Celý shader Fůze je násobený s níže položenými vrstvami a krytí je nastavené na 100%.  

7. Úplně stejně jako předchozí vrstva je také nastavená vrstva číslo 7, ve které je opět shader Fůze. Jediný rozdíl je v použité vertexové mapě, ta v tomto případě vymezuje oblast pod očima a v barvě v podkladovém kanálu, která je šedomodrá. Výsledkem je tmavá barva pod očima. Tuto vrstvu opět násobíme s níže položenými a krytí je 70%.

8. Tato vrstva obsahuje jen a pouze shader Šum, který je nastaven tak, že vytváří poměrně jemný ale kontrastní vzorek šumu bílých a černých ploch. To celé jen a pouze proto, aby tento šum „maskoval“ barvu, která je generovaná následující vrstvou 9.

9. I tato vrstva se shaderem Fůze je nastavená jako předešlé. Tedy vertexová mapa invertovaný výstup (mapa samotná definuje oblast lící, nosu a čela), podkladový kanál je shader Barva. V tomto shaderu je nastavená poměrně sytá červeno-růžová barva. Opět vrstva interaktuje s níže položenými pomocí násobení, krytí je sníženo na 60%.

Mimochodem u této vrstvy bychom mohli samozřejmě postupovat i jinak, výsledný šum na lících nemusíme generovat pomocí maskování shaderu Šumv hlavní struktuře shaderu Vrstvy, ale chtěli jsme poněkud ozvláštnit a obohatit systém o další techniku.

10. Další vrstvou je shader Fůze, ale trochu složitější, než jsme zvyklí. V tomto shaderu Fůze je opět jak krycí kanál shader Vertexová mapa, tentokráte nastavená na oblast pod očima. Jedná se nám o to, že pomocí této vrstvy vytváříme viditelné žilky v ztmavělé oblasti pod očima. V podkladovém kanálu našeho shaderu je však další shader Fůze, ve kterém spolu interaktují dva šumy. Jeden, vrchní, má nastavený typ Turbulence a černo bílou barvu. Díky režimu krytí Závoj nám opět vlastně jen „maskuje“ oblasti shaderu, který překrývá. Podkladový shader je opět šum. Ten má nastavený režim Sema, barvu bílou a fialovou, vyšší nastavení oktáv a kontrastu. Výsledkem jsou barvené „provazce“ žilek pod okem.

Hlavní shader Fůze má opět režim krytí nastavený na Násobit.

11. Vrstva poslední. I v ní je shader Fůze a i tato vrstva je s ostatními násobená. V tomto shaderu je opět jako krycí shader Vertexová mapa, který definuje oblast obočí. Kanál podkladový tvoří shader Hatch modulu Sketch and Toon, ve kterém je jediný použitý obrázek. A to je stopa tahu pera, která šraf definuje (použil jsem stopu, která je ve Features C4D). Pomocí Hatch tedy definujeme vzorek obočí, vertexová mapa nám to opět zcela již standardním způsobem „vymaskuje“. Tím jsme s tvorbou povrchu hotoví.

Jsme tedy v závěru. Pomocí několika shaderů vertexvé mapy jsme vytvořili poměrně efektní povrch, a mimo tvorby obočí jsme k tomu nepotřebovali jediný obrázek. Obrázek se stále počítá poměrně rychle (tedy samozřejmě i v závislosti na ostatních kanálech, například v kanálu svítivost je shader pro generování efektu SubSurface Scattering a ten výpočet prodlužuje) a vlastně lze jej i animovat. I když je pravdou, že šumy na povrchu by trochu „tekly“. Tedy jak to vyřešit. Třeba tak, že si vytvoříme UV mapu a povrch (pozor, musíme vypnout shader Fresnel) upečeme do textury. tedy vyrobíme si pouze pomocí shaderů sofistikovanou texturu povrchu, kterou můžeme samozřejmě ještě doladit. Aktivitě se meze nekladou :-).   

A ještě jednou výsledný obrázek na závěr.

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » 3D grafika  

 

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: