Vivid raytracer
Egyebek
Fotózás

Felületek és anyagok

Testeket már tudunk rajzolni, manipulálni, de hiába mindez ha nincs anyaguk. A vivid ezt a kérdést viszonylag egyszerűen kezeli, mégis bőven ad a kezünkbe eszközt. A különböző anyagokat (felületeket) a fizikai tulajdonságaikkal írjuk le. Ilyen tulajdonság például a fényáteresztő képesség, fényvisszaverő képesség, törésmutató, szín stb. Ezeket a tulajdonságokat egy surface nevű parancs után, kapcsos zárójelek között kell felsorolni. A surface utasítást mindíg az előtt a test előtt kell megadni, amire vonatkozni fog. Miután definiáltunk egy felületet, az érvényes lesz minden utána következő testre, mindaddig, míg újabb felületet nem adunk meg. Például, ha megadok egy zöld színű felületet a vivid fájlom elején, és nem adok meg más felületet a továbbiakban, akkor minden ugyanolyan zöld felületű lesz. További fölösleges rizsázás helyett felsorolom az összes parancsot, majd utána szépen végigmegyünk rajtuk.

surface {
      diffuse .3 .5 .7           // Test színe, ha fény éri (alapszín)
      ambient .3 .5 .7          // Test színe, ahol nem éri fény (foszforeszkálás)
      specular .3 .5 .7         // Fényvisszaverő képesség (tükröződés)
      shine 200               // Csillogás (tompaság)
      transparent .3 .5 .7      // Fényáteresztő képesség (áttetszőség)
      ior 1.5417               // Törésmutató
      fuzz 8                   // Zavar (érdesség)
      glow 3                  // Szétolvadás, gázszerűség
      no_antialias             // Élsimítás kikapcsolása
      brilliance 6             // Ragyogás
      fresnel 6               // Fresnel tükröződés
      subsurface 6           // Subsurface Scattering (diffúz fényszórás, átderengés)
      hemisphere 1.0         // Indirekt árnyékolás
}

Látszólag sok az utasítás, de nem kell megijedni, nem kell mindet használni, sőt! A legtöbbször csak 2-3 parancsot használunk, a legtöbb inkább opcionális, de szükség lehet rájuk, hiszen az anyagok meglehetősen sokfélék, így nem baj ha van mindenre eszközünk.


Diffuse - alapszín

Ez a legegyszerűbb parancs, lényegében egy test színét határozza meg. Pontosítva a dolgot, azt mondhatjuk, hogy a diffuse határozza meg, hogy a felület, a rá eső fény mely komponenseit nyeli el. Ahol nem éri fény a testet, ott nem fog érvényesülni diffuse hatása, ott tehát fekete lesz a test (árnyék). A diffuse értékét RGB -ben kell megadni, így:

surface {
      diffuse 1 .5 .2 }

A parancsot rövidíthetjük is, ha nem akarunk annyit gépelni akkor használható a diffuse helyett a diff rövidítés is. A lenti képen látható 3 gömb. A bal szélső diffuse értéke 0 0 0, vagyis a rá eső fény egyik komponensét sem veri vissza, másként fogalmazva mindet elnyeli, tehát fekete. A középső gömb értékei 1 0.5 0, vagyis a fény vörös összetevőit maximálisan visszaveri, a zöld színnek csak 50%-át, a kéket pedig mind elnyeli. A jobb szélső gömb fehér, értéke 1 1 1, vagyis nem nyel el semmit a fényből.

Diffuse


Ambient - környezettől független szín, foszforeszkálás

Az ambient úgy viselkedik mint a foszforeszkálás, tehát ha nem éri fény a testet, akkor is ilyen lesz a színe. Fontos megjegyeznem, hogy az ambient tulajdonság nem fényforrás, tehát attól, hogy egy testnek ambient színe van, nem fogja megvilágítani a mellette álló másik testet. Az értékét RGB-ben adjuk meg, a szokott módon:

surface {
      ambient 1 .5 .2 }

Látható, hogy a megvilágítás semmilyen hatással nincs a felületre. Ugyanazokat az RGB értékeket használtam mint a fenti képnél, a különbség jól látható.

Ambient

A lenti képen egyszerre alkalmaztam a diffuse és az ambient tulajdonságokat, hogy szemléltessem az együttes hatásukat. Jól látható, hogy a bal oldali gömb kék színű ambient-el rendelkezik, valamint piros diffuse-al. Ahol fény éri a testet ott egyszerre érvényesül a két hatás, és a kék + piros keveredésből lila lesz. A jobb oldali gömb pedig inverze ennek.

Ambient

A bal oldali gömb felszíne:

surface {
      diffuse 1 0 0
      ambient 0 0 1 }

A bal oldali gömb felszíne:

surface {
      diffuse 0 0 1
      ambient 1 0 0 }


Specular - Tükröződés

A specular nem más mint tükröződés. Ha 1 1 1 -es értéket adunk neki, akkor tökéletes tükörként viselkedik (vagyis minden fényt visszaver ami rá esik), ha 0 0 0 az értéke, akkor pedig egyáltalán nem tükröződik. Az RGB értékekkel játsszva lehet színes tükröt csinálni egy felületből. A parancs egyszerű:

surface {
      specular 1 .5 .2 }

A képen balról jobbra a következő értékeket adtam a specular-nak:
0 0 0, 0.33 0.33 0.33, 0.66 0.66 0.66, 1 1 1

Specular

Ritka, hogy a tükröződést magában használnánk, általában van saját színe is a felületnek, erre mutatok egy példát. Minden golyónak ugyanazt a zöld diffuse értéket adtam, a specular pedig sorban ugyanaz mint a fenti képen:

Specular


Shine - Csillogás

A felületek általában nem csak tükörszerűen viselkednek, hanem van "saját fényük", "csillogásuk" is. A shine ezt hivatott ábrázolni. Minél nagyobb értéket adunk neki, annál élesebb lesz a csillogás. Az érték után színt is kell adnunk neki. A parancs így néz ki:

surface {
      diffuse .13 .84 .68
      shine 200 1 1 1 }

A lenti képen a balról jobbra haladva a shine értékek a következők: 10, 100, 500, 1000. A színt mindenhol fehérre vettem (1 1 1)

Shine

Most pedig rakjunk hozzá egy kis tükröződést is...

Shine


Transparent - áttettszőség

A tükröződő felületek után, a leginkább kedveltek az átlátszó anyagok (üveg, víz stb.). Egy felület átlátszóságát a transparent szabályozza. Szintén RGB értékekkel adjuk meg, hogy melyik színt mennyire engedje át a felület. A szintaxis:

surface {
      transparent .13 .84 .68 }

A következő képen csak diffuse, shine és transparent értéket adtam a felületeknek. Elég gagyin is néznek ki!

Shine

Mi a gond? A gond az, hogy a való életben az áttettsző anyagok általában sűrűbbek (vagy ritkábbak) a levegőnél, más optikai tulajdonságaik, így megtörik a fényt. Ez az ami hiányzik nekünk, így gyorsan ismerkedjünk is meg a...


Ior - törésmutató

Jó barátunk az ior, vagyis törésmutató. Ha a transparent után megadjuk ezt is, akkor drámaian javul az eredmény. Nézzük először, hogy miként kell megadni:

surface {
      transparent .13 .84 .68
      ior 1.51714 }

Nem túl bonyolult a dolog, csupán 1db számértéket, a törésmutatót kell megadnunk. Én jelen esetben az üveg értékét adtam meg. A legáltalánosabb anyagok törésmutatóiról készítettem is egy táblázatot, itt meg lehet tekinteni. A lenti képen nem adtam meg diffuse értéket, csak a transparent, shine és ior utasításokkal dolgoztam, balról jobbra növekvő törésmutatókkal:

Ior - törésmutató


Fuzz - zavar

A fuzz segítségével kicsit összezavarhatjuk a visszaverődő fénysugarakat, mintha a felület érdes lenne. A test valódi alakján nem változtat a parancs, csupán a fényvisszaverődésre van hatással. A szintaxis egyszerű (mint mindíg):

surface {
      fuzz .13 }

A képen a bal oldali gömbnek nem adtam fuzz értéket, a többinek pedig sorban 0.1, 0.2, 0.3 az értéke:

Fuzz


Glow - izzás, parázslás

A glow segítségével izzó anyagokat csinálhatunk. Például gyertyalángot, vagy napot. Hatására a test gázszerűvé válik, áttettsző lesz, és nem vet árnyékot. Az ambient-el használva pofás dolgokat lehet csinálni vele! A parancsot úgy használjuk mint a többit:

surface {
      glow 4 }

A A lenti képen a bal oldali gömbnek nem adtam glow értéket, a többinek pedig sorban 1, 2, 3 az értéke:

Glow


no_antialias - élsimítás kikapcsolása

Sok értelme nincs, de megtehető, hogy kikapcsoljuk az élsimítást az adott felületnél:

surface {
      no_antialias }

Így néz ki, gondolom nem lesz nehéz rájönni, hogy melyik gömb felületén kapcsoltam ki...

No_antialias


Brilliance - ragyogás

Nehéz lenne pontosan megfogalmazni, hogy mi ez, alapvetően a fényes felületkre van hatással, minél nagyobb az értéke, annál élesebben "ragyog" az adott felület.

surface {
      brilliance 10 }

Két képpel is szemléltetném a hatást, az első képen a brilliance értékek: 1, 5, 10, 30

Brilliance

A következő képen is ugyanazok az értékek, csak átlátszóvá tettem a gömböket:

Brilliance2


Fresnel - fresnel tükröződés

A fresnel a tükröződő felületekre van hatással. Általában minél merőlegesebben nézünk egy tükröződő felületet, annál erőteljesebb a tükröződés. Ezt a hatást hivatott szabályozni a fresnel. Érdemes vele sokat kisérletezni, mert nem mindíg érvényesül jól.

surface {
      fresnel 6 }

Így néz ki amúgy (fresnel értékek balról jobbra: 1, 3, 6, 10):

Fresnel


Subsurface - átderengés, diffúz fényszórás

Vannak anyagok, melyek nem áttettszőek, mégis átengedik a fényt. Ilyen "diffúz anyag" például az emberi bőr, vagy a jádekő. Ezt az anyagtulajdonságot hívjuk Subsurface Scattering-nek. A vivid-ben ezt két helyen is meg lehet adni. Egyrész magánál a felületnél, ez a subsurface parancs. A másik hely a studio, vagyis a kamerabeállítások, erre majd ott kitérek még. Szintén fontos tudni, hogy ez az anyagtulajdonság csak hemisphere megvilágítással működik, és roppantul megnöveli a renderelési időt. Sok kísérletezgetést javaslok.

surface {
      subsurface 6 }

A hatása pedig (értékek: 0, 1, 2, 3):

Subsurface Scattering


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

Bár a megvilágítást külön kell általában megadni, van egy kivétel, ez a hemisphere. Ennek hatása olyan, mintha a tér minden irányából egyenlő erősséggel érkeznének a fénysugarak, vagyis, mintha egy óriási gömb középpon tjába lennénk, és a gömb felületén mindenhol fényforrások lennének elhelyezve. A gyakorlatban úgy kell elképzelni, mint az indirekt megvilágítást, olyan fényviszonyokra kell gondolni mint például borús időben az utcán. Nincsenek éles árnyékok (sőt árnyékok sem), mégis van fény mindenhol. A hemisphere pont ilyen, és tulajdonképpen nem is megvilágítás, hanem árnyékolás. Ami annyit is jelent, hogy ha csak hemisphere van a képen, akkor egyetlen foton sem halad sehova, tehát az áttettsző felületek feketék lesznek (hiszen nincs fény, ami áthaladjon rajtuk). Érdemes vele sokat próbálkozni, mert roppant élethű képet csinál, de cserébe nagyon lassú.

surface {
      hemisphere 1.0 }

A hemisphere normál értéke az 1.0, ami kb a fehér fénynek felel meg. Minél nagyobb ez az érték, annál erősebb az árnyék és fényhatás. Az 1-nél nagyobb értékek jó eséllyel túlexponált képet eredményeznek, és beégnek a világos felületek. A lenti képen az értékek: 1, 2, 3, 4

Hemisphere


Tovább a hullámzó felületekhez...»
foot