Hlavní navigace

Pokročilé modelování s implicitními plochami

Pavel Tišnovský

V sedmé části seriálu o raytraceru POV-Ray se budeme zabývat pokročilými modelovacími technikami používanými při práci s implicitními plochami. Ukážeme si aplikaci odlišných základních prvků kostry implicitních ploch a využití záporných "sil" při tvorbě těles s vytlačenými částmi povrchu nebo s otvory.

Obsah

1. Bodové a úsečkové prvky kostry implicitních ploch
2. První demonstrační příklad: jeden bodový a tři úsečkové prvky kostry
3. Použití záporných „sil“ při tvorbě povrchů s vytlačenými částmi či otvory
4. Druhý demonstrační příklad: použití prvku kostry se zápornou „silou“
5. Třetí demonstrační příklad: animace vlivu postupné změny síly jednoho prvku kostry
6. Změna individuálních vlastností jednotlivých prvků kostry implicitní plochy
7. Čtvrtý demonstrační příklad: nastavení individuálních vlastností prvků kostry
8. Obsah dalšího pokračování seriálu

1. Bodové a úsečkové prvky kostry implicitních ploch

V předchozí části tohoto seriálu jsme si řekli, jakým způsobem se v POV-Rayi vytváří základní typy implicitních ploch a na jakém teoretickém základě je postaveno jejich vykreslování a způsob modelování (především organických tvarů) s využitím jejich specifických vlastností. Dnes téma implicitních ploch dokončíme popisem různých variant prvků kostry, způsobem použití prvků kostry se zápornou „silou“ (intenzitou), změnou individuálních vlastností jednotlivých prvků kostry (například jejich barvy, textury či měřítka) a nakonec si ukážeme dva velmi jednoduché způsoby animování implicitních ploch pomocí průběžné změny některých jejich vlastností. Minule jsme si také uvedli zjednodušený způsob zápisu implicitní plochy v souborech určených pro vykreslování (rendering) pomocí POV-Raye. Zápis jednoduché implicitní plochy se třemi bodovými prvky kostry a texturou společnou pro celou implicitní plochu vypadal následovně (výsledek je zobrazen na prvním obrázku):

blob {                                        // definice implicitní plochy s využitím původní syntaxe
    threshold 0.6                             // hraniční hodnota
    component 1.0, 1.0, < 0.750,  0, 0>       // prvek kostry: síla, poloměr, souřadnice v prostoru
    component 1.0, 1.0, <-0.375,  0.64952, 0> // druhý prvek kostry
    component 1.0, 1.0, <-0.375, -0.64952, 0> // třetí prvek kostry

    texture {
        pigment {
            color red 0 green 0 blue 1        // barva materiálu povrchu implicitní plochy
        }
        finish {                              // optické vlastnosti materiálu povrchu
            ambient  0.2
            diffuse  0.4
            specular 0.6
            phong    0.6
            phong_size 3
            reflection 0
        }
    }
} 
povray0701

Obrázek 1: Implicitní plocha složená ze tří bodových prvků kostry

Tento způsob zápisu implicitních ploch je sice stále podporován i v nejnovějších verzích POV-Raye, má však některé nevýhodné vlastnosti, mezi které patří nemožnost určení typu prvku kostry (všechny elementy component jsou považovány za bodové prvky kostry, což odpovídá tomu, že se po dlouhou dobu jednalo o jediné podporované typy) a také to, že jednotlivým prvkům kostry není možné přiřazovat individuální vlastnosti, protože takto zapsaná implicitní plocha je považována za neměnnou a jednolitou, i když ve skutečnosti může být složena z několika navzájem izolovaných tvarů v závislosti na velikosti, vzdálenosti a silách jednotlivých prvků kostry. Postupným vývojem možností POV-Raye se došlo k novějšímu způsobu zápisu implicitních ploch, ve kterém jsou elementy component nahrazeny relativně samostatnými poduzly, z nichž každý obsahuje vlastnosti jednoho prvku kostry. Před popisem novějšího způsobu zápisu si však řekněme základní informace o úsečkových prvcích kostry, kvůli nimž se vlastně syntaxe POV-Raye rozšiřovala.

povray0702

Obrázek 2: Obrázek vytvořený pomocí třetího demonstračního příkladu (síla úsečkového prvku kostry je nastavena na hodnotu 1,5)

Základní tvary prvků kostry, které byly použity v demonstračních příkladech v předchozí části tohoto seriálu, jsou definovány jako osamocené body tvořící středy pomyslných koulí. Každý prvek kostry je v původním zápisu představován jedním elementem component. V POV-Rayi verze 3 (a samozřejmě v jakékoli verzi vyšší) je však možné použít i úsečkový prvek kostry. Jeho použití je podobné jako v případě bodových prvků kostry, pouze se liší tvarem vykreslené implicitní plochy nebo její části. Úsečkový prvek kostry je zadán, jak již jeho název napovídá, úsečkou (v případě POV-Raye dvěma koncovými body úsečky, i když je obecně možný například i parametrický zápis) a intenzitou, tj. mírou slévání tohoto prvku kostry s ostatními částmi implicitní plochy.

povray0703

Obrázek 3: Obrázek vytvořený pomocí třetího demonstračního příkladu (síla úsečkového prvku kostry je nastavena na hodnotu 1,0)

Při vykreslení samostatného prvku se okolo úsečky vytvoří válec se zaoblenými podstavami, které mají tvar polokoule. Při interakci více prvků opět dochází k „lepení“ jednotlivých prvků k sobě. Výška válce závisí na délce úsečky, jeho poloměr (a poloměr polokoulí, které válec z obou stran uzavírají) je závislý na zadané intenzitě. Kombinace bodových a úsečkových prvků kostry bude vysvětlena v navazujících kapitolách.

povray0704

Obrázek 4: Obrázek vytvořený pomocí třetího demonstračního příkladu (síla úsečkového prvku kostry je nastavena na hodnotu 0,5)

Nový způsob zápisu (syntaxe) implicitních ploch stále zůstává jednoduchý. Jediná změna spočívá v náhradě elementu component za poduzly s názvy sphere a cylinder. Poduzlem s názvem sphere se specifikuje bodový prvek kostry, který má při svém vykreslení skutečně tvar koule (nesmí však dojít ke slévání s dalšími částmi implicitní plochy, protože pak samozřejmě dojde ke změně celkového tvaru). U tohoto uzlu se zadávají nejméně tři údaje: souřadnice středu prvku kostry (z hlediska syntaxe se jedná o vektor), hraniční poloměr prvku kostry (zde je intenzita či „síla“ prvku kostry nulová) a vlastní intenzitu/„sílu“ prvku kostry, která ovlivňuje jeho skutečnou velikost a tvar při vykreslení. Poduzlem s názvem cylinder je specifikován úsečkový prvek kostry, protože ten má, jak jsme se dozvěděli v předchozích odstavcích, při vykreslení tvar válce se zaoblenými podstavami. Tento prvek kostry je zadán čtveřicí hodnot: dvojicí vektorů určujících středy obou podstav válce, hraničním poloměrem prvku kostry a intenzitou/„silou“.

povray0705

Obrázek 5: Obrázek vytvořený pomocí třetího demonstračního příkladu (síla úsečkového prvku kostry je nastavena na zápornou hodnotu –1,0)

Následuje jednoduchá ukázka implicitní plochy složené z bodového a úsečkového prvku kostry:

blob {                                   // definice implicitní plochy s využitím nové syntaxe
    threshold 0.5
    sphere {                             // bodový (kulový) prvek kostry
        <-2, 0, 0>                       // souřadnice středu
        1.0,                             // poloměr
        2.0                              // síla
    }
    cylinder {                           // úsečkový (válcový) prvek kostry
        <-2, 0, 0>                       // střed první podstavy
        < 2, 0, 0>                       // střed druhé podstavy
        0.5,                             // poloměr
        1.0                              // síla
    }
    interior {                           // vlastnosti "vnitřku" implicitní plochy
        caustics 1.0
        ior 1.5
    }
    texture {                            // textura - povrch implicitní plochy
        T_Glass1                         // definováno v externím souboru
        pigment {
            color blue 0.90 filter 0.85  // barva povrchu
        }
        finish {                         // optické vlastnosti materiálu
            phong 1                      // velikost a síla odlesku
            phong_size 300
            reflection 0.15              // odrazivost
        }
    }
    rotate <15,15,0>
    scale 1.8
} 

2. První demonstrační příklad: jeden bodový a tři úsečkové prvky kostry

V dnešním prvním demonstračním příkladu je ukázána tvorba složitější implicitní plochy, která je vymodelována pomocí čtyř prvků kostry. Jedná se o tři úsečkové prvky kostry, které tvoří trojrozměrný kříž (všechny úsečkové prvky kostry se protínají v jednom bodě a jejich osy jsou na sebe kolmé) a čtvrtým prvkem kostry této implicitní plochy je prvek bodový, jehož střed leží na konci jednoho z úsečkových prvků kostry. Materiál implicitní plochy je vytvořen z modrého skla a pomocí voleb caustics a ior je povolena tvorba „prasátek“ a lomů světelného paprsku na hranici mezi implicitní plochou a okolním prostředím. Následuje výpis zdrojového kódu prvního demonstračního příkladu:

// ------------------------------------------------------------
// Jednoduchá scéna s jednou implicitní plochou vymodelovanou
// pomocí čtyř prvků kostry - jednoho bodového prvku kostry a
// tří úsečkových prvků kostry.
//
// rendering lze spustit příkazem:
//     povray +W800 +H600 +B100 +FN +D +Iblobs1.pov +Oblobs1.png
// (pro náhled postačí zadat povray blobs1.pov)
// ------------------------------------------------------------

// globální nastavení parametrů scény
global_settings {
    assumed_gamma 2.2
    max_trace_level 5
}

// načtení všech potřebných externích souborů
#include "colors.inc"
#include "stones.inc"
#include "glass.inc"

// nastavení kamery (pozorovatele)
camera {
    location  <1.65, 5.5, -5.0>          // pozice kamery
    up        <0.0,  1.0,  0.0>          // vektor směřující vzhůru
    right     <4/3,  0.0,  0.0>          // vektor směřující doprava
    look_at   <0,    1.8, -1.0>          // bod, na který kamera směřuje
}

// tři světelné zdroje
light_source {
    <-30, 11,  20>                       // pozice světelného zdroje
    color White                          // barva světla
}

light_source {
    < 31, 12, -20>                       // pozice světelného zdroje
    color White                          // barva světla
}

light_source {
    < 32, 11, -20>                       // pozice světelného zdroje
    color LightGray                      // barva světla
}

// první objekt - implicitní plocha
blob {
    threshold 0.5
    sphere {                             // bodový (kulový) prvek kostry
        <-2, 0, 0>,                      // souřadnice středu
        1.0,                             // poloměr
        2.0                              // síla
    }
    cylinder {                           // úsečkový (válcový) prvek kostry
        <-2, 0, 0>,                      // střed první podstavy
        < 2, 0, 0>,                      // střed druhé podstavy
        0.5,                             // poloměr
        1.0                              // síla
    }
    cylinder {
        <0, 0, -2>,
        <0, 0,  2>,
        0.5,
        1.0
    }
    cylinder {
        <0, -2, 0>,
        <0,  2, 0>,
        0.5,
        1.0
    }

    interior {                           // vlastnosti "vnitřku" implicitní plochy
        caustics 1.0
        ior 1.5
    }
    texture {                            // textura - povrch implicitní plochy
        T_Glass1                         // definováno v externím souboru
        pigment {
            color blue 0.90 filter 0.85  // barva povrchu
        }
        finish {                         // optické vlastnosti materiálu
            phong 1                      // velikost a síla odlesků
            phong_size 300
            reflection 0.15              // odrazivost
        }
    }
    rotate <15,15,0>
    scale 1.8
}

// druhý objekt - nekonečná rovina
plane {
    y,                                   // orientace roviny
    -2.5                                 // vzdálenost od počátku
    texture {                            // textura - vlastnosti povrchu
        T_Stone1                         // definováno v externím souboru
        pigment {                        // vlastní vzorek textury
            octaves 3                    // modifikace procedurálního vzorku
            rotate 90*z
        }
        finish {                         // optické vlastnosti materiálu
            reflection 0.10
        }
    }
}



// ------------------------------------------------------------
// finito
// ------------------------------------------------------------ 
povray0706

Obrázek 6: Výsledek výpočtu prvního demonstračního příkladu POV-Rayem

3. Použití záporných „sil“ při tvorbě povrchů s vytlačenými částmi či otvory

V předchozí části tohoto seriálu jsme si uvedli Blinnův vztah, kterým se vyjadřovala intenzita „síly“ v daném bodu (x,y,z) ležícím v prostoru v závislosti na vzdálenosti tohoto bodu od jednotlivých prvků kostry a také v závislosti na jejich maximálních intenzitách (silách). Jedná se o následující vztah, který je sice pro potřeby urychlení vykreslování implicitních ploch v POV-Rayi poněkud zjednodušen, ale principiálně k žádné významné změně nedošlo:

D(x,y,z)=∑i=0n bi e-airi2=T

Parametr bi odpovídá maximální intenzitě i-tého prvku kostry. Tato intenzita postupně klesá se vzrůstající vzdáleností od bodu či úsečky, která tento prvek kostry reprezentuje. Prozatím jsme předpokládali, že parametr bi je kladný, nic nám však nebrání použít i zápornou intenzitu. To má za následek to, že se prvek kostry se zápornou intenzitou neslévá s ostatními prvky kostry, ale naopak ve vytvářené implicitní ploše tvoří vytlačené části a při vyšší intenzitě dokonce otvory.

povray0707

Obrázek 7: Obrázek vytvořený pomocí třetího demonstračního příkladu (síla úsečkového prvku kostry je nastavena na zápornou hodnotu –1,5)

Pokud bychom pro modelování pomocí implicitních ploch hledali analogii z reálného světa, mohlo by se například jednat o tvorbu modelů pomocí plastelíny. Použití prvků kostry s kladnou silou odpovídá „splácání“ několika hrudek plastelíny dohromady a použití prvků kostry se silou zápornou je podobné vytlačení důlku do plastelínového modelu pomocí kulového nebo válcového předmětu.

povray0708

Obrázek 8: Obrázek vytvořený pomocí třetího demonstračního příkladu (síla úsečkového prvku kostry je nastavena na zápornou hodnotu –2,5)

4. Druhý demonstrační příklad: použití prvku kostry se zápornou „silou“

V dnešním druhém demonstračním příkladu je ukázána implicitní plocha vytvořená pomocí dvou prvků kostry. První prvek je bodový, což znamená, že po jeho vykreslení (a bez interakce s dalšími částmi implicitní plochy) by vznikla koule, a druhý prvek je válcový, přičemž osa válce prochází středem bodového prvku. Ovšem u druhého prvku kostry je definována záporná síla, která je tak velká, že v původní kouli vytvoří otvor procházející středem koule. Aby byl tvar otvoru jasně patrný, zvolil jsem pro materiál tohoto objektu opět sklo, tentokrát ovšem fialové. Následuje výpis zdrojového kódu druhého demonstračního příkladu:

// ------------------------------------------------------------
// Jednoduchá scéna s jednou implicitní plochou vymodelovanou
// pomocí dvou prvků kostry - jednoho bodového prvku kostry a
// jednoho úsečkového prvku kostry se zápornou silou.
//
// rendering lze spustit příkazem:
//     povray +W800 +H600 +B100 +FN +D +Iblobs2.pov +Oblobs2.png
// (pro náhled postačí zadat povray blobs2.pov)
// ------------------------------------------------------------

// globální nastavení parametrů scény
global_settings {
    assumed_gamma 2.2
    max_trace_level 5
}

// načtení všech potřebných externích souborů
#include "colors.inc"
#include "stones.inc"
#include "glass.inc"

// nastavení kamery (pozorovatele)
camera {
    location  <1.65, 5.5, -5.0>          // pozice kamery
    up        <0.0,  1.0,  0.0>          // vektor směřující vzhůru
    right     <4/3,  0.0,  0.0>          // vektor směřující doprava
    look_at   <0,    0.8, -1.0>          // bod, na který kamera směřuje
}

// tři světelné zdroje
light_source {
    <-30, 11,  20>                       // pozice světelného zdroje
    color White                          // barva světla
}

light_source {
    < 31, 12, -20>                       // pozice světelného zdroje
    color White                          // barva světla
}

light_source {
    < 32, 11, -20>                       // pozice světelného zdroje
    color LightGray                      // barva světla
}

// první objekt - implicitní plocha
blob {
    threshold 0.5
    sphere {                             // bodový (kulový) prvek kostry
        <0, 0, 0>,                       // souřadnice středu
        2.0,                             // poloměr
        2.0                              // síla
    }
    cylinder {                           // prvek kostry se zápornou silou
        <0, -2, 0>,
        <0,  2, 0>,
        0.5,
        -2.0
    }

    interior {                           // vlastnosti "vnitřku" implicitní plochy
        caustics 1.0
        ior 1.5
    }
    texture {                            // textura - povrch implicitní plochy
        T_Glass1                         // definováno v externím souboru
        pigment {
            color blue 0.80 red 0.80 filter 0.85  // barva povrchu
        }
        finish {                         // optické vlastnosti materiálu
            phong 1                      // velikost a síla odlesků
            phong_size 300
            reflection 0.15              // odrazivost
        }
    }
    rotate <15,105,0>
    scale 2.1
}

// druhý objekt - nekonečná rovina
plane {
    y,                                   // orientace roviny
    -2.5                                 // vzdálenost od počátku
    texture {                            // textura - vlastnosti povrchu
        T_Stone2                         // definováno v externím souboru
        pigment {                        // vlastní vzorek textury
            octaves 3                    // modifikace procedurálního vzorku
            rotate 90*z
        }
        finish {                         // optické vlastnosti materiálu
            reflection 0.10
        }
    }
}



// ------------------------------------------------------------
// finito
// ------------------------------------------------------------ 
povray0709

Obrázek 9: Výsledek výpočtu druhého demonstračního příkladu POV-Rayem

5. Třetí demonstrační příklad: animace vlivu postupné změny síly jednoho prvku kostry

Ve třetím demonstračním příkladu si ukážeme techniku, o které jsme si ještě příliš mnoho informací neřekli. Jedná se o tvorbu animací, jež je v POV-Rayi podporována mj. i pomocí proměnné clock, kterou je možné průběžně při renderingu jednotlivých snímků měnit. Pokud se při spuštění POV-Raye zadají parametry +KFI0 +KFF100, znamená to, že se má vytvořit 101 snímků (samostatných rastrových obrázků), přičemž u prvního obrázku bude proměnná clock nastavena na hodnotu 0.0 a u obrázku posledního na hodnotu 1.0. Této vlastnosti speciální proměnné clock je využito při změně intenzity (síly) úsečkového prvku kostry – intenzita postupně klesá z hodnoty 1.5 až na hodnotu –4.5, což je zajištěno výrazem (1.0-clock)*6.0–4.5. Následuje výpis zdrojového kódu třetího demonstračního příkladu, výsledná animace je uložena pod tímto odkazem:

// ------------------------------------------------------------
// Jednoduchá scéna s jednou implicitní plochou vymodelovanou
// pomocí dvou prvků kostry - jednoho bodového prvku kostry a
// jednoho úsečkového prvku kostry se silou odvozenou od
// proměnné "clock".
//
// rendering lze spustit příkazem:
//     povray +W800 +H600 +B100 +FN +D +KFI0 +KFF100 +Iblobs3.pov +Oblobs3.png
// (pro náhled postačí zadat povray blobs3.pov)
// ------------------------------------------------------------

// globální nastavení parametrů scény
global_settings {
    assumed_gamma 2.2
    max_trace_level 5
}

// načtení všech potřebných externích souborů
#include "colors.inc"
#include "stones.inc"
#include "glass.inc"

// nastavení kamery (pozorovatele)
camera {
    location  <1.65, 5.5, -5.0>          // pozice kamery
    up        <0.0,  1.0,  0.0>          // vektor směřující vzhůru
    right     <4/3,  0.0,  0.0>          // vektor směřující doprava
    look_at   <0,    0.8, -1.0>          // bod, na který kamera směřuje
}

// tři světelné zdroje
light_source {
    <-30, 11,  20>                       // pozice světelného zdroje
    color White                          // barva světla
}

light_source {
    < 31, 12, -20>                       // pozice světelného zdroje
    color White                          // barva světla
}

light_source {
    < 32, 11, -20>                       // pozice světelného zdroje
    color LightGray                      // barva světla
}

// první objekt - implicitní plocha
blob {
    threshold 0.5
    sphere {                             // bodový (kulový) prvek kostry
        <0, 0, 0>,                       // souřadnice středu
        2.0,                             // poloměr
        2.0                              // síla
    }
    cylinder {                           // prvek kostry se zápornou silou
        <0, -2, 0>,
        <0,  2, 0>,
        0.9,
        // rozsah 1.5 až -4.5 (rozdíl 6.0, delta -4.5)
        (1.0-clock)*6.0-4.5
    }

    interior {                           // vlastnosti "vnitřku" implicitní plochy
        caustics 1.0
        ior 1.5
    }
    texture {                            // textura - povrch implicitní plochy
        pigment {
            agate
            agate_turb 0.7
        }
        finish {                         // optické vlastnosti materiálu
            phong 1                      // velikost a síla odlesků
            phong_size 300
        }
        scale 0.3
    }
    rotate <20,140,0>
    scale 2.1
}

// druhý objekt - nekonečná rovina
plane {
    y,                                   // orientace roviny
    -2.5                                 // vzdálenost od počátku
    texture {                            // textura - vlastnosti povrchu
        pigment {
        checker
        }
        finish {                         // optické vlastnosti materiálu
            reflection 0.10
        }
    }
}



// ------------------------------------------------------------
// finito
// ------------------------------------------------------------ 

6. Změna individuálních vlastností jednotlivých prvků kostry implicitní plochy

V první kapitole jsme si řekli, že nová syntaxe zápisu implicitních ploch umožňuje, aby se pro každý prvek kostry nastavovaly individuální vlastnosti. Týká se to samozřejmě i materiálů povrchu. Pokud například každému prvku kostry přiřadíme odlišnou texturu, dojde při vykreslení implicitní plochy k zajímavému jevu – celá plocha je pokryta několika texturami, které se vzájemně prolínají, a to tak, že je vždy zvolena ta textura (popř. jejich mix), která odpovídá nejbližšímu prvku kostry. Přesněji řečeno se při výpočtu textury v daném místě povrchu berou v úvahu intenzity všech prvků kostry a na základě těchto intenzit se provádí jednoduchý blending, což je patrné z následujícího obrázku, který byl vytvořen pomocí tohoto kódu:

blob {
    threshold 0.5
    sphere {                             // bodový (kulový) prvek kostry
        <-3.5, 0, 0>,                      // souřadnice středu
        1.5,                             // poloměr
        2.0                              // síla
        texture {                        // individuální textura
            T_Wood1
        }
    }
    cylinder {                           // úsečkový (válcový) prvek kostry
        <-2, 0, 0>,                      // střed první podstavy
        < 2, 0, 0>,                      // střed druhé podstavy
        0.8,                             // poloměr
        1.0                              // síla
        texture {                        // individuální textura
            T_Stone1
        }
    }
    cylinder {
        <0, 0, -2>,
        <0, 0,  2>,
        0.8,
        1.0
        texture {
            pigment {
                agate
                agate_turb 0.3
            }
        }
    }
    cylinder {
        <0, -2, 0>,
        <0,  2, 0>,
        0.8,
        1.0
        texture {
            pigment {
                crackle
            }
            scale 0.3
        }
    }

    rotate <15,15,0>
    scale 1.8
} 
povray0710

Obrázek 10: Každému prvku kostry je přiřazena jiná textura

7. Čtvrtý demonstrační příklad: nastavení individuálních vlastností prvků kostry

Ve čtvrtém a současně i posledním demonstračním příkladu je ukázána tvorba implicitní plochy složené ze čtyř prvků kostry, kde je každému prvku přiřazen odlišný materiál. V tomto případě se jedná o čtyři typy skel, které se odlišují svou barvou. Ze zdrojového kódu tohoto demonstračního příkladu je patrné, že je možné použít jak společné vlastnosti, tak i vlastnosti individuální – jednomu prvku kostry není explicitně přidělen materiál, což znamená, že se pro něj zvolí materiál platný pro celou implicitní plochu.

// ------------------------------------------------------------
// Jednoduchá scéna s jednou implicitní plochou vymodelovanou
// pomocí čtyř prvků kostry - jednoho bodového prvku kostry a
// tří úsečkových prvků kostry. Každému prvku kostry je přiřazen
// jiný materiál povrchu.
//
// rendering lze spustit příkazem:
//     povray +W800 +H600 +B100 +FN +D +Iblobs4.pov +Oblobs4.png
// (pro náhled postačí zadat povray blobs4.pov)
// ------------------------------------------------------------

// globální nastavení parametrů scény
global_settings {
    assumed_gamma 2.2
    max_trace_level 5
}

// načtení všech potřebných externích souborů
#include "colors.inc"
#include "woods.inc"
#include "glass.inc"

// nastavení kamery (pozorovatele)
camera {
    location  <1.65, 5.5, -5.0>          // pozice kamery
    up        <0.0,  1.0,  0.0>          // vektor směřující vzhůru
    right     <4/3,  0.0,  0.0>          // vektor směřující doprava
    look_at   <0,    1.8, -1.0>          // bod, na který kamera směřuje
}

// tři světelné zdroje
light_source {
    <-30, 11,  20>                       // pozice světelného zdroje
    color White                          // barva světla
}

light_source {
    < 31, 12, -20>                       // pozice světelného zdroje
    color White                          // barva světla
}

light_source {
    < 32, 11, -20>                       // pozice světelného zdroje
    color LightGray                      // barva světla
}

// první objekt - implicitní plocha
blob {
    threshold 0.5
    sphere {                             // bodový (kulový) prvek kostry
        <-2, 0, 0>,                      // souřadnice středu
        1.0,                             // poloměr
        2.0                              // síla
        texture {                        // textura - povrch části implicitní plochy
            T_Glass1                     // definováno v externím souboru
            pigment {
                color green 1.00 filter 0.85  // barva povrchu
            }
            finish {                     // optické vlastnosti materiálu
                phong 1                  // velikost a síla odlesků
                phong_size 300
                reflection 0.15          // odrazivost
            }
        }
    }
    cylinder {                           // úsečkový (válcový) prvek kostry
        <-2, 0, 0>,                      // střed první podstavy
        < 2, 0, 0>,                      // střed druhé podstavy
        0.5,                             // poloměr
        1.0                              // síla
    }
    cylinder {
        <0, 0, -2>,
        <0, 0,  2>,
        0.5,
        1.0
        texture {                        // textura - povrch části implicitní plochy
            T_Glass1                     // definováno v externím souboru
            pigment {
                color red 0.90 green 0.90 filter 0.85  // barva povrchu
            }
            finish {                     // optické vlastnosti materiálu
                phong 1                  // velikost a síla odlesků
                phong_size 300
                reflection 0.15          // odrazivost
            }
        }
    }
    cylinder {
        <0, -2, 0>,
        <0,  2, 0>,
        0.5,
        1.0
        texture {                        // textura - povrch části implicitní plochy
            T_Glass1                     // definováno v externím souboru
            pigment {
                color red 0.90 filter 0.85  // barva povrchu
            }
            finish {                     // optické vlastnosti materiálu
                phong 1                  // velikost a síla odlesků
                phong_size 300
                reflection 0.15          // odrazivost
            }
        }
    }

    interior {                           // vlastnosti "vnitřku" části implicitní plochy
        caustics 1.0
        ior 1.5
    }
    texture {                            // textura - povrch části implicitní plochy
        T_Glass1                         // definováno v externím souboru
        pigment {
            color blue 0.90 filter 0.85  // barva povrchu
        }
        finish {                         // optické vlastnosti materiálu
            phong 1                      // velikost a síla odlesků
            phong_size 300
            reflection 0.15              // odrazivost
        }
    }
    rotate <15,15,0>
    scale 1.8
}

// druhý objekt - nekonečná rovina
plane {
    y,                                   // orientace roviny
    -2.5                                 // vzdálenost od počátku
    texture {                            // textura - vlastnosti povrchu
        T_Wood10                         // definováno v externím souboru
        finish {                         // optické vlastnosti materiálu
            reflection 0.10
        }
    }
}



// ------------------------------------------------------------
// finito
// ------------------------------------------------------------ 
povray0711

Obrázek 11: Výsledek výpočtu čtvrtého demonstračního příkladu POV-Rayem

8. Obsah dalšího pokračování seriálu

V následující části tohoto seriálu se zaměříme na další typy těles (jako by jich už nebylo dost), které jsou v raytraceru POV-Ray podporovány. Ukážeme si například tvorbu parametrických ploch, rotačních i tzv. vytahovaných ploch a v neposlední řadě si popíšeme také tělesa tvořená pomocí výškových polí (heightfields). Ty mají velký význam například při modelování různých typů terénů.

Našli jste v článku chybu?

25. 4. 2008 9:39

Takže obalovým tělesem to nebude, tj. zbývají pouze numerické chyby, protože se pohybujeme těsně na hranici implicitní plochy (aneb někdy nula není přesně nula). Asi je vhodné v těchto případech používat nějaké malé hodnoty "epsilon", místo absolutní nuly.

23. 4. 2008 10:59

Při zvětšeném thresholdu na těch 1e-5 je to už dobré a žádné poruchy již pozorovatelné nejsou. Také jsem zkusil přepínač -MB s thresholdem 0, ale zlepšení nenastalo a těleso je stále jakoby děrované.
Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Lupa.cz: Brněnský radní chce zničit kartel operátorů. Uspěje?

Brněnský radní chce zničit kartel operátorů. Uspěje?

Vitalia.cz: Taky věříte na pravidlo 5 sekund?

Taky věříte na pravidlo 5 sekund?

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Podnikatel.cz: Babiše přesvědčila 89letá podnikatelka?!

Babiše přesvědčila 89letá podnikatelka?!

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

DigiZone.cz: ČRa DVB-T2 ověřeno: Hisense a Sencor

ČRa DVB-T2 ověřeno: Hisense a Sencor

Vitalia.cz: Jedlé kaštany jsou trpké, je třeba je tepelně upravit

Jedlé kaštany jsou trpké, je třeba je tepelně upravit

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Vitalia.cz: 9 největších mýtů o mase

9 největších mýtů o mase

Podnikatel.cz: Chaos u EET pokračuje. Jsou tu další návrhy

Chaos u EET pokračuje. Jsou tu další návrhy

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Měšec.cz: mBank cenzuruje, zrušila mFórum

mBank cenzuruje, zrušila mFórum

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Vitalia.cz: „Připluly“ z Německa a možná obsahují jed

„Připluly“ z Německa a možná obsahují jed