Obsah
1. Procedurální textury a role turbulence při jejich použití
2. Parametry ovlivňující výpočet turbulence pomocí funkce DNoise
3. První demonstrační příklad: postupná změna hodnoty parametru turbulence
4. Druhý demonstrační příklad: postupná změna hodnoty parametru octaves
5. Třetí demonstrační příklad: postupná změna hodnoty parametru omega
6. Procedurální textura typu „leopard“
7. Procedurální textura typu „wood“
8. Procedurální textura typu „marble“
9. Obsah další části seriálu
1. Procedurální textury a role turbulence při jejich použití
Všechny procedurální textury, které jsme si popsali v předchozí části tohoto seriálu, i procedurální textury popsané dnes (v posledních třech kapitolách), mají jednu společnou vlastnost – vzorky generované těmito texturami jsou zcela pravidelné a postrádají tak žádoucí náznak náhodnosti, se kterým se setkáme prakticky u všech přírodních materiálů i přírodních fenoménů (oheň, kouř, oblaky). Aby bylo možné jednoduše tvořit a následně i prakticky používat textury takových materiálů, jakými jsou například různé typy dřeva, mramoru, srsti zvířat, ale i mraků či kouře, umožňuje POV-Ray na generované procedurální textury aplikovat takzvanou turbulenci, pomocí níž se původní zcela pravidelný vzorek více či méně deformuje a stane se tak více náhodným (přesněji řečeno pseudonáhodným, protože výpočet lze kdykoli opakovat se shodným výsledkem). Právě způsobem zadání všech důležitých parametrů turbulence a jejich vlivu na výslednou texturu se budeme v dnešním článku zabývat.
Obrázek 1: Velmi jednoduchá scéna obsahující dvě tělesa a dvě procedurální textury – jedna z textur simuluje strukturu dřeva, druhá textura pak strukturu mramoru
2. Parametry ovlivňující výpočet turbulence pomocí funkce DNoise
Interně se při výpočtu turbulence používá šumová funkce (noise function) nazvaná DNoise. Tato funkce pro každý bod v trojrozměrném prostoru R3 vrací trojrozměrný vektor d=(dx, dy, dz) reprezentující posun, o který se má bod posunout, přičemž jeho nová hodnota je použita při výpočtu barvy pomocí vybrané procedurální textury (bod posunutý do nových souřadnic bude mít obecně jinou barvu než bod původní). Přitom platí, že pro body, které jsou umístěny blízko sebe, se i jejich posuny přibližují a pro body vzdálenější se více odlišují (resp. mohou odlišovat) jejich vektory posunu. Výpočet turbulence se ovlivňuje pomocí několika parametrů. Nejdůležitější je parametr turbulence, pomocí kterého se udává míra působení turbulence na nějaký bod. Většinou se jedná o reálnou hodnotu z rozsahu 0 až 1, přičemž nulová hodnota značí nulovou míru turbulence a jednička poměrně velký vliv turbulence na tvar textury. Je však také možné tento parametr zadat ve formě vektoru <sx, sy, sz> a ovlivnit tak míru turbulence ve směru souřadných os.
Mezi další parametry, které je možné měnit, patří octave, omega a lambda. Počet aplikací funkce DNoise na nějaký bod je určen hodnotou octave. V případě, že je hodnota octave větší než jedna, je funkce DNoise volána vícekrát a tím pádem je na bod aplikováno i větší množství vektorů posunu. Míra zmenšování velikostí vektorů posunů generovaných funkcí DNoise se zvyšující se hodnotou octave je řízena parametrem omega, změna úhlu mezi jednotlivými vektory může být ovlivněna parametrem lambda. Čím menší je hodnota parametru omega, tím menší amplitudu (velikost) bude mít každý další vektor vypočtený pomocí funkce DNoise. Implicitní hodnota tohoto parametru je rovna 0.5, což znamená, že každý následující vektor má poloviční velikost než vektor předchozí. Implicitní hodnota parametru lambda je rovna dvěma a znamená, že následné vektory jsou oproti sobě natočeny náhodně. Hodnota blízko jedné naopak značí, že se orientace vektorů budou odlišovat pouze o malý úhel.
pigment {
typ_textury
turbulence FLOAT nebo TURB_VECTOR
octaves FLOAT (převedené na celé číslo v rozsahu 1-10)
omega FLOAT
lambda FLOAT
}
3. První demonstrační příklad: postupná změna hodnoty parametru turbulence
V dnešním prvním demonstračním příkladu je prakticky ukázáno, jaký vliv má turbulence na tvar původně velmi jednoduché textury nazvané marble neboli mramor. Bez aplikace turbulence má tato textura vzorek velmi podobný již minule popsané textuře gradient, ovšem s tím rozdílem, že se hodnota použitá pro výběr barvy z barvové mapy nejprve postupně zvyšuje od nuly do jedničky a posléze se opět snižuje směrem k nulové hodnotě. Výsledkem je, že textura je složena ze symetrických barevných pruhů určených barvovou mapou. Ovšem díky aplikaci turbulence se původní zcela pravidelný tvar textury mění, a to dosti podstatným způsobem (viz obrázek číslo 2). V demonstračním příkladu je vytvořeno devět viditelných povrchů (jedná se vždy o jednu ze stran kvádru) pokrytých právě texturou marble. Jednotlivé povrchy se od sebe odlišují mírou vlivu turbulence. Zatímco u prvního povrchu je míra rovna 0 %, u povrchu posledního je to již 80 %. Následuje výpis zdrojového kódu prvního demonstračního příkladu:
// ------------------------------------------------------------
// První demonstrační příklad ukazující práci s procedurálními
// texturami.
//
// Postupná změna hodnoty turbulence pro zvolenou procedurální
// texturu od hodnoty 0.0 do hodnoty 0.8.
//
// rendering lze spustit příkazem:
// povray +W1024 +H1024 +B100 +FN +D +Itextures.pov +Otextures.png
//
// !POZOR: scénu je nutné vykreslit se stejným horizontálním
// i vertikálním rozlišením!
// ------------------------------------------------------------
#version 3.0
global_settings {
assumed_gamma 2.2
}
#include "colors.inc"
camera { // nastavení kamery
orthographic // bez perspektivy
location < 0, 0, -1> // pozice kamery
right 15*x // šířka a výška snímané části scény
up 15*y
direction z // směr pohledu kamery (k počátku)
}
light_source { // světelný zdroj
<200, 200, -500> // pozice
color White // barva
}
#declare COL1=-4.5; // posuny objektů ve vztahu
#declare COL2= 0.0; // k pomyslné mřížce
#declare COL3= 4.5; // o rozměrech 3x3
#declare ROW1= 4.5;
#declare ROW2= 0.0;
#declare ROW3=-4.5;
#declare Z=0.0;
#declare PIGMENT=pigment { // testovací procedurální textura
marble // základ pro tvorbu textury mramoru
color_map { // náhrada původní barvové mapy
[0.0 color Blue] // hodnota 0 je dolní mezí, pro kterou lze specifikovat barvu
[0.7 color White]
[1.0 color Red] // hodnota 1 je naopak horní mezí
}
}
#declare OBJECT=box { // testovací objekt - jednoduchý kvádr
<-2,-2, 0>,
< 2, 2, 1>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.0
}
}
translate <COL1, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.1
}
}
translate <COL2, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.2
}
}
translate <COL3, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.3
}
}
translate <COL1, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.4
}
}
translate <COL2, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.5
}
}
translate <COL3, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.6
}
}
translate <COL1, ROW3, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.7
}
}
translate <COL2, ROW3, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.8
}
}
translate <COL3, ROW3, Z>
}
// ------------------------------------------------------------
// finito
// ------------------------------------------------------------
Obrázek 2: Výsledek spuštění prvního demonstračního příkladu v POV-Rayi
4. Druhý demonstrační příklad: postupná změna hodnoty parametru octaves
Ve druhém demonstračním příkladu je opět ukázáno devět povrchů pokrytých procedurální texturou marble. Hodnota turbulence (resp. míra jejího vlivu na generovanou texturu) je v tomto případě konstantní (60 resp. 90 procent), liší se však hodnota octaves, která roste od minimální hodnoty 1 až do hodnoty 9. Jak je z obrázků patrné, i tato hodnota má velký vliv na výslednou podobu procedurální textury, ovšem tento vliv je odlišný od změny míry vlivu samotné turbulence. Za povšimnutí také stojí způsob vykreslení obrázku pomocí ortografického (rovnoběžného) promítání bez vlivu perspektivy (při použití perspektivního promítání by byly vidět i další stěny kvádrů) a způsob zajištění tvorby čtvercového obrázku, tj. nastavení měřítka vektorů right, up a direction, kterými se dolaďuje nastavení kamery ve scéně (podrobněji se tomuto tématu ještě budeme věnovat v navazujících částech tohoto seriálu).
Obrázek 3: Výsledek spuštění druhého demonstračního příkladu v POV-Rayi při nastavení míry turbulence na hodnotu rovnou 60 procentům
Zdrojový kód druhého demonstračního příkladu:
// ------------------------------------------------------------
// Druhý demonstrační příklad ukazující práci s procedurálními
// texturami.
//
// Postupná změna hodnoty octaves pro zvolenou procedurální
// texturu od hodnoty 1 do hodnoty 9.
//
// rendering lze spustit příkazem:
// povray +W1024 +H1024 +B100 +FN +D +Itextures.pov +Otextures.png
//
// !POZOR: scénu je nutné vykreslit se stejným horizontálním
// i vertikálním rozlišením!
// ------------------------------------------------------------
#version 3.0
global_settings {
assumed_gamma 2.2
}
#include "colors.inc"
camera { // nastavení kamery
orthographic // bez perspektivy
location < 0, 0, -1> // pozice kamery
right 15*x // šířka a výška snímané části scény
up 15*y
direction z // směr pohledu kamery (k počátku)
}
light_source { // světelný zdroj
<200, 200, -500> // pozice
color White // barva
}
#declare COL1=-4.5; // posuny objektů ve vztahu
#declare COL2= 0.0; // k pomyslné mřížce
#declare COL3= 4.5; // o rozměrech 3x3
#declare ROW1= 4.5;
#declare ROW2= 0.0;
#declare ROW3=-4.5;
#declare Z=0.0;
#declare PIGMENT=pigment { // testovací procedurální textura
marble
turbulence 0.6
color_map { // náhrada původní barvové mapy
[0.0 color Blue] // hodnota 0 je dolní mezí, pro kterou lze specifikovat barvu
[0.7 color White]
[1.0 color Red] // hodnota 1 je naopak horní mezí
}
}
#declare OBJECT=box { // testovací objekt - jednoduchý kvádr
<-2,-2, 0>,
< 2, 2, 1>
}
object {
OBJECT
texture {
pigment {
PIGMENT
octaves 1
}
}
translate <COL1, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
octaves 2
}
}
translate <COL2, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
octaves 3
}
}
translate <COL3, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
octaves 4
}
}
translate <COL1, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
octaves 5
}
}
translate <COL2, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
octaves 6
}
}
translate <COL3, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
octaves 7
}
}
translate <COL1, ROW3, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
octaves 8
}
}
translate <COL2, ROW3, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
octaves 9
}
}
translate <COL3, ROW3, Z>
}
// ------------------------------------------------------------
// finito
// ------------------------------------------------------------
Obrázek 4: Výsledek spuštění druhého demonstračního příkladu v POV-Rayi při nastavení míry turbulence na hodnotu rovnou 90 procentům
5. Třetí demonstrační příklad: postupná změna hodnoty parametru omega
Ve třetím demonstračním příkladu je hodnota turbulence i hodnota octaves pro všech devět povrchů nastavena shodně, ovšem liší se hodnota parametru omega. Tímto parametrem se řídí, jak již víme z úvodních dvou kapitol, míra zmenšování vlivu turbulence při jejích opakovaných aplikacích v jednom bodu povrchu. Nulová hodnota parametru omega prakticky znamená, že se nebude brát ohled na hodnotu octaves, hodnota blízká jedničce pak velký vliv náhody (pseudonáhody) do tvaru generované textury.
Obrázek 5: Výsledek spuštění třetího demonstračního příkladu v POV-Rayi při nastavení míry turbulence na hodnotu rovnou 60 procentům
Zdrojový kód třetího demonstračního příkladu:
// ------------------------------------------------------------
// Třetí demonstrační příklad ukazující práci s procedurálními
// texturami.
//
// Postupná změna hodnoty omega pro zvolenou procedurální
// texturu od hodnoty 0.0 do hodnoty 0.8.
//
// rendering lze spustit příkazem:
// povray +W1024 +H1024 +B100 +FN +D +Itextures.pov +Otextures.png
//
// !POZOR: scénu je nutné vykreslit se stejným horizontálním
// i vertikálním rozlišením!
// ------------------------------------------------------------
#version 3.0
global_settings {
assumed_gamma 2.2
}
#include "colors.inc"
camera { // nastavení kamery
orthographic // bez perspektivy
location < 0, 0, -1> // pozice kamery
right 15*x // šířka a výška snímané části scény
up 15*y
direction z // směr pohledu kamery (k počátku)
}
light_source { // světelný zdroj
<200, 200, -500> // pozice
color White // barva
}
#declare COL1=-4.5; // posuny objektů ve vztahu
#declare COL2= 0.0; // k pomyslné mřížce
#declare COL3= 4.5; // o rozměrech 3x3
#declare ROW1= 4.5;
#declare ROW2= 0.0;
#declare ROW3=-4.5;
#declare Z=0.0;
#declare PIGMENT=pigment { // testovací procedurální textura
marble
turbulence 0.6
octaves 6
color_map { // náhrada původní barvové mapy
[0.0 color Blue] // hodnota 0 je dolní mezí, pro kterou lze specifikovat barvu
[0.7 color White]
[1.0 color Red] // hodnota 1 je naopak horní mezí
}
}
#declare OBJECT=box { // testovací objekt - jednoduchý kvádr
<-2,-2, 0>,
< 2, 2, 1>
}
object {
OBJECT
texture {
pigment {
PIGMENT
omega 0.0
}
}
translate <COL1, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
omega 0.1
}
}
translate <COL2, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
omega 0.2
}
}
translate <COL3, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
omega 0.3
}
}
translate <COL1, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
omega 0.4
}
}
translate <COL2, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
omega 0.5
}
}
translate <COL3, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
omega 0.6
}
}
translate <COL1, ROW3, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
omega 0.7
}
}
translate <COL2, ROW3, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
omega 0.8
}
}
translate <COL3, ROW3, Z>
}
// ------------------------------------------------------------
// finito
// ------------------------------------------------------------
Obrázek 6: Výsledek spuštění třetího demonstračního příkladu v POV-Rayi při nastavení míry turbulence na hodnotu rovnou 90 procentům
6. Procedurální textura typu „leopard“
Jednou z pravidelných procedurálních textur, na kterou lze aplikovat turbulenci, je i textura nazvaná leopard, která se snaží napodobit skvrny na srsti stejnojmenného dravce. Bez vlivu turbulence tvoří tato textura pravidelný vzorek složený z kružnic, pomocí turbulence je však možné do vzorku vnést náhodnost, což je také patrné při pohledu na sedmý obrázek. Zdrojový kód, ze kterého byl sedmý obrázek vytvořen, má tvar:
// ------------------------------------------------------------
// Čtvrtý demonstrační příklad ukazující práci s procedurálními
// texturami.
//
// Procedurální textura "leopard".
//
// rendering lze spustit příkazem:
// povray +W1024 +H1024 +B100 +FN +D +Itextures.pov +Otextures.png
//
// !POZOR: scénu je nutné vykreslit se stejným horizontálním
// i vertikálním rozlišením!
// ------------------------------------------------------------
#version 3.0
global_settings {
assumed_gamma 2.2
}
#include "colors.inc"
camera { // nastavení kamery
orthographic // bez perspektivy
location < 0, 0, -1> // pozice kamery
right 15*x // šířka a výška snímané části scény
up 15*y
direction z // směr pohledu kamery (k počátku)
}
light_source { // světelný zdroj
<200, 200, -500> // pozice
color White // barva
}
#declare COL1=-4.5; // posuny objektů ve vztahu
#declare COL2= 0.0; // k pomyslné mřížce
#declare COL3= 4.5; // o rozměrech 3x3
#declare ROW1= 4.5;
#declare ROW2= 0.0;
#declare ROW3=-4.5;
#declare Z=0.0;
#declare PIGMENT=pigment {
leopard scale 0.4
color_map {
[0.0 color rgb <0.8, 0.2, 0.2>] // hodnota 0 je dolní mezí, pro kterou lze specifikovat barvu
[0.2 color rgb <0.4, 0.2, 0.2>]
[0.4 color White]
[0.6 color rgb <0.2, 0.6, 0.6>]
[1.0 color rgb <0.8, 0.2, 0.2>] // hodnota 1 je naopak horní mezí
}
}
#declare OBJECT=box { // testovací objekt - jednoduchý kvádr
<-2,-2, 0>,
< 2, 2, 1>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.0
}
}
translate <COL1, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.1
}
}
translate <COL2, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.2
}
}
translate <COL3, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.3
}
}
translate <COL1, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.4
}
}
translate <COL2, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.5
}
}
translate <COL3, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.6
}
}
translate <COL1, ROW3, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.7
}
}
translate <COL2, ROW3, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.8
}
}
translate <COL3, ROW3, Z>
}
// ------------------------------------------------------------
// finito
// ------------------------------------------------------------
Obrázek 7: Textura „leopard“ a vliv turbulence na její tvar
7. Procedurální textura typu „wood“
Další velmi často používanou procedurální texturou je textura nazvaná wood. Tu jsme si již popsali v předchozí části tohoto seriálu – vzorek je tvořen soustřednými kružnicemi vzniklými řezem nekonečných válců rovnoběžných s osou z. Ovšem až díky aplikaci turbulence dostává tento vzorek skutečně praktický význam a lze ho použít při tvorbě většiny modelů složených z dřevěných materiálů. Následuje příklad využívající barvovou mapu napodobující dřevo:
// ------------------------------------------------------------
// Pátý demonstrační příklad ukazující práci s procedurálními
// texturami.
//
// Postupná změna hodnoty turbulence pro zvolenou procedurální
// texturu "wood".
//
// rendering lze spustit příkazem:
// povray +W1024 +H1024 +B100 +FN +D +Itextures.pov +Otextures.png
//
// !POZOR: scénu je nutné vykreslit se stejným horizontálním
// i vertikálním rozlišením!
// ------------------------------------------------------------
#version 3.0
global_settings {
assumed_gamma 2.2
}
#include "colors.inc"
camera { // nastavení kamery
orthographic // bez perspektivy
location < 0, 0, -1> // pozice kamery
right 15*x // šířka a výška snímané části scény
up 15*y
direction z // směr pohledu kamery (k počátku)
}
light_source { // světelný zdroj
<200, 200, -500> // pozice
color White // barva
}
#declare COL1=-4.5; // posuny objektů ve vztahu
#declare COL2= 0.0; // k pomyslné mřížce
#declare COL3= 4.5; // o rozměrech 3x3
#declare ROW1= 4.5;
#declare ROW2= 0.0;
#declare ROW3=-4.5;
#declare Z=0.0;
#declare PIGMENT=pigment {
wood
omega 0.5
octaves 6
color_map {
[0.0, 0.1 color rgb <0.88, 0.60, 0.40>
color rgb <0.88, 0.60, 0.40>]
[0.1, 0.9 color rgb <0.88, 0.60, 0.40>
color rgb <0.60, 0.30, 0.20>]
[0.9, 1.0 color rgb <0.60, 0.30, 0.20>
color rgb <0.60, 0.30, 0.20>]
}
}
#declare OBJECT=box { // testovací objekt - jednoduchý kvádr
<-2,-2, 0>,
< 2, 2, 1>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.0
}
}
translate <COL1, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.1
}
}
translate <COL2, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.2
}
}
translate <COL3, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.3
}
}
translate <COL1, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.4
}
}
translate <COL2, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.5
}
}
translate <COL3, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.6
}
}
translate <COL1, ROW3, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.7
}
}
translate <COL2, ROW3, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.8
}
}
translate <COL3, ROW3, Z>
}
// ------------------------------------------------------------
// finito
// ------------------------------------------------------------
Obrázek 8: Textura „wood“ a vliv turbulence na její tvar
8. Procedurální textura typu „marble“
Procedurální texturu marble (mramor) jsme si již popsali ve třetí kapitole, na tomto místě si alespoň ukážeme její variabilnost při použití různých barvových map. Tato textura se velmi často používá ve více vrstvách (multi layers), což je velmi zajímavá a přitom užitečná technika, kterou si popíšeme až v navazujících částech tohoto seriálu. Jedná se i o jednu z textur, která má již implicitně předdefinovaný barvový vzorek; ten je použitý na levém horním povrchu. Všechny další povrchy již využívají uživatelsky definované barvové mapy:
// ------------------------------------------------------------
// Šestý demonstrační příklad ukazující práci s procedurálními
// texturami.
//
// Postupná změna hodnoty turbulence pro zvolenou procedurální
// texturu "marble".
//
// rendering lze spustit příkazem:
// povray +W1024 +H1024 +B100 +FN +D +Itextures.pov +Otextures.png
//
// !POZOR: scénu je nutné vykreslit se stejným horizontálním
// i vertikálním rozlišením!
// ------------------------------------------------------------
#version 3.0
global_settings {
assumed_gamma 2.2
}
#include "colors.inc"
camera { // nastavení kamery
orthographic // bez perspektivy
location < 0, 0, -1> // pozice kamery
right 15*x // šířka a výška snímané části scény
up 15*y
direction z // směr pohledu kamery (k počátku)
}
light_source { // světelný zdroj
<200, 200, -500> // pozice
color White // barva
}
#declare COL1=-4.5; // posuny objektů ve vztahu
#declare COL2= 0.0; // k pomyslné mřížce
#declare COL3= 4.5; // o rozměrech 3x3
#declare ROW1= 4.5;
#declare ROW2= 0.0;
#declare ROW3=-4.5;
#declare Z=0.0;
#declare PIGMENT=pigment {
marble
turbulence 0.7
octaves 5
omega 0.6
}
#declare OBJECT=box { // testovací objekt - jednoduchý kvádr
<-2,-2, 0>,
< 2, 2, 1>
}
object {
OBJECT
texture {
pigment {
PIGMENT
}
}
translate <COL1, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
color_map {
[0.000 0.154 color red 0.690 green 0.612 blue 0.569
color red 0.737 green 0.596 blue 0.522]
[0.154 0.368 color red 0.737 green 0.596 blue 0.522
color red 0.776 green 0.702 blue 0.624]
[0.368 0.538 color red 0.776 green 0.702 blue 0.624
color red 0.796 green 0.678 blue 0.643]
[0.538 0.846 color red 0.796 green 0.678 blue 0.643
color red 0.690 green 0.612 blue 0.569]
[0.846 0.932 color red 0.690 green 0.612 blue 0.569
color red 0.773 green 0.612 blue 0.569]
[0.932 1.001 color red 0.773 green 0.612 blue 0.569
color red 0.690 green 0.612 blue 0.569]
}
}
}
translate <COL2, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
octaves 8
omega 0.6
turbulence 1
color_map {
[0.0 color Black]
[0.8 color Black]
[1.0 color Yellow]
}
}
}
translate <COL3, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
color_map {
[0.0 color Black]
[0.5 color Green]
[0.8 color Black]
}
}
}
translate <COL1, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
color_map {
[0.0 0.05 color Black color Black]
[0.05 0.90 color Pink color Red]
[0.90 1.001 color Black color Black]
}
}
}
translate <COL2, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
color_map {
[0.000 0.104 color red 0.161 green 0.133 blue 0.118
color red 0.110 green 0.082 blue 0.071]
[0.104 0.252 color red 0.110 green 0.082 blue 0.071
color red 0.161 green 0.133 blue 0.118]
[0.252 0.383 color red 0.161 green 0.133 blue 0.118
color red 0.000 green 0.000 blue 0.000]
[0.383 0.643 color red 0.000 green 0.000 blue 0.000
color red 0.161 green 0.133 blue 0.118]
[0.643 0.783 color red 0.161 green 0.133 blue 0.118
color red 0.220 green 0.149 blue 0.137]
[0.783 0.922 color red 0.220 green 0.149 blue 0.137
color red 0.000 green 0.000 blue 0.000]
[0.922 0.983 color red 0.000 green 0.000 blue 0.000
color red 0.220 green 0.149 blue 0.137]
[0.983 1.001 color red 0.220 green 0.149 blue 0.137
color red 0.161 green 0.133 blue 0.118]
}
}
}
translate <COL3, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
color_map { // náhrada původní barvové mapy
[0.0 color Blue] // hodnota 0 je dolní mezí, pro kterou lze specifikovat barvu
[0.7 color White]
[1.0 color Red] // hodnota 1 je naopak horní mezí
}
}
}
translate <COL1, ROW3, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
color_map {
[0.0 color rgb <0.8, 0.2, 0.2>] // hodnota 0 je dolní mezí, pro kterou lze specifikovat barvu
[0.2 color rgb <0.4, 0.2, 0.2>]
[0.4 color White]
[0.6 color rgb <0.2, 0.6, 0.6>]
[1.0 color rgb <0.8, 0.2, 0.2>] // hodnota 1 je naopak horní mezí
}
}
}
translate <COL2, ROW3, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
color_map {
[0.0 color Yellow] // hodnota 0 je dolní mezí, pro kterou lze specifikovat barvu
[0.3 color Green*0.7]
[0.6 color White]
[1.0 color Green*0.7] // hodnota 1 je naopak horní mezí
}
}
}
translate <COL3, ROW3, Z>
}
// ------------------------------------------------------------
// finito
// ------------------------------------------------------------
Obrázek 9: Textura „marble“ a vliv turbulence na její tvar
9. Obsah další části seriálu
V následující části seriálu o raytraceru POV-Ray si ukážeme další procedurální textury, zejména ty, při jejichž vytváření jsou aplikovány různé šumové a náhodné funkce. Pomocí těchto textur je možné vytvářet například povrchy různých typů kamenů, mraky nebo povrch vodní hladiny. I na tyto „náhodné textury“ lze aplikovat turbulenci a změnit tak v malé či větší míře jejich výsledný vzorek.