Tečeme v Blenderu 2.5 Alpha 2 - 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

Tečeme v Blenderu 2.5 Alpha 2

27. května 2010, 00.00 | Vážení čtenáři, vzhledem k množícím se dotazům na simulaci kapalin v Blenderu se v dnešním článku zaměříme na toto ožehavé téma a vše si přitom budeme předvádět ve verzi 2.5, byť Blenderovský simulátor kapaliny je jednou z oblastí, která zatím od verze 2.49 neprodělala žádné výrazné změny. Dnes se ostatně přesvědčíme o tom, že z kvalitativního hlediska není příliš nutno něco měnit.

Ještě než se pustíme do kapalin, bude záhodno zmínit, že 3. března vyšla verze 2.5 Alpha 2, která byla opravou nedlouho předtím vydané Alpha 1, která neukládala textury do .blend souborů. Ovšem nutno dodat, že Alpha 1 opravila zhruba stovku "záplat" oproti Alpha 0. Stahovat můžete z oficiálního webu.

Blender 2.5 Alpha 2 Splash screen

A teď už k samotným kapalinám. V Blenderu simulace kaplin funguje tak, že je potřeba mesh, jehož Bounding box určuje prostor, v němž se bude simulace odehrávat - tzv. Domain object. Dále je potřeba mesh určující kapalinu a v případě potřeby můžeme do hry zapojit i překážky nebo částicové systémy, které budou vytvářet dodatečná šplíchnutí a výsledné animaci tak přidají na uvěřitelnosti.

Pro začátek si vytvoříme jednoduchou scénu s kvádrem, který bude Domain objektem, icosphere, z níž bude vytékat tekutina a nakonec jednu překážku. Překážka je taková, jaká je, protože vytváří dva odlišné prostory a bude na ní patrnější chování kapaliny při různých nastavení:

Scéna

Jak vidno, ani objekt tvořící překážku není příliš komplikovaný; uprostřed něj je díra, která umožňuje kapalině protéct přímo na dno Domain objektu (tzn. objekt překážky nepřesahuje spodní stranu Domain objektu):

Překážka pro simulaci kapaliny

Nyní je potřeba aktivovat postupně všem objektům Fluid fyziku. Učiníme tak na paletě Physics (úplně vpravo na headeru Properties window):

Physics paleta

Na pořadí nezáleží, protože výslednou animaci zapékáme až pomocí nastavení Domain objektu. V části Fluid přidáme objektu nastavení Domain tlačítkem Add a následným výběrem v roletkovém menu. Objeví se nám několik nových nastavení:

Domain nastavení
  • Add / Remove - přidá nebo odebere fluid vlastnosti
  • Ikonka foťáku - značí, zda se simulace bude zobrazovaz na renderu
  • Ikonka oka - značí, zda se simulace bude zobrazovaz ve viewportu
  • Bake Fluid Simulation - zapeče simulaci
  • Resolution (Final) - klíčové nastavení při určování kvality simulace; vyšší číslo = vyšší kvalita = víc spotřebované paměti = delší výpočetní čas
  • Resolution (Preview) - rozlišení náhledu ve 3D okně; ve skutečnosti jde o procentuální vyjádření Final Resolution, proto zadáváme čísla od 1 do 100
  • Render Display - určí, co se bude zobrazovat na renderu - finální simulace (Final), preview nebo původní geometrie objektu (Geometry)
  • Viewport Display - stejné jako u Render Display, jen se týká viewportu
  • Start, End - určuje délku trvání simulace v reálném světě ve vteřinách, tento údaj se pak "rozprostře" na rozpětí snímků určených parametry Sta a End v Render buttons; můžeme tak dosáhnout i superzpomalené nebo superzrychlené animace
  • Generate Speed Vectors - určuje, zda se budou počítat pohybové vektory, abychom posléze mohli v Node Editoru aplikovat Vector Blur i na kapalinu
  • Reverse frames - otočí simulaci, aby se přehrávala pozpátku
  • Cesta k souborům simulace - absolutní cesta ke zdrojovým souborům simulace, je vhodné vytvářet na každou simulaci zvláštní složku, protože defaultně je použita C:/tmp/

S cestou ke zdrojovým souborům simulace souvisí i jeden bug, na který občas můžeme narazit. Konkrétně jde o to, že již vypočítaná animace se např. po restartu Blenderu zasekne na určitém snímku a odmítá se přehrát dál, i když zdrojové soubory existují a těsně po výpočtu simulace se vše zobrazovalo správně. Pomoc je snadná, nemusíme nic počítat znovu, stačí Domain objektu zrušit Fluid simulaci a znova ji nastavit, včetně složky se soubory. Tento bug uvádím jen pro úplnost - je možné, že v praxi se s ním vůbec nesetkáte.

Zpátky k naší simulaci. Překážce nastavíme v roletkovém menu Obstacle a vyskočí nám dalších pár nastavení:

Nastavení překážky
  • Volume Initialization - zde můžeme vybrat, která část objektu se použije pro výpočet
    • Volume - vnitřní část meshe; pouze pro uzavřené objekty
    • Shell - použije se pouze tenká vrstva kolem meshe (větší, než Volume); i pro neuzavřené objekty
    • Both - kombinace obojího; objekt by měl být uzavřen
  • Slip Type - určuje, jak moc bude kapalina po povrchu překážky klouzat
    • Partial Slip - částečné klouzání, sliderem Amount nastavujeme hodnotu skluzu
    • No Slip - žádné klouzání, kapalina drží na překážce
    • Free Slip - volný pohyb
  • Export Animated Mesh - zatrhneme, pokud se překážka pohybuje kvůli Armatuře, Lattice nebo Shape Keys (objektové transformace jako přesun, otočení nebo změna velikosti toto nastavení nevyžadují) - zpomaluje výpočet
  • Impact - pouze pro pohyblivé objekty; určuje, jaký bude mít srážka překážky s kapalinou vliv na výslednou simulaci - hodnota 1.0 vyvolá očekávaný pohyb, hodnoty vyšší způsobí silnější efekt, záporné hodnoty potom opačný

U překážky, stejně jako u kapaliny je nesmírně důležité dbát na to, aby normály byly otočeny správně - to ve většině případů znamená všechny stejným směrem, jinak bude simulace vyrábět NG (neuvěřitelný guláš). Nyní nám zbývá nastavit už jen kapalinu. Vybereme Icosphere a nastavíme jí typ objektu Inflow - to znamená, že z ní bude neustále proudit kapalina; pokud bychom nastavili Fluid, využil by se jen objem tělesa, což je pro naše momentální potřeby nedostačující.

Nastavení Inflow
  • Inflow Velocity - pomocí koordinátů ve světových souřadnicích určí směr, kterým bude kapalina stříkat; důležité je též nastavení gravitace (k tomu se dostaneme později)
  • Use Local Coordinates - použije lokální souřadnice, místo globálních (vhodné např. u rotujících objektů)

Nyní, když máme všechny objekty nastavené, stačí simulaci zapéct tlačítkem Bake Fluid Simulation v nastavení Domain. Jednoduché nastavení materiálu vody s raytracingovým lomem a odrazem světla vyústilo v jednoduchý render:

Tekoucí kapalina

Odbočka - malý výlet do světa optimalizace renderu ve verzi 2.5

Každá scéna s raytracingem se dá optimalizovat pomocí Octree parametru, který se dříve nacházel kousek pod tlačítkem Render v Render buttons. Abych vás ušetřil stejného tápání, jaké jsem zažil při hledání tohoto nastavení, k nalezení je opět v Render buttons, ale v části Performance:

Octree

Princip je jednoduchý - čím vyšší číslo, tím vyšší optimalizace, tím kratší výpočetní čas. Ve verzi 2.5 jsou ale implementovány další optimalizační BVH (Bounding Volume Hierarchy) moduly. Vzhledem k tomu, že to ale není předmětem dnešního článku, uvedu pouze odkazy na blender.org:
Ray Tracing Optimization
Test Scenes

Teď, když máme hotovou naší první simulaci, pojďme si představit další typy objektů, které můžeme v simulaci využívat. Nejdřív ale doplníme znalosti o podrobnějších nastaveních Domain objektu. Pokud objekt nastavíme jako Domain, na samém spodku Physics panelu nám naskočí pár dalších nastavení.

Domain World

Domain World
  • Gravity - určuje směr a sílu gravitace v jednotkách metr/(sekunda na druhou) ve světových souřadnicích - všimněte si fyzikálně přesné (aspoň co se středních škol týče :)) hodnoty 9,81
  • Viscosity Presets - umožňuje vybrat jeden z přednastavených modelů vlastností kapaliny (voda, med, ropa nebo manuální), co se manuálního nastavení týče, předpokládá se, že nebudete mít strach z trocha fyzikálních výpočtů, ty si zde ovšem uvádět nebudeme; pro zvídavé uvedu pouze odkaz v angličtině
  • Realworld-size - rozměry kapaliny v reálném světě v metrech, např. šálek čaje bude mít cca 0.1m, kdežto bazén např. 10m (10 je nejvyšší hodnota - při vyšších by výpočty mohly být nestabilní)
  • Gridlevel - určí, kolik přizpůsobivých úrovní mřížky použít při simulaci; je doporučeno nechávat defaultních -1, kdy Blender sám určí potřebnou hodnotu
  • Compressibility - stlačitelnost kapaliny kvůli gravitačním silám - pokud se objevují nepohyblivé části kapaliny při vysokém rozlišení, většinou pomáhá snížení tohoto parametru (ovšem je třeba počítat s delším výpočetním časem)

Domain Boundary

Domain Boundary
  • Slip Type - stejné jako u překážky, tentokrát ovšem platí pro samotnou kapalinu na jakémkoli povrchu (s již nastavenými překážkami dochází ke sčítání)
  • Surface Smoothing - úroveň vyhlazování, 1 je standartní, 0 vyhlazování vypne, vyšší hodnoty = větší vyhlazování
  • Surface Subdivision - zahušťuje síť meshe stejným způsobem jako SubSurf modifikátor, ovšem zahuštění z modifikátoru se nebere v potaz při výpočtu; číslo 1 znamená žádné zhušťování, vyšší čísla jsou pak vyššími úrovněmi zahuštění - mohou vést k extrémním výpočetním časům

Domain Particles

Na tomto panelu lze nastavit částicový systém kapaliny - nutno podotknout, že Surface Subdivision musí mít hodnotu aspoň 2. Dále je nutné mít někde v prostoru Domain objektu nějaký mesh, který bude nastaven jako Particle (popsáno níže). O správné umístění částic se již Blender postará sám při zapečení simulace.

Domain Particles
  • Tracer Particles - počet částic, které budou při simulaci vytvořeny
  • Generate Particles - ovládá množství vytvořených částic - 0 znamená žádné, 1 znamená vytvořit stejný počet jako v Tracer Particles, vyšší než 1 pak více

Pojďme si zkusit použití částic. V Domain Particles nastavíme stejné hodnoty, jako na obrázku výš, a do prostoru Domain objektu přidáme plane, kterému nastavíme ve Physics panelu Fluid Particles:

Nastavení částic
  • Particle Type - nastavuje typ částic
    • Drops - stříkance na povrchu kapaliny budou vytvářet kapičky s nízkým povrchovým napětím
    • Floats - povrchové napětí kapaliny je větší a kapalina je těžší (např. jako studená mořská voda nebo polévka) a její odtržené části se vrací zpět rychleji, než u Drops
    • Tracer - kapičky prochází přesně stejnými místy jako ty předchozí; používejte pokud chcete vidět, kde všude se kapalina nacházela
  • Size Influence - částice mohou mít různé velikosti - pokud je tento parametr na nule, všechny částice budou stejně velké
  • Alpha Influence - ovlivňuje Alpha hodnotu částic; pokud je nastaveno vyšší číslo, než nula, menší částice budou mít nižší Alpha hodnoty, než částice větší
  • Path - složka, do níž se budou ukládat data částic; měla by být stejná jako složka nastavená u Domain objektu

S nastavenými particly získáme odlišný výsledek, než v předchozí simulaci:

Jiný výsledek

Výsledná animace ovšem probíhala příliš zběsile, proto jsem nastavil End u Domain na 1.0 - 100 snímků tedy zobrazilo průběh jedné vteřiny.

Control - ovládněme vodu

Blender nabízí i možnost umístit kapalinu do určitého tvaru, obdobně jako u částic (částic samotných, nikoliv částic Fluid simulace). To lze provést přes typ objektu Control. Vložme si např. opičku (mezerník - add monkey) a nastavme jí ve Physics panelu typ objektu Control:

Nastavení control
  • Quality - určuje přesnost a kvalitu výpočtu, čím vyšší, tím delší výpočet
  • Time Start/End - čas v sekundách, kdy bude objekt aktivní
  • Reverse Frames - přetočí snímky animace, obdobně jako u Domain objektu
  • Attraction Force - určuje, jakou silou bude kapalina přitahována (kladné hodnoty) nebo odpuzována (záporné hodnoty)
    • Strength - síla (zde se nastavují kladné nebo záporné hodnoty)
    • Radius - vzdálenost, do níž bude síla působit
  • Velocity Force - pokud se objekt pohybuje, výsledná rychlost bude také silou působit na kapalinu, Strength a Radius znamenají to stejné jako výše

Opičku umístíme někam do překážky, aby zpočátku nezasahovala do kapaliny. Podstatné je zmínit, že opičce je třeba upravit oči, aby byla uzavřeným objektem:

Schovaný Control objekt

Od 25. do 60. snímku se bude Suzanne vynořovat a na 75. snímku přestane působit jako Control objekt. To znamená, že je třeba ještě přenastavit Domain, aby měla Start na 0.0 a End na 4.0 a Control nastavíme tak, aby měl Start na 1.0, End na 3.0 a působící rádius 0.01. Částice pro jistotu zrušíme. Po zdlouhavém výpočtu dostaneme opičku vynořující se z vody:

Suzanne

Suzanne nejdou vidět uši nejspíš kvůli nedostatečné kvalitě, i tak ale výpočet na Core 2 Duo 2,26 GHz zabral skoro 2 hodiny. Posledním typem objektu je Outflow. Ten má přesně opačný efekt, než Inflow, tzn. pokud s ním kapalina přijde do kontaktu, bude v místě dotyku mizet. Volume init a Export Animated Mesh mají stejný význam, jako u Inflow objektu.

Tím jsme probrali všechny použitelné typy objektů, pojďme se podívat na možnosti animace s IPO křivkami. Bohužel, v Blenderu 2.5 evidentně zatím nejsou Fluidsim křivky implementovány, a proto se musíme přepnout do Blenderu 2.49. Narozdíl od ostatních animovatelných atributů v Blenderu, křivky týkající se simulace kapaliny nelze klíčovat klávesou I (velké i). Je třeba umisťovat jednotlivé body v IPO Editoru zkratkou CTRL+LMB, popř. je dodatečně rozmístit na přesné pozice pomocí Transform Properties (CTRL+N). Domain objekt nabízí jiné křivky, než ostatní objekty:

IPO křivky Domain objektu
  • Fac-Visc - násobící faktor pro viskozitu kapaliny, měl by se nastavit ještě před zapečením kapaliny a s jeho pomocí můžeme v průběhu simulace změnit např. med ve vodu
  • Fac-Tim - mění rychlost simulace, hodnoty 0 a menší pohyb zastaví úplně, vyšší než 1 jej pak zrychlují
  • GravX, GravY, GravZ - mění směr a sílu gravitace ve světových souřadnicích

Pro objekty typu Fluid, Obstacle, Inflow, Outflow a Particle máme pak k dispozici následující:

  • VelX, VelY, VelZ - např. u Inflow objektu mění směr emitování kapaliny, lze jej použít např. k simulaci vlivu větru na proud vody
  • Active - určuje, kdy bude objekt aktivní - 0 znamená neaktivní, 1 pak plně aktivní; tímto lze simulovat např. kapání vody nebo jinou přerušovanou simulaci (závlahu na fotbalovém hřišti, sprchu na koupališti...)

Pro objekty typu Control pak můžeme ovládat silové působení:

  • AttrForceStr, AttrForceRa - ovládá velikost a rádius působící přitažlivé (popř. odpudivé) síly
  • VelForceStr, VelForceRa - ovládá velikost a rádius působící rychlostní síly

Vír aneb bodl by deflektor

Posledním, co si dnes ukážeme, bude vír vytvořený při vypouštění nádrže. Bohužel, deflektor, který vytváří vír a působí na částice, látku nebo softbodies nepůsobí na kapaliny, a tak budeme muset fakeovat. Vytvoříme si jednoduchou nádrž a její vnitřek zkopírujeme a vytvoříme z něj model kapaliny (kapalina je nastavená jako Fluid, nádrž jako Obstacle a vše je uvnitř kvádru nastaveného jako Domain):

Nádrž

Dalšími hráči ve scéně budou icosphere nastavená jako Outflow - ta se vynoří zespodu a bude způsobovat úbytek kapaliny (tedy efekt vypouštění :)) - a další icosphere nastavená jako Inflow - ta bude vytvářet dodatečný efekt vířící vody. To znamená, že bude umístěná na vnitřním okraji nádrže a bude dostatečně velkou rychlostí šplíchat vodu v jednom směru - směru kolmém k poloměru nádrže.

Inflow a Outflow

Pokud bychom byli v Blenderu 2.49, nebo pokud by verze 2.5 měla možnost animovat Fluid křivky, jednoduše bychom nastavili, aby Outflow třeba prvních 15 snímků nebyla aktivní a Inflow aby zase přestala být aktivní např. na 50. snímku. Nicméně, pro ilustrativní potřeby nám postačí, když se Outflow na 15. snímku vnoří do nádrže a Inflow může generovat vodu až do konce simulace. Výsledek je vcelku uspokojivý, ač si lze představit, že s použitelným deflektorem Vortex by vše mohlo vypadat ještě lépe:

Vír v nádrži

A tímto bych ukončil dnešní článek o simulaci kapalin v Blenderu. Pokud máte zájem prohlédnout si výsledky dnešního snažení, čtyři krátké čtyřvteřinové animace jsou ke stažení zde (avi divx, 5,26 Mb). Blenderovský simulátor je velmi zajímavým počinem, s nímž lze dosáhnout téměř realistických simulací, jen je třeba vědět, co a kde nastavit :). Nicméně i zde jsou nějaké limity - např. pokud Blender při zapékání simulace padá, nejspíš zabírá víc paměti, než mu umožňuje operační systém a bude potřeba snížit kvalitu simulace (Resolution). Dále stojí za zmínku, že problémy se mohou vyskytnout i při použití nulové gravitace; i ve stavu beztíže by se měla nastavit aspoň minimální hodnota v nějakém směru. Nakonec bych připojil ještě jednu obecnou radu:

If you can't make it you can fake it!

Prosím, nedržte se tohoto hesla v každodenním životě. Těším se příště na shledanou.

Tématické zařazení:

 » 3D grafika  

 

 

 

 

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

Uživatelské jméno:

Heslo: