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 (10. část): Simulace látky
4. srpna 2008, 00.00 | Dnešní článek si bere na mušku další z řady novinek v Blenderu co se týče modelování, resp. animování. Rozebereme takto problematiku jedné z nejnáročnějších oblastí CG, a sice simulaci látek.
V předchozích verzích znamenalo Softbodies a Cloth simulation prakticky to samé - k obojímu se přistupovalo přes Softbodies panel, záleželo pouze na nastavení a na tom, zda je mesh uzavřený či nikoli. Ve verzi 2.46 došlo k jejich separaci a k simulaci látky se přistupuje přes zvláštní panely, které se nacházejí v Object buttons (F7), a to konkrétně ve Physics buttons reprezentovaných ikonkou :
Pojďme si nejříve popsat jednotlivá nastavení:
- Cloth - aktivuje simulaci látky
- Material Preset - několik přednastavených typů látky (bavlna, kůže, denim, hedvábí a hadr)
- StructStiff - tuhost struktury látky, při nižších hodnotách působí látka elastickým dojmem
- BendStiff - tuhost při ohýbání, udává, jakým způsobem se budou utvářet ohyby na látce, vyšší hodnoty způsobí, že se budou vytvářet větší ohyby (nemusí jich ale být víc než při nižších hodnotách)
- Spring Damp - udává, kolik pohybu se utlumí, což může vyústit v plynulejší animaci
- Air Damp - tření vzduchu, nastavení 0 přibližně odpovídá podmínkám na Měsíci
- Quality - kvalita animace, vyšší čísla samozřejmě více zatěžují procesor, na druhou stranu ale dochází k menšímu roztřepení při vyšším BendStiff a i kolize se počítají lépe
- Mass - hmotnost látky, na okrajích látky je o trochu větší (kvůli zachování realističnosti)
- Gravity - pomocí X, Y a Z parametrů můžeme udat sílu gravitace z jednotlivých směrů v prostoru
- Pinning of cloth - možnosti uchycení látky, k podrobnějšímu výkladu se dostaneme později
Naším dalším společníkem je Collision panel:
Opět jednotlivá nastavení:
- Bake - zapeče animaci v rozmezí snímků udávaném parametry Start a End
- Enable collisions - povolí kolize s kolizními objekty
- Min Distance - pokud je vzdálenost látky a kolizních objektů menší než Min Distance, začne se počítat kolize
- Collision Quality - počet přepočítání kolize, vyšší číslo = vyšší kvalita = vyšší spotřeba výkonu
- Friction - tření mezi látkou a kolizním objektem, udává tedy, jak snadno látka sklouzne z onoho objektu
- Enable selfcollisions - povolí kolize látky se sebou samou
- Min Distance - obdobně jako výše, tentokrát se ovšem vztahuje pouze k meshi s látkou
- Selfcoll Quality - kvalita kolize sama se sebou
Poslední panel, který nás při simulaci látky bude zajímat, je Advanced s několika pokročilými nastaveními:
Pozn.: k zobrazení těchto možností je potřeba mít v meshi alespoň jednu vertexovou skupinu
Díky Stiffness scaling (rozložení tuhosti látky) můžeme ovlivnit vlastnosti látky v jejích jednotlivých částech. Za pomoci Weight paintu určíme, které části meshe se budou více ohýbat a které méně. Hodnoty jsou v rozmezí těch hodnot, které udáme na Cloth panelu v StructStiff a BendSTiff (reprezentovány hodnotou 0 ve Weight paint módu) a které udáme na Advanced panelu v StructStiff Max a BendStiff Max (reprezentovány hodnotou 1 ve Weight paint módu). Zde jsou jednotlivá nastavení:
- Enable stiffness scaling - aktivuje stiffness scaling
- Roletková menu - výběr vertexových skupin, na nichž se projeví různé rozložení tuhosti při napínání (StructStiff) nebo různé rozložení tuhosti při ohýbání (BendStiff)
- StrucStiff Max - určuje maximální tuhost při napínání
- BendStiff Max - maximální tuhost při ohýbání
Charakter simulace látky
Simulace látky jako takové je jeden z nejnáročnějších úkonů ve světě 3D grafiky. Látky v Blenderu jsou ovlivněny nejen kolizními objekty (ať už statickými či pohyblivými), ale například také nejrůznějšími silovými poli (vítr, vír, atp.), přičemž jako uživatelé máme toto vše plně pod kontrolou. Simulaci látky můžeme aktivovat i pro uzavřené meshe, pro ně se ovšem spíš doporučuje využít Softbodies. Simulace látky má charakter modifikátoru, z čehož plyne několik zásadních výhod. Jednak může být ovlivněna ostatními modifikátory (jako např. Armature, Lattice, či Smooth), jednak ji můžeme aplikovat na libovolném snímku, čímž danou pozici všech bodů uzamkneme, což nám v některých případech může ušetřit namáhavou práci při ručním modelování látky (např. látka na sculptovaném modelu). Musíme ovšem dodržovat jistá pravidla: dejme tomu, že máme zarigovaný model postavy a za pomoci armatur nastavíme nějakou pózu této postavě. Poté budeme chtít spočítat simulaci látky. Cloth modifikátor ovšem musí znát tvar meshe, ať už je jakkoli deformovaný - z toho logicky vyplývá, že musí být až na samém konci zásobníku s modifikátory, protože pokud bychom jej měli např. nad Armature deform modifikátorem, látka by se přizpůsobovala nezdeformovanému meshi. V rámci urychlení výpočtů je možné Cloth modifikátor přesunout nad Subsurf, pokud není kolizní objekt příliš hranatý, to už ovšem záleží na scéně.
Mezivýpočty
Výsledky výpočtů simulace se ukládají do cache, takže pokud necháme simulaci počítat v rozmezí snímků, které zadáme v Collision panelu, nemusíme podruhé čekat na přepočítání animace. K uvolnění výsledků z cache slouží tlačítko Free Cache, které se objeví, pokud animaci necháme spočítat ve zmíněném rozmezí snímků.
Poznámka k vrstvám a objektům
Blender.org udává, že pokud budeme mít objekt s látkou v jiné vrstvě než kolizní objekt, simulace kolizní objekt nezahrne do výpočtů, pokud není vrstva s objektem viditelná. Při testování jsem ale zjistil, že rozmístění objektů do nezobrazených vrstev nemá na výpočet vliv. Jediné, co je důležité, je, aby byl objekt nastaven jako kolizní (opět v Physics buttons)
Jediný typ objektu, s nímž je v současné době Cloth simulation schopná počítat, je mesh. To znamená, že pokud budeme mít např. NURBS plochu, křivku s BevOb nebo Text, budeme je muset převést na mesh.
Editace animace
Blender.org udává, že zapečenou animaci (tedy po stisku Bake v Collision panelu) můžeme na kterémkoli snímku upravit v Edit módu a po jeho opuštění se aktuální poloha všech bodů uloží a zahrne do animace. Objeví se nám také tlačítko Rebake from current Frame, které umožňuje přepočítat animaci od stávajícího snímku až do konce s tím, že simulace bude brát v potaz námi upravený mesh. V praxi se mi ovšem ničeho takového nepodařilo dosáhnout, stačilo pouze vstoupit do Edit módu a vystoupit z něj (tedy nedělat žádné změny) a animace zůstala v celém rozpětí snímků "ztuhlá" tak, jako na snímku, na němž jsem se nacházel, když jsem vstoupil do Edit módu. Tlačítko Rebake from current Frame poté fungovalo jen pokud jsem se nacházel na snímku nastaveném v políčku Start. Toto číslo ani nelze změnit, pokud máme animaci zapečenou. To je poněkud politováníhodné, zvlášť když vezmeme v potaz, že ruční úprava animace by se mnohdy hodila.
Odstavec výše je v rozporu, ale i částečném souladu s tím, co udává Blender.org: animace by měla ztuhnout, ale jen pokud provedeme úpravy jako přidání, smazání či extrudování vertexů (tedy jen pokud změníme jejich počet). Bohužel, i když jsem žádné takové úpravy neprováděl, animace přesto ztuhla. Co je trochu horší, že pokud v tomto momentě stiskneme Free Bake, přepsané výpočty se sice smažou, poloha meshe ale zůstane stejně zatuhlá. Nevím, zda výše popsané procesy jsou nějakým bugem, či mi někde něco uniklo, ale pakliže kdokoliv z vás přijde na nějaký spolehlivý postup, podělte se o něj prosím v diskusi pod článkem.
Ještě problémovější se ukázalo přidání vertexů (konkértně malého Plane) v Edit módu - animace ztuhla, ale pokud jsem se pokusil stisknout Free Bake, byl jsem odměněn chybovou hláškou, která mě upozorňovala, že bych měl opustit Edit mód, ve kterém jsem se ovšem nenacházel. Je škoda, že i přes informace na Blender.org je v tomto ohledu simulace poněkud nedotažená. Nechci se dotknout vývojářů ani testerů, pouze cítím jako povinnost vás o tom zpravit, ale jak jsem již řekl - pokud by kdokoli dospěl k jiným závěrů, sdělte je prosím v diskusi pod článkem.
Připínání látky
Jak jsme si slíbili výše, teď se podíváme na připínání látky. Vytvoříme si nějakou jednoduchou scénu - vložíme mřížku s 32 x 32 vertexy a pod ni umístíme kolizní objekt - řekněme krychli upravenou funkcí Bevel (v menu pod W v Edit módu). Poté přidáme vertexovou skupinu (v mém případě pojmenovanou chyt) a přiřadíme jí body na jedné straně mřížky. Nezapomeneme nastavit mřížku jako látku (stiskem tlačítka Cloth na Cloth panelu) a krychli jako kolizní objekt (v panelu nastavujícím kolize - ne náhodou je to též Collision panel, ale nachází se na stejné kartě jako Fields panel - to vše též v Physics buttons):
Nastavíme látku jako hedvábí (Silk), stiskneme tlačítko Pinning of cloth a necháme spočítat animaci. Látka zůstala uchycená na jedné straně a kolidovala s krychlí:
Parametr Pin Stiff určuje tuhost uchycených bodů, v praxi jsem ale nezaznamenal nějakou viditelnější změnu.
Problém může nastat, pokud ve Weight paint módu určíme příliš velkou variaci váhy jednotlivých bodů - např. na obrázku níže mají rohy váhu 1, vše mezi nimi má váhu přibližně 0,5 a zbytek vertexů má váhu 0. Při spuštění animace se objeví velmi nežádoucí efekt, doporučuji tedy si s Weight paintem příliš nezahrávat - procesor to nesnáší zrovna nejlíp:
Je doporučeno v kombinaci s Cloth modifikátorem používat též Subsurf k optickému zkrášlení a vyhlazení látky. Obdobně je možné využít též Smooth modifikátor, ale ten přesouvá jednotlivé body v meshi a tudíž by mohlo docházet k nepřesnostem.
Slovo závěrem
Byť je pro uzavřené meshe doporučeno používat softbodies, při korektním nastavením by použití Cloth nemělo představovat problém - nastavení jsou ale samozřejmě trochu odlišná. Co se týče chyb, tak by si Cloth modifikátor zasloužil ještě drobné ladění, ale i tak se jedná o skutečně mocný nástroj, ještě když vezmeme v potaz, že veškeré výpočty jsou o trochu přesnější než v minulých verzích. Zkrátka - vývojáři opět předvedli, že dokáží odvést pořádný kus práce, za což jim patří velký dík. Těším se s vámi u dalšího dílu na shledanou.
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