Vivid raytracer
Egyebek
Fotózás

Felületi mintázatok, textúrázás

A felszínekkel való műveletek utolsó részéhez értünk, megismerkedünk a textúrázással, vagyis a feületre mintázatokat fogunk "rajzolni". A vivid ebben is két utat tud követni. Az egyik az ún. "procedurális mintázat", vagyis szabályos matematikai mintázatok (kockás, karikás, fraktál stb., a másik pedig a képráfeszítés. A "procedurális mintázat" lényegébe nem más, mint két (vagy több) felület szabályos váltakozása egy testen. A képráfeszítés pedig az, amikor egy TGA formátumú képet feszítünk rá a test felületére.

A felületi mintázat utasításait szintén a surface-n belül adjuk meg, akárcsak a bump esetében:

surface {
      texture {
          ...
      } }


Kokckás mintázat (procedurális minta)

Talán az összes mintázat közül ez a legalapvetőbb, minden ősrégi raytrace képen ez a minta szerepel, a klasszikus, sakktáblaszerű, kockás mintázat. A kötözködőbbek persze most azonnal lecsaphatnak rám, hogy a sakktábla nem kockás, hanem négyzetes, de most az egyszer nem én vagyok a majom, a vivid-ben tényleg kockás ez a minta! Meg is mutatom mindjárt, de előtte nézzük meg, hogy hogyan kell leírni:

surface {
      texture {
         pattern checker
         scale 2 2 0
         offset 0 0 0
         fuzz 0
         blend 0
         surface { diff black }
         surface { diff white } } }

A mintázatot mindíg a texture paranccsal nyitjuk meg, ezen belül pedig sorban megadjuk a paramétereket:

pattern checker: Vagyis a minta típusa, jelen esetben kockás (checker).
scale: Minták váltakozása a 3 koordináta mentén. És itt már be is jön amit mondtam, mind a 3 térbeli irányban váltakozik a minta, vagyis "kockás".
offset: Elcsúsztatás, alapértéke a 0 0 0, nem is lesz vele dolgunk nagyon.
fuzz: Zavart okoz a feületek átmeneténél, értéke 0 és 1 között kell, hogy legyen.
blend: Elmosás a felületek találkozásánál.
surface { ... }: Ezek pedig a felületek ami váltakoznak. Fontos, hogy ezen felületeken belül akár további textúrákat is megadhatunk, így a végtelenségig bonyolítható a mintázat!

A lenti képen egy kockát láthattok, aminek egyik sarkát egy gömbbel lemetszettem, erre a testre raktam rá a kockás mintát. Azért ilyen testen mutatom be a checker mintázatot, mert ez jól szemlélteti, hogy hogyan működik 3D-ben:

Pattern checker

Most pedig játsszunk egy kicsit vele. A scale és az offset szerintem nem szorul különösebb szemléltetésre, a fuzz viszont igen. A lenti képen különböző fuzz értékekkel láthatod ugyanazt a mintát:

Fuzz 0.01 Fuzz 0.1 Fuzz 0.5

A blend is hasonló eredményre vezet, viszont szemben a fuzz-al, ez nem zavarossá teszi a felületek találkozását, hanem elmossa:

Blend 0.1 Blend 0.5 Blend 1

Ezek után pedig jöjjön egy példa a textúrák egymásba ágyazására:

Pattern checker


Körkörös mintázat (procedurális minta)

A körkörös mintázat ugyanazon logika mentén működik, mint a kockás, csak azzal a különbséggel, hogy itt koncentrikus körgyűrűk váltják egymást.

surface {
      texture {
         pattern spherical
         scale 2 2 0
         radius 1
         radius 2
         surface { diff black }
         surface { diff white } } }

A paraméterek jelentése pedig:

pattern spherical: A mintázat típusa körkörös (spherical).
scale: Váltakozás a tér 3 irányában.
radius 1: Az első felület (karika) átmérője.
radius 2: A második felület (karika) átmérője.

Természetesen itt is használható a fuzz és a blend kapcsoló, ugyanúgy mint a kockás mintánál. Így néz ki a körkörös mintázat:

Pattern spherical


Zaj mintázat (procedurális minta)

A zaj mintázat egy megadott lépték szerinti keverését jelenti a felületeknek. Rengeteg módon lehet vele variálni, nagyon hasznos mintázat, de sok kísérletezgetést igényel.

surface {
      texture {
         pattern noise
         scale 1 2 3
         terms 4
         edges
         peaks
         power 10
         surface { diff black }
         surface { diff white } } }

Alapból így néz ki egy zaj mintázat, extrák nélkül (csak a terms kapcsolót használva):

Pattern noise

Bejött a képbe néhány újabb paraméter is, menjünk végig egyenként rajtuk:

pattern noise: A mintázat típusa zaj (noise).
terms: Keverés mértéke. Minél magasabb az értéke, annál jobban keveri a két felületet.

Pattern noise, terms 1 Pattern noise, terms 3 Pattern noise, terms 9

edges: Kiemeli a felületek találkozásánál az éleket. Gyakorlatilag éles átmenetet csinál a felületek között, és mintegy "negatívjába fordítja" a színeket. Így néz ki:

Pattern noise, edges

peaks: Pont az edges ellenkezője, kellemesen átmossa a felületek találkozását:

Pattern noise, peaks

A power kapcsoló pedig sokszorozza a hatást:

Pattern noise, power 0.1 Pattern noise, power 1 Pattern noise, power 3


Mandelbrot mintázat (procedurális minta)

Igazából ez csak egy érdekesség, de jópofa. Van mandelbrot mintázat is:

surface {
      texture {
         pattern mandelbrot
         scale .05 .05 64
         offset -1 0 0
         surface { diff black }
         surface { diff white } } }

Különösebben nem mélyednék el benne, akit közelebbről érdekel az nyugodtan játszadozzon vele. :-) Ilyen amúgy:

Mandelbrot


Kép ráfeszítése gömbre (textúrázás)

Elérkeztünk a felületi mintázatok másik csoportjához, mikor egy TGA formátumú képet feszítünk rá a felületre. Mivel geometriájuk szerint vannak sík, gömb, és hengeres felületek, így ezekre mind különböző módon rakunk képet. Elsőnek a gömb felület textúrázását nézzük meg.

surface {
      diffuse {
         spherical
         image "pattern.tga"
         center 0 0 1
         normal 0 0 1
         across 1 0 0
         reps 4.0 2.0 } }

A textúrázás logikája, hogy a test színének nem egy konkrét RGB értéket adunk meg, hanem egy képet, amely képnek megadjuk a felület geometriáját. A felület színét a vivid-ben a diffuse paraméter határozza meg, ami után - alapesetben - egy RGB érték következik. Ezt helyettesítjük, egy kapcsos zárójelek között megadott képpel, valamint annak paramétereivel.

(A vivid lehetőséget ad rá, hogy ne csak a diffuse-al, hanem például az ambient-el, vagy más tulajdonsággal is eljátszhassuk ezt, így érdemes kísérletezgetni vele!)

spherical: A felszín geometriája, jelen esetben ez gömb (spherical)
image: Ez maga a kép amit ráfeszítünk. A fájl nevét idézőjelek közé tesszük. Fontos, hogy TGA formátumú legyen a kép!
center: Ez a gömbfelszín középpontját jelenti, értelem szerűen egyezzen meg azon gömb középpontjával amire a textúrát tesszük.
normal: Ez határozza meg a gömb "északi pólusát", vagyis a "felfelé" irányt.
across: A 0 "hosszúsági kör" helye.
reps: Két számérték, mely a mintázat vízszintes, majd a függőleges ismétlődéseinek számát adja meg.

A lenti képen egy földgömböt készítettem, ahol egy földfelszínt feszítettem egy gömbre:

Spherical texture

És ez volt a kép (textúra), ami a gömbre került:

Földfelszín textúra


Kép ráfeszítése hengerre (textúrázás)

A hengerre feszítés is ugyanezen elv mentén történik, a parancs szintaxisa is majdnem megegyezik az előzővel:

surface {
      diffuse {
         cylindrical
         image "pattern.tga"
         bilinear
         center 0 0 2
         normal 0 0 1
         across 1 0 0
         reps 4.0
         scale 2.0 } }

Csak az új paramétereketet emelném ki:

cylindrical: A felszín geometriája, jelen esetben ez hengeres (cylindrical)
bilinear: Képszűrés, elmosás. Nem kötelező, de hatékony!
reps: A kerület menti lépték.
scale: A "normal" (felfelé) irányba való lépték.

A szemléltető képen ugyanazt a földfelszín textúrát használtam mint a gömb esetében:

Cylindrical texture


Kép ráfeszítése síkra (textúrázás)

Mai utolsó játékosunk a sík felültre való képfeszítés, szinte ugyanaz mint az előzőek:

surface {
      diffuse {
         radial
         image "pattern.tga"
         center 0 0 2
         normal 0 0 1
         across 1 0 0
         reps 4.0
         scale 2.0 } }

Az alábbi két képen pedig a végeredménye látható, az elsőn egy korongra, a másodikon pedig a már jól ismert csonka kockánkra tettem:

Radial texture

Radial texture


Tovább a megvilágításokhoz...»
foot