Obsah
1. Pseudonáhodné procedurální textury
2. Procedurální textura „agate“
3. Procedurální textura „bozo“
4. Procedurální textura „crackle“
5. Procedurální textura „ripples“
6. Procedurální textura „granite“
7. Procedurální textura „wrinkles“
8. Tvorba mraků pomocí textury „wrinkles“
9. Obsah následující části seriálu
1. Pseudonáhodné procedurální textury
V předchozí části tohoto seriálu jsme si ukázali, jakým způsobem se změní vzorek generovaný původně zcela pravidelnými texturami po aplikaci turbulence. POV-Ray však obsahuje i další procedurální textury, pomocí kterých se generují pseudonáhodné vzorky i bez explicitního použití turbulence, přesněji řečeno bez použití interně implementované funkce nazvané DNoise. Mezi tyto textury patří textura nazvaná agate (v ní je použita odlišná implementace turbulence), bozo (plynulý přechod mezi náhodně vybarvenými body, velmi často používaná textura při modulaci normál), crackle (vizualizovaný Voronoiův diagram, opět vytvořený z náhodných bodů) a ripples (simulace ne zcela pravidelně rozvlněné vodní hladiny). Všechny tyto textury generují nepravidelné vzorky, které je však možné dále upravit pomocí standardní turbulence, i když to v mnoha případech není nutné (například textura agate je turbulentní i bez nutnosti aplikace funkce DNoise).
Obrázek 1: Textura „agate“ s implicitní barvovou mapou
POV-Ray obsahuje podporu i pro dva typy textur, které jsou založeny na takzvané fraktální šumové funkci 1/f. Výpočet této šumové funkce je založen na inverzní Fourierově transformaci s vhodně zvolenými koeficienty, jejíž výsledky jsou použity přímo, tj. nikoli pro posun bodů, jak je tomu u standardní turbulence (ovšem i na tyto textury lze turbulenci použít, což si na ukážeme na jednom demonstračním příkladu v osmé kapitole). Procedurální textury, které fraktální šumovou funkci 1/f používají, se jmenují granite a wrinkles. První typ textury slouží, jak její název napovídá, především pro vykreslování kamenných povrchů, druhý typ lze použít také pro vytváření kamenných povrchů nebo (a to při praktickém použití mnohem častěji) při vykreslování mraků či mlhy. Tyto textury se také velmi často používají pro modulaci normál, neboli bump mapping, což je technika, kterou si popíšeme až v následující části tohoto seriálu.
2. Procedurální textura „agate“
Textura nazvaná přiléhavě agate (achát) je v praxi pro svůj elegantní vzhled používaná velmi často, většinou v kombinaci s další (podkladovou) texturou. Tato procedurální textura se do značné míry podobá minule popsané textuře marble (mramor), ovšem s tím rozdílem, že zde je na původně pravidelný vzorek aplikována interní speciálně vytvořená šumová funkce, která se ovládá parametrem nazvaným agate_turb. Na texturu lze samozřejmě (navíc) aplikovat i standardní turbulenci (funkci DNoise), většinou to však není nutné, což je ostatně patrné i z obrázku vytvořeného pomocí dnešního prvního demonstračního příkladu. Procedurální textura agate má zabudovanou svoji vlastní barvovou mapu, která je použita v případě, že uživatel nezadá mapu svoji (jedná se o hnědo-bílý přechod). V demonstračním příkladu, jehož zdrojový kód je uveden níže, je však použita odlišná barvová mapa:
// ------------------------------------------------------------
// Ukázka použití procedurální textury "agate".
//
// 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
agate // základ pro tvorbu textury mramoru
color_map { // náhrada původní barvové mapy
[0.02 color rgb <0.65, 0.45, 0.25> ]
[0.06 color rgb <0.55, 0.40, 0.20> ]
[0.10 color rgb <0.15, 0.10, 0.05> ]
[0.95 color rgb <0.75, 0.60, 0.40> ]
[1.00 color Red ]
}
}
#declare OBJECT=box { // testovací objekt - jednoduchý kvádr
<-2,-2, 0>,
< 2, 2, 1>
}
object {
OBJECT
texture {
pigment {
PIGMENT
agate_turb 0.1
}
}
translate <COL1, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
agate_turb 0.2
}
}
translate <COL2, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
agate_turb 0.3
}
}
translate <COL3, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
agate_turb 0.4
}
}
translate <COL1, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
agate_turb 0.5
}
}
translate <COL2, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
agate_turb 0.6
}
}
translate <COL3, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
agate_turb 0.7
}
}
translate <COL1, ROW3, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
agate_turb 0.8
}
}
translate <COL2, ROW3, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
agate_turb 0.9
}
}
translate <COL3, ROW3, Z>
}
// ------------------------------------------------------------
// finito
// ------------------------------------------------------------
Obrázek 2: Textura „agate“ s různými hodnotami parametru agate_turb
3. Procedurální textura „bozo“
Procedurální textura bozo tvoří barevné vzory, které se podobají známému vzorku plasmy; její výpočet však není založen na metodě náhodného přesouvání prostředního bodu, jak je tomu u klasické plasmy, ale na šumové funkci. Jedná se tedy o pseudonáhodnou texturu, která při každém spuštění vykreslování vytváří stejný vzorek, ve kterém jsou přechody mezi jednotlivými barvami velmi pozvolné. Z tohoto důvodu se na texturu bozo často aplikuje standardní turbulence, pomocí které se přechody zvýrazní, což je ukázáno na demonstračním příkladu, ve kterém se turbulence postupně mění od hodnoty 0,1 do hodnoty 0,9. Také tato procedurální textura má implicitní barvovou paletu, kterou tvoří ostré přechody (skoky) mezi zelenou, modrou, červenou a bílou barvou. Zdrojový text demonstračního příkladu, který tuto texturu používá, má následující tvar:
// ------------------------------------------------------------
// Ukázka použití procedurální textury "bozo".
//
// 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
bozo // základ pro tvorbu textury mramoru
scale 0.5
color_map { // náhrada původní barvové mapy
[0.00 color Blue ]
[0.50 color rgb <0.40, 0.40, 0.70> ]
[1.00 color White ]
}
}
#declare OBJECT=box { // testovací objekt - jednoduchý kvádr
<-2,-2, 0>,
< 2, 2, 1>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.1
}
}
translate <COL1, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.2
}
}
translate <COL2, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.3
}
}
translate <COL3, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.4
}
}
translate <COL1, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.5
}
}
translate <COL2, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.6
}
}
translate <COL3, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.7
}
}
translate <COL1, ROW3, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.8
}
}
translate <COL2, ROW3, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
turbulence 0.9
}
}
translate <COL3, ROW3, Z>
}
// ------------------------------------------------------------
// finito
// ------------------------------------------------------------
Obrázek 3: Textura „bozo“ s různými hodnotami parametru turbulence
Obrázek 4: Textura „bozo“ s původní barvovou mapou
4. Procedurální textura „crackle“
Způsob výpočtu textury crackle se do značné míry odlišuje od ostatních procedurálních textur. Nejprve jsou v prostoru vytvořeny náhodné body pomoci generátoru pseudonáhodných čísel a posléze je prostor mezi těmito body rozdělen podle pravidel Voronoiova diagramu a všechny ostatní body v prostoru jsou obarveny podle své vzdálenosti od úseček takto vytvořeného Voronoiova diagramu (Voronoiův diagram má – nejenom – v počítačové grafice velký význam, jeho teorie je popsaná například v Wikipedia: Voronoi diagram). Textura crackle tvoří vzorek podobný rozpraskané zemi nebo kamenů, které jsou seskládány těsně vedle sebe, ovšem i na tuto texturu je možné aplikovat turbulenci, což je ukázáno ve třetím demonstračním příkladu. Implicitní barvová mapa, která sestává pouze z jediného přechodu černá-bílá, je poněkud tmavá, proto jsem v demonstračním příkladu použil dvojitý přechod černá-bílá-černá:
// ------------------------------------------------------------
// Ukázka použití procedurální textury "crackle".
//
// 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
crackle // základ pro tvorbu textury mramoru
color_map {
[0.00 Black]
[0.50 White]
[1.00 Black]
}
}
#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 5: Textura „crackle“ s různými hodnotami parametru turbulence
5. Procedurální textura „ripples“
Pomocí procedurální textury ripples je možné vytvářet simulace ne zcela pravidelně rozvlněné vodní hladiny, ve vygenerovaném vzorku je tedy jasně patrná náhodnost, kterou je možné dále zvětšit parametrem turbulence, podobně jako tomu je i u dalších procedurálních textur. Pomocí parametru frequency lze měnit počet „vln“ a parametrem phase pak posun vln od jejich středu (postupná změna tohoto parametru vede k tvorbě zajímavé animace, což si ještě v tomto seriálu ukážeme). I tato textura se používá pro modulaci normály (bump mapping), například pro dosažení iluze nepravidelně zvlněného plechu. V demonstračním příkladu uvedeném níže je postupně měněna jak hodnota parametru turbulence (náhodnost vzorku), tak i parametru frequency (počet vytvořených vln):
// ------------------------------------------------------------
// Ukázka použití procedurální textury "ripples".
//
// 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
ripples // základ pro tvorbu textury mramoru
color_map { // náhrada původní barvové mapy
[0.0 color Red] // hodnota 0 je dolní mezí, pro kterou lze specifikovat barvu
[0.2 color Blue]
[0.8 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
frequency 1
}
}
translate <COL1, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
frequency 1.2
}
}
translate <COL2, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
frequency 1.4
}
}
translate <COL3, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
frequency 1
turbulence 0.4
}
}
translate <COL1, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
frequency 1.2
turbulence 0.4
}
}
translate <COL2, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
frequency 1.4
turbulence 0.4
}
}
translate <COL3, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
frequency 1
turbulence 0.8
}
}
translate <COL1, ROW3, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
frequency 1.2
turbulence 0.8
}
}
translate <COL2, ROW3, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
frequency 1.4
turbulence 0.8
}
}
translate <COL3, ROW3, Z>
}
// ------------------------------------------------------------
// finito
// ------------------------------------------------------------
Obrázek 6: Textura „ripples“ s různými hodnotami parametru turbulence a frequency
6. Procedurální textura „granite“
O textuře granite jsme si již řekli, že je vytvářená pomocí fraktální šumové funkce 1/f. Při měřítku 1:1 je vzorek vytvářený touto texturou velmi náhodný (lze ho použít například pro vytvoření omítnutých zdí), lepších výsledků se však dosáhne při zvětšení textury pomocí příkazu scale, což je ukázáno i v demonstračním příkladu:
// ------------------------------------------------------------
// Ukázka použití procedurální textury "granite".
//
// 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
granite // základ pro tvorbu textury mramoru
scale 10
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
scale 0.05
}
}
translate <COL1, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
scale 0.1
}
}
translate <COL2, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
scale 0.2
}
}
translate <COL3, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
scale 0.3
}
}
translate <COL1, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
scale 0.4
}
}
translate <COL2, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
scale 0.5
}
}
translate <COL3, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
scale 0.6
}
}
translate <COL1, ROW3, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
scale 0.7
}
}
translate <COL2, ROW3, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
scale 0.8
}
}
translate <COL3, ROW3, Z>
}
// ------------------------------------------------------------
// finito
// ------------------------------------------------------------
Obrázek 7: Textura „granite“ při různém zvětšení
7. Procedurální textura „wrinkles“
I procedurální textura wrinkles (vrásky, zvrásnění) je vypočtena, podobně jako textura předchozí, za pomoci fraktální šumové funkce 1/f. V následujícím příkladu je tato textura zobrazena v různých měřítkách (zvětšeních) s velmi jednoduchou barvovou paletou (v podstatě se jedná o gradientní přechod od modré do bílé), která připomíná oblohu. Tuto texturu je možné použít buď pro tvorbu kamenných povrchů (malé zvětšení) či právě pro tvorbu mraků (větší přiblížení).
// ------------------------------------------------------------
// Ukázka použití procedurální textury "wrinkles".
//
// 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
wrinkles // základ pro tvorbu textury mramoru
scale 2
color_map { // náhrada původní barvové mapy
[0.0 color Blue] // hodnota 0 je dolní mezí, pro kterou lze specifikovat barvu
[1.0 color White] // 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
scale 0.05
}
}
translate <COL1, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
scale 0.1
}
}
translate <COL2, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
scale 0.2
}
}
translate <COL3, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
scale 0.3
}
}
translate <COL1, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
scale 0.4
}
}
translate <COL2, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
scale 0.5
}
}
translate <COL3, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
scale 0.6
}
}
translate <COL1, ROW3, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
scale 0.7
}
}
translate <COL2, ROW3, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
scale 0.8
}
}
translate <COL3, ROW3, Z>
}
// ------------------------------------------------------------
// finito
// ------------------------------------------------------------
Obrázek 8: Textura „wrinkles“ při různém zvětšení
8. Tvorba mraků pomocí textury „wrinkles“
V dnešním posledním demonstračním příkladu je ukázáno, jakým způsobem je možné použít procedurální texturu wrinkles pro tvorbu mraků. Na texturu je v poměrně velké míře aplikována turbulence (65%) s vhodně nastavenými parametry octaves, omega a lambda. Důležitá je také změna měřítka, která není ve všech směrech stejná – textura je „prodloužena“ v horizontálním směru. Výsledkem jsou poměrně reálně vypadající mraky, které je navíc možné poměrně jednoduchým způsobem animovat, což si ukážeme v některé z dalších částí tohoto seriálu.
// ------------------------------------------------------------
// Procedurální textura "wrinkles" použitá pro vytvoření mraků.
//
// 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
wrinkles
turbulence 0.65
octaves 6
omega 0.7
lambda 2
color_map {
[0.0, 0.1 color red 0.85 green 0.85 blue 0.85
color red 0.75 green 0.75 blue 0.75]
[0.1, 0.5 color red 0.75 green 0.75 blue 0.75
color rgb <0.258, 0.258, 0.435> ]
[0.5, 1.001 color rgb <0.258, 0.258, 0.435>
color rgb <0.258, 0.258, 0.435> ]
}
scale <12, 2, 12>
}
#declare OBJECT=box { // testovací objekt - jednoduchý kvádr
<-2,-2, 0>,
< 2, 2, 1>
}
object {
OBJECT
texture {
pigment {
PIGMENT
scale 0.05
}
}
translate <COL1, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
scale 0.1
}
}
translate <COL2, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
scale 0.2
}
}
translate <COL3, ROW1, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
scale 0.3
}
}
translate <COL1, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
scale 0.4
}
}
translate <COL2, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
scale 0.5
}
}
translate <COL3, ROW2, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
scale 0.6
}
}
translate <COL1, ROW3, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
scale 0.7
}
}
translate <COL2, ROW3, Z>
}
object {
OBJECT
texture {
pigment {
PIGMENT
scale 0.8
}
}
translate <COL3, ROW3, Z>
}
// ------------------------------------------------------------
// finito
// ------------------------------------------------------------
Obrázek 9: Tvorba mraků pomocí textury „wrinkles“
9. Obsah následující části seriálu
V další části seriálu o programu POV-Ray dokončíme problematiku textur. Popíšeme si zbývající procedurální textury (například textury vytvořené pomocí fraktálů) a také způsob využití externích dat pro tvorbu textur – řeč tedy bude jak o klasických 2D texturách vytvořených z rastrových obrázků (například z fotek), tak i o skutečných 3D texturách reprezentovaných pomocí takzvaných voxelů (objemových elementů, které jsou vlastně trojrozměrnou variantou pixelů, pokud tedy pixely chápeme jako plošné elementy s nenulovým obsahem).