PovRay Oktatási segédlet
PovRay A Povray segítségével egy speciális programozási nyelven nyelven a modelltérben (3D lebegőpontos világkordinátarendszer) definiált 3D objektumokról fotorealisztikus képeket tudunk készíteni.
Példa Sphere {<0,0,0>,1 Az objektumokat egy balsodrású 3D koordinátarendszerben értelmezzük, ahol a "Z" tengely hátrafelé mutat. A képeket a PovRay raytracing algoritmussal állítja elő.
Létezik Windows, Linux és egyéb, pl.: MAC varzió. A modellek elkészítéséhez több OpenSource modeler is létezik
Adattípusok Lebegőpontos szám pl.: 1.0-4 4e6 Vektor pl.: <1.0, 3.2, -5.4578> Az adatokból kifejezést építhetünk: 6*5+0.4/10 <2,4,5> + <6,7,8> == <8,11,13>
A vektorok legtöbbször 3 dimenziósak pl.: <x,y,z>3d világkoordinátá <r,g,b>rgb szintér három csatorna <x-deg,y-deg,z-deg> szögelfordulás fokban
Adatok Ha egy vektor helyére számot írunk, azt a program úgy értelmezi, hogy minden vektorkoordináta azonos Scale 0.5 <0.5,0.5,0.5>
Adatok x értelmezése: <1,0,0> y értelmezése: <0,1,0> z értelmezése: <0,0,1> Így tehát 2*x == <2,0,0>
Színek A Povray a háromcsatornás RGB színteret használ 16,7 millió színárnyalat Az RGB alapszínek intenzitását 0 és 1 intevallumban kell megadni <0.12,1.0,0.1> == 0.12 R, 1.0 G és 0.1 B
Primitívek A primitivek beépített építőelemek, melyeket nevükkel definiálhatunk A primitívekból bonyolultabb objektumokat alkothatunk gömb henger kúp téglatest torusz sík
Primitívek sphere {<-5, 0, 0>, 1 texture {text1 cylinder {<0, 0, 0>, <0, 3, 0>, 0.6 texture {text2 cone {<1, 1, 0>, 0.4, <2, 4, 0>, 0.6 texture {text4 box {<3, 2, 2>, <4, 4, 4> texture {text3 torus {3, 0.4 texture {text4 plane {<0, 1, 0>, -2 texture {text5
Téglatest A téglatestet pl.: a modelltérben testátlójának végpontjaival definiáljuk box {<-2, 1, 1>, texture { pigment { color rgbf <1, 1, 0, 0.7> finish { phong 0.9
Cilinder cylinder {<-2, 1, 1>, <2, 1, 1>, 0.05 texture { pigment { color rgb <0, 1, 1> finish { phong 0.9
Sík A sikot normálvektorával és a koordinátorrendszer közép pontjától mért távoltsággal definiáljuk plane {<0, 1, 0>, -1 texture { pigment { color rgb <0, 0, 0.6> finish { ambient 0.4
Összetett object #declare P0 = <0, 0, 1> #declare P1 = <0, 0, 1> #declare P2 = <0, 1, 0> triangle {P0, P1, P2 texture { pigment { color rgb <0.9, 0.2, 0.2> finish { phong 0.9 ambient 0.5
Sík példaprogram /* Comment mint a c, c++, c#-ban */ plane {<0, 1, 0>, -1.2 //sík texture { //textúra pigment { //festékanyag image_map { //kép gif "pict1.gif" //path scale 4 //kép skálázása rotate <90, 0, 0> //kép forgatása
Gömb példaprogram sphere {<0, 0, 0>, 1 //gömb texture { pigment { color rgb <1, 0, 0> //szín ---------------------------------------- sphere {<0, 0, 0>, 1 //gömb texture { pigment { color rgbf <1, 0, 0, 0.6> //transzparens szín
insert/camera camera { location <0.0, 1.0, -6.0> //pozíció és irány direction 2.0*z up y right 4/3*x look_at <0.0, 0.0, 0.0>
Render Renderelt kép mérete (sorok, oszlopok pixelszáma) a képernyő bal felső részén levő legördülő menüben. A "Run" ikonra kattintva végezzük el a renderelést, Az eredmény az "images" mappába kerül.
Összetett objektum A felületek Bezier felületdarabokkal modellezhetőek (bicubic-patch)
Deklarációk #declare P0 = <-1, 1.0, 1> #declare P1 = <0, 0.5, 1> #declare P2 = <1, 0.2, 1> #declare P3 = <2, 0.0, 1> #declare P4 = <-1, 0.8, 0> #declare P5 = <0, 0.6, 0> #declare P6 = <1, 0.5, 0> #declare P7 = <2, 0.4, 0> #declare P8 = <-1, 1.2, 1> #declare P9 = <0, 0.9, 1> #declare P10 = <1, 0.7, 1> #declare P11 = <2, 0.6, 1> #declare P12 = <-1, 1.97 2> #declare P13 = <0, 1.0, 2> #declare P14 = <1, 0.9, 2> #declare P15 = <2, 1.0, 2>
Felületek ábrázolása A POVRAY matematikai formában megadott felületeket képes ábrázolni. A függvények maximum 4-ed fokúak lehetnek. függvény szintvonalas ábrázolását
Függvény ábrázolása quartic {<0,0,0,0,0, 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,1, 0,0,0,0,-8> texture { pigment { color rgb <1, 0, 1> finish { phong 0.9
II. Felületgenerálás Az spatch egy spline-alapú modellező eszköz Komplex térbeli alakzatok és görbék állíthatók elő a segítségével Az elkészült objektumokat exportálhatjuk VRML formátumba és renderelhetjük
SPatch
SPatch A modellezés során a tervezés alatt álló objektumainkat egy világ koordinátarendszerben helyezzük el. Az objektumokat három nézetben láthatjuk huzalvázas megjelenítéssel egy negyedik ablakban láthatjuk az árnyalt perspektivikus képet.
SPatch Toolbar A toolbar gombjait öt részre oszthatjuk, melyeket más-más színekkel jelölnek. Minden csoportnak megvan a külön funkciója.
Pont manipulációs ikonok Rózsaszínnel jelölik a pont manipuláló gombokat. Eme gombok segítségével a következőket végezhetjük el: 1. Kijelölt pontok mozgatása a modelltérben 2. Alakzatok nagyítása, kicsinyítése 3. Forgatás 4. Torzítás 5. Pont definiálása 6. Csoportos kijelölés 7. Élek ívének módosítása
Modellező gombok Kékkel jelölt modellező gombok: 1. Forgástest létrehozása 2. Kijelölt objektumok duplikálása 3. Kijelölt pontok duplikálása úgy, hogy a keletkezett pontok a térgörbe részévé válnak
Görbe manipuláló gombok A harmadik gombcsoport az úgynevezett görbe manipuláló gombok 1. Kijelölt él törlése 2. Élek kiegyenesítése 3. Élek hajlítása simulógörbe mentén. Az utolsó gombcsoport segítségével kiválaszthatjuk, hogy a különböző transzformációk mely tengely vagy tengelyek irányában legyenek engedélyezve.
III. Unió Az "union" utasítás a testek halmazelméleti egyesítését eredményezi.
union { object {Grosse_Kugel object {Kleine_Kugel object {Kleine_Kugel rotate <0, 60, 0> object {Kleine_Kugel rotate <0, 60, 0> object {Kleine_Kugel rotate <60, 0, 0> object {Kleine_Kugel rotate <-60, 0, 0> Union példa declare Grosse_Kugel = sphere { <0, 0, 0>, 1 texture { pigment { color rgb <1, 0, 1> finish { phong 0.9 #declare Kleine_Kugel = object {Grosse_Kugel scale 0.4 translate <0, 0, 1>
Difference A "difference" utasítás a első helyen megadott testből halmazelméleti értelemben kivonja a követkőket:
Difference példa #declare Grosse_Kugel = sphere { <0, 0, 0>, 1 texture { pigment { color rgb <1, 0, 1> finish { phong 0.9 #declare Kleine_Kugel = object {Grosse_Kugel scale 0.4 translate <0, 0, 1> difference { object {Grosse_Kugel object {Kleine_Kugel object {Kleine_Kugel rotate <0, 60, 0> object {Kleine_Kugel rotate <0, 60, 0> object {Kleine_Kugel rotate <60, 0, 0> object {Kleine_Kugel rotate <-60, 0, 0>
Fényforrások A ponszerű fényforrás egyelő mértékben sugároz minden irányban. azok a pontok, amelyeket a fényforrás nem világít meg feketék.
Fényforrások Az "ambient", vagy szórt háttérvilágítás a modelltérben lévő tárgyak azonos intenzitással történő sugárzását modellezi.
Fényforrás példa light_source { <1.4, 0, 0> color rgb <1, 1, 1> plane {<0, 1, 0>, -1.2 texture { pigment { color rgb <0.7, 0.7, 0.7> finish { ambient 0.4 sphere {<0, 0, 0>, 1 texture { pigment { color rgb <1, 0.8, 0>
Looks Like A "looks-like" utasításs a fényforrás a fényforrást láthatóvá teszi.
Looks Like light_source { <1.8, 0, 0> color rgb <1, 1, 1> looks_like { cylinder {<0, 1, 0>, <0, 0, 0>, 0.2 texture { pigment { color blue 1 finish { phong 0.9 ambient 0.3
Zseblámpa Az ilyen típusú fényforrásokat a "spotlight" utasítással adjuk meg A fénysugarakat irányítani lehet a "radius" utasítással, mely a fénycsóva nyílásszögét adja meg. A falloff a nagyobb nyílásszöget biztosítja
Fényforrás light_source { 0*x // fényforrás helye color red 1.0 green 1.0 blue 1.0 //szín translate <-20, 40, -20>
Zseblámpa light_source { <1.8, 0, 0> color rgb <1, 1, 1> spotlight point_at <1.8, 1, 0> radius 20 falloff 20 looks_like { cylinder {<0, 1, 0>, <0, 0, 0>, 0.2 Texture { Pigment { color blue 1 finish { phong 0.9 ambient 0.3
Bumps mapping A POVRAY sima felületű testeket használ Ezt a "normal" utasítással változtathatjuk meg. A "bumps" a felületi normálishoz egy vektort ad hozzá, melynek értéke a felület pontjain "scale" változik. A "bumps" csak a fény visszaverődést változtatja meg, a test változatlan marad.
Bumps mapping plane {<0, 1, 0>, -1.2 texture { pigment { checker color rgb <0, 0, 1> color rgb <0.6, 0.6, 0.6> scale 0.6 sphere {<0, 0, 0>, 1 texture { pigment { color rgb <1, 0, 0> normal { bumps 0.7 scale 0.1 finish { phong 0.9
Átlátszóság A "filter" utasítással egy testet átlátszóvá tehetünk A szint rgb helyet rgbf-el adjuk meg, ahol az "f" negyedik paraméter az átlátszósági filter
Átlátszóság plane {<0, 1, 0>, -1.2 texture { pigment { checker color rgb <0, 0, 1> color rgb <0.6, 0.6, 0.6> scale 0.6 sphere {<0, 0, 0>, 1 texture { pigment { color rgbf <1, 1, 1, 1> normal { bumps 0.7 scale 0.1 finish { phong 0.9
Felszín modellezése plane {<0, 1, 0>, -1.2 texture { pigment { checker color rgb <0, 0, 1> color rgb <0.6, 0.6, 0.6> finish { reflection 0.8
Objektum definíciója bicubic_patch { type 0 flatness 0.1 u_steps 100 //lapítás x és z v_steps 100 //közelíti a tartópontokat P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15 texture { Pigment { color rgb <0, 0, 1> Finish { phong 0.90
Tükröződés A megtörő fénysugarak kezelése a refraction utasítással állítható
Tükröződés plane {<0, 1, 0>, -1.2 texture { pigment { checker color rgb <0, 0, 1> color rgb <0.6, 0.6, 0.6> scale 0.6 sphere {<0, 0, 0>, 1 texture { pigment { color rgbf <1, 1, 1, 1> normal { bumps 0.7 scale 0.1 finish { phong 0.9 refraction 1 Ior 1.05
Hullámok A "wave" a felületi normálist az Y -tengelytől azonos távolságú pontok mentén módosítja. A képen a felszín a hullámzás benyomását kelti.
Hullámok plane {<0, 1, 0>, -1.2 texture { pigment { color rgb <0, 0, 1> normal { waves 0.8 frequency 3 sphere {<0, 1, 0>, 1 texture { Pigment { color rgb <1, 0, 0> finish { phong 0.9
Köd Ködöt a "fog" utasítással készíthetünk A ködnek szint adhatunk A "distance" a distance meghatározza a láthatósági távolságot (takarás). fog { color rgb <1, 1, 0.6> distance 5
Include fájlok A povrayinclude mappában találhatóak Gyakori fájlok colors.inc, finish.inc, textures.inc, glass.inc, metals.inc, stones.inc, woods.inc. Használat: #include filename.inc Ezután hivatkozhatunk az include fájl tartalmára
Animáció
Irodalom PovRay povray.org UBUNTU ubuntu.com LINUX linux.com Budai Attila, Pham Vu Kien Cuong, Nagy László : PovRay