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
Jsem dřevo a nestydím se za to (03) …
31. července 2008, 00.00 | Znalosti použití materiálu, vytvoření základní kresby letokruhů a simulace jádra a běle, to je všechno pěkné, jenže dřevěný povrch je z pohledu simulace pomocí shaderů velmi komplexní. Nezbývá tedy nic jiného, než pokračovat zkoumáním možností, které při jeho simulaci máme.
Šumy
Od minula máme již potřebné znalosti simulace základního nastavení vzhledu dřeva. Jak jsme se zmínili v perexu, vytvoření letokruhů a také jádra, popřípadě běle. Pravdou však je, že v případě naší (prozatím stále) volumetrické simulace nám chybí v kresbě dřeva mnoho dalších prvků, které jsou zde zobrazené vždy. A nehovořím o sukách, které jsou vlastně vadou, a většinou se jich na povrchu zase tak moc neobjeví (tedy zase platí, na luxusnějším povrchu).
Hovoříme zejména o samotné struktuře dřeva. K tomu jen drobné odskočení. Obecně platí, že dřevo jehličnanů je podstatně homogennější (ve smyslu typů buněk, které obsahuje) než dřevo listnáčů. Dřevo jehličnanů se skládá jen ze dvou typů buněk, přičemž tracheidy (cévice) zaujímají cca 95%. Jehličnaté dřevo je tak již z této podstaty poměrně homogenní. Je tedy snazší i na případnou simulaci a pokud zde vytvoříme nějaký ten „vertikální šum“ pro doplnění kresby, pak se jedná o různé kanálky, které se v tomto dřevu vyskytují, které jsou ale méně četné, než cévy listnatých dřevin...
Zcela odlišná situace je u dřevin listnatých (ty mají čtyři typy buněk, cévy, cévice, libriformní vlákna a buňky parenchymatické), zejména dřevin kruhovitě cévnatých, které mají výraznou kresbu vertikálního vedení (již jsme o tom hovořili, míním tím dřeviny dub, jasan, jilm a akát, případně polokruhovitě cévnatý ořech).
Tedy listnaté dřeviny, zejména ty výše popsané, mají docela dramatickou kresbu a ten „šum“ v letokruzích je velmi výrazný. A co více, projevuje se nejen na transverzálním řezu, ale také na řezech ostatních. Takže výzva je dána, víme čeho chceme dosáhnout...
Základem simulace těchto prvků je tedy shader Šum. Ten má skutečně mnoho parametrů a takto budeme postupně brát podle významnosti.
V prvé řadě si musíme uvědomit, že stále musíme všechny naše shadery otáčet tak, aby byla „délka“ ve směru osy Z, protože ve směru této osy pracuje také shader Dřevo. V případě shaderu Šum tedy opět musíme, za účelem vzájemné kompatibility, používat typ projekce „Textura“, která přebírá informace o poloze vlastnosti Textura na objektu.
Pro simulaci těchto prvků můžeme klidně využívat jednoduchý režim Noise, který jen upravíme ve velikosti a to tak, že zmenšíme jeho celkovou velikosti a masivně zvětšíme velikost ve směru osy Z.
Vyvstává ještě jedna principielní otázka. Kde jsou tyto prvky nejvíce zřetelné? V „jarní“ části přírůstu letokruhu, tedy ve světlejší širší části letokruhu. Co nám ale brání využít shader Dřevo jako „masku“, krycí element, kterým vytvoříme svazky šumu jen v požadovaném prostoru?
Výše zmíněnou simulaci lze snadno vytvořit pomocí shaderu Fůze, kdy v podkladovém kanálu bude jen bílá barva a v krycím náš připravený šum. Jako masku použijeme stejný shader „dřevo“ (stejně nastavený, jen s barvou bílou/černou) Výsledkem bude požadovaný efekt svazku cév vyskytujících se v tom správném prostoru. K tomu se ale dostaneme později, kdy si poměrně podrobně rozebereme konstrukci jednoho ze shaderů, který jsem připravil.
Tyto šumy a vlastně všechny shadery, které mají parametr Delta, mají jednu potíž, o které je dobré vědět. Tou potíží je samotný parametr Delta, který jsme právě zmínili. Jedná se o jakýsi faktor hrbolatosti, který násobí celkový vliv hrbolatosti a to i v šíři, nikoliv pouze v hloubce. Jedná se vlastně o intenzitu „přechodu“ vlysu. Jenže to má také tu nepěknou vlastnost, že to v některých případech spolu s interpolací vytváří nepřesnosti v zobrazení vzorku a tak většinou snažím ostrým šumům v hrbolatosti vyhnout (s vysokou hodnotou Delta). Podobný problém spočívá také v dalším shaderu Dlaždice, ve kterém parametr Delta může nevěrohodně rozšiřovat vlys spáry dlažby. To je ostatně jeden z důvodů, proč raději v tomto případě používám normálové mapy – tedy textury.
Zpět ale k shaderu Šum a jeho nastavení. Barvy budou většinou odpovídat tomu, jak tento shader budeme používat. Tedy barva volné plochy bude zřejmě většinou bílá, abychom ji mohli pomocí vhodného krytí vrstvy se šumem vymaskovat (režim krytí násobení bílou vynechá, můžeme si to představit jako násobení celkové hodnoty jasu „1“ s hodnotou podkladu, která může mít rozsah od 0<>1) a barva samotných prvků bude tmavá přírodní hnědá. Ta se díky násobení stane ještě tmavší, zároveň ale bude stále korespondovat s barvou podkladu ať již běle, tak jádra.
Abychom dosáhli provazců jednotlivých prvků vertikálního vedení, je nutné upravit úrovně do poměrně vysokého kontrastu, většinou jsem tedy snížil hodnotu vrchního oříznutí na cca 50% (pokud byla druhá barva bílá). A to je vlastně vše... Více barvy tvořících shaderů není potřeba, co naopak potřeba je, je jejich vzájemná kombinace a tu si oddemonstrujeme na jednom příkladu...
Simulace dubu pomocí shaderu - konstrukce
V níže uvedeném popisu chci rozebrat základní prvky konstrukce shaderu dubu, který jsem v mírné úpravě použil i pro hlavní průvodní obrázek kořenek. Nebudu popisovat nastavení jednotlivých parametrů, ty případně lze odečíst z obrázků, ale spíše chci zdůvodnit jejich jednotlivé použití a tím vysvětlit logiku, se kterou jsem shader konstruoval.
Omlouvám se také, že prozatím nemohu tento shader uvolnit, ale připravil jsem jej stejně jako ostatní povrchy jako doprovodný prvek soutěže, kterou ujem vyhlásil, a tak bude uvolněn s koncem této soutěže, koncem prázdnin.
Pro celou konstrukci materiálu není zapotřebí více než tří kanálů, kanálu Barva, Odrazivost a Hrbolatost. Nepoužil jsem ani kanál Odlesk a Barva odlesku, protože se mi jeví jako výhodnější využití shaderu Lumas než separátního nastavení odlesku v příslušném kanále Odlesk, protože Lumas má podstatně více možností a interakce odlesku lze v rámci shaderu Vrstvy v kanále Barva řídit podstatně širším způsobem. V tomto směru se ale již opakuji, protože téma Lumas tu proběhlo už několikráte.
Důvodem proč používám prostý kanál Hrbolatost a nikoliv pokročilejší normálové mapy je ve skutečnosti to, že simulujeme volumetrický shader a v jeho případě nepřicházejí normálové mapy v úvahu. Bohužel.
Iluminační model
Dřevěných povrchů se většinou vyplácí použít „matný“ Oren-nayar, který je upraven právě pomocí výše zmíněného Lumasu v kanále barva.
Kanál Barva
Kanál Barva samozřejmě obsahuje shader Vrstvy a v něm jsou všechny základní složky barvy povrchu. Postupovat s popisem budeme od spodních vrstev směrem nahoru, pamatujme na to, že tento shader je v zásadě shodný se správcem vrstev ve PhotoShopu.
První je shader Fůze (1), ten neobsahuje nic převratného, protože obsahuje to, co jsme si již popsali. Základní vrstvou této Fůze je jednouchý shader Dřevo, definující základní barvu povrchu a ve vrstvě krycí je již popsaný šum (30%), kterým jsou generovány globálně rozšířené prvky vertikálního vedení.
Nad tímto shaderem Fůze je další Fůze (2). Ta má opět režim krytí na násobení a režim krytí je 100%. Co je obsahem?
Podkladová je pouze bílá barva, krycí kanál je opět šum s krytím nastaveným na násobení. Abychom vytvořili efekt cév v jarním přírůstu, načteme do masky ten samý shader dřeva, jaký je v hlavní fůzi (1), jen se zamění barvy na černou a bílou a viola, máme cévy v jarním přírůstu.
Dalším shaderem v pořadí je jednoduchý šum (3) opět násobený s podkladem, ale menším krytím 22%. I tento šum je nastaven jednoduše a má vytvářet jen jistou nerovnoměrnost barvy, to je celé, nastavení není zase tak z pohledu věci podstatné. Snad jen, že je opět orientován podél osy Z.
Poslední shader, který má nastavené krytí na násobení, je Přechod (4), kterým je definovaná barva jádra a běle. Barva jádra není příliš tmavá, ale musíme si uvědomit, že krytí Lumasu na „Měkké světlo“ vše poměrně silně zvýrazní. Mimo jádra je v tomto přechodu také dřeňová oblast (zcela vlevo).
Lumas (5) je do značné míry nejdůležitějším shaderem. Dodává systému informace o celkové difusi, dodává barvě dynamiku a co více, je implementován i v odrazivosti. Původně jsem shader Lumas vždy používal v režimu krytí Závoj. Jednalo se tak de facto o analogii kanálu Odlesk materiálu. Po jisté úvaze jsem dospěl k tomu, že plastičtější režimy Překrýt, Tvrdé světlo (bližší chování kovových povrchů) a Měkké světlo (dřevo, plasty, dlažba apod.) jsou také poměrně zajímavé, protože výsledný dynamický efekt je velmi, velmi přirozený a tím pádem zajímavý. Vzhledem k výsledkům lze tvrdit, že je poměrně blízký (spolu právě s odrazivostí) chování materiálů ve VRay.
Nikdo nám navíc nezakazuje využívat více vrstev „lumasu“ s tím, že další vrstva skutečně může být nastavená na režim Závoj a může mít jen nižší krytí, které dorovná nastavení níže ležícího lumasu s měkkým světlem.
Zpět ale k našemu Lumasu (5), ten má krytí nastavené na měkké světlo a míra krytí je na 60%. Barva tohoto shaderu není nastavená, jediné co využívám jsou jednotlivé odlesky, které jsou poměrně intenzivní.
Poslední vrstvou je HSL (6) filtr, kterým jen upravuji výslednou barevnost (včetně působení Lumasu).
Odrazivost
Kanál Odrazivosti je do značné míry shodný s kanálem barvy a také jeho základ vznikl kopírováním obsahu kanálu Barva. I zde najdeme shader Vrstvy a v něm několik dalších vzájemně spolupůsobících shaderů. Opět si to vezmeme od základního podkladového shaderu Fůze.
Fůze (1) je kopií stejného shaderu kanálu Barva, stejně tak Fůze (2) a Přechod (3). Zde není jediného rozdílu. Snad jen, že jsem vynechal onen „doplňující“ šum, nebyl podle mého tak úplně zcela zapotřebí.
Další v pořadí je shader Fresnel (4). Ten je nastaven tak, že na levé straně je bílá a v cca 65% tmavě šedá barva. Krytí je nastavené na Závoj, tedy dochází ke velkému zesvětlení okrajů. Aby nebylo tak výrazné, je snížené krytí na cca 50%. A jak Fresnel pracuje? Budu se jistě opakovat, pracuje na principu porovnání úhlu normály povrchu a paprsku kamery, čím větší je tento úhel, tím je povrchu dána barva více k levé straně přechodu a obráceně. Tedy v tomto případě jsou okraje koule, ale také vzdálené plochy podlahy více odrazivé, než plocha přímo pod nohama.
Co je vlastně odlesk. Je to, jak známo, simulace odrazu světla. Pro více realistické chování je zapotřebí, abychom tuto skutečnost také simulovali. Odraz bude i tam, kde dopadá světlo a tvoří „odlesk“. Pomůžeme si tedy opět Lumasem (5), který bude mít stejné nastavení krytí jako v Barvě.
Mimo zde nastavené shadery je podstatná také celková míra odrazivosti zadaná v nastavení kanálu. Tu můžeme snížit na hodnotu cca 15% a nastavit režim na násobení. Poté můžeme v nastavení barvy upravovat celkovou barevnost odrazu. Ta by asi většinou měla alespoň mírně odpovídat celkové barvě povrchu.
Hrbolatost
Hrbolatost je kanálem ze všech tří nejjednodušším. Obsahuje totiž jen shader Vrstvy a v něm první dva shadery „Fůze“, které jsem pro jednoduchost ani nekonvertoval do škály šedé. Vrchní kanál jen měl poněkud sníženou míru krytí na cca 70%.
A to je opravu vše, snad mimo úpravu celkové míry hrbolatosti. Ta bude okolo cca 20%, ale pokud bychom dělali detail nějakého předmětu, pak ji můžeme klidně i snížit (viz kořenky níže, ty zrovna měly hodnotu hrbolatosti jen 10%).
Závěrem
V této chvíli máme popsané všechny aspekty, se kterými jsem přistupoval k tvorbě shaderů. Jak víte, tyto shadery jsem následně využil ke generování celé řady textur a na tvorbu těchto textur se podíváme v příštím, již opravdu posledním díle.
Tématické zařazení:
-
23. dubna 2014
Konica Minolta přenesla výhody velkých zařízení do kompaktních modelů
-
11. května 2014
-
23. května 2014
Epson na konferenci Droidcon Berlin ukázal nové možnosti čekající na vývojáře OS Android
-
24. listopadu 2014
-
13. května 2014
Samsung NX3000: retro styl, špičkový výkon a snadná konektivita v jednom přístroji
-
30. listopadu 2014
Nový fotoaparát α7 II: první plnoformát s pětiosou optickou stabilizací obrazu na světě
-
15. prosince 2014
Konica Minolta pomůže živnostenským úřadům s digitalizací dokumentů
-
11. května 2014
-
26. listopadu 2014
Canon Junior Awards již posedmé ocení mladé fotografy v rámci Czech Press Photo
-
21. srpna 2014