POV-Ray ve vesmíru

24. 2. 2009
Doba čtení: 10 minut

Sdílet

V repertoáru všemožných nastavení ovlivňujících běh POV-Raye se nachází i poněkud záhadná volba "duty cycle", pomocí které lze rendering spustit i na počítači pracujícím v nulové gravitaci, aniž by došlo k přehřátí CPU. Tato volba nebyla přidána náhodou - POV-Ray skutečně byl použit ve vesmíru.

Obsah

1. POV-Ray ve vesmíru
2. POV-Ray Hall of Fame
3. Internet Raytracing Competition a POVComp
4. SCC3: POVRay Short Code Contest – Round 3
5. SCC4: POVRay Short Code Contest – Round 4
6. SCC5: POVRay Short Code Contest #5 – The animation round!
7. Odkazy na Internetu
8. Obsah poslední části seriálu

1. POV-Ray ve vesmíru

Dne 25. dubna 2002 se do vesmíru, konkrétně na Mezinárodní kosmickou stanici (ISS), vypravil jako vesmírný turista Mark Shuttleworth, který je v linuxové komunitě známý především jako zakladatel úspěšně prodané společnosti Thawte, dále zakladatel společnosti Canonical (ta vytváří distribuci Ubuntu) a ještě později Ubuntu Foundation. Měl s sebou – kromě několika osobních věcí – i schválený model notebooku (IBM A22, Pentium III, 1GHz, 256 MB RAM), na němž byl mj. nainstalovaný i raytracer POV-Ray verze 3.5 beta 15 pro Windows(!). Jednalo se o speciálně upravenou verzi, do které Chris Cason (hlavní vývojář verze POV-Raye pro Windows) implementoval volbu „duty cycle“. Pomocí této volby lze zvolit poměr mezi časem, který mikroprocesor stráví renderingem (aktivní prací) a časem, ve kterém se může přepnout do neaktivního režimu, ve kterém se produkuje méně tepla. Například při nastavení „duty cycle“ na 70% mikroprocesor po sedm sekund provádí náročný raytracing a poté se na tři sekundy přepne do neaktivního režimu. Mnoho počítačů, především notebooků, totiž teplo vyzařuje do svého okolí díky konvekci; ta je ovšem v prostředí nulové gravitace vládnoucí na ISS, kde teplý vzduch nestoupá vzhůru (samotný pojem „vzhůru“ zde nemá z fyzikálního hlediska smysl), neefektivní, především při spouštění tak výpočetně náročných programů, jako je raytracer (využití FPU).

povray4901

Obrázek 1: Scéna pojmenovaná „Reach for the Stars“, která byla POV-Rayem vykreslena na Mezinárodní kosmické stanici (jedná se o variantu se zmenšeným rozlišením oproti originálu).

Na Mezinárodní kosmické stanici spustil Mark rendering scény, kterou pro POV-Ray na jeho přání vytvořila dvojice známých umělců – Jaime Vives Piqueres a Gilles Tran. Vykreslená scéna, která obsahuje množství symbolů (z oblasti počítačové grafiky se jedná například o známou Newellovu čajovou konvici – Utah teapot), má rozlišení 6000×8000 pixelů a v současnosti si ji můžete objednat jako plakát na stránkách http://www.po­vray.org/poster­s/. Vzhledem k takto velkému rozlišení, ze kterého vyplývaly i velké nároky na čas renderingu (navíc ještě zvýšené již zmíněnou volbou „duty cycle“) omezené dobou Markova pobytu ve vesmíru, museli autoři vytvořit poněkud netypickou scénu, ve které například nenajdeme některé pokročilé vlastnosti použitého raytraceru, například volumetrická světla, mnohonásobné odrazy atd. I samotné modely použité ve scéně jsou velmi jednoduché, navíc je ústřední postava od diváka odvrácena, takže nebylo nutné modelovat složité kontury obličeje (díky specifickému způsobu, jakým lidský mozek rozeznává obličeje, se jedná o jeden z nejsložitějších tvarů, které se modelují pouze s velkými problémy). Celý příběh vzniku scény zobrazené na prvním obrázku je popsán na stránce http://www.oy­onale.com/iss­.php?lang=en&pa­ge=1.

povray4902

Obrázek 2: Umělec Gilles Tran je tvůrcem i tohoto modelu katedrály, který se dočkal několika revizí.

Raytracer POV-Ray se tak díky Marku Shuttleworthovi stal jedním z poměrně malého množství programů dostupných široké veřejnosti, které se dostaly do vesmíru a naopak – do raytraceru přibyla volba snižující průměrnou zátěž mikroprocesoru, kterou lze využít i na Zemi, například ve chvíli, kdy hrozí přehřátí mikroprocesoru vlivem vysoké okolní teploty, ztížené možnosti vyzařování tepla (netbooky) apod.

povray4903

Obrázek 3: Další verze katedrály vymodelované Gillesem Tranem.

2. POV-Ray Hall of Fame

Inspiraci pro tvorbu vlastních scén nemusíme hledat pouze na kosmických stanicích; mnohdy si vystačíme i s pouhými pozemskými servery :-). Například na stránce nazvané příznačně POV-Ray Hall of Fame (http://hof.po­vray.org/) jsou vystaveny scény, na kterých jsou ukázány některé pokročilé vlastnosti tohoto raytraceru, například při modelování přírodních objektů (procedurální objemové textury, implicitní plochy, isoplochy, makra), vodní hladiny (bump mapping, výpočet světelných „prasátek“) či ohně a mlhy (volumetrická světla). Mnoho zde zobrazených scén či jejich částí bylo vymodelováno „ručně“, tj. jejich popis byl vytvořen přímo v textovém editoru na základě ručně nakresleného návrhu bez použití 3D modelovacích programů typu Blender, 3D Studio, Maya, KPovModeler či Moray. Některé scény také obsahují části programů (matematické výrazy a funkce, makra, podmínky, smyčky), jež jsou napsané přímo v programovacím jazyce, který je nabízený samotným POV-Rayem – viz předchozí části tohoto seriálu, ve kterých byly základy tohoto poměrně rozsáhlého, ale snadno použitelného programovacího jazyka popsány.

povray4904

Obrázek 4: Části modelů zobrazených v této scéně jsou vytvořeny pomocí makra, proto je lze jednoduše použít na více místech (viz například jednotlivá „chapadla“). Autor: Newt

povray4905

Obrázek 5: Na první pohled složitý model je ve skutečnosti vymodelován poměrně jednoduše – ovšem opět s využitím schopností programovacího jazyka POV-Raye. Autor: Tor Olav Kristensen.

3. Internet Raytracing Competition a POVComp

Mnoho tématicky seskupených obrázků, vytvořených POV-Rayem i několika dalšími raytracery a seřazených podle oblíbenosti, je možné najít také na stránce Internet Raytracing Competition (http://www.ir­tc.org/). V nedávné minulosti byla každý měsíc vyhlašována soutěž na téma scény, která se soutěže může zúčastnit, například „mlha a světlo“, „oheň a led“, „dětská hračka“, „příroda“ atd. Po uplynutí lhůty určené pro zaslání soutěžních scén byly na základě hlasování vyhlášeny tři nejlepší obrázky. Poslední soutěž byla sice uspořádána v roce 2006, ovšem i přesto tato stránka stojí za shlédnutí; mimo jiné i proto, že všechny obrázky byly vytvořeny pouze pomocí raytracingu bez použití postprocessingu (například motion blur a další efekty tedy musely být přímo součástí scény, jinak by nebyla splněna pravidla této poměrně prestižní soutěže). Kromě obrázků se soutěžilo i v tvorbě animací. Zatímco do Internet Raytracing Competition mohli přispívat uživatelé různých raytracerů, probíhala paralelně i soutěž POVComp, jejíž stránky jsou umístěny na adrese http://www.pov­comp.com. I tato soutěž je však v současnosti neaktivní.

povray4906

Obrázek 6: Scéna vytvořená na téma „oheň a led“. Při vykreslení povrchu šachovnice byl využit bump mapping, taktéž bylo použito rozostření v závislosti na vzdálenosti objektů od kamery (pozorovatele). Autor: Ian Thornton.

povray4907

Obrázek 7: Působivá scéna vytvořená na téma „rozklad“. V pravé části je patrné volumetrické světlo, ovšem vytvořené na textuře umístěné v pozadí. Autor: Nate Ryan.

povray4908

Obrázek 8: Objekty v této scéně nejsou samozřejmě vymodelovány ručně; pro jejich vytvoření se použily specializované nástroje (L-Parser) a makra POV-Raye (kopie kytiček a trávy). Autor: Norbert Kern.

4. SCC3: POVRay Short Code Contest – Round 3

Obrázky uvedené v předchozích kapitolách byly vytvořeny ze zdrojových kódů, jejichž velikost mnohdy dosahovala několika desítek i stovek kilobajtů. Zajímavé scény však lze vytvořit i z velmi krátkých zdrojových kódů. Podobně jako existují různé soutěže o napsání co nejkratších programů a mnohé z těchto programů jejich autoři používají ve formě signatury u e-mailů, je i pro POV-Ray vyhlašována podobná soutěž. Jmenuje se POVRay Short Code Contest, zkráceně POVRay SCC a jejím organizátorem je Paul Bourke. Na Internetu jsou uvedena pravidla i výsledky třetího, čtvrtého a pátého kola. Třetí kolo soutěže bylo vyhlášeno v roce 2004. Soutěžící v něm měli za úkol vytvořit scénu, jejíž délka mohla dosahovat maximálně 256 znaků. Mohlo by se sice zdát, že do pouhých 256 znaků není možné napsat popis žádné složitější scény, ale v praxi se ukázalo, že autoři dokázali – především díky použití maker, programových smyček či výškových polí zadaných matematickou funkcí – vytvořit překvapivě působivé scény i za takovýchto (na první pohled velmi omezujících) podmínek.

povray4909

Obrázek 9: Takřka neuvěřitelné je, že zdrojový kód této složité scény má délku pouhých 256 znaků.

povray4910

Obrázek 10: I popis této scény se jeho tvůrci podařilo směstnat do souboru o maximální povolené velikosti 256 znaků.

Pro ilustraci následuje výpis okomentovaného zdrojového kódu, pomocí něhož byl vytvořen obrázek číslo 11. Pokud odstraníme komentáře i konce řádků, skutečně se zdrojový kód zkrátí na 256 znaků – ostatně povšimněte si, na kolika místech nemusí být zapsána mezera či jiný oddělovač (například bumps.7scale.03 je zcela legitimní zápis):

// badglass5.pov - SCC Entry by Matthew Grove
// Short Description
// Firstly a plane in front of the camera with a bumpy refractive
// surface filtering all light, and some phong highlighting too
plane{-z,-1pigment{rgbf 1}normal{bumps.7scale.03}finish{ior 2.2phong.6}}
// A light source in front of the plane
light_source{z/2rgb 1}
// A bright red sphere directly below the camera
sphere{-y*99,98.5pigment{rgb x*1.4}}
// And a white disc above
disc{y*5,y,999pigment{rgb 1}}
// With a couple of orange triangles beyond the plane which just happen
// to be reflective with phong highlighting
polygon{5,-x-y,y-x/2,-y,x/2+y,x-y
translate z*3pigment{rgb<1,.7>}finish{phong.6reflection.3}} 
povray4911

Obrázek 11: Tento zajímavý efekt vznikl poměrně jednoduše – před kameru bylo vloženo zvlněné sklo, přičemž jeho zvlnění bylo simulováno pomocí bump mappingu (modulace normálových vektorů).

5. SCC4: POVRay Short Code Contest – Round 4

O dva roky později, tj. v roce 2006 bylo na stránkách http://local.was­p.uwa.edu.au/~pbou­rke/exhibition/scc4/fi­nal/ vyhlášeno čtvrté kolo soutěže POVRay Short Code Contest. Pravidla zůstala stejná, tj. soutěžící měli dodat scény, jejichž zdrojový kód svou délkou nepřesahoval limit 256 znaků. Opět se sešlo několik velmi zdařilých děl. Zajímavá a komisí patřičně ohodnocená je například scéna zobrazená na obrázku číslo 12, ve které je použita izoplocha (viz jedenáctá část tohoto seriálu). Zdrojový kód pro tuto scénu má skutečně délku pouhých 256 znaků, jak se můžeme přesvědčit z jeho výpisu (při výpočtu délky je nutné soubor se zdrojovým kódem uložit s unixovými konci řádků; pokud by byly použity DOS-ové konce řádků, které jsou kódovány dvěma znaky, délka kódu by se prodloužila na 259 znaků):

#local p=function{pattern{granite}}isosurface{function{y-.3+p(x/
10,9,z/10)}contained_by{box{-9,9}}}light_source{<3,.5,8>,1}media
{scattering{2,<3,2,1>/9}emission<.3,.4,1>density{function{.1/(y+
1)}}}sphere{0,1pigment{granite poly_wave 4}scale-7*y+9hollow} 
povray4912

Obrázek 12: Scéna popsaná výše uvedeným fragmentem kódu. Povšimněte si použití izoplochy zadané matematickou funkcí i volumetrických světel.

6. SCC5: POVRay Short Code Contest #5 – The animation round!

Zadání pátého kola soutěže POVRay Short Code Contest (viz http://local.was­p.uwa.edu.au/~pbou­rke/exhibition/scc5/fi­nal.html) se podstatným způsobem odlišovalo od všech předchozích zadání, protože nyní bylo nutné vytvořit animaci. Aby to měli soutěžící poněkud jednodušší, byla maximální povolená délka souboru s popisem scény zvýšena na 512 znaků. Vzhledem k tomu, že v jazyku POV-Raye lze v prakticky všech výrazech, podmínkách i programových smyčkách využít automaticky naplňované interní proměnné, které se během animace mění (jedná se především o v tomto seriálu již mnohokrát použitou proměnnou clock či taktéž užitečnou proměnnou frame_number), sešlo se před uzavřením pátého kola poměrně velké množství zajímavých animací. Například tato animace byla vykreslena na základě zdrojového kódu vypsaného níže. Aby byl zdrojový kód co nejkratší, byly z něj odstraněny přebytečné konce řádků i mezery; zde si však ukážeme „čitelnou“ verzi s korektním odsazením a maximálně jedním příkazem nebo uzlem na řádku. Pro vypsaný kód je typické použití jednotkových vektorů x, y a z, pomocí nichž je možné některé výrazy zkrátit: například místo translate <0, 0, 20> postačuje napsat pouze translate z*20:

// Entry code: ombpes
// Name      : Bill Pragnell
// Frame rate: 25
#local a = -48;
#local b = -48;

light_source { 99-198*z, rgb 1 }

union {
 #while (b <= 48)
  #while (a <= 48)
   superellipsoid {
    <.2, .2> scale 1+2*y
    #local c = sqrt(a*a + b*b)/6;
    pigment { rgb <(cos(c)+1)/2, (sin(c)+1)/2, (sin(4*c)+1)/2> }
    finish { phong 1 phong_size 75 }
    translate <a, 3*sin((.99*clock*2*pi)-sqrt(a*a+b*b)/3)-3, b> }
    #local a = a + 2;
  #end
  #local a = -48;
  #local b = b + 2;
 #end
 rotate .99*90*clock*y
 rotate -45*x
 translate z*20 }

fog { rgb <1, .9, .7> distance 75 } 

Další dvě animace, které se umístily na prvním a druhém místě:

  1. Podmořský svět (autor: Jeff Reifel)
  2. Výbuch (animace je rozdělena do třech částí, což je pro tak malou scénu netypické)
povray4913

Obrázek 13: Podmořský svět

povray4914

Obrázek 14: Výbuch

ict ve školství 24

7. Odkazy na Internetu

  1. Reach for the stars,
    http://www.oy­onale.com/iss­.php?lang=en&pa­ge=1
  2. POV-Ray Hall of Fame,
    http://hof.po­vray.org/
  3. Tekno Frannansa,
    http://www.zaz­zle.com/tekf
  4. Internet Raytracing Competition,
    http://www.ir­tc.org/
  5. POVRay Short Code Contest – Round 3,
    http://local.was­p.uwa.edu.au/~pbou­rke/exhibition/scc3/fi­nal/
  6. SCC4: POVRay Short Code Contest,
    http://local.was­p.uwa.edu.au/~pbou­rke/exhibition/scc4/fi­nal/
  7. SCC5: POVRay Short Code Contest #5 – The animation round!,
    http://local.was­p.uwa.edu.au/~pbou­rke/exhibition/scc5/fi­nal.html
  8. POV-Ray posters,
    http://www.po­vray.org/poster­s/
  9. African in Space,
    http://www.afri­caninspace.com/
  10. Canonical, Ltd.,
    http://www.ca­nonical.com/
  11. Ubuntu Foundation,
    http://www.ubun­tu.com/communi­ty/ubuntustory/fou­ndation

8. Obsah poslední části seriálu

V poslední části seriálu o POV-Rayi si ukážeme některé další oblasti použití tohoto raytraceru. POV-Ray se totiž poměrně často používá jako back-end pro různé simulační a vizualizační nástroje. Jako ukázku příště probíraného tématu jsem zvolil animaci pádu objektu tvořeného kuličkami spojenými elastickými vazbami. Jedná se o výsledek práce velmi jednoduchého simulačního programu (napsal jsem ho v noci ze soboty na neděli :-), který výsledky výpočtů zobrazuje jak pomocí grafické knihovny OpenGL (pouze drátový model), tak i s využitím POV-Raye (každý krok simulace je v tomto případě uložen do jednoho zdrojového souboru následně zpracovaného raytracerem).

Autor článku

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