Obsah
1. Osvětlovací model v POV-Rayi
2. Objekt složený ze znaků
3. Všesměrové světlo
4. Bodové zdroje osvětlení
5. Více bodových světelných zdrojů použitých současně
6. Reflektorové světlo
7. Obsah následující části seriálu
1. Osvětlovací model v POV-Rayi
You know you have been raytracing too long when …
… You take a photo course just to learn how to get the lighting right.
– Christoph Rieder
Jednou z nejdůležitějších činností, které je nutné provést při vytváření a následném vykreslování trojrozměrných scén, je rozmístění vhodných světelných zdrojů do prostoru scény. Pokud jsou světelné zdroje umístěny na špatných místech nebo jsou některé jejich vlastnosti nastaveny chybně, pokazí se divákův dojem z celého obrázku. Naopak je možné i z poměrně chudé scény obsahující malé množství i zcela jednoduchých trojrozměrných objektů vytvořit zajímavý obrázek pouze vhodnou volbou osvětlení, což je patrné i z následujících dvou screenshotů vykreslených právě pomocí POV-Raye. V prvním případě tvoří světlo a efekty pomocí něj vytvořené ústřední motiv obrázku, ve druhém případě by scéna byla bez plynové lampy „plochá“, model stromu i sloupků by proti tmavé stěně domu opticky zanikl a výsledkem by byl nevýrazný obrázek, i když objekty v něm mají docela složitý tvar (strom je vytvořen procedurálně, ale o tom si povíme až v dalších částech seriálu).
Obrázek 1: Ústřední motiv tohoto obrázku s relativně chudě vybavenou místností tvoří světelné efekty
Vhodné nastavení světelných zdrojů vyžaduje především trpělivost (většinou se musí provést velké množství pokusů) a také trošku zkušeností. Ukazuje se, že v tomto případě modelovací programy příliš nepomohou, na rozdíl od vytváření geometrie scény, kdy může být vizuální zpětná vazba vítaná. Naopak bývá vhodné si celý model například v půdorysu rozkreslit na čtverečkovaný papír a přitom dát prostor i světelným zdrojům, aby se objekty navzájem neskrývaly ve stínech. V následujících kapitolách (kromě kapitoly druhé, ve které trošku tématicky odbočíme) se budeme věnovat použití jednotlivých typů světelných zdrojů, které lze v POV-Rayi použít.
Obrázek 2: Lampa představující zviditelněný světelný zdroj dodává scéně potřebnou hloubku
2. Objekt složený ze znaků
Před popisem jednotlivých typů světelných zdrojů si ukážeme použití jednoho poměrně užitečného typu objektu, který bude použitý i v demonstračních příkladech. Jedná se o trojrozměrný objekt složený ze znaků (zapsaných pomocí řetězce). Tvar jednotlivých znaků je přečten z externího souboru typu TrueType (soubory tohoto typu mají koncovku .ttf). Interně se v těchto souborech jednotlivé znaky popisují pomocí svého obrysu, který je složen z úseček a Bézierových kvadratických křivek (ty mohou být rastrovány velmi rychle a přesně). Interní mechanismy vykreslování fontů nás však nemusí při použití POV-Raye zajímat, protože se o korektní vytvoření trojrozměrných objektů ze znaků postará sám. Jediné co musíme doplnit, je „hloubka“ znaků, tj. jejich třetí rozměr a popř. mezera mezi jednotlivými znaky (specifikuje se pomocí vektoru nebo skalární hodnoty). Optické vlastnosti povrchu i jeho barva a textura se u tohoto typu objektu nastavuje zcela stejným způsobem, jako u všech objektů popsaných v předchozích částech tohoto seriálu. Syntaxe zápisu vypadá následovně:
// objekt vytvořený z písmen jejichž tvary jsou přečteny z externího souboru s fontem
text {
ttf // formát s uloženým fontem
"crystal.ttf", // soubor s fontem dodávaný současně s POV-Rayem
"root.cz", // text, který se má vytvořit
0.5, // hloubka textového objektu
0 // mezera mezi znaky
texture { // textura, kterou je objekt pokrytý
PinkAlabaster
scale 0.5
}
scale 2.5 // změna měřítka textového objektu
translate <-4, 0, -1> // posun textového objektu
}
Následuje demonstrační příklad, který bude s drobnými úpravami použit i v navazujících kapitolách při popisu jednotlivých typů světelných zdrojů.
// ------------------------------------------------------------
// První demonstrační příklad na použití světelných zdrojů
// v prostorových scénách vykreslovaných POV-Rayem.
//
// Základ pro tvorbu dalších scén.
//
// rendering lze spustit příkazem:
// povray +W800 +H600 +B100 +FN +D +Iscena.pov +Oscena.png
// (pro náhled postačí zadat příkaz povray scena.pov)
// ------------------------------------------------------------
#include "colors.inc"
#include "glass.inc"
#include "textures.inc"
// nastavení kamery
camera {
location <-4, 3, -9> // pozice kamery
look_at <0, 0, 0> // bod, na který se kamera dívá
angle 48 // zorný úhel
}
// bodový světelný zdroj
light_source {
<2, 10, -3> // pozice světelného zdroje
color White // barva světla
}
// objekt vytvořený z písmen jejichž tvary jsou přečteny z externího souboru s fontem
text {
ttf // formát s uloženým fontem
"crystal.ttf", // soubor s fontem dodávaný současně s POV-Rayem
"root.cz", // text, který se má vytvořit
0.5, // hloubka textového objektu
0 // mezera mezi znaky
texture { // textura, kterou je objekt pokrytý
PinkAlabaster
scale 0.5
}
scale 2.5 // změna měřítka textového objektu
translate <-4, 0, -1> // posun textového objektu
}
// otexturovaná koule
sphere {
<0,-1,0>, 1 // pozice středu a poloměr
texture { // textura - povrch koule
T_Glass1 // definováno v externím souboru
pigment {
color red 1.00 filter 0.95 // barva povrchu
}
finish { // optické vlastnosti materiálu
phong 1 // velikost a síla odlesků
phong_size 300
reflection 0.15 // odrazivost
}
}
translate <1.5, 0, -2> // posun koule ve scéně
}
// kvádr, do kterého je celá scéna uzavřena
box {
<-12,-2,-12>, <20, 20, 8>
texture {
pigment { // šachovnicová textura
checker // vyvedená ve stupních šedi
color rgb<0.1, 0.3, 0.4>
color rgb<0.2, 0.5, 0.7>
}
finish { // odlesky a odrazy na povrchu
diffuse 0.7
reflection 0.2
}
}
}
// ------------------------------------------------------------
// finito
// ------------------------------------------------------------
Obrázek 3: První demonstrační příklad po vykreslení v POV-Rayi
3. Všesměrové světlo
Nyní si již pojďme popsat jednotlivé typy světelných zdrojů, které je možné v POV-Rayi použít. Vzhledem k nedokonalosti osvětlovacího modelu použitého v POV-Rayi je nutné nějakým způsobem simulovat světlo, které ve scéně vzniká několikerým odrazem od povrchů všech objektů. Tento problém není možné uspokojivě pomocí raytracingu vyřešit, proto se do osvětlovacího modelu poněkud uměle (zato však velmi prakticky) zavádí všesměrové (ambientní) světlo, tj. světlo, které do scény jakoby přichází ze všech směrů a má konstantní intenzitu. Jedná se o globální vlastnost celé scény zapisovaná do sekce global_settings. Právě toto světlo je použito ve druhém demonstračním příkladu, na kterém je také patrné, že se zcela ztratily veškeré stíny (to, co je vidět pod koulí, je její odraz, nikoli stín) a scéna také vypadá velmi ploše – ztratil se dojem prostorovosti. Z tohoto důvodu se všesměrové světlo používá v kombinaci s některým dalším typem světelného zdroje. Druhý demonstrační příklad má tvar:
// ------------------------------------------------------------
// Druhý demonstrační příklad na použití světelných zdrojů
// v prostorových scénách vykreslovaných POV-Rayem.
//
// Použití ambientního světla
//
// rendering lze spustit příkazem:
// povray +W800 +H600 +B100 +FN +D +Iscena.pov +Oscena.png
// (pro náhled postačí zadat povray scena.pov)
// ------------------------------------------------------------
#include "colors.inc"
#include "textures.inc"
global_settings {
ambient_light White*7 // všesměrová složka světla (jak je patrné, lze použít i větší hodnoty než 1)
}
// nastavení kamery
camera {
location <-4, 3, -9> // pozice kamery
look_at <0, 0, 0> // bod, na který se kamera dívá
angle 48 // zorný úhel
}
// objekt vytvořený z písmen, jejichž tvary jsou přečteny z externího souboru s fontem
text {
ttf // formát s uloženým fontem
"crystal.ttf", // soubor s fontem dodávaný současně s POV-Rayem
"root.cz", // text, který se má vytvořit
0.5, // hloubka textového objektu
0 // mezera mezi znaky
texture { // textura, kterou je objekt pokrytý
DMFLightOak
scale 0.5
}
scale 2.5 // změna měřítka textového objektu
translate <-4, 0, -1> // posun textového objektu
}
// otexturovaná koule
sphere {
<0,-1,0>, 1 // pozice středu a poloměr
texture { // textura, kterou je objekt pokrytý
Sapphire_Agate
}
translate <1.5, 0, -2> // posun koule ve scéně
}
// kvádr, do kterého je celá scéna uzavřena
box {
<-12,-2,-12>, <20, 20, 8>
texture {
pigment { // šachovnicová textura
checker // vyvedená ve stupních šedi
color rgb<0.1, 0.1, 0.1>
color rgb<0.5, 0.5, 0.5>
}
finish { // odlesky a odrazy na povrchu
diffuse 0.7
reflection 0.2
}
}
}
// ------------------------------------------------------------
// finito
// ------------------------------------------------------------
Obrázek 4: Druhý demonstrační příklad po vykreslení v POV-Rayi
4. Bodové zdroje osvětlení
Nejvíce používaný typ světelného zdroje v raytracingu je pravděpodobně bodový světelný zdroj. Ten si můžeme představit jako svítící bod umístěný v prostoru, který vyzařuje světlo do všech stran s konstantní intenzitou nezávislou na směru vysílání světelných paprsků. Tento typ světla má přednost v tom, že se jednoduše nastavuje (postačuje zvolit jeho pozici v prostoru a barvu), výpočty s ním jsou rychlé a přitom se s jeho pomocí dá docílit velkého množství světelných efektů. Bodový světelný zdroj může být do scény přidán pomocí uzlu light_source, ve kterém se specifikuje pouze pozice zdroje (vektor) a jeho barva. V následujícím příkladu je použit jeden bodový světelný zdroj s bílou barvou. Povšimněte si ostrých stínů pod objekty:
// ------------------------------------------------------------
// Třetí demonstrační příklad na použití světelných zdrojů
// v prostorových scénách vykreslovaných POV-Rayem.
//
// Použití bodového světelného zdroje
//
// rendering lze spustit příkazem:
// povray +W800 +H600 +B100 +FN +D +Iscena.pov +Oscena.png
// (pro náhled postačí zadat povray scena.pov)
// ------------------------------------------------------------
#include "colors.inc"
#include "textures.inc"
// nastavení kamery
camera {
location <-4, 3, -9> // pozice kamery
look_at <0, 0, 0> // bod, na který se kamera dívá
angle 48 // zorný úhel
}
// bodový světelný zdroj
light_source {
<2, 10, -3> // pozice světelného zdroje
color White // barva světla
}
// objekt vytvořený z písmen, jejichž tvary jsou přečteny z externího souboru s fontem
text {
ttf // formát s uloženým fontem
"crystal.ttf", // soubor s fontem dodávaný současně s POV-Rayem
"root.cz", // text, který se má vytvořit
0.5, // hloubka textového objektu
0 // mezera mezi znaky
texture { // textura, kterou je objekt pokrytý
DMFLightOak
scale 0.5
}
scale 2.5 // změna měřítka textového objektu
translate <-4, 0, -1> // posun textového objektu
}
// otexturovaná koule
sphere {
<0,-1,0>, 1 // pozice středu a poloměr
texture { // textura, kterou je objekt pokrytý
Sapphire_Agate
}
translate <1.5, 0, -2> // posun koule ve scéně
}
// kvádr, do kterého je celá scéna uzavřena
box {
<-12,-2,-12>, <20, 20, 8>
texture {
pigment { // šachovnicová textura
checker // vyvedená ve stupních šedi
color rgb<0.1, 0.1, 0.1>
color rgb<0.5, 0.5, 0.5>
}
finish { // odlesky a odrazy na povrchu
diffuse 0.7
reflection 0.2
}
}
}
// ------------------------------------------------------------
// finito
// ------------------------------------------------------------
Obrázek 5: Třetí demonstrační příklad po vykreslení v POV-Rayi
5. Více bodových světelných zdrojů použitých současně
V jedné scéně je samozřejmě možné použít i větší množství světelných zdrojů, z nichž každý může mít nastavenou odlišnou barvu vyzařovaného světla. To je ukázáno na čtvrtém příkladu, který je schválně „vyumělkovaný“, ale ukazuje, jak použít tři světelné zdroje, každý s odlišnou barvou:
// ------------------------------------------------------------
// Čtvrtý demonstrační příklad na použití světelných zdrojů
// v prostorových scénách vykreslovaných POV-Rayem.
//
// Tři bodové světelné zdroje, z nichž každý má jinou barvu
//
// rendering lze spustit příkazem:
// povray +W800 +H600 +B100 +FN +D +Iscena.pov +Oscena.png
// (pro náhled postačí zadat povray scena.pov)
// ------------------------------------------------------------
#include "colors.inc"
#include "textures.inc"
// nastavení kamery
camera {
location <-4, 3, -9> // pozice kamery
look_at <0, 0, 0> // bod, na který se kamera dívá
angle 48 // zorný úhel
}
// první bodový světelný zdroj
light_source {
<4, 10, -5> // pozice světelného zdroje
color Red // barva světla
}
// druhý bodový světelný zdroj
light_source {
<-4, 10, -5> // pozice světelného zdroje
color Green // barva světla
}
// třetí bodový světelný zdroj
light_source {
<4, 10, 5> // pozice světelného zdroje
color Blue // barva světla
}
// objekt vytvořený z písmen, jejichž tvary jsou přečteny z externího souboru s fontem
text {
ttf // formát s uloženým fontem
"crystal.ttf", // soubor s fontem dodávaný současně s POV-Rayem
"root.cz", // text, který se má vytvořit
0.5, // hloubka textového objektu
0 // mezera mezi znaky
texture { // textura, kterou je objekt pokrytý
DMFLightOak
scale 0.5
}
scale 2.5 // změna měřítka textového objektu
translate <-4, 0, -1> // posun textového objektu
}
// otexturovaná koule
sphere {
<0,-1,0>, 1 // pozice středu a poloměr
texture { // textura, kterou je objekt pokrytý
Sapphire_Agate
}
translate <1.5, 0, -2> // posun koule ve scéně
}
// kvádr, do kterého je celá scéna uzavřena
box {
<-12,-2,-12>, <20, 20, 8>
texture {
pigment { // šachovnicová textura
checker // vyvedená ve stupních šedi
color rgb<0.1, 0.1, 0.1>
color rgb<0.5, 0.5, 0.5>
}
finish { // odlesky a odrazy na povrchu
diffuse 0.7
reflection 0.2
}
}
}
// ------------------------------------------------------------
// finito
// ------------------------------------------------------------
Obrázek 6: Čtvrtý demonstrační příklad po vykreslení v POV-Rayi
6. Reflektorové světlo
Z popisovaných světelných zdrojů je výpočetně nejnáročnější reflektorový světelný zdroj. U tohoto zdroje je možné zadávat velké množství parametrů. Kromě již známých koeficientů, jakými jsou barva světla, se nastavují parametry vlastního světelného kužele. Mezi tyto parametry patří vrcholový úhel kužele, ve kterém má světlo nejvyšší (konstantní) intenzitu (světelný kužel, jedná se o parametr radius), vrcholový úhel většího kužele, kde intenzita směrem k jeho okraji postupně klesá (stínový kužel, parametr falloff), maximální dosvit a také míra poklesu intenzity světla mezi oběma kužely (tightness). Tento světelný zdroj je tedy jakousi kombinací bodového a směrového zdroje, ke kterým přidává další unikátní vlastnosti (atributy).
Obrázek 7: Základní parametry reflektorového světelného zdroje
Pomocí reflektorového zdroje světla lze scénu upravit tak, aby působila „dramaticky“, což je v jednoduché podobě ukázáno na pátém demonstračním příkladu. V něm je použit jeden bílý reflektor, ovšem po odkomentování označeného kódu se zapnou dva slabší barevné reflektory, které celou scénu ozvláštní:
// ------------------------------------------------------------
// Pátý demonstrační příklad na použití světelných zdrojů
// v prostorových scénách vykreslovaných POV-Rayem.
//
// Reflektorový zdroj světla (lze povolit další dva reflektory)
//
// rendering lze spustit příkazem:
// povray +W800 +H600 +B100 +FN +D +Iscena.pov +Oscena.png
// (pro náhled postačí zadat povray scena.pov)
// ------------------------------------------------------------
#include "colors.inc"
#include "textures.inc"
// nastavení kamery
camera {
location <-4, 3, -9> // pozice kamery
look_at <0, 0, 0> // bod, na který se kamera dívá
angle 48 // zorný úhel
}
// reflektorový světelný zdroj
light_source {
<0, 10, -3> // umístění reflektoru v prostoru
color White // barva světla
spotlight // modifikátor - jedná se o reflektorové světlo
radius 15 // poloměr světelného kužele zadaný ve stupních
falloff 20 // poloměr stínového kužele
tightness 10 // míra poklesu intenzity osvětlení
point_at <0, 0, 0>
}
/* !!! odkomentováním následující části lze povolit další dva světelné zdroje
// reflektorový světelný zdroj
light_source {
<10, 10, -1>
color Red
spotlight
radius 12
falloff 14
tightness 10
point_at <2, 0, 0>
}
// reflektorový světelný zdroj
light_source {
<-12, 10, -1>
color Blue
spotlight
radius 12
falloff 14
tightness 10
point_at <-2, 0, 0>
}
*/
// objekt vytvořený z písmen, jejichž tvary jsou přečteny z externího souboru s fontem
text {
ttf // formát s uloženým fontem
"crystal.ttf", // soubor s fontem dodávaný současně s POV-Rayem
"root.cz", // text, který se má vytvořit
0.5, // hloubka textového objektu
0 // mezera mezi znaky
texture { // textura, kterou je objekt pokrytý
DMFLightOak
scale 0.5
}
scale 2.5 // změna měřítka textového objektu
translate <-4, 0, -1> // posun textového objektu
}
// otexturovaná koule
sphere {
<0,-1,0>, 1 // pozice středu a poloměr
texture { // textura, kterou je objekt pokrytý
Sapphire_Agate
}
translate <1.5, 0, -2> // posun koule ve scéně
}
// kvádr, do kterého je celá scéna uzavřena
box {
<-12,-2,-12>, <20, 20, 8>
texture {
pigment { // šachovnicová textura
checker // vyvedená ve stupních šedi
color rgb<0.1, 0.1, 0.1>
color rgb<0.5, 0.5, 0.5>
}
finish { // odlesky a odrazy na povrchu
diffuse 0.7
reflection 0.2
}
}
}
// ------------------------------------------------------------
// finito
// ------------------------------------------------------------
Obrázek 8: Pátý demonstrační příklad po vykreslení v POV-Rayi (povolen jeden reflektor)
Obrázek 9: Pátý demonstrační příklad po vykreslení v POV-Rayi (povoleny tři reflektory)
7. Obsah následující části seriálu
V další části seriálu o raytraceru POV-Ray budou (kromě popisu zbývajících dvou typů světelných zdrojů) popsány způsoby zadávání optických vlastností materiálů, způsoby nanášení textur, modulace normálových vektorů v jednotlivých částech povrchů těles atd.
Obrázek 9: V POV-Rayi je možné pomocí jednoduchého triku vytvořit i viditelný světelný zdroj