Přehled nových funkcí v Blenderu (9. část): Vybrané novinky verze 2.46 a jejich praktické využití - 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

Přehled nových funkcí v Blenderu (9. část): Vybrané novinky verze 2.46 a jejich praktické využití

30. června 2008, 00.00 | Blender ve verzi 2.46 s sebou opět přinesl velké množství novinek a změn.
Dnešní článek si dává za úkol některé z nich představit a ukázat možnosti jejich praktického využití.

Zapékání textur

Tento pojem je široce znám zejména v oblasti lowpoly modelingu, a proto i my do ní částečně zabrousíme. Co je to lowpoly modeling? Způsob modelování, který se využívá především pro aplikace v reálném čase (typickým příkladem jsou počítačové hry). Lowpoly modeling si klade za cíl vytvářet modely s co nejnižším možným počtem polygonů tak, aby zachoval co nejvěrohodněji tvar požadovaných objektů, čímž snižuje nároky na výkon procesoru. Vytvořit kvalitní lowpoly model ovšem není záležitost na pár minut. Zpravidla se vytvoří highpoly objekt (tedy objekt s de facto nelimitovaným počtem polygonů), z nějž se poté namapují na lowpoly objekt např. normal, diffuse, specularity a color mapy. „Namapují“ ovšem není ten správný výraz, vhodnější je říci, že se zapečou - celý proces totiž spočívá v tom, že se z highpoly modelu vyzáří paprsky na lowpoly model (s tím, že lowpoly model musí být unwrapován v UV editoru), čímž se přesně určí pozice veškerých detailů na highpoly modelu, které se poté zapečou do unwrapu. V teorii tedy nic složitého, nyní můžeme přistoupit k nástrojům, které nám vysvětlený proces pomohou uskutečnit.

Pro náš další postup bude klíčovým prvkem Bake panel, který se nachází v Render buttons:

Bake panel
Poznámka: textury lze zapékat pouze u meshů - ty jediné mohou mít UV koordináty

K jednotlivým tlačítkům:

  • Bake - vydá příkaz k zapečení textury
  • Selected to active - pokud není aktivováno, zapečou se textury pouze u naposled vybraného meshe, v opačném případě se zapečou textury ze všech vybraných meshů na naposled vybraný objekt
  • Dist - maximální povolená vzdálenost od aktivního objektu k objektu, z nějž chceme zapéci textury
  • Bias - záměrem autorů bylo, aby se daly za pomoci tohoto parametru zapékat informace z face, které jsou dále, než nejbližší face. Po nekrátkém testování jsem zjistil, že do výsledku se nezapeče nic, co je ve vzdálenosti Bias od vzdálenosti Dist (směrem k objektu, do nějž zapékáme). Co z toho vyplývá? Nastavování vyšších hodnot v Bias má stejný efekt, jako nastavování nižších hodnot v Dist. Pokud by někdo přišel s nějakým jiným zjištěním ohledně tohoto parametru, vyjádřete se prosím v diskuzi pod článkem
  • Roletkové menu (pouze u Normals) - zde se nastavuje prostor, v němž se budou počítat normal mapy:
    • Camera - doposud používaný způsob výpočtu
    • World - normály v globálních souřadnicích - zde záleží na transformaci a deformaci objektu
    • Object - normály v objektových souřadnicích - zde nezáleží na transformaci, ale pouze na deformaci objektu
    • Tangent - normály v tangentových souřadnicích, nezáleží ani na transformaci, ani na deformaci objektu. Jak udává blender.org, jde o "nejsprávnější" volbu ve většině případů - proto ji též dnes využijeme. Pokud by někoho zaujalo obsáhlé téma tangent normal mappingu, doporučuji pročíst odpovídající článek na Wikipedii. Pro náročnější je zde pak například tento článek

Jen pro představivost - takto mohou vypadat normal mapy ze stejného objektu, jediným rozdílem je jiný typ počítání mapy:

Srovnání různých typů výpočtu normal mapy

  • Normalized (pouze u AO a Displacement) - laicky řečeno, slouží k vyladění expozice (pouze dvě možnosti - buď je zapnuto nebo vypnuto)
  • Full Render - zapeče textury, včetně materiálů a difúzního shaderu - zkrátka tak, jak bychom vše viděli na renderu
  • Ambient Occlusion - zapeče pouze AO
  • Normals - zapeče pouze normal mapu
  • Textures - zapeče všechny textury (bez difúzního shaderu)
  • Displacement - zapeče displacement mapu
  • Clear - pokud je aktivováno, nová textura se začne zapékat na čisté plátno
  • Margin - řídí velikost unwrapu (v pixelech) za hranicí švu (v UV editoru) - to napomáhá tomu, aby švy nebyly tak viditelné
Poznámka: pokud chceme se zapečenou texturou pracovat i mimo rámec aktuálně otevřeného Blenderu, musíme ji uložit (header UV Editoru -> Save As)

Tolik k výkladu, nyní se můžeme pustit do práce. Začneme nějakým jednoduchým sculptovaným modelem:

Sculpt

Nyní za pomoci Retopo vytvoříme druhý objekt, který bude kopírovat náš sculptovaný model. Tentokrát ale nemusíme dbát na to, abychom v meshi neměli trojúhelníky - v lowpoly modelingu jsou naopak upřednostňované. Mesh vlevo má 42 polygonů, mesh vpravo jich má 13 826:

Lowpoly a highpoly mesh

Nyní provedeme unwrap lowpoly meshe. V podstatě ani nezáleží na tom, kam umístíme švy, protože Blender všechny informace pro zapékání vezme z highpoly meshe. Poté přesuneme meshe tak, aby se překrývaly a v UV image editoru vytvoříme obrázek o libovolných rozměrech (pro textury na modely do her se doporučují mocniny 2 - např. 256 x 256, 512 x 512, ...). Nakonec využijeme Bake panelu a zapečeme normal mapu. Připomínám, že využijeme tangentový typ výpočtu normal mapy. Ošemetným by pro někoho mohlo být nastavení normal mapy. V Material buttons, v dialogu pro přidávání textur, je třeba nastavit texturu jako Normal mapu:

Nastavení normal mapy

Lowpoly a highpoly mesh

Ano, výsledek není až tak dobrý, jak bychom čekali, nicméně musíme zohlednit několik okolností:

  • Topologie meshe není zrovna ukázková (resp. polygonů je příliš málo, než aby byly lépe vyobrazeny detaily)
  • Blender (zatím) nepodporuje výpočet dalších textur (jako např. specularitní mapu atd.), které by opticky zkrášlily výsledek
  • Parametr Dist a samotný unwrap by si zasloužily více ladění

Pro ukázku normal a color mapa (color mapa = zapečený full render):

Obdobně bychom mohli vytvořit displacement mapu, ale to bychom museli náš lowpoly model ochudit o trojúhelníky. V tomto postupu nešlo ani tak o vytvoření brilantního lowpoly modelu, jako spíše o pochopení principu tvorby lowpoly modelu a využití nových funkcí Blenderu. S trochou vytrvalosti a chuti experimentovat můžeme dostat velmi kvalitní výsledek. Zapékání textur se samozřejmě nemusí nutně omezit jen na lowpoly modely. Učebnicovým příkladem by mohl být výpočetně náročný model - řekněme sculptované monstrum s miliony polygonů. Pokud bychom jej chtěli rozpohybovat, potřebovali bychom velmi výkonný stroj, ovšem účinným lékem by mohly být též normal mapy, v takovém případě by ale bylo zapotřebí vhodně vybalancovat rovnováhu mezi detaily na modelu a detaily na textuře. Nyní můžeme přejít k další novince

Approximate AO

Výpočet AO není v Blenderu zrovna nejrychlejší - koneckonců, není se ani čemu divit, když se při výpočtu využívá raytracingu. Projekt Big Buck Bunny vznesl požadavek na vylepšení AO - nejen na jeho zkvalitnění, ale také na zrychlení výpočtu. Tak vzniklo Approximate Ambient Occlusion. Tato metoda spočívá v tom, že se zprůměrují hodnoty výpočtu, čímž dojde jednak k odstranění šumu, který způsobovalo samotné AO, jednak ke zkrácení doby výpočtu. Tato metoda je vhodná zejména pro animace - šum je totiž při raytracovaném AO v každém snímku animace trochu odlišný, což vyústí v nežádoucí zrnění. Nicméně AAO není vhodné pro každou scénu, právě díky své "průměrné" povaze, popřípadě je třeba si více pohrát s nastavením. Pojďme se podívat na AAO panel. Ten se nachází ve World buttons pod záložkou Ambient Occlusion. K tomu, abychom využívali AAO, musíme vybrat typ metody Approximate v roletkovém menu:

AAO panel

  • Passes - počet přípravných passů, které zabraňují špatnému výpočtu, více passů = delší výpočet
  • Correction - dodatečné opravy, které zesvětlují příliš tmavá místa
  • Use Falloff - "ztenčuje" stíny na meshi - přechody mezi nimi nejsou tolik znatelné (0 = žádné ztenčení, 10 = maximální ztenčení)
  • Roletkové menu - výběr approximate/raytracing metody
  • Error - chybovost, tzn. čím větší číslo, tím rychlejší výpočet, ale také větší množství chyb
  • Pixel Cache - načte informace o AO do vyrovnávací paměti a poté překryje sousední body, což asi 5x zrychluje výpočet při zachování de facto stejné kvality (ta se ovšem dost významně odvíjí od scény)
  • Add, Sub, Both - způsob, jakým bude AAO míchat stínování s ostatními světly ve scéně. Analogicky jako ve 2D grafice - Add = přičítání (zesvětlení), Sub = odčítání (ztmavnutí - zde musíme mít ve scéně alespoň jedno světlo, aby bylo něco vidět) a Both = obojí (kombinuje obě předchozí možnosti, což má za následek výraznější stíny i světla)
  • Plain - k nasvícení se použije bílá barva
  • Sky Color - k nasvícení se použije barva horizontu a zenitu
  • Energy - udává energii vyzářeného světla

Pro ukázku, jak může vypadat obrázek s AAO:

Test AAO

Nyní trochu odbočíme - co se týče popisků na obrázku, v Blenderu je nyní možné nechat tyto popisky vygenerovat automaticky. Lze tak provést na panelu Stamp v Render buttons aktivací Enable Stamp a Draw Stamp:

Můžeme nechat vygenerovat např. název aktuálního .blend souboru, název scény či kamery, číslo snímku, rendertime nebo libovolnou vlastní poznámku. Parametry textu (barvu, velikost) můžeme též libovolně měnit.

Na závěr pár dodatků k AO: měli bychom zkontrolovat, zda všechny facy mají normály natočené směrem ven. Pokud ne, je možné, že bude docházet k chybám při výpočtu. Ty se mohou stejně tak objevit, pokud máme u sebe dva facy natočené stejným směrem - to většinou vede k příliš velkému ztmavení ploch. Nové částice AAO ignorují kvůli zkrácení doby výpočtu a využívají informací ze svého emitoru (ten je vystínován právě ve výše zmiňované přípravné fázi). Mým posledním poznatkem je, že samotné AAO nezobrazuje barvu objektů, které používají Ramp shadery - potřebujeme dodatečné světlo.

Čočka - zakřivení

Na závěr si předvedeme jednu novinku z oblasti Node editoru - nový node Lens distortion. Jak název napovídá, tento node má simulovat zakřivení čočky.

Lens distortion node

  • Projector - zruší zakřivení a posune RGB kanály (obdobně jako u nenakalibrovaného projektoru):

Posunuté RGB kanály

  • Jitter - náhodně rozmístí RGB kanály, což má za následek šum
  • Fit - při zakřivení může docházet k tomu, že obrázek je menší, než nastavená velikost renderu. Tato volba umístí zakřivený obrázek přesně do renderu
  • Distort - množství zakřivení, od -1 (pro vypuklé čočky) po 1 (pro duté čočky)
  • Dispersion - rozptyl barev (též dojde k posunutí RGB kanálů, ale přechod mezi nimi se rozostří)

Rozptyl barev na hranách

A to by bylo k dnešnímu článku vše. Verze 2.46 skrývá ovšem spoustu dalších tajemství (nehledě na ta, jež jsme u starších verzí zatím nestihli odhalit), která čekají na to, až je postupně dopodrobna rozebereme :). Těším se na shledanou s vámi u dalšího dílu.

Tématické zařazení:

 » 3D grafika  

 

 

 

 

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

Uživatelské jméno:

Heslo: