Narsil č. 16

POV Ray 2.0 (2)

↑

POV 2.0 (část druhá)

4.0 NĚCO PRO ZAČÁTEK

========================

Tato kapitola popisuje, jak vytvořit scénu s použitím popisů jednotlivých objektů pomocí POV-Ray jazyka.

4.1 TVÁ PRVNÍ VIZE

--------------------

Začneme vytvářením scény pro jednoduchý obrázek. Jelikož měl původně raytracing největší úspěch při renderování koulí, tak to bude první věc, kterou vyrendrujem.

4.1.1 SYSTÉM KOORDINÁT V POV-Ray

Nejdříve si musíme říci, jak POV-Ray popisuje, kde je a kam se dívá kamera. Abychom to mohli udělat, použijeme 3D koordináty. Obvyklé používaný systém pro POV-Ray má kladné Y směreme nahoru a kladné X směřující doprava. Kladné Z potom směřuje do obrazovky. Vše vypadá následovně:

     +Y
     |   /+Z
     |  /
     | /
     |/        +X
     |--------

Záporné hodnoty souřadnic směřují opačným směrem: +Y

| /+Z

| /

| /

-X |/ +X

<-------|-------->

/|

/ |

/ |

-Z/ |

-Y

4.1.2 PŕIDÁNÍ STANDARDNÍCH INCLUDE SOUBORŮ

S použítím tvého oblíbeného textového editoru, vytvoř souboru s názvem "picture.pov". Teď, zapisuj v následujícím pořadí (zápis musí být zapsán s malými a velkými písmeny přesně podle vzoru):

(pozor, před každým include musí být znak hash (mřížka)

include "colors.inc" // include soubory obsahují

include "shapes.inc" // před definováné elementy

include "textures.inc"

camera {

location <0, 2, -3>

look_at <0, 1, 2>

}

První include čte definice existujících barev. Druhý a třetí include čte nějaké použitelné tvary a textury. Když budeš mít šanci, podívej se na ně.

Celkově můžeš mít tolik include souborů, kolik jich potřebuješ ve scéně. Jednotlivé include soubory mohou sami obsahovat další include, ale je zde limitace maximálně 10 include souborů do hloubky.

Jméno souboru v include souboru bude nejdříve hledáno v aktivním adresáři a nebude-li tam nalezeno, bude hledáno v adresářích specifikovaných volbou "+L" (cesta pro knihovny). Tento způsob by měl usnadnit udržování všech tvých "include" (.inc) souborů jako jsou shapes.inc, color.inc či textures.inc v "include" podadresáři, a cestu k tvým vlastních include souborů pak definovat volbou "+L".

4.1.3 UMÍSTĚNÍ KAMERY

Deklarace popisuje kde je a kam ve scéně směřuje kamera. Parametry jsou souřadnice X, Y, Z, které označují pozici kamery a druhá řada parametrů označuje, kam se kamerou díváme. Parametry zadáváme vlastně v 3D vektorech.

Tedy, "location <0, 2, -3>" umisťuje kameru dvě jednotky nahoru a tři dozadu od středu našeho raytracovaného světa, který je na koordinátách <0, 0, 0>. Pamatuj, že +Z směřuje směrem do obrazovky a -Z ven z ní.

"look_at <0, 1, 2>" otočí kameru na bod na souřadnicích X, Y, Z, tj. na pod 5 jednotek dopředu a jednu jednotku níže než je samotná kamera. Bod look_at by měl být vlastně ve středu pozornosti tvé vize.

4.1.4 POPIS OBJEKTU

Kamera je tedy na místě, přichází na řadu umístění samotné koule. Napiš následující příklad do tvého scene souboru:

sphere {

<0, 1, 2>, 2

texture {

pigment {color Yellow} // Yellow je před-definována v COLORS.INC

}

}

První vektor specifikuje střed koule. V tomto příkladě je X koordináta 0, takže koule je centrována směrem doprava i doleva. Y je zde rovno 1, což značí jednu jednotku nahoru od původu. Koordináta Z je 2, což je 5 jednotek dopředu od samotné kamery umístěné na Z= -3. Po čárce následuje radius, který je v tomto případě velký dvě jednotky. Takže, pokud je radius 1/2 šířky, tak výsledná koule je široká 4 jednotky.

4.1.5 PŕÍDÁNÍ TEXTURY NA OBJECT

Teď sice už víme velikost a umístění koule, ale bylo by dobré nějakým způsobem popsat i povrch koule. Textura je specifikována barvou, hrbolatostí (bumpiness) a na závěr vlastnostmi objektu. V tomto příkladu budeme definovat pouze barvu, protože to je minimum co musíme udělat. Všechny ostatní volby textury, vyjma barvy, necháme na základním nastavení.

Barvu, kterou nadefinuješ, ve skutečnosti uvidíš pouze tehdy, je-li koule plně osvětlena. Jestliže kreslíš obraz koule, měl bys použít tmavé odstíny barev pro indikaci stínů a světlé pro osvětlenou stranu. Sám si tedy vybereš základní barvu, ale závisí na rozlišení světel, jak to vše bude nakonec vypadat.

Pro použití s parametrem pigment {...} je k dispozici hodně možností. Definični slovo "color" specifikuje, že celý objekt bude mít jednu celistvou barvu. Slovo "Yellow" je barová identifikace, která byla dříve zapsána v include souboru "colors.inc".

Jestliže ti žádná ze standardních barev nepostačuje, můžeš definovat svou vlastní barvu použitím slova příkazů "red", "green" a "blue" následovaným množstvím jednotlivých složek červené, zelené a modré, které budou zmixovány. Kupříkladu, nádherný odstín šedé může být definován:

color red 1.0 green 0.8 blue 0.8

Hodnoty po příkazech mohou být v rozmezí 0.0-1.0. Nespecifikace kteréhokoliv z komponentů označuje nastavení hodnoty na nula. Navíc je možné použít i zkrácený zápis. Tím zapíšem stejný odstín růžové následujícím způsobem.

color rgb <1.0, 0.8, 0.8>

Barvy budou vysvětleny detailněji později.

4.1.6 DEFINICE SVĚTELNÉHO ZDROJE

Další věc, kterou potřebujem, pro naši scénu je světelný zdroj. Dokud nějaký nevytvoříš, ve virtuálním světě žádný není. Přidej tedy následující zápis do tvé scény:

light_source { <2, 4, -3> color White}

Vektor značí umístění světla. Tentokrát tedy 2 jednotky doprava, 4 nad střed a 3 ven z obrazovky. Světelný zdroj je neviditelný, je to jen vržené světlo, takže není zapotřebí žádná textura.

A máme to! Zapiš soubor, zavři ho a nech vykreslit malý obrázek zápisem následující command řádky:

POVRAY +W160 +H120 +P +X +D0 -V -Ipicture1.pov

Samozřejmě si můžeš připsat jakýkoliv další příkaz do command-line řádky. Výstupní formát obrázku by měl být TGA, takže stačí vzít Photochrome či jiný, např. F030/TT konvertor a výsledek si prohlédnout.

4.2 DALŠÍ VOLBY TEXTUR

------------------------

Právě jsi sice vyrendroval tvůj první obrázek, ale zdá se to být jakési nudné. Takže přidáme nějaké pestré rysy do textury.

4.2.1 DOKONČENÍ POVRCHŮ

Jedním z hlavních rysů raytraceru je schopnost dělat zajímavé věci, jako zvýrazňování a odrazovost, při dokončování povrchů. Teď tedy přidáme působivý phong highlight (lesklé skvrny) na kouli. Abychom to mohli udělat, potřebujeme "finish" parametr. Změň definici koule následujícím způsobem:

sphere {

<0, 1, 2>, 2

texture {

pigment {color Yellow}

finish {phong 1}

}

}

Teď začni renderovat stejným způsobem jako předtím. Příkaz phong přidá zvýraznění stejné barvy v podobě světelných odrazů na objektu. Výsledkem bude mnohem větší věrohodnost obrázku, která dodá obrázku více lesklosti a jemnosti. Menší hodnoty phong vytvoří lesklost s menší světlostí. Phong může mít hodnoty mezi 0 a 1.

4.2.2 PŕIDÁVÁNÍ NEROVNOSTÍ

Zvýraznění ilustruje, jak velká část našeho vnímání závisí na odrazových vlastnostech objektu. Ray-tracing toho může využít při použití určitých ošizení našich vjemů k vytvoření komplexních detailů, které tam však ve skutečnosti nejsou.

Předpokládejme, že chceš vytvořit velmi hrbolatý povrch objektu. Matematicky by se jednalo o velmi složitý model s mnoha nerovnostmi. My však můžeme pomocí změn osvětelnosti povrchu tyto hrboly simulovat. Odrazovost závisí na výpočtu vektoru nazývaného "normálový vektor povrchu". Ten směřuje pryč z povrchu a je na něj kolmý. Umělou modifikací této normály můžeme simulovat nerovnost. Změn zápis scény do následující podoby a vyrendruj ho:

sphere {

<0, 1, 2>, 2

texture {

pigment {color Yellow}

normal {bumps 0.4 scale 0.2}

finish {phong 1}

}

}

Tento zápis řekne POV-Ray, aby použil bump vzorky k modifikování normály povrchu. Hodnota 0.4 kontroluje zdánlivou hloubku povrchu. Obvyke bývají díry okolo jedné jednotky široké, to by však nefungovalo dost dobře s koulí s radiusem 2. Scale vytvoří 1/5. poměr oproti šíři, ale nemá žádný vliv na hloubku.

4.2.3 VYTVÁŕENÍ BAREVNÝCH VZORKŮ

Více možností také poskytuje samotné přidělení barvy objektu. Můžeš totiž vytvořit i celé vzory v pigmentovém bloku. Podívej na tento příklad:

sphere {

<0, 1, 2>, 2

texture {

pigment {

wood

color_map {

[0.0 color DarkTan]

[0.9 color DarkBrown]

[1.0 color VeryDarkBrown]

}

turbulence 0.05

scale <0.2, 0.3, 1>

}

finish {phong 1}

}

}

Slovo "wood" nám nastaví pigmentový vzorek ze soustředných prstenců, tedy stejně jak vypadají letokruhy v lese. Color_map specifikuje, že barva 'lesa' by měla být od tmavěžlutohnědé do tmavěhnědé na 90% a zbývajících 10% by mělo být od tmavěhnědé do velmitmavěhnědé. Turbulence vytváří nepravidelnost letokruhů, která zajistí, že vzorky na jednotlivých kruzích nebudou perfektní kružnice. Scale faktor upraví velikosti vzorků.

Většina vzorů je nestavena tak, že základní hodnota dává jeden "tah" přes kouli o poloměru 1.0. "Tah" je velmi zhruba definován jako přechod barev. Například, textura 'les' by měla mít jeden přechod na kouli o poloměru 1.0. V tomto případě však změníme poměr na 0.2 v X souřadnici, 0.3 v Y a Z nastavíme na 1, tj. nezměněné. Scale hodnota větší než jedna bude prvek roztahovat, menší než jedna ho bude srážet. A hodnota 1 ho ponechá takový jaký je.

4.2.4 PŕED-DEFINOVANÉ TEXTURY

POV-Ray má některé všeobecně známe textury před-definována v standardním include souboru "textures.inc" a "stones.inc". Některé jsou naprosto definováné, tedy pigment, normála a/nebo finish parametry. Jiné však mají třeba jen volbu finish či pigment. Změn naši kouli podle následujícího příkladu a vyrenderuj ji:

sphere {

<0, 1, 2>, 2

texture {

pigment {

DMFWood4 // Před-definováno v textures.inc

scale 4 // Scale je stejný ve všech směrech

}

finish {Shiny} // finish definice v textures.inc

}

}

Pigment identifikátor DMFWood4 již byl scaleován během své základní definice. V tomto příkladu však požadujeme větší vzorek, a proto používám příkaz "scale 4". Jelikož nám stačí ve všech směrech stejný poměr, stačí nastavit je jednu hodnotu a nemusíme tedy zapisovat vektory x,y,z pro scale faktor.

Podívej se do souboru TEXTURES.INC jaké pigmenty, finiše jsou definovány a vyzkoušej si je. Uděláš to velmi jednoduchou záměnou jména v tvé scéně. Stačí nahradit DMFWood4, pokud chceš změnit pigment, nebo Shiny, pokud budeš měnit finish. Poté obraz opětovně vyrendruj.

Příklad jak použít celou před-definovanou texturu bez jakéhokoliv kouskování.

sphere {

<0, 1, 2>, 2

texture { PinkAlabaster }

}

4.3 DALŠÍ TVARY

-----------------

Opravdu dlouho jsme pracovali jen s koulí, ale k dispozici je opravdu mnoho dalších tvarů, které může POV-Ray renderovat. Nejdřív si ale zkusíme zmenšit kouli z poloměru 2 na poloměr 1:

sphere { <0, 1, 2>, 1 texture { ... atd.

4.3.1 ROVINNÝ OBJEKT

Vyzkoušíme tedy základní objekt v počítačové grafice: "Proměnlivá Podlaha". Přidej do tvého .pov souboru následující objekt:

plane {

<0, 1, 0>, 0

pigment {

checker

color Red

color Blue

}

}

Objekt je definován jako nekonečný plane. Vektor <0, 1, 0> je normála povrchu plane (tj, jestliže stojíš na povrchu, normála ukazuje přímo vzhůru). Číslo zapsané potom je vzdálenost desky podél normály od původní souřadnice. V tomto případě, podlaha je na souřadnici Y=0, koule s poloměrem= 1 je na souřadnici Y= 1, tudíž bude ležet přímo na podlaze.

V scéně sice není napsáno žádné "texture{...}", ale samozřejmě je ve skutečnosti použito. Po čase zjistíš, že nepřetržité zapisování situací způsobem "texture {pigment {...}}" by se stávalo dosti unavujícím, a proto tě POV-Ray nechá vynechávat "texture{...}" v mnoha případech. Všeobecně potřebuješ texture stejně jen když zahrnuje její identifikátor (jako byl např PinkAlabaster), nebo když vytváříš křížené textury (o nich se zmíníme později).

Tento pigment používá kostkovaný barevný vzorek a specifikuje, že by měli být použity dvě barvy (modrá a červená).

Protože vektory <1,0,0>, <0,1,0> a <0,0,1> jsou často používány, tak má POV-Ray vestavěny tři identifikátory "x","y" a "z", ty mohou být použity pro zkrácení a vyjasnění zápisu. Tedy, plane by mohl být definován například takhle:

plane {

y,0

pigment {... etc.

Pozor, nepoužívám znaky větší a menší kolem vektorového identifikátoru.

Pohledem na podlahu si všimneš, že koule vytváří na zemi stín, který je vypočítán velmi přesně a vytváří tak velmi ostré ohraničení. Ve skutečném světě jsou viděny častěji měkčí stíny. Později se zmíníme, jak použít dalších světel k tomuto efektu.

4.3.2 OBDELNÍKOVÝ OBJEKT

V POV-Ray je k dispozici několik dalších jednoduchých tvarů. Nejobyčejnějšímy jsou obdelníky, válce a kužele. Zkus si je umístit ve své scéně na místě koule:

box {

<-1,0 ,-1>, // Bližší levý roh

< 1,0.5, 3> // Vzdálenější pravý roh

pigment { DMFWood4 // Před-definovaná textura

scale 4 // Scale stejně ve všech

// směrech

}

rotate y*20 // Eqvivalent k

// "rotate <0,20,0>"

}

V tomto příkladě můžeš vidět, že obdelník je definován specifikací 3D souřadnic v protilehlých rozích. První vektor musí být minimální x,y,z koordináta a druhý vektor je maximální x,y,z hodnota. Box může být definován pouze souběžně s osami, i když později ho můžeš samozřejmě natočit. Samozřejmě můžeš na vektory aplikovat jednoduchou matematikou (krát, děleno apod). V parametru rotace násobíme indetifikátor "y" číslem 20. To je stejné jako "<0, 1, 0>*20 nebo "<0,20,0>".

4.3.3 KUŽEL

A přichází další příklad:

cone {

<0,1,0>,0.3 // Střed a poloměr jednoho konce

<1,2,3>,1.0 // Střed a poloměr druhého konce

pigment {DMFWood4 scale 4 }

finish {Shiny}

}

Tvar je definován středem a poloměry konců. V tomto příkladě je začátek na souřadnici <0,1,0> a má rádius 0.3 a konec je centrován na souřadnici <1,2,3> s poloměrem 1. Jestliže chceš kužel, který přechází do špičky, použij poloměr 0. Víka jsou vůči sobě rovnoběžná a samozřejmě kolmá vůči ose kuželu. Jesliže chceš dutý kužel, tedy jen s jedním víkem, pak přidej příkaz "open" po zápisu druhého poloměru, př.:

cone {

<0,1,0>,0.3 // Střed a poloměr jednoho konce

<1,2,3>,1.0 // Střed a poloměr druhého konce

open // Vyruš víko

pigment {DMFWood4 scale 4 }

finish {Shiny}

}

4.3.4 VÁLEC

Tímto způsobem můžeš definovat i válec:

cylinder {

<0,1,0>, // Střed jednoho konce

<1,2,3>, // Střed druhého konce

0.5 // Radius

open // Smaž víko

pigment {DMFWood4 scale 4 }

finish {Shiny}

}

Standardní include soubor "shapes.inc" zahrnuje několik před-definovaných tvarů, které mají velikost koule s poloměrem jedna. Vyvolat se dají nějak takhle:

object {

UnitBox

pigment {DMFWood4 scale 4 }

finish {Shiny}

scale 0.75

rotate <-20,25,0>

translate y

}

A to je konec našeho zkráceného průvodce. Tady jsem se zabývali jen zlehka povrchem. Zbytek dokumentu bude pojednávat o všech dalších možnostech POV-Ray.

HEAD