Jednym z hitów ubiegłego lata w grafice komputerowej był bez wątpienia Pepe. Jeśli macie stałe łącze i znajomych mających zwyczaj przesyłać megabajty animacji pocztą, nie mogliście nie dostać jednego z filmików z sympatycznym stworkiem, występującym w towarzystwie robotów z Phantom Menace. Ale Pepe to tylko demonstracja możliwości niezwykłego silnika do renderingu znanego jako Arnold. Silnik ten wsławił się szybkim renderingiem scen wykorzystujących światło do złudzenia przypominające naturalne. Bardzo ładne grafiki można obejrzeć tutaj.


Od razu pojawiło się pytanie o inne silniki do renderingu: czy można je wykorzystać, by uzyskac podobny efekt? A jeśli tak, jak szybko będzie przebiegał rendering? Miłośnicy MentalRay’a i Mayi szybko udowodnili, że ich ulubione narzędzia nienajgorzej radzą sobie z tym problemem. A BMRT?
Larry Gritz, twórca BMRT, opisał kilka metod, które można wykorzystać, by osiągnąć podobny efekt w BMRT. Niestety, po zmianach na www.bmrt.org trudno cokolwiek znaleźć, dlatego postaram się w kilku słowach przybliżyć efektywne metody uzyskania Global Illumination w BMRT.
Pierwsza metoda, jaka przychodzi do głowy, to utworzenie ogromnego nieba w kształcie (pół)kuli jako arealight, które równomiernie oświetlałoby scenę. Początkowe próby nie będą zapewne optymistyczne:

(Sześcian w tle nie ma przypisanego szadera, stąd jego niewrażliwość na plamy). Jak widać, w ten sposób mozemy otrzymać co najwyżej gruboziarnistą fotografię. Ale jeśli uwrażliwimy nieco światło…

  Attribute "light" "nsamples" [64]  Attribute "light" "shadows" ["on"]  AreaLightSource "arealight" 1 "lightcolor" [0.388235 0.529412 0.8]   "intensity" [10000000000]    

…otrzymamy następujący obrazek:


Istnieje jednak jeszcze jedna metoda, polegająca na zastosowaniu pośredniego światła. Nie jest ona udokumentowana w BMRT 2.5, lecz można dzięki niej uzyskać podobne rezultaty:

Tym razem do pliku .rib dodaliśmy nastepujące linijki:

    Option "indirect" "float maxerror" [0.05]    Option "indirect" "float maxpixeldist" [5]    Option "indirect" "integer interpolate" [0]    Option "indirect" "integer minvalid" [3]    Option "indirect" "integer nsamples" [256]  

Te metody, choć pozwalają uzyskać ciekawe efekty, są bardzo czasochłonne. Rendering nawet niewielkiego obrazka o minimalnej ilosci obiektów zabiera wielokrotnie więcej niż rendering „tradycyjny”. Dlatego warto spróbować jeszcze jednego sposobu. Mianowicie najpierw tworzymy tzw. „z-plik” poleceniem

  rgl -dumprgbaz scena.rib  

Następnie z z-pliku tworzymy mapę cienia:

  mkmip -shadow scena.zfile scena.sm  

A w pliku .rib dopisujemy:

  LightSource "shadowdistant" 3 "from" [1000 -1000 5000] "to" [0 0 0]  "lightcolor" [0.9388235 0.9529412 0.98]  "string shadowname" ["scena.sm"] "float bias" [20] "float blur" [0.05]  "float samples" [64]  

Uzyskany obrazek sprawia wrażenie niedoświetlonego:


Dlatego dostrajamy wymagane parametry, by cieszyć się takim oto widokiem:

Ta ostatnia metoda jest faktycznie najszybsza.
Wszystkie pliki niezbędne do wyrenderowania powyższych scen można znaleźć tutaj.
Archiwalny news dodany przez użytkownika: arturs.
Kliknij tutaj by zobaczyć archiwalne komentarze.

Oznaczone jako → 
Share →