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
KurulumBlue 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 AdimlarTipik ö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çlarRenderMan'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:)
|