Vivid raytracer
Egyebek
Fotózás

Fények, bevilágítás

A bevilágítás - akárcsak a fotózás esetében - talán a legfontosabb munkafázis. Hiába a szép 3D modellek, a jó nézőpont, ha a fények és az árnyékok nem szépek, nem azt emelik ki amit kell. A vivid ebben sajnos nem világbajnok, de aggodalomra nincs ok. Összesen 4 különböző fényforrás típust, valamint még 2 további árnyékolást ismer. A fényforrás parancsa így néz ki:

light {
      type point
      falloff szám
// alapértelmezésben 0
      position x y z
      color r g b }


Pont típusú fényforrás

A legalapvetőbb fényforrás a pontszerű fény, mint ahogy neve is mutatja, a fénysugarak egyetlen pontból indulnak ki, a tér minden irányában egyenlő intenzitással. A fényforrás pontszerűségéből adódóan az árnyékok (amiket a testek vetnek egymásra) borotvaélesek lesznek, átmenet nélkül. Fontos megjegyeznem, hogy a fényforrás nem látható soha!

light {
      type point
      falloff 0.5
// alapértelmezésben 0
      position 5 0 9
      color 1 1 1 }

type point: Fényforrás típusa, ami jelen esetben pontszerű.
falloff: Intenzitás csökkenés a távolság arányában. Ha nem adjuk meg ezt a paramétert, akkor az alapértelmezés a 0, vagyis nem csökken a fény intenzitása a távolsággal. Ha mondjuk 0.5-re állítjuk ezt az értéket, akkor valós fényt kapunk, a távolsággal fordított négyzetes arányban csökken az egységnyi felületre eső fényerősség.
position: A fényforrás helye.
color: A fény színe. Ez egyúttal az erőssége is, tehát a 0.5 0.5 0.5 gyenge fehér fény, a 3 3 3 pedig nagyon erős fehér fény.

A lenti képen pedig a hatása látszik, jól megfigyelhető, hogy az árnyékban maradt részek teljesen feketék, az árnyék széle pedig éles:

Point light


Irányított fényforrás

Az irányított fényforrás hatásában szinte ugyanaz mint a pontszerű, egyetlen nagy különbség van, mégpedig, hogy a fény nem egy pontból indul ki, hanem egy irányból jön, egy "végtelen nagy felületről". A fénysugarak teljesen párhuzamosak, így a vetett árnyékok sem szenvednek torzulást.

light {
      type directional
      direction -1 1 0
// alapértelmezésben 0
      color 1 1 1 }

Csak az új paramétereket mutatom be:

type directional: Fényforrás típusa, ami jelen esetben irányított.
direction: Irány. Ez egy vektor, amit relatív módon, tehát pont úgy kell megadni mint más vektorokat a vivid-ben, vagyis mintha a 0 0 0 koordinátából indulna ki a vektor.

Directional light


Spot fényforrás

A spot fényforrás szintén pontszerű, a különbség, hogy nem a tér minden irányában, hanem csak egy általunk megadott irányban és szögtartományban sugároz.

light {
      type spot
      position 6 6 8
      direction 0 0 -1
      min_angle 20
      max_angle 40
      color 1 1 1
      falloff 0.5 }

Nézzük az új paramétereket:

type spot: Fényforrás típusa, ami jelen esetben spot.
min_angle: A minimum szögtartomány, az ezen belül eső részre 100%-os intenzitással érkezik a fény.
max_angle: Maximum szogtartomány, az ezen kívül eső részre nem jut fény. A minimum és maximum szög értékek között pedig 100%-ról folyamatosan 0%-ra csökken a fény intenzitása.

Spot light


Gömbszerű fényforrás

Ez már egy fokkal komolyabb az előzőeknél, itt a fényforrás egy gömb felültének felel meg. Az árnyékok (a fényforrás átmérőjétől függően) átmenetesek, a végeredmény közelebb áll egy valóságos megvilágításhoz. Persze a gömbszerű fényforrás egyben a legidőigényesebb számolást is eredményezi.

light {
      type spherical
      position 6 6 8
      radius 1
      color 1 1 1
      samples 12
      falloff 0.5 }

Nézzük az új paramétereket:

type spherical: Fényforrás típusa, ami jelen esetben gömbszerű.
radius: A fényforrás átmérője. Minél nagyobb, annál elkenődöttebbek az árnyékok.
samples: Ez a kibocsátott "fotonok" számát hivatott befolyásolni. Ha ez az érték alacsony (1-8) akkor zajos lesz a kép, minél magasabb az érték, annál szebb lesz a végeredmény, de a számítási idő is arányos nő vele!

Spherical


Körkörös, indirekt megvilágítás (árnyékolás)

Erről már leírtam mindent a felületeknél, de azért egy kép erejéig berakom ide is, hogy a fentiekkel összevethető legyen:

Hemisphere


foot