Giriş
Kim şimdiye kadar Pixar 'ı duydu?, Kim
simdiye kadar Toy Story filmini gördü?.
Pixar animasyon studyosu uzun zamandir yaptigi bilgisayar animasyonlariyla
taniniyor . Luxo Jr. (1986) filmi 3D grafik Oscar ödülü
ile onurlandirilan ilk 3D grafik filmidir , ayrica uluslararasi film festivallerinde
20 den fazla ödül almistir.
1987 yilinda, Red's Dream, Zagrep'teki Dünya Animasyon
Festivalinde ve San Fransisco'daki Uluslararasi Film Festivalinde birçok
ödül kazanmistir..
Oscar ödülü kazanan ilk animasyon Tin Toy
(1998), Pixar tarafindan modellenmistir ve animator tarafindan kontrol
edilebilmek icin bebegin yuzunde 40 tan fazla kas tanimlanmistir.
Kristal bir topta yasayan kar adaminin hikayesini anlatan Knick Knack
filmi 1989 da yayinlanmistir. Film normal versiyonun disinda ilk olarak
3 boyutlu olarak hazirlanmistir. .
Toy Story. den sonra birkaç
film ayni basariyi elde etti Bu tamamen bilgisayar tarafindan hazirlanan
ilk uzun metrajli filmdi. Pixar
'in sayfasinda bircok ilginc sey bulunabilir , Örnegin Toy Story
2 filmi 1999 yilinda yayinlanacak. .
Pixar modeler ve rendererlarin bagimsiz çalisabilmesi için
Renderman'i kurdu. Bir modeler yalnizca herhangi bir karedeki gorunen seyleri
yapar , .Rendererlar ise bu modellerin tanimlamalarini, isiklari, golgeleri
ve kaplamalari yapar.
RenderMan 3 boyutlu artistleri tanimlar ama onlarin ne yapacagini
tanimlamaz. Baska bir deyisle,bir modeler, resimleri olusum asamasiyla
(render) ilgili degildir. Benzer bir sekilde bir renderer, RenderMan'in
belirlestirdigi seylerle ayni dogrultuda Z-buffer, scan-line, ray-tracing,
radiosity ve diger metodlari kullanarak obje çizimini saglamaktadir.
, ve bu asama RenderMan'den bagimsizdir.Bir sayfa taniminin formati olan
postscript te benzer bir sekilde bir kare taniminin formatini RenderMan
saglar. Bu standart, mimariden yada isletim sisteminden bagimsizdir.
The RenderMan@ Interface Procedures and RIB Protocol are:
Copyright 1988, 1989, Pixar.
All Rights Reserved.
RenderMan@ is a registered trademark of Pixar
Bu bolümde RenderMan 'e küçük girisler yapmaya
çalisacagiz.,tamamen Larry Gritz tarafindan yazilan Blue
Moon Rendering Tools, u kullanacagiz. Bu yalnizca kisisel kullaniminiz
icin bedava bir renderer dir, Bulacaginiz bircok Linux icin versiyonu vardir.
( Bu gerce, dikkat edimesi gereken ilk seydir.), ray-tracing ve radiosity
yontemlerini kullanir
Baslangictaki mekanin koordinat sistemi ve kamera onemlidir. Sol
el koordinat sistemi vardir. Ekranin ortasi origin, X dogrultusu saga dogru,
Y dogrultusu uste dogru ve Z dogrultusu ekranin icine dogrudur (Povray'de
oldugu gibi). Kamera default olarak tanimlanan bicimde gorunumu saglar
(X koordinati kirmizi, Y koordinati yesil ve Z koordinati mavi ,kaynak
kodlar icin resmi klikleyin ). Sag el koordinat kurali da benzerdir, yalnizca
Z ekseni ters tarafa dogrudur.
Pov_Ray de koordinat sistemi biraz karisiktir. Yani kameranin bir hareketiyle
baslangictaki koordinat yonleri degisebilir. RenderMan de bunun tersi dogrudur,
kamera karisiktir ve goruntunun hangi noktalari alindiginda ne degisir.
Butun bunlar "desmantle" orneginde daha anlasilir olacaktir.
RenderMan alisilagelmis bircok seye sahiptir, hem obje hemde
isik tanimlamalarinda.. Simdi ünlü quadriklerin formati ile ilgili
ornek gorecegiz., ayni zamanda diger cisimlerle, örnegin poligonlar
...
|
|
Disk height
radius thetamax
Disk 5
10 300 |
Cone height
radius thetamax
Cone 15
10 300 |
|
|
Cylinder radius zmin
zmax thetamax
Cylinder 10
-5 10
300 |
Sphere radius zmin
zmax thetamax
Sphere 10
-4 8
300 |
|
|
Torus major rad min rad
phimin phimax thetamax
Torus 10
4
90 320
300 |
Paraboloid radius zmin
zmax thetamax
Paraboloid 10
4 15
300 |
|
Hyperboloid
point1
point2 thetamax
Hyperboloid 0 10 -5
10 5 15 300 |
Bu sekilde bir format belki okuyucu için kolay olmayabilir, ama
bu degerler RIB dosyasina modeler tarafindan uygulanir ve bu format etki
ve performans nedeniyle uygundur
Kurulum
Blue Moon Rendering Tools 'in
sayfasina gidip ilk is olarak programi download edelim. ve her zamanki
gibi sikistirilmis dosyayi acalim.
rabit:~/$ gzip -d BMRT2.3.6.linux.tar.gz
rabit:~/$ tar xvf BMRT2.3.6.linux.tar
Bu islemden sonra BMRT2.3.6 isimli yeni bir dizin olusacaktir.Burada calistirilabilir
dosyalar (bin/ dizininde), örnekler (examples/ dizininde) ve PostScript
yada HTML formatindaki dosyalar (doc/ dizininde) bulunur., ayrica program
ile ilgili README dosyasida vardir.. Kurulum asamalari icin bu dosyaya
bakin. Buradaki örnekler herkes için sorun çikmamasini
sagliyor.
Ilk Adimlar
Tipik örneklerle (../../common/May1998/disptest.rib) RenderMan
'in belirgin ozelliklerine bakalim. Resim su komutla olusturulur
rendrib -v ../../common/May1998/disptest.rib (1024x768 çözünürlükte
ve 2x2 anti-aliasing te resmi görebilmek için resmi tikleyin.).
Bu BMRT (Blue Moon Rendering Tools) 'nin examples/ dizininde
yer alan bircok ornekten biridir. Okuyucunun anlayabilecegi kisa dosyalar
seklnde yapilmislar (Animasyon yazarken seviyenizi göreceksiniz ).
bin/ dizininde bircok çalistirilabilir dosya
var: rendrib, rendribv ve rgl. Rendrib
bir render yapardir ,rendribv de ayni sekildedir fakat render
tel seklinde, yalnizca çizgilerle yapilir; sonuncusu rgl
ise poligonlar kullanarak render yapar.. Bu üçüde prewiev
(önizleme),yada animasyon için kullanilabilir. Ama en son resim
çiktilari için (render) her zaman rendrib kullanilir.
RIB (Renderman Interface ByteStream) dosyalarinin formati ,daha
kötü olmamasina ragmen, çok basittir. . Text
dosyalari seklinde (Pov-Ray'de oldugu gibi) saklanirlar. Iyi bir RIB dosyasi
sunlari içermelidir.
-
Karelerin her zamanki özellikleri (çözünürlük,
anti-akiasing, vs...)
-
FrameBegin (baslangiç karesi)
-
Karelerin grafik özellikleri ve baslangic özellikleri (
örnegin dosya ismi, ayrinti seviyesi vs...)
-
Karelerin grafik kalitesi (isiklar, isiklandirma tipleri , vs...)
-
WorldBegin (baslangic noktasi)
-
Hareketli karelerin ve grafiksel özelliklerin tayini
-
WorldEnd (bitiris noktasi). Sonraki yan etkiler ile: çiktisi
alinmis ve kaydedilmis kareler, (6) daki butun geometri ve isik tanimlamalari
yok olur.
-
FrameEnd (bitiris karesi). (2) deki durumun sonu.
-
(2) ve (8) in tekrarlari
Grafiksel durum, alsilagelmis bir render icin ihtiyac duyulan bilgileri
icerir.. Bu iki bölüm halindededir.Bir global ,alisilagelmis
özellikleri yansitir, ana degisken ise bunda yapilacak degisikliklerdir..
Parametreler options olarak bilinen global degiskenler ve attributes
olarak bilinen ana degiskenlerdir.
Options ve attributeslari anlamanin en iyi yolu Renderman de yapilan
bir karenin nasil yapildigini incelemektir.Önce bir ön örnegin
satirlarini inceleyelim. Bu ne yapilabilecegini ve nasil yapildigini anlamanin
iyi bir yoludur.
1.- ##RenderMan RIB-Structure 1.0
2.- version 3.03
3.-
4.- ###########################################################################
5.- #
6.- # This RIB file demonstrates some more complex procedural textures.
7.- # Two spheres show the use of "stucco" and "dented" displacement shaders.
8.- # The floor shows the gmarbtile_polish shader, which is polised green
9.- # marble tiles. Note that the reflection is accomplished by the shader
10.- # actually calling the trace() function, rather than reflection mapping.
11.- #
12.- ###########################################################################
13.-
14.- Option "searchpath" "shader" [".:../shaders:&"]
15.- Display "balls2.tif" "file" "rgb"
16.- Format 400 300 -1
17.- PixelSamples 1 1
18.-
19.- Declare "prmanspecular" "integer"
20.- Option "render" "prmanspecular" [0]
21.- Projection "perspective" "fov" 35
22.- Translate 0 -0.55 8
23.- Rotate -110 1 0 0
24.-
25.-
26.- WorldBegin
27.-
28.- LightSource "ambientlight" 1 "intensity" 0.02
29.-
30.- Declare "shadows" "string"
31.- Attribute "light" "shadows" "on"
32.- LightSource "distantlight" 1 "from" [0 1.5 4] "to" [0 0 0] "intensity" 0.6
33.-
34.- AttributeBegin
35.- Declare "txtscale" "float"
36.- Declare "Kr" "float"
37.- Declare "darkcolor" "color"
38.- Declare "lightcolor" "color"
39.- Declare "veincolor" "color"
40.- Surface "gmarbtile_polish" "Ka" 1 "txtscale" 0.5 "Kr" .25 "Kd" 0.3 "Ks" 0.2 "roughness" 0.02
41.- Patch "bilinear" "P" [ -5 -5 0 5 -5 0 -5 5 0 5 5 0 ]
42.- AttributeEnd
43.-
44.- AttributeBegin
45.- Color [ .6 .6 .6 ]
46.- Translate -1.5 0 1
47.- Surface "matte"
48.- Declare "frequency" "float"
49.- Declare "Km" "float"
50.- Displacement "stucco" "frequency" 20 "Km" 0.3
51.- Sphere 1 -1 1 360
52.- AttributeEnd
53.-
54.- AttributeBegin
55.- Translate 1.5 0 1
56.- Color 1 .45 .05
57.- Declare "Kr" "float"
58.- Declare "Km" "float"
59.- Surface "shiny" "Kd" 0 "Kr" 0.25 "roughness" 0.15 "specularcolor" [1 .5 .06]
60.- Displacement "dented" "Km" 0.5
61.- Sphere 1 -1 1 360
62.- AttributeEnd
63.-
64.- WorldEnd
Dosyada bazi satirlarda # sembolu kullanilmistir, 1. satir ve 4 ile12.
satirlari arasi satirlara bak. # sembolunun oldugu satirin tamami
yokmus gibi dusunuluyor. Yani program tarafindan okunmuyor. ( C++ 'daki
// gibi ). Bu satirlar dosyayi sonradan okuyacak insana kolaylik
saglamasi içindir.
2. satirdaki version komutu vardir. Bu (3.03) versiyonunun
kullanildigini tanimlamak içindir; daha yaygin kullanilan
3.1 versiyonu 1989 da yayinlanmistir (evet 1989, bu bir hata degil).
Mayis 1995 ' te gözden geçirilmistir.
14. satirdaki searchpath ve shade komutlari "shaders"
tanimlar, Bunlar verilen cisimlerin nasil render edileceginin bilgisini
veren objelerdir. (örnegin plastik, transparan, vs..), Bu baglantinin
güçlü yanlarindan biridir, çünkü bir
objenin kaplamasi bir plug-in gibi davranir, bu yüzden yeni bir kaplama
yada efekt kolaylikla eklebilir, ... bu kaliteli bir çikti için
çok beklemeye yol açmaz. Genellikle dosyalarda konumu tanimlayabilmek
için çevresel degerler (SHADER) vardir, bu genelikle anlasilabilir
bir yol tanimi için yeterli degildir.
Display özelligi 15. satirda gorülmektedir.
Bu dosyanin ismini "balls2.tiff" olarak tanimlar "file"
"rgb", .
ise dosyanin RGB formatinda olmasindandir.
Display seçenegiyle 16. satirda resolution (resim çiktisin
boyutlari) tespit edilmistir. Örnegimizde resolution degerleri
400x300 olarak verilmis , -1 degeri pixellerin oranini verir. (aslinda
bu deger +1 olmaliydi, neden -1 kullanildigini bilemiyorum)
Birazdan her pixelin yatay ve dusey neklerini gorecegiz, Isinlarin sayisi
ciktisi alinacak pixeli belirler PixelSamples 2 2
degeri her pixel için 4 isin kullanildigini belirtir., yüksek
kaliteli bir resim (bu anti-aliasing), ne yazikki ciktinin alinma
süresini (render süresi) arttirir. Örneklerde 1 x 1 = 1
kullanicak, bu daha hizli bir render için her pixelde bir isin kullanilmasi
demek. .
19. satirda integer deger prmanspecular , aslinda prmanspecular
verilen bir tanimdir ve render sirasinda bu tanima gelindiginde integer
deger bahsedilen tanimi takip eder.
Birazdan "perspective" ile bir 3 boyut tanimlamasi
görecegiz., Bakis açisini "fov" 35 ile 35
derece olarak belirliyoruz.
22 ve 23. satirlarda kameranin konumu tanimlanmaktadir. Önce
bir dönme hareketini takip eden bir yerdegistirme tanimliyoruz, fakat
butun bu hareket ilk verilen konuma gore yapilan bir harekettir.Yani Renderman
hareketi tanimlayabilmek için önceden verilen WorldBegin
degerini arar ve sonra hareketi uygular. Örnekte sistem X ekseninde
-100 derece döndürülmüstür. (Y ekseninde dönme
için Rotate 45 0 1 0 degeri tanimlanmalidir), Sonraki hareket
Y ekseninde -0.55 birim , Z ekseninde 8 birimdir.Lütfen dikkatle inceleyin
aslinda degisen, donme ve öteleme hareketleriyle kameranin yeri
degil, baslangicta tanimlanan mekanin merkezidir. Sonraki figurler iki
konum boyunca farkli asamalar gösterirler.
Bir sonraki adim her karedeki obje ve isiklari tanimlamaktir.Hersey
WorldBegin ile baslar ve WorldEnd ile biter (26
ile 64 satirlari arasi).Örnegimizdeki ilk birkac satir isima ile ilgilidir
(28 ile 32 satirlari arasi); her isik bir numaraya sahiptir ve teoride
bunlar farkli olmalidir., Ilki ambient light ve 0.02 intensity degerine
sahip . Diger isikta shadows degeri tanimlanmis, golgeleme
özelligi açik oldugunda bu satirdaki komt ise yarar hale geçecektir
.32. satirda yine 1 sayisi kullanilmis ve distantlight türü
bir isik kaynagi tanimlanmis (bu gunes gibi uzaklardan her tarafi aydinlatan
bir isik) ;önceden açiklandigi gibi isik kaynagi numaralari
farkli olmalidir , Bu isik halen çalisir, çünkü
BMRT isik numaralarini ihmal etmet için ortaya çikar. Isiklardan
ikincisinin intensity degeri ilki ile ayni ve uygulama alani from
ve to komutlariyla saglanmis.,eger bu noktasal bir isik
ise isinlar paralel yollanir.
Simdi üç tane obje tanimlayacagiz Her objeyi
AttributeBegin ve AttributeEnd komutlari arasinda tanimliyoruz,
çünkü her birinin kendine has özellikleri var ( konum,
görünüs, vs...) . Eger bir objeden digerine dönüsüm
var ise TransformBegin ve TransformEnd komutlarin kullaniriz.
Ilk obje (34 ve 42 arasi)bir patch tir, patch ler : düzenli yada düzensiz
olabilirler, bilinear yada bicubic ( Bezier ve BSplines
patches) (bircok kitap bunu anlamanizi saglayacaktir). Örnegimizde
4 noktali bir bilinear patch var,Bu "P" ve onu takip eden (x,y,z)
koordinat noktalariyla tanimlanmitir. Cismin kaplamasi Surface
sayesinde render edilmistir, ilk deger shader sonrakiler
her shader'in belirgin özellikleridir. Bir sonraki resimde
bunun sonuçlarini görecegiz
44 ve 52 satirlari arasi birden çok obje var: 51. satirda
Color [R G B]ile rengi tanimlanmis bir küre. bu
küreye bir kaplama çesidi verilmis, matte . Birazdan
BMRT'nin önemli seylerne deyinecegiz, shaders. Bunlar, BMRT
altindaki "bumps"lar haricinde, Pov-Ray deki bump-maps lere bienzerler
Cisme eklenen son efekt görünümündeki sertliktir, shaders
buna benzer bir etki saglar , shader her zaman bunu
takip eden bir parametre ile kullnanilir . Bir kürenin tanimi pek
alisilmamis bir sekildedir; önce yariçap verilir, sonrazmin
ve zmax Z ekseni boyunca verilir.son deger kürenin tamalþanmasi
içindir. Tam bir küre için 360, yarim bir küre
için 180 verilmelidir. Burada bir kürenin resmi verilmistir:
Sonraki obje, kaplama ve görünüm özellikleri
haricinde, ilk objeye benzer sekilde tanimlanmistir, Bu yuzden ayni seyleri
tekrarlamayacagim , simdi dosyayi çalistiralim.
Bu dosyayi bitirir. Bu noktada kompleks bir kare elde edemedik, Kompleks
bir kare yada animasyon için kompleks bir dosya yapmaliyiz Bunu
yapabilmek için RenderMan 'in destekledigi bir renderer kullanin
yada alternatif olarak C'de bir animasyon hazirlayin. BMRT de eklenmesi
gereken dizinler ve bazi kütüphaneler gereklidir. Bunlar RIB
dosyasinin standart çiktisina gönderilen fonksiyonlar içerirler.
Her iki metodda benzerdir. RIB dosyasindaki WorldBegin ,
bir C programindaki RiWorldBegin()'e esdegerdir (Bunun
hakkinda daha fazla bilgi için doc/ dizinindeki
RenderMan for Poets 'i okuyun).
Sonuçlar
RenderMan'in ne kadar kuvvetli oldugunu ve Toy Story'nin bununla hazirlandigini
gordük ( marionet adi verilen modeler ile).
www.toystory.com
adresinde film ve digerdigeri seylerle ilgili daha çok bilgi bulacaksiniz.
giga.cps.unizar.es.
adresinde yine daha belirgin seyler bulabilirsiniz. Bu belirgin bilgiler
disinda örnekler. de bulabilirsiniz
Sonraki bölümde küçük bir obje hazirlayacagiz.
Bunu C'de yapacagiz.Sonra kolayca animasyon yapacagiz . Animasyon
için hazirlanan bu küçük obje belki bir linux pengueni
olabilir ya da belki de Bill Gates (ya da ikisinide yapariz ve penguen
digerini yagda pisirir:) |