Home Index Search Links About Us
[LinuxFocus Image]
[Navegation Bar]
  News   Archives   Companies   Tips  

RenderMan

Yazar: Carlos Calzada Grau

Çeviri: Mustafa Erdinç (Gözden geçirilmekte)


Giriş

Kurulum

İlk Adımlar

Sonuçlar

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. 

  1. Karelerin her zamanki özellikleri (çözünürlük, anti-akiasing, vs...)
  2. FrameBegin (baslangiç karesi)
  3.  Karelerin grafik özellikleri ve baslangic özellikleri ( örnegin dosya ismi, ayrinti seviyesi vs...)
  4. Karelerin grafik kalitesi (isiklar, isiklandirma tipleri , vs...)
  5. WorldBegin (baslangic noktasi)
  6. Hareketli karelerin ve grafiksel özelliklerin tayini
  7. WorldEnd (bitiris noktasi). Sonraki yan etkiler ile: çiktisi alinmis ve kaydedilmis kareler, (6) daki butun geometri ve isik tanimlamalari yok olur. 
  8. FrameEnd (bitiris karesi). (2) deki durumun sonu.
  9. (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:) 

 

Daha fazla bilgi için:   
© 1998 Carlos Calzada Grau 
Bu sanalyörenin bakımı Miguel A Sepulveda tarafından yapılmaktadır.