Jak na realisticky vypadající kovový povrch jen za pomoci shaderů? Snadno!! - 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

Jak na realisticky vypadající kovový povrch jen za pomoci shaderů? Snadno!!

26. srpna 2003, 00.00 | CINEMA 4D je vybavená celou škálou velmi šikovných shaderů, od jednoduchých standardních shaderů základní výbavy, přes free shadery Simbionts až po fenomenální shadery SLA. A asi není nikdy od věci se na tyto shadery kouknout zblízka. Uděláme si tedy pomocí různých shaderů reálně vypadající, poměrně složitý a komplexní kovový povrch.

Mám za to, že asi každý z nás, co se pokoušíme o tvorbu ve 3D, preferuje některou výrobní fázi před jinou. Prostě mu více tak říkajíc sedí. Někdo se nejlépe cítí při modelování, jiný při tvorbě animací a další při texturování. Osobně se cítím hlavně jako modelář, a tak je pro mne nastavení světel a textur tou fází, která se musí udělat, ale zrovna štěstím mně to nenaplňuje. Jste-li na tom podobně, nebo i když nejste, protože snad bude dnešní článek přínosný všem, tak právě Vám je určen dnešní článek. Zkusíme si vytvořit fotorealistický kovový povrch, jaký je na černě vykovaných předmětech, například na sekerách, zemědělských předmětech atd. Tedy vytvoříme tmavý kov s patinou. A zásadní otázkou je, zda k tomu budeme potřebovat nějaké textury. No v zásadě nikoliv, i když je pravda, že ve finální scéně textury použity jsou, avšak pro kompozici a nikoliv pro kovový materiál. Jistě tedy není překvapující, že použijeme shadery.


Už jsme o tom mluvili, respektive psali, ale letem světem si nejdříve shrneme výhody shaderů. Snad nejdůležitější výhodou je, že (v našem případě) použité shadery jsou volumetrické, tedy mají hmotu a tak nám nemůže dojít ke "stahování" a "protahování" materiálu. Dalším obrovským plus je to, že si nemusíme dělat starosti s navazováním textury. Vždyť je právě samozřejmostí shaderů, že stále a bez problémů, díky použitému vzorci, se "neviditelně" opakují. Poslední velkou výhodou je velikost souboru. Budu se opakovat, ale matematické vyjádření shaderu je zásadně menší než obrázek bez ztrátové komprese. Navíc když by měl být finální výstup obrázku či animace řekněme 1024*768 a jistý objekt by měl zaobírat celou plochu, tak použitá textura na tomto objektu musí mít minimálně stejnou velikost jako finální obrázek. Kdyby neměla, tak by se na povrchu objektu projevoval efekt pixelizace. A je zřejmě nasnadě, že v případě více použitých kanálů v materiálu, který je použitý na čelním objektu, díky obrázkům dramaticky roste celková velikost scény. Shaderu, respektive jeho vzorci je zcela ukradené jakou velikost finální obrázek bude mít. K pixelizaci vlastně již z principu nemůže dojít.

Příklad, na kterém si vše zkusíme, jsem již tak trochu nakousl. Je jím spíše ilustrační technická jednoduchá scéna sekery a hlavy kladiva. Kdyby to někoho zajímalo, tak ta sekera, tesařská širočina, je středověká a pochází z nálezů tvrziště v Badrech a hlava kladiva pochází z bohatého naleziště tvrze v Semonicích. Scéna je již nasvětlená a má připravený i základní materiál spodní plochy. Osvětlení nás tedy nemusí trápit, však je na této scéně použit běžný systém tříbodového osvětlení, který byl již podrobně popsán v referenčních tutoriálech. Na nás bude vytvoření kovových povrchů a také si spolu nastavíme mapu hdri, což bude až trapně triviální a jednoduché. U kovových povrchů je totiž zásadním projevem to, že odráží, alespoň trochu, své okolí. To dodává kovovým povrchům hloubku a tak na tento jev opravdu nesmíme zapomenout. A když nám CINEMA 4D nabízí využití hdri, tak bychom byli hloupí, kdybychom to nevyužili.

Konec řečí. Ve Správci materiálů si vytvoříme nový materiál. Poklepeme na ikonu nově vytvořeného materiálu, čímž se nám samozřejmě otevře okno s jeho nastavením. Aby v tom nadále nebyl zmatek, tak si materiál pojmenujeme. Třeba Železo. Vzhůru do samotného nastavení. V kanálu barvy zadáme základní barvu materiálu. Podle výše nastíněného zadání je asi jasné, že by tato barva měla být poměrně tmavá (jde o "černý" kov), s nádechem do modra či zeleno modra. Osobně jsem použil tyto hodnoty (v procentickém systému) R=80 %, R=86 %, B=93 % a Jas jsem dal na 22%.



Zapneme kanál, který ihned následuje za kanálem Barva. Tedy kanál Povrchová úprava. A proč budeme zapínat (a také nastavovat) tento kanál? Jde o to, že bychom měli na povrchu vytvořit jisté nepravidelnosti, které by rozbily jinak jednolitou celistvou plochu. Ta by samozřejmě nevypadala nikterak realisticky. Je tedy dobré mít na paměti, že takové drobné disturbance a nepravidelnosti se hodí i na jinak "naprosto" hladké a vyleštěné povrchy. Sice ne tak výrazné jako v našem příkladu, ale rozhodně bychom na ně neměli zapomínat. Ona totiž právě ta dokonalost, kterou se 3D modely často pyšní je tou chybou, která je odlišuje od skutečnosti.

V tomto kanálu zapneme parametry Ovlivňovat > Odlesk a Ovlivňovat > Odrazivost (v pravém horním rohu) a do pole textury nahrajeme výchozí shader programu CINEMA 4D Kov (pomocí pravé šipečky na pravé straně pole). Po kliknutí na tlačítko Editovat se nastavení shaderu nahraje do Správce nastavení. Levý uzel ponecháme černý, ale pravý změníme. Barva bude opět příbuzná barvě, kterou jsme si vlastně vyspecifikovali v zadání. Jakási tmavá modrozelená (i když v mém případě jsem nastavil barvu v tomto kanálu spíše do zelena), ale světlejší než byla barva v kanálu Barva. Poklepáním na uzel se otevře okno systému pro zadání barvy. Hodnota (v systému 0 až 255) je R=99, G=156, B=143.



Tím je zadání shaderu v tomto kanálu u konce. Ještě bychom měli snížit krytí. Ponecháme tedy režim krytí (mixování) na volbě Normální a snížíme hodnotu na 78. Díky tomu se bude výsledná barva tohoto kanálu skládat z 78 % z barvy shaderu a z 22 % z nastavení Jasu (vrchní posuvník). Tento kanál je hotový.



Přejdeme na kanál Odrazivost. Důvod je jistě zřejmý. Kov přeci odráží paprsky a tak je důležité i nastavení tohoto kanálu. Jak na to? Respektive jaká je základní idea? Odrazivost by se asi měla krýt s kanálem Povrchová úprava. Tam kde bude tmavší, jakoby více zašlá plocha, tam by měla být menší a naopak. Z toho je tedy zřejmé, že budeme potřebovat stejný shader, jaký jsme použili v kanálu Povrchová úprava. Do pole textura tedy opět nahrajeme základní shader programu Kov. Opět klikneme na tlačítko Editovat a přejdeme do Správce nastavení. Stejně jako před chvílí ponecháme nastavení levého uzlu a rovnou přejdeme na uzel pravý. Poklepeme na něj myší a v dialogovém okně nastavíme barvu tohoto uzlu na středně šedou. Hodnoty R=127, B=127, B=127. Proč je barva šedá když jsme jinak nastavovali mírně šedé tóny? Jde o to, že kov dokáže odrážet paprsky nezabarveně, však se také používaly kovové desky jako zrcadla. Proto tedy neutrální šedá. Tím je ukončeno zadání shaderu. Celý kanál však zesvětlíme, protože jinak by byla míra odrazivosti příliš malá. Ponecháme režim mixování na volbě Normální a posuvník nastavíme na 40 %. Poté zadáme do vrchního zadání barvy světlejší středně šedou (pomocí posuvníku parametru Jas, který nastavíme na 57 %). Tím jsme v zásadě hotoví, ale použijeme ještě nastavení pole Rozmazání. Tímto polem můžeme nastavit míru rozostření odrazu, jeho přesnost a také počet vzorků použitých při rozmazání. Musím ale poznamenat, že nastavení tohoto pole poměrně dramaticky prodlužuje výpočtový čas a tak máte-li slabší stroj, tak se mu možná vyhněte. Zde nastavíme parametr Rozptyl na 20 %, tím poměrně výrazně rozostříme odraz na povrchu a Přesnost snížíme na 50 %, čímž poněkud zredukujeme výpočtový čas bez toho, že by se nám to projevilo nějak zásadně na výsledku. Musíme mít totiž na paměti, že povrch bude také zvrásněný a "poškrábaný", a tak není vysoká přesnost rozostření nutná.



Když zvrásněný tak zvrásněný. Jdeme tedy na kanál Hrbolatost. Také v tomto kanálu použijeme shader. Ale tentokrát nikoliv výchozí shader programu, ale shader, respektive tři shadery SLA. Idea je taková, že vytvoříme mapu hrbolatosti pomocí dvou různých shaderů šumu, které smícháme a aby byla celková práce poněkud jednodušší, tak výsledný mix trochu zvýrazníme pomocí filtru pro úpravu jasu a kontrastu. Musíme ale postupovat (tedy nemusíme, ale když to tak popisuji, tak je to jednodušší, neberte mě za slovo) od zadu. Do pole textury načteme shader, tedy vlastně filtr bhodiNUT Brightness Contrast. Ten se nalézá v menu vyvolaném stisknutím černé šipečky na pravé straně pole v menu bhodiNUT Channel. Máme-li filtr načtený, klikneme na pole Editovat. Otevře se nastavení tohoto shaderu.



Jak můžeme vidět, tak v něm ještě nic není. To je samozřejmě v pořádku, ještě jsme do něj nevložili žádný shader či texturu, ale snad by nebylo od věci si nejdříve říci, z čeho se tento shader skládá. Je asi jasné, že parametrem Brightness se kontroluje Jas a parametrem Contrast kontrast. Parametry Low Clip a High Clip pracují na stejném principu jako posuvníky úrovní v okně Úrovně v programu Adobe Photoshop. Pod náhledem si definujeme typ náhledu (ale to je asi jasné). Ve spodní části okna je pole pro nahrání textury či shaderu a parametry pro interpolaci a rozostření. V poli textury klikneme na černý trojúhelníček a v menu bhodiNUT Channel vybereme shader, nebo přesněji "mixážní stanici" bhodiNUT Fusion. Je-li tento shader nahraný, stiskneme tlačítko Edit, čímž se otevře.



Jak jsem napsal výše, pracuje tento shader jako jakýsi mixér, ve kterém můžeme míchat dva shadery (či textury) a také můžeme použít jeden shader jako masku. My použijeme dva shadery bez masky. Ve vrchní části je překrývací kanál (Blend), uprostřed je maska a dole je základní kanál. Vlevo nahoře se definuje tvar náhledu a pod náhledem je nastavení krytí vrchního (Blend) kanálu. Do kanálu Blend nahrajeme šum, kterým nadefinujeme vrchní zvrásnění povrchu. Klikneme tedy na trojúhelník u pole u tlačítka Image a z menu bhodiNUT Channel nahrajeme shader bhodiNUT 3D Noise (jde o 3D volumetrický shader). Poté stiskneme tlačítko Edit. Otevřeme okno s nastavením tohoto shaderu, ve kterém již "konečně" i něco je.



Ve vrchní části okna shaderu se definuje jeho velikost (Scale), náhled a parametry animovaného náhledu a aplikace jako prostředí. Z těchto parametrů použijeme následně jen nastavení velikosti. Ve středním poli se definuje asi to nejdůležitější, typ použitého šumu. Kromě toho způsob jeho definování (Space), rychlost animace, úbytek se vzdáleností od kamery (Attenuation), nastavení ostré hrbolatosti (Hard Bump) a parametr Delta, který se podílí na výraznosti šumu u hrbolatosti. Pod tímto polem je pole pro definování vektoru posunu (při animování shaderu). Ve spodní části se definuje barva shaderu a nám známé parametry Brightness (Jas), Contrast (kontrast) a spodní a vrchní úroveň.

Jdeme na to. Nejprve si vybereme vhodný typ šumu. A jistě není od věci se případně podívat na všechny typy, které se nám nabízejí. Ale vybereme si typ Stupl. Ten je asi pro naše záměry nejvhodnější. Tím vytvoříme takové to krabatění na černém železe. Zatím necháme vrchní nastavení tak jak jsou a přesuneme se dolu. Spodní úrovně, parametr Low Clip nastavíme na 34 % a vrchní úrovně na 77 %. Jas a kontrast ponecháme, protože tyto parametry upravíme v námi prvně nastaveném shaderu (doufám, že si na to pamatujete :-)). Už tak je vidět, že se námi nastavený shader zásadně zvýraznil. Nyní můžeme případně zmenšit parametr Detail Attenuation, díky kterému bude vidět hrbolatost do "větší vzdálenosti" od kamery. Problém je, že to prodlužuje čas a tak jsem nechal tento parametr tak jak je. Přejdeme do vrchního pole a zmenšíme pomocí parametru Global Scale celý shader na 50 %. S tímto shaderem jsme hotovi. Zadání potvrdíme stiskem tlačítka OK, čímž se vrátíme do shaderu Fusion.



Nastavíme základní kanál Base, který je překrýván námi právě vytvořeným shaderem. V okně Base channel tedy klikneme na šipečku u pole pro texturu a nahrajeme shader šumu z menu bhodiNUT Channel shader bhodiNUT 3D Noise. Klikneme na tlačítko Edit a otevřeme okno s nastavením nového shaderu šumu.

A přímo na nastavení. Však již toto okno důvěrně známe :-). Vybereme typ Poxo, kterým vytvoříme šum, kterým budeme simulovat drobné šrámy a záhlubně po kování a úpravě. Jinak ponecháme vše tak jak je. Po potvrzení zadání se vrátíme do okna shaderu Fusion.



Nastavíme míchání obou shaderů, které nám do shaderu Fusion vstupují. Možná je zde na místě poznámka, která již ale byla zmíněna v referenčních tutoriálech, že do shaderu Fusion nemusí vstupovat jen dva "normální" shadery a textury, ale také jiné shadery Fusion. Díky tomu můžeme kombinovat nekonečně mnoho textur a shaderů.

Pod oknem náhledu nastavíme režim krytí vrchní vrstvy, kanálu Blend. Režim zadáme na Screen, tedy Závoj a krytí vrstvy Blend nastavíme na 46 %. Tím je naše nastavení tohoto shaderu u konce. Zadání potvrdíme stiskem tlačítka OK a vrátíme se do okna shaderu pro nastavení jasu a kontrastu.



V okně posledního, respektive prvního shaderu pro jas a kontrast nastavíme kontrast na 40 %. Tím se celkově vstupující shadery zvýrazní. Ukončili jsme editaci shaderů kanálu Hrbolatost. Zadání potvrdíme stiskem tlačítka OK.



Pomocí vrchního pole kanálu Hrbolatost nastavíme sílu efektu na 10 %.



Zbývají nám již jen dva kanály. Tak vzhůru na ně. Je asi jasné, že také nastavíme parametry odlesku. Přejdeme tedy na kanál Odlesk, který asi většina z nás důvěrně zná. A jak jej nastavíme. Zase musíme vyjít z idey, že jde o kov. Odlesk tedy bude poměrně ostrý, intenzivní, s rychlým úbytkem. Režim ponecháme na parametru Plast (možná je to nečekané, ale většinou je tento režim vhodnější (ne vždy) i pro kovy). Parametr Šířka nastavíme na 44 %. Odlesk je poměrně úzký. Parametr Výška zadáme na 300 % (v číselném poli, pomocí posuvníku takové hodnoty nelze dosáhnout). Odlesk je v místě svého působení intenzivní… Úbytek zadáme malý, tak 5 % a zadáme také vnitřní šířku okolo 10 % (já jsem zadal 9 %), čímž vytvořím oblast neubývajícího "totálního" odlesku. Tím jsme s tímto kanálem hotovi. Že je odlesk snad až moc intenzivní? Však to ještě změníme. Přejdeme na další kanál. Na kanál Barva odlesku.



Upravíme barvu odlesku. Chceme aby byl finální materiál reálný, a tak by se měl odlesk měnit podle toho, zda vzniká na zašlé ploše či na ploše "neposkvrněné". No ano, vložíme do tohoto kanálu stejný shader kovu, jaký jsme již použili. A nebudeme jej vytvářet. Raději si jej jenom zkopírujeme. Přejdeme tedy na okamžik do kanálu Odrazivost, kde klikneme na trojúhelník u pole Textura a zvolíme příkaz Kopírovat kanál. Vrátíme se do kanálu Barva odlesku a stejným způsobem zvolíme příkaz Vložit kanál. A je to. Problém ale je, že je tento shader moc tmavý. Asi bychom jej mohli upravit, ale asi bude rychlejší jej smíchat s nějakou barvou. Jakou? Šedomodrou, abychom vytvořili odlesk odpovídající barvě celého tvořeného materiálu. Parametry barvy nastavené ve vrchním poli tedy jsou (v procentickém vyjádření) R=92 %, G=94 %, B=100 % a Jas=48 %. Shader necháme mixovat v režimu Normální a nastavíme jeho krytí na 50 %. Tím je náš materiál hotový.



Aby bylo zřejmé jak se jednotlivé kanály podílejí na výsledku, je tu malý názorný přehled. První v pořadí je náhled finálního materiálu, druhý obrázek je bez kanálu Povrchová úprava, třetí bez kanálu Odrazivost, čtvrtý bez kanálu Barva odlesku.



Máme hotový materiál pro železo, ale ještě si musíme, tedy nemusíme, ale měli bychom si vytvořit materiál pro vybroušenou špičku sekery. Ve Správci materiálů si zduplikujeme vytvořený materiál železo, poklepeme na náhled zduplikovaného materiálu a tím otevřeme okno s jeho nastavením.

Nejdříve si nový materiál přejmenujeme. Například Špice. Idea tohoto materiálu je taková, že by měl být poměrně světlý, kovového vyhlazeného vzhledu. Jelikož má být materiál vyhlazený, vypneme kanál Hrbolatost a upravíme barvy a míchání některých kanálů. A jelikož to už známe, vezmeme to rychleji. V kanálu barva nastavíme ocelově modrou, v procentickém systému to jsou hodnoty R=80 %, G=86 %, B=93 % a Jas=80 %.



V kanálu Povrchová úprava snížíme krytí shaderu Kov na 55 %. Tím se tento kanál zesvětlí. Ostatní parametry tohoto kanálu ponecháme.



Přejdeme na kanál Odrazivost. Tento materiál je vybroušený do lesku a vyhlazený od toho, jak se ostří otírá o dřevo. Bude se v něm tedy o dost více odrážet okolí. Barvu odrazivosti nastavíme opět na světle ocelově modrou. V procentickém systému jsou hodnoty R=92 %, G=95 %, B=96 % a Jas=100 %. Shader ponecháme tak jak je, jen snížíme jeho krytí. A to na 45 %. Aby byl výpočet rychlejší a také protože se na vyhlazeném povrchu bude okolí odrážet poměrně přesně, vypneme Rozmazání pomocí zadání hodnoty parametru Rozptyl na 0 %.



Odlesk ponecháme stejně tak jak je a přejdeme do kanálu Barva odlesku, který musíme logicky upravit podle celkového nastavení barvy tohoto materiálu. Opět ponecháme nastavený shader Kov a zadáme kovovou modrou barvu. Tato barva má procentické vyjádření R=92 %, G=94 %, B=100 % a Jas=92 %. Krytí shaderu snížíme pomocí snížení mixování na 20 %.



Materiál špičky sekery je hotový.

Je na čase aplikovat materiály na objekty. Jestli si ještě pamatujeme, že jsme použili volumetrické shadery (respektive 3D shadery), tak vlastně nezáleží na způsobu aplikace materiálu na objektu. Uchopíme materiál Železo ve Správci objektů a přeneseme jej na objekty sekery a kladiva. Jak bylo napsáno, je nepodstatný způsob projekce a tak jsem například já použil kubickou projekci (ale je to vážně jedno). Po aplikaci materiálu přejdeme u obou objektů (při vybrané ikoně materiálu ve Správci objektů) na stránku Souřadnice Správce nastavení, kde zmenšíme velikost textur na hodnoty okolo 20x20x20. Osobně jsem použil hodnoty 20x20x20 u kladiva a 15x15x15 u sekery. Přesné hodnoty ale nejsou podstatné.



Stejným způsobem jakým jsme aplikovali materiál Železo, aplikujeme na sekeru i materiál Špice. Uchopíme jej a přeneseme na objekt. Opět nezáleží na typu projekce, nastavíme však opět velikost textury na stránce Souřadnice ve Správci Nastavení na 25x25x25. Problém ale je, že materiál Špice nyní zcela překrývá materiál Železo. Materiál Špice vymezíme alfa kanálem ve speciálním materiálu, kterým budeme materiál Špice míchat. Pamatujete? Psal jsem, že použijeme obrázek jen na kompozici a na hdri. Tedy nyní nastal ten první případ.



Obrázek je zde.



A jak budeme postupovat? Vytvoříme si nový materiál, který pojmenujeme například Alfa, ve kterém vypneme všechny kanály vyjma kanálu Alfa. Do něj načteme výše uvedený obrázek, kde se ujistíme, že je aktivní volba Opačně a Měkká. To je vše. Aplikujeme tento nový materiál Alfa na objekt. Přesuneme pořadí textur aplikovaných na objektu sekery. Zleva (první) bude nejníže materiál Železo, pak Alfa a zcela vpravo bude materiál Špice.



Ve Správci objektů si vybereme na sekeře materiál Špice a přejdeme do Správce nastavení. Zde zapneme volbu Míchat s dalšími texturami.



Nyní si ve Správci objektů vybereme texturu Alfa a nastavím její parametry. Opět přejdeme do Správce nastavení. Typ projekce nastavíme na volbu Plošná. Ostatní parametry ponecháme. Přejdeme na stránku Souřadnice, zde nastavíme pootočení textury, protože ve výchozím stavu kolmice na plošnou projekci, tedy osa Z směřuje ve směru osy Z objektu. My ale chceme a potřebujeme, aby byla textura natažená plošně na objektu, což prozatím nesouhlasí.



Máme-li hotovo, zkontrolujeme si, že máme stále vybraný materiál Alfa a ve Správci objektů zvolíme z menu Textury příkaz Přizpůsobit objektu. Tím se upraví velikost textury podle velikosti objektu.



Kdybychom si zapnuli nástroj Textura, měla by mřížka materiálu překrývat objekt níže uvedeným způsobem.



Jsme hotovi. Abychom si zkontrolovali, že je textura správně natočená, můžeme si pracovně zkopírovat obrázek alfa kanálu materiálu Alfa do kanálu Barva, kanál Alfa vypnout a označit si ve Správci objektů tuto texturu. Měli bychom pak v režimu Gouraudovo stínování či v rychlém stínování vidět, jak je natočená textura na objektu. Případně texturu natočíme, respektive převrátíme pomocí příkazů Správce objektů menu Textura Převrátit horizontálně a Převrátit vertikálně. Poté v materiálu vše vrátíme do původního stavu.

Posledním krokem, který musíme učinit, je nastavení mapy hdri. To učiníme tak, že vytvoříme nový materiál ve, kterém vypneme všechny kanály vyjma kanálu Svítivost. Do tohoto kanálu načteme soubor rnl_probe.hdr, který se nalézá v adresáři tex scény, která je ke stažení výše. Tento materiál aplikujeme na objekt Obloha, který je připravený pod objektem Okolí. A jsme opravdu hotovi. Ještě ukázky jak tento materiál vypadá na několika objektech.



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: