Hlavní navigace

Užitečné utility pro POV-Ray

2. 9. 2008
Doba čtení: 12 minut

Sdílet

V dnešní části seriálu o POV-Rayi budou popsány další pomocné aplikace určené pro tento raytracer, které se mohou při různých příležitostech hodit. Budeme se zabývat jak modelovacími a převodními programy, tak i zajímavému simulátoru částicových systémů, který je napsaný pomocí maker POV-Raye.

Obsah

1. Užitečné utility pro POV-Ray
2. Popis povrchů těles pomocí sítě trojúhelníků
3. Převodníky 3D objektů i celých scén
4. Modelovací program Truevision
5. Modelovací program Wings 3D
6. Simulátor částicových systémů Rune's Particle System
7. Odkazy na Internetu
8. Obsah následující části seriálu

1. Utility pro POV-Ray

V předchozí části tohoto seriálu byly popsány některé zajímavé aplikace, které byly poměrně rozsáhlé a komplexní. Jednalo se jak o modelovací programy (Moray, KPovModeler), tak i o aplikace určené pro poloautomatickou tvorbu složitých objektů, například stromů a keřů (LParser, POV-Tree). Dnes budou popsány další dva modelovací programy, konkrétně Truevision a především Wings 3D. Dále si ukážeme spíše menší jednoúčelové aplikace. Jedná se především o různé konverzní programy, protože POV-Ray může sloužit, jak jsme si již ostatně řekli minule, jako renderovací (vykreslovací) back-end pro mnoho dalších programů. Také si popíšeme některé další zajímavé utility, například simulátor částicových systémů naprogramovaný pomocí maker POV-Raye, který je tím pádem univerzálně přenositelný na všechny platformy, kde lze POV-Ray spustit, ale i jednoúčelový a velmi jednoduše a intuitivně použitelný modelovací program zaměřený pouze na tvorbu objektů pomocí výškových polí (height fields).

povray2601

Obrázek 1: Tato poměrně složitá scéna byla vytvořeno přímo v jazyku POV-Raye, pouze za pomoci náčrtků nakreslených ručně na čtverečkovaném pa­píru

2. Popis povrchů těles pomocí sítě trojúhelníků

Pro raytracer POV-Ray existuje značné množství různých převodních programů (filtrů), které v naprosté většině případů slouží k jednosměrnému převodu dat do formátu POV-Raye. Opačný převod je totiž mnohem složitější, neboť POV-Ray nepoužívá pro popis trojrozměrných scén pouhý souborový formát, ale poměrně komplikovaný jazyk, pro jehož správnou interpretaci je nutné přesně zkopírovat chování samotného POV-Raye. Vzhledem k tomu, že mnoho externích modelovacích programů, aplikací typu CAD apod. nakonec všechny vymodelované objekty převádí na jednotlivé trojúhelníky či trojúhelníkové sítě, je výsledkem práce většiny převodních programů popis scény, ve kterém se typicky vyskytují objekty typu triangle, smooth_triangle a nověji také mesh. Tyto objekty jsme si prozatím podrobněji nepopisovali, protože se v ručně psaných scénách nevyskytují. Pojďme si tedy nyní říci základní informace o těchto prvcích převáděných scén.

Jedním z nejjednodušších objektů v POV-Rayi je objekt triangle, který představuje skutečný trojúhelník zadaný trojicí vrcholů. Podle pořadí zadaných vektorů se automaticky vypočítá (vektorovým součinem a následnou normalizací) normálový vektor trojúhelníku, který je následně použit při výpočtu osvětlení. Trojúhelník může mít zadanou barvu povrchu, texturu, optické vlastnosti povrchu atd., podobně jako všechny doposud popisované objekty. Formát jeho zápisu je následující:

    triangle
    {
        <Corner_1>,            // trojice souřadnic x,y,z prvního vrcholu
        <Corner_2>,            // trojice souřadnic x,y,z druhého vrcholu
        <Corner_3>             // trojice souřadnic x,y,z třetího vrcholu
        [OBJECT_MODIFIER...]         // barva povrchu, textura, lineární transformace apod.
    } 
povray2602

Obrázek 2: Slavná Newellova čajová konvice z Utahu, která byla do POV-Raye importována jako síť trojúhelníků

Dalším plošným objektem podporovaným POV-Rayem je objekt typu smooth_triangle. Geometricky se taktéž jedná o trojúhelník, ovšem jeho normálový vektor není vypočten automaticky z pozic jeho vrcholů tak, jako tomu bylo u objektu typu triangle, ale na základě normálových vektorů specifikovaných ručně pro každý vrchol trojúhelníka zvlášť. POV-Ray dokáže vypočítat normálový vektor v jakémkoli místě povrchu s ohledem na to, aby na výsledné ploše složené ze sítě trojúhelníků nedocházelo při vykreslení ke vzniku nežádoucích hran v místě styku dvou trojúhelníků. Tento postup, který je známý pod názvem Phongovo stínování, je velmi často používán právě při vykreslování těles, jejichž povrch je rozložen na síť trojúhelníků.

Formát zápisu uzlu smooth_triangle je následující:

    smooth_triangle
    {
        <Corner_1>,            // trojice souřadnic x,y,z prvního vrcholu
        <Normal_1>,            // trojice souřadnic x,y,z prvního normálového vektoru
        <Corner_2>,            // trojice souřadnic x,y,z druhého vrcholu
        <Normal_2>,            // trojice souřadnic x,y,z druhého normálového vektoru
        <Corner_3>,            // trojice souřadnic x,y,z třetího vrcholu
        <Normal_3>             // trojice souřadnic x,y,z třetího normálového vektoru
        [OBJECT_MODIFIER...]         // barva povrchu, textura, lineární transformace apod.
    } 
povray2603

Obrázek 3: Při použití Phongova stínování již nejsou původní plošky viditelné

Použití objektů typu triangle popř. smooth_tri­angle je sice při převodu z jiných formátů do formátu POV-Raye většinou dostačující, avšak množství vygenerovaných trojúhelníků mnohdy dosahuje rádu stovek tisíců a někdy dokonce až milionů. Aby se dosáhlo větší úspory alokované operační paměti a současně se urychlilo vykreslování, je vhodné trojúhelníky sdružovat do takzvaných trojúhelníkových sítí (mesh). Právě tuto funkci zajišťuje objekt pojmenovaný příhodně mesh, v novějších verzích POV-Raye pak navíc objekt mesh2. V síti je možné mít uloženo prakticky libovolné množství trojúhelníků či trojúhelníků společně s normálovými vektory jeho vrcholů tak, jak to naznačuje zápis formátu tohoto objektu, přičemž POV-Ray automaticky vytváří okolo skupin trojúhelníků obalová tělesa (bounding volume), což přispívá k urychlení výpočtů:

    mesh
    {
        sada objektů typu triangle nebo smooth_triangle
        [OBJECT_MODIFIER...]         // barva povrchu, textura, lineární transformace apod.
    } 

Příklad části trojúhelníkové sítě:

    mesh {
        smooth_triangle {
            <-3.5200, -4.1900, -5.0800>,
            <-0.941, 0.329, -0.081>,
            <-3.9100, -6.2100, -5.0800>,
            <-0.978, 0.189, 0.086>,
            <-3.4000, -6.2100, -7.0100>,
            <-0.893, 0.186, -0.409>
        }
        smooth_triangle {
            <-3.4000, -6.2100, -7.0100>,
            <-0.893, 0.186, -0.409>,
            <-3.0700, -4.1900, -6.8200>,
            <-0.773, 0.335, -0.539>,
            <-3.5200, -4.1900, -5.0800>,
            <-0.941, 0.329, -0.081>
        }
        smooth_triangle {
            <-3.0700, -4.1900, -6.8200>,
            <-0.773, 0.335, -0.539>,
            <-3.4000, -6.2100, -7.0100>,
            <-0.893, 0.186, -0.409>,
            <-1.9900, -6.2100, -8.4300>,
            <-0.566, 0.186, -0.803>
        }
        triangle {
            <-0.0400, -6.2100, -5.0800>,
            <-3.4000, -6.2100, -7.0100>,
            <-3.9100, -6.2100, -5.0800>
        }
        smooth_triangle {
            <-1.9900, -6.2100, -8.4300>,
            <-0.566, 0.186, -0.803>,
            <-1.7900, -4.1900, -8.1000>,
            <-0.397, 0.333, -0.856>,
            <-3.0700, -4.1900, -6.8200>,
            <-0.773, 0.335, -0.539>
        }
        triangle {
            <-0.0400, -6.2100, -5.0800>,
            <-1.9900, -6.2100, -8.4300>,
            <-3.4000, -6.2100, -7.0100>
        } 
povray2604

Obrázek 4: Šachové figurky uložené ve formě trojúhelníkové sítě (demonstrační příklad dodávaný spolu s POV-Rayem)

3. Převodníky 3D objektů i celých scén

Pro import objektů do POV-Raye je možné využít poměrně velké množství různých převodníků. Některé z nich jsou jednoúčelové, jiné naproti tomu poměrně složité. V této kapitole budou vypsány pouze někteří zástupci početné řady převodních programů.

3ds2pov

Název tohoto programu je všeříkající – skutečně se jedná o převodník mezi formátem 3D Studia a formátem POV-Raye. Převádět je možné jak samotné geometrické informace o objektech, tak i do jisté míry materiály (údaje lze načítat i z knihovny materiálů 3D Studia) a animace. Při převodu objektů složených z trojúhelníků dokáže 3ds2pov generovat i objekty typu smooth_triangles, tj. po vykreslení nejsou některé nežádoucí hrany na povrchu objektů viditelné. Výstupem převodníku je buď formát některého z podporovaných raytracerů (POV-Ray, Vivid, Polyray) nebo textový soubor s geometrií trojúhelníků (tyto soubory mívají koncovku .raw).

raw2pov

Tento program je v komunitě uživatelů POV-Raye velmi často používán. Slouží je konverzi mezi formátem raw (ten obsahuje informace o jednotlivých trojúhelnících uložené v textové podobě) a formátem POV-Raye či některého z dalších raytracerů (Vivid, Polyray). Konvertor dokáže vytvářet objekty typu smooth_triangles pro ty trojúhelníky, jejichž normály svírají menší úhel než je zadaná mez, umožňuje automaticky vypočítat obalová tělesa, přidat do vhodného bodu kameru i světelný zdroj apod. Speciální volbou pro POV-Ray je pak možné zařídit prohození souřadnic y a z, protože POV-Ray používá levotočivý souřadný systém, zatímco velké množství dalších programů má systém pravotočivý. Vzhledem k tomu, že převaděčů do formátu raw existuje velké množství (i mnohé modelovací programy dokáží vytvořit exportní soubory v tomto formátu), je raw2pov nedílnou součástí sady nástrojů téměř každého uživatele POV-Raye.

dxf2pov a dxf2raw

Jedná se o velmi jednoduché konvertory vlastní výroby, které slouží k získání souřadnic trojúhelníků a čtyřúhelníků uložených v souborech typu DXF (Drawing Interchange File Format, viz též /clanky/vektorovy-graficky-format-dxf/). Mnohé modelovací programy i CAD systémy s tímto formátem dokáží pracovat, většinou umožňují i „rozbití“ složitějších povrchů právě na jednotlivé trojúhelníky. Převáděny jsou pouze geometrické informace o trojúhelnících, nikoli barvy či optické vlastnosti povrchu.

vrml2pov

Pro převod prostorových objektů je možné použít také projekt vrml2pov, jehož název opět plně vystihuje vlastnosti aplikace. Jedná se o program, který dokáže načíst scénu zapsanou pomocí jazyka VRML (Virtual Reality Modeling Language, viz též /clanky/vrml-jazyk-pro-popis-virtualni-reality/) do formátu POV-Raye. Kromě základních geometrických informací o převáděných objektech jsou zpracovány i optické vlastnosti jejich povrchů, prozatím však nelze pracovat s animacemi a samozřejmě také ne se senzory ani dalšími „dynamickými“ prvky VRML. Oficiální stránka tohoto převodního programu se nachází na adrese http://www.che­micalgraphics­.com/paul/vrml2pov/.

povray2605

Obrázek 5: Výsledek simulace vykreslený v POV-Rayi, zdrojová data pro tuto scénu byla získána pomocí převodníku „vrml2pov“

4. Modelovací program Truevision

Modelovací program nazvaný Truevision, jenž je dostupný na adrese http://truevi­sion.sourcefor­ge.net/, patří mezi zástupce modelovacích programů, které se svým ovládáním snaží přiblížit 3D Studiu či Truespace. Jedná se o program, v němž je možné použít velké množství objektů zpracovatelných POV-Rayem, včetně implicitních ploch, výškových polí i rotačních a vytahovaných těles. Program je určen pro prostředí GNOME, je však samozřejmě spustitelný i v jiných prostředích. Kvůli rychlým (realtime) náhledům na vytvářenou prostorovou scénu je použita grafická knihovna OpenGL, což může na některých počítačích s grafickými kartami NVidia způsobit malou komplikaci při spuštění. Pokud k této situaci dojde, je možné editací souboru libGLU.la zjednat náhradu – viz další informace na stránkách projektu.

povray2606

Obrázek 6: Grafické uživatelské prostředí Truevision

Mezi zajímavosti patří, že rendering výsledné scény se provádí, podobně jako u minule popsaného KPovModeleru, pomocí samotného POV-Raye, tudíž je mnohem přesnější, než při použití OpenGL (způsob vykreslení je totiž zcela odlišný). Truevision je možné rozšiřovat o další funkcionalitu poměrně jednoduše – pomocí jazyka Python.

povray2607

Obrázek 7: Objekt vytvořený pomocí CSG operací v programu Truevision

5. Modelovací program Wings 3D

Pokud by komunita uživatelů raytraceru POV-Ray měla hlasovat o nejoblíbenější modelovací program, patrně by se o první dvě místa podělil minule zmiňovaný Moray s aplikací Wings 3D. Jedná se o program dostupný na širokém spektru platforem, od Linuxu přes Microsoft Windows až k Mac OS X. Mezi důležité funkce patří (samozřejmě) podpora exportu vytvořeného modelu do formátu POV-Raye, možnost importu objektů z 3D Studia a plná podpora OpenGL při vykreslování náhledu na vytvářený model.

povray2608

Obrázek 8: Ukázka použití nástroje „magnet“

Při práci s Wings 3D se objekty vytváří pomocí trojúhelníkové a čtyřúhelníkové sítě, na jejíž jednotlivé vrcholy či skupiny vrcholů se aplikují různé lokální transformace. Pravděpodobně nejdůležitějším nástrojem je magnet, který znají i uživatelé dalších vyspělejších modelovacích programů. Pomocí magnetu lze síť lokálně deformovat, kroutit, natahovat atd.

povray2609

Obrázek 9: Tvorba schodiště v devíti krocích za pomoci nástroje „magnet“

Pokud by při deformaci došlo k situaci, že by síť začala být příliš hrubá (vynikly by plošky jednotlivých trojúhelníků/čty­řúhelníků), lze provést zjemnění sítě a naopak – na části povrchu objektu, která je převážně plochá, je možné snížit počet vrcholů v síti a tak urychlit finální rendering.

povray2610

Obrázek 10: Kif – známá postavička z Futuramy

6. Simulátor částicových systémů Rune's Particle System

Velmi zajímavou utilitou, která je určena přímo pro POV-Ray, je Rune's Particle System. Jak nám již název této aplikace napovídá, jedná se o simulátor částicových systémů, pomocí nichž je možné vytvářet mnoho statických i animovaných efektů, například tekoucí vodu, oheň, kouř, mraky, ohňostroje, výbuchy atd. Na této utilitě je dosti neobvyklé to, že je celá napsaná pomocí jazyka POV-Raye. My si tento jazyk v tomto seriálu sice poměrně do všech podrobností popisujeme, ještě jsme se však nedostali k vysvětlení tvorby maker, používání programových smyček či podmíněných částí programu, vytváření externích souborů, řízení animací atd. Všechny tyto vlastnosti jsou v Rune's Particle System využity, což na jednu stranu ukazuje všestranné možnosti POV-Raye, na stranu druhou je díky této volbě simulátor částicového systému přenositelný na všechny platformy, na kterých je možné POV-Ray provozovat (v podstatě se jedná o všechny třicetidvoubitové a šedesátičtyřbitové systémy, na kterých je dostupný překladač jazyka C++).

povray2611

Obrázek 11: Vodu v této fontáně rozpohybujeme v dalších částech seriálu, ve kterých se budeme zabývat animací

Definice částicového systému, nebo i několika částicových systémů v jakékoli scéně je poměrně jednoduchá – postačí nastavit vlastnosti animace (kolik snímků se má celkově vytvořit, zda se má jednat o opakující se animaci atd.), vytvořit samotný částicový systém a následně zavolat makro nazvané particle_system. Po zavolání makra se spustí výpočet, který si ukládá mezivýsledky na disk (jedná se o soubory s koncovkou .data, tyto soubory lze po renderingu všech snímků smazat). V případě, že není animace povolena, je následně vyrendrován jeden snímek, který je (jak je to při běhu POV-Raye obvyklé) uložen na disk v některém zvoleném grafickém formátu. Při povolení animací jsou postupně počítány a ukládány sekvence snímků (používá se stále stejný vstupní soubor, soubory výstupní jsou vzestupně číslovány), které je možné později pomocí externích utilit spojit do jedné animace a následně zakódovat do některého z „filmových“ formátů.

povray2612

Obrázek 12: Žlutý objekt vpravo dole představuje vodní zdroj, ze kterého vyletují částice tvořící implicitní plochu

Při specifikaci částicového systému je možné měnit poměrně velké množství jeho parametrů, například frekvenci vytváření nových částic, maximální počet částic, délku života jedné částice, odpor okolního prostředí při pohybu částic (viskozita vzduchu či kapaliny), míru gravitace, pozici zdroje částic (emitter), směr a rozptyl vysílání částic ze zdroje atd. Dokonce je možné definovat takvaný kolizní objekt, tj. objekt, u kterého je prováděna kontrola, zda se pohybující se částice nedotkly jeho povrchu. Pokud dojde ke kolizi částice s tímto objektem, může být částice od povrchu odražena, zbržděna při odrazu (ztratí rychlost) atd. Většina parametrů částicového systému může být ovlivněna generátorem náhodných čísel, samotný tvar částic (přesněji řečeno geometrický objekt, kterým je částice reprezentována) může být zvolen zcela libovolně – na výběr tedy máme celý repertoár objektů nabízených POV-Rayem, včetně implicitních ploch, jež je možné s výhodou použít pro tvorbu tekoucí vody. Objekty lze také pokrýt (poloprůhlednou) texturou, takže tvorbě různých ohňů, mraků a výbuchů nestojí prakticky nic v cestě.

CS24_early

7. Odkazy na Internetu

  1. Wings 3D:
    http://www.win­gs3d.com/
  2. Truevision:
    http://truevi­sion.sourcefor­ge.net/
  3. vrml2pov:
    http://www.che­micalgraphics­.com/paul/vrml2pov/
  4. Rune's Particle System:
    http://runevi­sion.com/3d/in­clude/particles/
  5. Popis jazyka VRML:
    /clanky/vrml-jazyk-pro-popis-virtualni-reality/
  6. Popis formátu DXF:
    /clanky/vektorovy-graficky-format-dxf/

8. Obsah následující části seriálu

V další části seriálu o raytraceru POV-Ray se opět začneme věnovat přímo jazyku určenému pro popis prostorových scén. Konkrétně se budeme zabývat na první pohled jednoduchou, ale přitom významnou a užitečnou technikou, kterou je možné použít při tvorbě animací. Jedná se o využití interní proměnné nazvané clock a automatické vykreslení sekvence několika snímků s různou hodnotou této proměnné.

Byl pro vás článek přínosný?

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.