You are on page 1of 124

Wybrzee Wyspiaskiego 27, 50-370 Wrocaw

POLITECHNIKA WROCAWSKA WYDZIAOWY ZAKAD INFORMATYKI WYDZIA INFORMATYKI I ZARZDZANIA

Zastosowanie technik teksturowania proceduralnego do modelowania zjawisk naturalnych i wasnoci powierzchni


Tomasz Kustrzyski

Promotor: dr in. Jerzy Sas

Ocena:

Wrocaw 2002

Streszczenie
Niniejsza praca ma na celu przedstawienie niezalenej od systemw do grafiki fotorealistycznej biblioteki, zawierajcej funkcje suce do symulacji zjawisk rzeczywistych przy uyciu tekstur proceduralnych. Opracowany zosta system do szybkiej i prostej edycji zoonych tekstur proceduralnych wykorzystujcy stworzon bibliotek. System zosta zintegrowany z pakietem do grafiki fotorealistycznej LightWorks.

Abstract
The aim of this work is to present library that is independent on photorealistic graphics systems which contains functions used to simulate real-world phenomena by means of procedural texturing. The system using defined library have been designed that allows for quick and easy edition of complex procedural textures. The system have been integrated with LightWorks photorealistic graphics package.

Spis treci
1. 2. WSTP ......................................................................................................................................................... 7 ELEMENTY GRAFIKI KOMPUTEROWEJ.......................................................................................... 9 2.1. PODSTAWOWE POJCIA GRAFIKI KOMPUTEROWEJ................................................................................. 9 2.2. HISTORIA TEKSTUR PROCEDURALNYCH .............................................................................................. 11 2.3. DEFINIOWANIE TEKSTUR PROCEDURALNYCH...................................................................................... 13 2.3.1. Definiowanie bibliotek tekstur proceduralnych............................................................................. 13 2.4. JAKO TEKSTUR PROCEDURALNYCH ................................................................................................. 14 3. PRZEGLD STOSOWANYCH METOD SYMULACJI ZJAWISK NATURALNYCH .................. 17 3.1. KATEGORIE TEKSTUR PROCEDURALNYCH ROZWAANE W PRACY ....................................................... 17 3.2. TECHNIKI ZAAWANSOWANE................................................................................................................ 21 3.2.1. Szum Perlina ................................................................................................................................. 21 3.2.2. Wzory kamiennych murw............................................................................................................. 22 3.2.3. Wzory na skrze ssakw ................................................................................................................ 23 3.2.4. Komrkowe funkcje bazowe tekstur (cellular texture basis function) ........................................... 26 3.2.5. Podsumowanie .............................................................................................................................. 29 3.3. DOSTPNE KOMERCYJNIE BIBLIOTEKI DO TWORZENIA WZORW PROCEDURALNYCH ......................... 29 4. METODY I TECHNIKI WYKORZYSTANE W PRACY.................................................................... 33 4.1. FUNKCJA TEKSTURUJCA JAKO ZOENIE FUNKCJI BAZOWYCH ......................................................... 33 4.2. DRZEWA CIENIOWANIA ....................................................................................................................... 35 4.3. OPIS ZAIMPLEMENTOWANYCH ALGORYTMW .................................................................................... 35 4.3.1. Odwzorowanie nierwnoci powierzchni...................................................................................... 35 4.3.2. Szum Perlina ................................................................................................................................. 37 4.3.3. Podzia przestrzeni wedug diagramu Voronoi ............................................................................. 40 4.4. AUTOMATYZACJA POSZUKIWANIA UYTECZNYCH WZORW PROCEDURALNYCH ............................... 49 4.4.1. Losowe parametry ......................................................................................................................... 49 4.4.2. Przeszukiwanie domeny parametrw ............................................................................................ 49 5. BIBLIOTEKA DO TWORZENIA TEKSTUR PROCEDURALNYCH TEXLIB.............................. 50 5.1. ARCHITEKTURA .................................................................................................................................. 50 5.1.1. Interfejs ......................................................................................................................................... 50 5.1.2. Moduy funkcjonalne systemu renderujcego ............................................................................... 50 5.1.3. Biblioteka ...................................................................................................................................... 50 5.1.4. Interfejs graficzny.......................................................................................................................... 51 5.2. IMPLEMENTACJA - DIAGRAM KLAS...................................................................................................... 51 5.2.1. Diagramy klas ............................................................................................................................... 51 5.2.2. Opisy najwaniejszych klas ........................................................................................................... 56 5.3. PROCESU RENDERINGU Z WYKORZYSTANIEM INTERFEJSU BIBLIOTEKI TEXLIB ................................... 58 5.3.1. Fazy procesu renderingu w bibliotece TexLib............................................................................... 59 5.4. INTERFEJS PROGRAMISTYCZNY-ROZSZERZANIE BIBLIOTEKI O NOWE WZORY...................................... 63 5.5. ZAWARTO KONTEKSTU CIENIOWANIA W POPULARNYCH SYSTEMACH GRAFIKI FOTOREALISTYCZNEJ 64 5.5.1. 3dsMAX release3........................................................................................................................... 65 5.5.2. LightWorks .................................................................................................................................... 66 5.5.3. RenderMan .................................................................................................................................... 67 5.5.4. LightWave...................................................................................................................................... 68 5.5.5. Kontekst w bibliotece TexLib......................................................................................................... 68 5.6. WYBRANE SZCZEGY IMPLEMENTACYJNE ........................................................................................ 70 5.6.1. Wzory definiowane w bibliotekach DLL........................................................................................ 70 5.6.2. Ewaluacja drzewa cieniowania..................................................................................................... 71 5.6.3. Zapobieganie cyklom..................................................................................................................... 72 5.7. INTEGRACJA Z PAKIETEM LADS DO RENDERINGU FOTOREALISTYCZNEGO ......................................... 73 5.7.1. System do renderingu fotorealistycznego LightWorks................................................................... 73 5.7.2. Wykorzystanie biblioteki TexLib w procesie cieniowania systemu LightWorks ............................ 76 5.7.3. Przykadowa implementacja shadera LADS wykorzystujcego TexLib ........................................ 77

6.

EDYTOR DRZEW CIENIOWANIA ...................................................................................................... 80 6.1. FUNKCJONALNO APLIKACJI EDYTORA ............................................................................................ 80 6.2. INTERFEJS UYTKOWNIKA .................................................................................................................. 81 6.2.1. Dodawanie i usuwanie wzorw i wartoci .................................................................................... 81 6.2.2. Tworzenie pocze midzy wzorami ............................................................................................ 84 6.2.3. Waciwoci wzorw...................................................................................................................... 86 6.2.4. Rendering ...................................................................................................................................... 87 6.2.5. Serializacja drzew cieniowania..................................................................................................... 89 6.3. WYBRANE SZCZEGY IMPLEMENTACYJNE ........................................................................................ 89 6.3.1. Opis scen trjwymiarowych .......................................................................................................... 90 6.3.2. Rendering ...................................................................................................................................... 90

7.

BADANIA EKSPERYMENTALNE........................................................................................................ 91 7.1. CEL I ZAKRES EKPERYMENTW........................................................................................................... 91 7.2. SYMULACJE ZJAWISK WYSTPUJCYCH W NATURZE .......................................................................... 91 7.2.1. Skra salamandry.......................................................................................................................... 92 7.2.2. Cienie kaustyczne .......................................................................................................................... 93 7.2.3. Skra wyprawiona......................................................................................................................... 95 7.2.4. Skra wa..................................................................................................................................... 97 7.2.5. Spkana ziemia.............................................................................................................................. 99 7.2.6. Twrczo H.R.Gigera............................................................................................................... 100 7.3. OCENA EFEKTYWNOCI .................................................................................................................... 102 7.3.1. Warunki eksperymentu ................................................................................................................ 102 7.3.2. Czynniki wpywajce na czas generowania obrazu..................................................................... 103 7.3.3. Rezultaty liczbowe ....................................................................................................................... 104 7.4. OCENA JAKOCI - PORWNANIA........................................................................................................ 107 7.5. PODSUMOWANIE ............................................................................................................................... 109

8. 9.

PODSUMOWANIE................................................................................................................................. 110 LITERATURA......................................................................................................................................... 112 A.1. INSTRUKCJA DLA STUDENTW................................................................................................................. 113 A.1.1. Cel wiczenia............................................................................................................................... 113 A.1.2. Wprowadzenie - tekstury proceduralne....................................................................................... 113 A.1.3. Biblioteka do tworzenia drzew cieniowania ................................................................................ 113 A.1.4. Edytor drzew cieniowania ........................................................................................................... 118 A.1.5. Zadania ....................................................................................................................................... 118 A.1.6. Sprawozdanie .............................................................................................................................. 120 A.1.7. Literatura .................................................................................................................................... 121 A.2. ZALECENIA DLA PROWADZCEGO ........................................................................................................... 121 A.2.1. Ocena .......................................................................................................................................... 121 A.2.2. Moliwe modyfikacje wiczenia .................................................................................................. 122

DODATEK A. PROPOZYCJA WICZENIA LABORATORYJNEGO.................................................... 113

DODATEK B. FORMAT PLIKU ZAPISU DRZEWA CIENIOWANIA (*.TREE) .................................. 123 B.1.1. B.1.2. B.1.3. B.1.4. Format pliku *.tree...................................................................................................................... 123 Definicja wzorw......................................................................................................................... 123 Definicja wartoci ....................................................................................................................... 123 Definicja powiza...................................................................................................................... 124

Spis ilustracji
RYSUNEK 2-1 SHADE TREE REALIZUJCE MODEL OWIETLENIA ............................................................................ 12 RYSUNEK 3-1 WZORY NA SKRZE ZWIERZT ........................................................................................................ 18 RYSUNEK 3-2 SKRA I PAPIER ............................................................................................................................... 18 RYSUNEK 3-3 KORA I DREWNO .............................................................................................................................. 19 RYSUNEK 3-4 PIANA I STYROPIAN.......................................................................................................................... 19 RYSUNEK 3-5 KAMIENNE MURY, WYSCHNITA ZIEMIA, KRA ................................................................................. 20 RYSUNEK 3-6 CIENIE KAUSTYCZNE RZUCANE PRZEZ WOD................................................................................... 20 RYSUNEK 3-7 WZORY ABSTRAKCYJNE .................................................................................................................. 20 RYSUNEK 3-8 ZASTOSOWANIE SZUMU PERLINA DO GENERACJI TEKSTUR. OD LEWEJ: POWIERZCHNIA PLANETY, SZUM JAKO FUNKCJA PRZECZAJCA, MARMUR, DREWNO. ........................................................................ 21 RYSUNEK 3-9 KEN PERLIN. SZUM UYTY Z TECHNIK ODWZOROWANIA NIERWNOCI DO WIZUALIZACJI NIERWNOCI POWIERZCHNI. ....................................................................................................................... 22 RYSUNEK 3-10 K. MIYATA POCZENIA MIDZY KAMIENIAMI MURU ................................................................ 22 RYSUNEK 3-11 K.MIYATA TEKSTURA MURU ......................................................................................................... 22 RYSUNEK 3-12 K. MIYATA EDO CASTLE. ZASTOSOWANIE TECHNIKI GENEROWANIA POWIERZCHNIOWEJ TEKSTURY MURU. ......................................................................................................................................... 23 RYSUNEK 3-13 G. TURK. WZORY WYPRODUKOWANE ZA POMOC NAKADANIA KILKU SYSTEMW REACTION DIFFUSION. ................................................................................................................................................... 24 RYSUNEK 3-14 G. TURK. WZORY REACTION DIFFUSION NA OBIEKTACH ............................................................. 24 RYSUNEK 3-15 M. WALTER. TEKSTURY WYGENEROWANE METOD CELL DIVISION I ICH NATURALNE ODPOWIEDNIKI. ............................................................................................................................................ 26 RYSUNEK 3-16 S. WORLEY PRZYKAD WYKORZYSTANIA KOMRKOWEJ FUNKCJI BAZOWEJ ............................. 27 RYSUNEK 3-17 DIAGRAM VORONOI ...................................................................................................................... 27 RYSUNEK 3-18 S. WORLEY - PRZYKADY TEKSTUR UZYSKANYCH DZIKI ZASTOSOWANIU RNYCH KOMBINACJI LINIOWYCH FUNKCJI FN................................................................................................................................ 28 RYSUNEK 3-19 J. KUKLA - TEKSTURY SKRY........................................................................................................ 29 RYSUNEK 3-20 OBRAZ WYGENEROWANY PRZY POMOCY BIBLIOTEKI PIXELLOOM ................................................ 30 RYSUNEK 3-21 PRZYKADY TEKSTUR KOMRKOWYCH WYGENEROWANYCH ZA POMOC CORELTEXTURE ...... 31 RYSUNEK 4-1 PRZYKADY POCZE MIDZY FUNKCJAMI BAZOWYMI ................................................................ 34 RYSUNEK 4-2 GEOMETRIA ODWZOROWANIA NIERWNOCI POWIERZCHNI ........................................................... 36 RYSUNEK 4-3 PSEUDO MODEL OWIETLENIA ......................................................................................................... 37 RYSUNEK 4-4 OBLICZANIE SZUMU PERLINA 2D METOD GRADIENTOW ............................................................. 38 RYSUNEK 4-5 WYKRES FUNKCJI SMOOTHSTEP(X).................................................................................................. 38 RYSUNEK 4-6 PRZYKADY SZUMU FRAKTALNEGO ................................................................................................ 39 RYSUNEK 4-7 WYNIKI DZIAANIA FUNKCJI NOISEV. PRZEKRJ PRZEZ PRZESTRZE R3......................................... 41 RYSUNEK 4-8 TYPY WYNIKW ZWRACANYCH PRZEZ FUNKCJ NOISEV................................................................. 42 RYSUNEK 4-9 ILUSTRACJA FRAKTALNEGO PODPODZIAU PRZESTRZENI ................................................................ 44 RYSUNEK 4-10 WPYW ZASTOSOWANIA RNYCH METRYK ODLEGOCI ............................................................ 47 RYSUNEK 6-1 WIDOK OGLNY EDYTORA DRZEW CIENIOWANIA ........................................................................... 81 RYSUNEK 6-2 MENU KONTEKSTOWE DODAWANIA WZORW I WARTOCI .............................................................. 81 RYSUNEK 6-3 OKIENKO DIALOGOWE DODAWANIA NOWEGO WZORU ..................................................................... 82 RYSUNEK 6-4 OKIENKO DIALOGOWE DODAWANIA NOWEJ WARTOCI STAEJ ....................................................... 82 RYSUNEK 6-5 WACIWOCI WARTOCI STAYCH ................................................................................................ 83 RYSUNEK 6-6 WACIWOCI WARTOCI STAYCH ZWIZANE Z LOSOWOCI (WACIWOCI WARTOCI TYPU FLOATARRAY). ............................................................................................................................................ 84 RYSUNEK 6-7 PROCES TWORZENIA POCZENIA MIDZY PARAMETRAMI WYBIERANIE PARAMETRU WEJCIOWEGO .............................................................................................................................................. 85 RYSUNEK 6-8 PROCES TWORZENIA POCZENIA MIDZY PARAMETRAMI WYBIERANIE PARAMETRU WYJCIOWEGO .............................................................................................................................................. 85 RYSUNEK 6-9 WIDOK WACIWOCI WZORW. 1-PARAMETRY WEJCIOWE, 2-PARAMETRY WYJCIOWE .............. 86 RYSUNEK 6-10 MENU PARAMETRW SCENY.......................................................................................................... 87 RYSUNEK 6-11 OKIENKO DIALOGOWE Z USTAWIENIAMI PARAMETRW SCENY ..................................................... 87 RYSUNEK 6-12 MENU RENDERINGU ....................................................................................................................... 88 RYSUNEK 6-13 OKIENKO DIALOGOWE Z PARAMETRAMI RENDERINGU .................................................................. 88 RYSUNEK 6-14 WIZUALIZACJA POSTPU PROCESU RENDERINGU ........................................................................... 89 RYSUNEK 9-1 PRZYKADOWY DIAGRAM FUNKCJI BAZOWYCH ............................................................................ 114 RYSUNEK 9-2 PRZYKADOWY DIAGRAM DRZEWA CIENIOWANIA ........................................................................ 119 RYSUNEK 9-3 RYBIA USKA ................................................................................................................................ 120 RYSUNEK 9-4 PIANA NA POWIERZCHNI PIWA ....................................................................................................... 120

Spis diagramw
DIAGRAM 2-1 PRZEBIEG PROCESU RENDERINGU DLA OWIETLENIA LOKALNEGO .................................................... 9 DIAGRAM 2-2 PRZEBIEG PROCESU CIENIOWANIA ................................................................................................... 10 DIAGRAM 3-1 LIBTEX EWALUACJA TEKSTUR PRZESTRZENNYCH ...................................................................... 30 DIAGRAM 5-1 ARCHITEKTURA BIBLIOTEKI TEXLIB (MODUY FUNKCJONALNE).................................................... 50 DIAGRAM 5-2 DIAGRAM KLAS TYPW WARTOCI .................................................................................................. 52 DIAGRAM 5-3 DIAGRAM KLAS ZWIZANYCH ZE WZORAMI .................................................................................... 53 DIAGRAM 5-4 DIAGRAM KLAS FUNKCJI ZARZDZAJCYCH WZORAMI ................................................................... 54 DIAGRAM 5-5 DIAGRAM KLAS PODSTAWOWYCH IMPLEMENTACJI ALGORYTMW SZUMW .................................. 55 DIAGRAM 5-6 FAZA CIENIOWANIA Z UWZGLDNIENIEM BIBLIOTEKI TEXLIB ........................................................ 58 DIAGRAM 5-7 PRZYKAD KOLEJNOCI EWALUACJI PARAMETRW DRZEWA CIENIOWANIA ................................... 72 DIAGRAM 5-8 ARCHITEKTURA SYSTEMU LADS.................................................................................................... 73 DIAGRAM 5-9 ARCHITEKTURA PROCESU RENDERINGU W SYSTEMIE LADS........................................................... 74 DIAGRAM 5-10 PRZEBIEG PROCESU EWALUACJI WASNOCI POWIERZCHNI W SYSTEMIE LADS ........................... 75

1. Wstp
Grafika komputerowa cigle zyskuje na znaczeniu w wielu dziedzinach ycia, poczwszy od rozrywki, reklamy, po architektur, medycyn, projektowanie wspomagane komputerowo. Szczegln rol odgrywa grafika fotorealistyczna, ktra stara si jak najwierniej zasymulowa zjawiska naturalne. Spotykamy si z ni na kadym kroku. Staa si ona w dzisiejszych czasach na tyle doskonaa, e czasem nie zdajemy sobie nawet sprawy z tego, jaka cz obrazw, ktre widzimy w kinie, gazetach, czy ulicznych reklamach, powstaa dziki niej. Coraz czciej spotykamy si z penometraowymi filmami stworzonymi bez uycia standardowych kamer, scenografii ani ywych aktorw, penymi scen zawierajcych rozlege, zapierajce dech krajobrazy, bd bliskie ujcia twarzy, wystroju wntrz, czy szczegw przedmiotw. Wizualizacje architektoniczne trudno odrni od zdj, dziki temu, e zawieraj dokadne symulacje faktur materiaw budowlanych, rolinnoci, nieba. Wikszo z tych realistycznych efektw grafiki fotorealistycznej uzyskuje si dziki proceduralnym technikom opisu wasnoci paszczyzny. Stosujc te metody moemy zasymulowa wygld niemal kadego materiau i powierzchni, od stosowanych w architekturze kamieni naturalnych, po fantastyczne obrazy planet widocznych z przestrzeni kosmicznej. Celem pracy jest opracowanie spjnej metody generowania moliwie szerokiej klasy wzorw, zbadanie jej wasnoci i moliwoci zastosowa praktycznych oraz implementacja w postaci uniwersalnej biblioteki, ktr bdzie mona zintegrowa z dowolnym pakietem oprogramowania do tworzenia grafiki fotorealistycznej udostpniajcym interfejs programistyczny wspomagajcy programowanie tekstur proceduralnych. Przykadami badanych zjawisk mog by kamienie naturalne, rne rodzaje skry zwierzt, skra ludzka, kora drzewa. Wspln cech tych zjawisk jest to, e przy pewnej dozie wyobrani, mona je uoglni i zaklasyfikowa do grupy tzw. wzorw komrkowych, dzielcych powierzchni na mniej lub bardziej regularne siatki. Celem pracy nie jest symulacja poprawna fizycznie. (cho nie wyklucza si zastosowania podstaw fizycznych). Jest nim jedynie stworzenie wzorw jak najbardziej przypominajcych naturalne, reprodukcj ich waciwoci wizualnych. Patrzc z tej perspektywy, mona proces tworzenia tekstur proceduralnych porwna do procesu tworzenia realistycznego obrazu. Artysta malarz prawie nigdy nie posuguje si wiedz na temat fizyki odtwarzanego obiektu. Interesuje go tylko to, w jaki sposb dzieo zostanie odebrane przez publiczno i w jaki sposb kontrolowa proces, aby doprowadzi do podanego efektu. Na uytek bada proponowanych metod zosta stworzony interaktywny program pozwalajcy na atwe tworzenie szerokiej klasy wzorw oraz eksperymentowanie z nimi. W oparciu o t aplikacj opracowano metod automatycznego generowania wzorw proceduralnych poprzez zestawianie rnych wartoci parametrw procedur generujcych wzr. Na bazie opracowanych i zbadanych technik oraz zrealizowanego oprogramowania opracowano rwnie wiczenie laboratoryjne do laboratorium Zaawansowanych Metod Grafiki Komputerowej zapoznajce studentw z moliwociami zastosowania proceduralnych technik teksturowania. Rozdzia 2 stanowi wprowadzenie do procesu renderingu, przypomina rol oraz histori proceduralnych technik teksturowania. W Rozdziale 3 zawarty jest przegld zaawansowanych technik symulacji zjawisk naturalnych. Zawarte s w nim wybrane techniki, ktre daj najlepsze rezultaty w dziedzinie interesujcych nas typw wzorw.

Opis opracowanych metod tworzenia wzorw przebadanych i zaimplementowanych w stworzonym oprogramowaniu umieszczono w Rozdziale 4. Znajduj si tam dokadne opisy zastosowanych algorytmw oraz ich analiza. Opisano rwnie i przeanalizowano wprowadzone przez autora usprawnienia metod zaczerpnitych z literatury. Rozdzia 5 opisuje uniwersaln bibliotek TexLib stworzon na potrzeby tej pracy. Opisane zostao rodowisko jej dziaania, interfejs do komunikacji z systemami do renderingu, oraz niektre szczegy implementacyjne. Nastpny, 6 rozdzia prezentuje system stworzony na bazie biblioteki TexLib, umoliwiajcy tworzenie realistycznych wzorw przy posiadaniu minimum wiedzy na temat technik grafiki komputerowej i teksturowania proceduralnego. System wykorzystuje profesjonalne narzdzie do budowy aplikacji wykorzystujcych grafik trjwymiarow LightWorks Application Development System. Rozdzia 7 jest powicony badaniom eksperymentalnym oraz ocenie wynikw. Ocenie podlegaj zarwno wartoci wizualne budowanych wzorw jak i wydajno algorytmw i procesu ich tworzenia. Podsumowanie w Rozdziale 8 zawiera ocen wynikw pracy, opis potencjalnych kierunkw dalszego rozwoju systemu, sposoby na wykorzystanie osignitych rezultatw. W Dodatku A znajduje si propozycja wiczenia laboratoryjnego na zajcia z zaawansowanych metod grafiki komputerowej. wiczenie wykorzystuje opracowany system i proponuje uczestnikom zaj wykonanie moduw rozszerzajcych go. Opis zawiera wstp teoretyczny oraz wskazwki na temat implementacji. Dodatek B przedstawia format opisu drzew cieniowania zapisywany i odczytywany przez bibliotek TexLib.

2. Elementy grafiki komputerowej


Ten rozdzia zawiera definicje poj grafiki komputerowej, zwizanych gwnie z procesem teksturowania, ktry jest jednym z elementw potoku renderingu. Omwiono tutaj take pobienie proces renderingu dla metod biorcych pod uwag owietlenie lokalne.

2.1. Podstawowe pojcia grafiki komputerowej


Poniej przedstawiony zosta schemat typowego potoku renderingu dla owietlenia lokalnego, czyli nie biorcego pod uwag wiata odbitego i rozproszonego. Przykadami algorytmw wykorzystujcych ten potok s rendering scanline, Z-buffer, REYES (zmodyfikowana metoda scanline, wykorzystywana przez system RenderMan). przeksztacenia geometryczne przeksztacenia modelowania przeksztacenia rzutowania rasteryzacja okrelenie powierzchni widocznych rasteryzacja cieniowanie

Diagram 2-1 Przebieg procesu renderingu dla owietlenia lokalnego

Proces tworzenia obrazu podzielony jest na 2 niezalene czci. Pierwsz jest przygotowanie geometrii, druga to cieniowanie. Geometria sceny moe by opisana w rny sposb: za pomoc trjktw, wieloktw, paszczyzn okrelonych rwnaniami parametrycznymi, bry opisanych proceduralnie. Definiowanie obiektw sceny odbywa si zwykle w ich lokalnym ukadzie wsprzdnych. Faza przeksztace modelowania okrela przeksztacenia wszystkich elementw geometrii opisanych za pomoc hierarchii, podlegajcych znieksztaceniom wynikajcym z animacji itd. Tutaj jest uywany globalny ukad wsprzdnych. Nastpujca po tym faza przeksztace rzutowania przechodzi za pomoc transformacji zalenej od zdefiniowanego wczeniej widoku na ukad wsprzdnych widoku. W trakcie tej fazy geometria jest obcinana do piramidy widzenia zalenej od aktualnego widoku. Fragmenty, ktre nie bd widoczne na wygenerowanym obrazie s usuwane z dalszego procesu (oczywicie s sytuacje wyjtkowe, zwizane z pewnymi zagadnieniami owietlenia globalnego, jak np.: odbicia). Faza rasteryzacji operuje na trjwymiarowym ukadzie wsprzdnych ekranu. W tym ukadzie odbywa si okrelenie powierzchni widocznych (algorytmy okrelania powierzchni widocznych ang. visibility processing wynikaj z metody renderingu i rni si dla metod scanline, Z-buffer, raytracing itd.). Po obciciu wieloktw (w tej fazie geometria skada si z wieloktw, wszystkie paszczyzny opisane parametrycznie, bryy proceduralne itp. zostay ju zamienione na wieloktny) do piramidy widzenia, algorytm rasteryzacji okrela ktre paszczyzny znajd si w kolejnych pikselach obrazu. Nastpujce po tym cieniowanie jest odpowiedzialne za przygotowaniu kontekstu oraz obliczeniu waciwoci powierzchni dla prbek (liczba prbek zaley np. od tego czy renderer uywa nadprbkowania, iloci paszczyzn widocznych przez obliczany piksel obrazu itp.).

Z naszego punktu widzenia jest to najbardziej interesujcy proces. Poniszy diagram pokazuje relacje moduu cieniujcego z moduem okrelania powierzchni widocznych. modu rasteryzacji i cieniowania okrelanie widocznoci (visibility processor) tworzenie kontekstu cieniowania

obliczenie koloru dla prbki

Diagram 2-2 Przebieg procesu cieniowania

Kontekst cieniowania jest zbiorem informacji identyfikujcych i opisujcych aktualnie cieniowan prbk (prbka nie koniecznie jest jednoznaczna z pikselem, jako, e na jeden piksel moe by pobieranych kilka prbek z kilku paszczyzn na si skadajcych). Kontekst cieniowania jest przekazywany algorytmowi odpowiedzialnemu za okrelenie wasnoci cieniowanej powierzchni i wynikajcego z nich koloru, ktry stosuje odpowiedni model cieniowania. Model cieniowania opisuje midzy innymi model owietlenia. Jest on wyraony w postaci rwnania owietlenia uwzgldniajcego w swojej najbardziej popularnej postaci skadowe owietlenia pochodzce ze wszystkich rde znajdujcych si na scenie w nastpujcy sposb [Foley]:
i I = I a k a + I ip * k d ( N * Li ) , gdzie: i

i indeks rda wiata, Ia natenie wiata otoczenia (rwne dla wszystkich obiektw), ka wspczynnik odbicia wiata rozproszonego (z przedziau [0..1]), Ip natenie wiata (wiato) rda wiata, kd wspczynnik odbicia rozproszonego dla danego materiau, N wektor normalny do danej paszczyzny (znormalizowany) L wektor okrelajcy kierunek do rda wiata (znormalizowany) Warto koloru jest zwracana jako wynik, ktry, zalenie od algorytmu rasteryzacji, zostanie umieszczony bezporednio na obrazie lub wykorzystany jako cz skadowa koloru aktualnie cieniowanego piksela. Obliczenie koloru dla danego kontekstu cieniowania moe by bardzo zoonym procesem, co wicej, w nowoczesnych systemach grafiki fotorealistycznej jest faz zajmujc najwicej zasobw systemu. Zasoby te to gwnie czas jednostki obliczeniowej, ale nie tylko. Czynnikiem wpywajcym na zwikszenie zajtoci pamici przez t faz jest denie do uzyskania jak najbardziej realistycznych obrazw poprzez wykorzystanie dobrej jakoci tekstur. Oryginalne znaczenie tekstury to ukad wkien w materiale. Tekstura w grafice komputerowej to wzr opisany na obiekcie, definiujcy atrybuty powierzchni (takie jak kolor, przezroczysto, poyskliwo). Szczeglnym rodzajem tekstur s tekstury proceduralne, ktre mona okreli jako funkcje wsprzdnych ukadu odwzorowania tekstury s,t lub wsprzdnych ukadu lokalnego obiektu P, bd globalnego Pw, okrelajce lokalne wartoci atrybutw powierzchniowych. 10

Problem teksturowania przedstawiony zosta dokadniej w nastpnym punkcie.

2.2. Historia tekstur proceduralnych


Charakterystyczn cech obrazw powstajcych w pocztkach grafiki komputerowej by niewielki stopie ich realizmu. Pierwsze sceny przedstawiay modelowane za pomoc siatek trjktw lub powierzchni parametrycznych obiekty cieniowane z wykorzystaniem mao realistycznych modeli owietlenia. Znaczcym krokiem naprzd byo uycie w 1974 przez E.E. Catmulla tekstur skanowanych obrazw naoonych na geometri i modyfikujcych jej kolor . Obiekty zyskay wiele na realizmie przy niewielkim wysiku i zwikszeniu zoonoci obliczeniowej, szybko w zwizku z tym pojawiy si ulepszenia techniki Catmulla wykorzystujce tekstury take do innych ni modyfikacja koloru powierzchni celw. W 1976 Blinn i Newell przedstawili metod odwzorowania rodowiskowego (ang. reflection mapping lub environment mapping), przy pomocy ktrej staa si moliwa symulacja powierzchni lustrzanych. Wkrtce pojawiy si kolejne zastosowania tekstur w grafice komputerowej: odwzorowanie nierwnoci powierzchni (ang. bump mapping) , czyli symulacja znieksztace powierzchni za pomoc zmian normalnych powierzchni wprowadzony przez Blinna w 1978 oraz odwzorowanie cieni (ang. hadow mapping), gdzie tekstury gbokoci, tworzone przy ustawieniu obserwatora w punkcie rda wiata, wykorzystano do produkcji realistycznych cieni. Catmull w swoim pierwszym podejciu teksturowa powierzchnie zdefiniowane parametrycznie, za pomoc uporzdkowanej pary (u, v). W ten sposb kademu punktowi powierzchni odpowiada punkt dwuwymiarowej tekstury (s, t). Jeli jednak geometria jest reprezentowana za pomoc siatki trjktw, nie mona atwo przeprowadzi odwzorowania punktu na powierzchni w punkt tekstury. Stosuje si w tych przypadkach przeksztacenia z trjwymiarowej przestrzeni obiektu (x, y, z). W obydwu sposobach znajdowania wsprzdnych (s, t) jednak zawsze pojawiaj si znieksztacenia (np. opisanie tekstury na kuli spowoduje wystpienie znieksztace w obszarach biegunowych). Minimalizacja tych znieksztace do dzi jest problemem w przypadkach bardzo skomplikowanych modeli. Jedyn metod cakowitej eliminacji deformacji tekstur jest zastosowanie tekstur zdefiniowanych w przestrzeni trjwymiarowej. Nie sposb uczyni tego w efektywny sposb dysponujc jedynie paskimi obrazami (Cho istniej takie podejcia, w ktrych dua ilo paskich obrazw, reprezentujcych kolejne przekroje obiektu, definiuje trjwymiarowe tekstury. Objto takiej definicji jest jednak na tyle dua, e stosowanie takiego rozwizania na szersz skal jest niepraktyczne). Z pomoc przychodz tutaj przestrzenne tekstury proceduralne. Obrazy tworzone syntetycznie proceduralnie byy wykorzystywane od pocztku istnienia pojcia tekstury. Lata 80 przyniosy kilka innowacji, ktre umoliwiy wygodne korzystanie z tekstur, take do opisu zjawisk przestrzennych, takich jak drewno, czy marmur. Dla tego typu obiektw tradycyjne metody rzutowania dwuwymiarowych, skanowanych obrazw, zawodz. Geoffrey Gardner produkowa tekstury sumujc funkcje sinus o rnych okresach, fazach i amplitudach. Funkcje o duych okresach przeksztaca dodajc wartoci funkcji o duych czstotliwociach. Otrzymywa w ten sposb wzory przypominajce naturalne chmury. Byo to jedno z pierwszych podej do tworzenia realistycznych tekstur proceduralnych. Zaraz po nim, w tym samym roku, Ken Perlin zdefiniowa najintensywniej obecnie uywan do produkcji tekstur proceduralnych funkcj. Jest ona dzisiaj okrelana jako funkcja ktra daa pocztek tysicu tekstur (the function, that launched a thousand textures [T&M 1998], strona 66). Mowa o funkcji noise, wykorzystywanej do generacji naturalnie wygldajcych tekstur. Korzystaj z niej midzy innymi procedury generujce realistyczne obrazy marmurw, chmur, drewna, grzystych krajobrazw itp. Noise moe by zdefiniowany w trzech i wikszej iloci wymiarw, wic mona z jego pomoc produkowa tekstury przestrzenne nie wymagajce w 11

czasie tworzenia obrazu stosowania przeksztacenia do wsprzdnych (s, t), a take animacje (4wymiarowy noise, przy czym 4. wymiar opisuje czas). Odkd tekstury proceduralne udowodniy swoj uyteczno, zaczto tworzy jzyki opisu funkcji je generujcych, tzw. shading languages. Powstay te systemy, ktre umoliwiay definiowanie funkcji teksturujcych (shaders) do opisu rnych waciwoci powierzchni, atmosfery, definicji wiate itp. Najbardziej znanym przykadem jest system drzew cieniowania shade trees R. L. Cooka na podstawie ktrego powsta potem system grafiki fotorealistycznej RenderMan. Shade trees daway midzy innymi moliwo przypisywania powierzchniom wasnych procedur opisujcych kolor, przezroczysto, model cieniowania itp. Rysunek 2-1 przedstawia przykadowe shade tree Cooka realizujce prosty model owietlenia (plastic):

Rysunek 2-1 Shade tree realizujce model owietlenia

Oto odpowiadajcy mu kod shadera systemu RenderMan:


surface plastic (float Ka=1, Kd=0.5, Ks=0.5,Roughness=0.1;) { point Normal=faceforward(normalize(N),I); point Viewer = normalize(-I); Oi=Os; Ci=Os*( Cs*(Ka*ambient()+Kd*diffuse(Normal)+ Ks*specular(Normal,Viewer,Rougness)) ); }

Niewtpliwie zaletami tradycyjnych, skanowanych bd tworzonych rcznie, tekstur s atwo wykonania i realistyczny wygld. Postp w grafice komputerowej sprawi jednak, e realizm obrazw proceduralnych jest czsto na tyle duy, e nie sposb ich odrni od naturalnych odpowiednikw. Poza tym obrazy skanowane rzadko maj dobr jako. Chodzi tutaj nie tylko o ostro czy czysto kolorw, ale warunki owietlenia w czasie robienia zdj (na powierzchniach chropowatych mog wystpowa cienie pochodzce od bocznych wiate), wpyw otoczenia na wasnoci powierzchni (np. odbicia przedmiotw znajdujcych si w pobliu). Koszty stworzenia funkcji, ktre je generuj s oczywicie zwykle bardzo due w porwnaniu z dostarczeniem zdj, jednak dziki kilku wyrniajcym je cechom ich stosowanie jest opacalne. Najwikszymi zaletami teksturowania proceduralnego s: niezaleno od docelowej rozdzielczoci wikszo procedur potrafi wygenerowa dowoln ilo detali wraz z przyblianiem si obserwatora do powierzchni, moliwo generowania tekstur wielowymiarowych przy adresowaniu standardowych tekstur, np. obrazw skanowanych, nastpuje przeksztacenie z trjwymiarowej 12

przestrzeni sceny do dwuwymiarowej przestrzeni obrazu co jest przyczyn znieksztace naniesionych na obiekty tekstur; problem znika jeli tekstura jest zdefiniowana w odpowiedniej przestrzeni, co umoliwia wanie teksturowanie proceduralne may rozmiar definicji (w porwnaniu ze skanowanymi obrazami w wysokiej rozdzielczoci lub teksturami trjwymiarowymi) parametryczny interfejs umoliwiajcy generacj wielu rnicych si obrazw za pomoc jednej procedury.

2.3. Definiowanie tekstur proceduralnych


Definiowanie tekstur proceduralnych odbywa si zazwyczaj w konkretnym rodowisku. System, ktrego uywamy dostarcza pewnego interfejsu za pomoc ktrego mamy moliwo umieszczenia w scenie nowych funkcji teksturujcych. Interfejs taki to zwykle jzyk opisu tekstur proceduralnych (np. Shading Language w RenderMan i Blue Moon Rendering Tool), bd interfejs za pomoc ktrego definiowane s moduy rozszerze (np. 3dsMAX). Jzyki opisu tekstur proceduralnych to specjalizowane narzdzia, ktre uatwiaj zadanie programisty tekstur. Posiadaj: predefiniowane typy (np. opisujce kolor, punkty, wektory) oraz operacje na nich (operacje na wektorach, transformacje wsprzdnych itp.), predefiniowane funkcje matematyczne, definiujce modele cieniowania itp. przenaszalno w przypadku jzykw interpretowanych Wady takich jzykw, to brak moliwoci definiowania wasnych typw, stosowania rekurencji, stosowania wskanikw, uywania operacji wejcia/wyjcia (np. brak obsugi plikw). W Shading Language, uywanym w systemie RenderMan, istnieje moliwo rozszerzenia podstawowego zbioru funkcji (zwanych tam shadeops) o nowe, pisane w jzyku C. Biblioteki takich funkcji mog by uywane z poziomu Shading Language, jednak same funkcje nie mog uywa shadeops ani adnych innych dostarczanych przez renderer danych. Wszystkie dane zwizane z kontekstem aktualnie cieniowanego punktu musz zosta przekazane za pomoc parametrw w czasie wywoania zewntrznej funkcji wewntrz funkcji teksturujcej zdefiniowanej w Shading Language. W ten sposb, mimo ogranicze jzyka teksturowania, istnieje moliwo tworzenia dowolnie skomplikowanych tekstur, wykorzystujcych zoone typy danych oraz operacje wejcia/wyjcia. Istnieje te moliwo wykorzystania uniwersalnych, nie zwizanych z konkretnym systemem do renderingu, bibliotek procedur teksturujcych. Podobnymi moliwociami dysponuje wiele innych systemw. 3dStudioMAX udostpnia obiektowy interfejs C++ sucy do pisania moduw rozszerze. Interfejs moduw rozszerze LightWave, rwnie umoliwiajcy pisanie tekstur proceduralnych, jest zdefiniowany w C. Take w tych przypadkach umoliwia to atw integracj z zewntrzn bibliotek.

2.3.1. Definiowanie bibliotek tekstur proceduralnych


Wiele tekstur proceduralnych uywa podobnych metod do generacji wzorw. Dla konkretnego rodzaju wzorw istnieje zwykle jeden algorytm, ktry do zastosowania w wielu teksturach wymaga jedynie maych modyfikacji. S to tzw. funkcje bazowe tekstur. Najpopularniejsze funkcje bazowe s czsto predefiniowane w systemach do renderingu, inne

13

warto umieci w bibliotece, aby unikn wielokrotnego ich definiowania i zwikszy czytelno nowo powstajcych tekstur. Funkcje bazowe mog by definiowane na rnym poziomie. Najprostszym przykadem takiej funkcji moe by sin(x). Rwnie dobrze jednak mona funkcj bazow nazwa dwuargumentow funkcj generujc dwuwymiarow szachownic: chess(x, y). Idc jeszcze dalej, mona zada, aby funkcja zwracaa urednion warto koloru z pewnej powierzchni, tak, aby unikn aliasingu, np. chess(x, y, dx, dy), gdzie dx, dy to rozmiary prostokta otaczajcego punkt x, y i wyrwnanego do osi zdefiniowanych przez ukad wsprzdnych tekstury s, t. Aby zapewni przenaszalno biblioteki takich funkcji midzy systemami do renderingu naley stosowa si do kilku regu: Funkcje nie mog korzysta z adnych danych ani funkcji, ktre s uywane, bd udostpniane za porednictwem jzyka teksturowania, przez renderer. S dwa tego powody. Po pierwsze, nie jest to zwykle moliwe technicznie (np. w systemie RenderMan funkcje zdefiniowane zewntrznie nie maj dostpu do zmiennych globalnych ani funkcji shadeops). Po drugie, aby zapewni odpowiedni uniwersalno, nie mona stosowa wartoci udostpnianych przez system, poniewa te s zwykle podawane w inny sposb dla kadego programu. Na przykad antialiasing tekstur powierzchniowych jest przeprowadzany w RenderManie przy pomocy wartoci pochodnych powierzchni w punkcie, ktry jest cieniowany ( Du, Dv ), 3dStudioMAX dostarcza bezporednio zakres u i v w ktrym naley policzy kolor redni, LightWave posuguje si pojedyncz wartoci ( spotSize ), natomiast LightWorks potrafi obliczy wielokt, ktry powstaje przez rzut aktualnie obliczanego piksela na cieniowan powierzchni. Nie moemy zakada, jakimi dokadnie moliwociami dysponuje renderer i przy budowie funkcji naley przyj jakie zaoenia. Wynika to z poprzednich spostrzee na temat sposobu realizacji antialiasingu. W celu udostpnienia informacji o kontekcie cieniowania naley zbudowa odpowiedni adapter. Danymi wejciowymi adaptera bdzie kontekst cieniowania systemu renderujcego, danymi wyjciowymi za parametry odpowiednich funkcji zdefiniowanych w bibliotece. Kolejny adapter przyjmie wyniki zwrcone przez funkcj i umieci je w odpowiednich zmiennych systemu.

2.4. Jako tekstur proceduralnych


Ocena jakoci nie jest oczywista ze wzgldu na to, e zwykle wynikiem dziaania funkcji teksturujcej jest obraz, a ocena tego moe by bardzo subiektywna. Wchodz tutaj w gr wraenia estetyczne, na podstawie ktrych trudno zdefiniowa przydatn miar jakoci. Niniejsza praca ma na celu symulacj pewnych zjawisk naturalnych. Najczciej dokadne modele fizyczne s zbyt skomplikowane implementacyjnie bd zbyt zoone obliczeniowo a w zamian stosuje si uproszczone modele, ktrych zdolnoci naladowania zjawisk naturalnych s mocno ograniczone. Oczywist pomoc przy ocenie jakoci, miar, ktra moe zastpi subiektywne estetyczne wraenia, bdzie wic porwnanie zjawisk generowanych z wystpujcymi w naturze. Ocen tekstur przeprowadza si take na podstawie kilku innych parametrw. Dwa z nich to wydajno oraz jako obrazu mierzona iloci znieksztace spowodowanych aliasingiem (prbkowaniem wzorw o czstotliwociach wikszych od czstotliwoci wynikajcej z ograniczenia Nyquista). Wydajno to wany w teksturach proceduralnych czynnik przesdzajcy o ich przydatnoci do uycia. Skomplikowane tekstury zwykle s kosztowne obliczeniowo. W szczeglnoci, czsto uywana funkcja szumu Perlina noise jest stosunkowo wolna. Efektywno dziaania mona poprawi stosujc kilka metod: 14

Obliczanie wartoci niezmiennych. Czsto istniej wartoci, ktre mona obliczy na podstawie parametrw wejciowych, a ktre pozostaj niezmienne w trakcie caego procesu renderingu. Moliwo wykorzystania tego spostrzeenia istnieje w wikszoci dostpnych systemw udostpniajcych interfejs teksturowania proceduralnego. Optymalizacje na poziomie jzyka programowania. Optymalizacje algorytmu. Te optymalizacje s oczywicie zalene od konkretnych tekstur, ale generaln zasad jest stosowanie cacheowania tam, gdzie jest to moliwe. Cz wartoci obliczanych wewntrz funkcji teksturujcej moe by niezmienna dla kilku kolejnych wywoa jeli odbywaj si one dla punktw pooonych blisko siebie (a mona zaoy, e tak jest w wikszoci przypadkw). Czasem warto porwnywa aktualne parametry wejciowe z poprzednimi i w miar moliwoci odzyskiwa wyniki poprzednich oblicze.

Jako wygenerowanego obrazu, a szczeglnie sekwencji obrazw tworzcych animacj, zaley w duej mierze od tego, jak rozwizany zosta w teksturze problem aliasingu. W rzeczywistoci to zagadnienie traktowane jest czsto jako mao istotne. Generalnie metody antialiasingu (czyli przeciwdziaania artefaktom) mona podzieli na: realizowane przez system renderujcym niezalene od funkcji teksturujcej, jak nadprbkowanie, realizowane przez funkcje teksturujce: o redukcja wysokich czstotliwoci w obrazie realizowana za pomoc rozmywania ostrych krawdzi z uyciem staego filtra o adaptacyjna redukcja wysokich czstotliwoci, w ktrej wielko filtra jest uzaleniona od oszacowania wielkoci projekcji piksela do przestrzeni tekstury o antialiasing analityczny, w ktrym oszacowywany jest kolor redni tekstury na obszarze bdcym projekcj cieniowanego piksela do przestrzeni tekstury Algorytmy renderingu potrafi do pewnego stopnia korygowa artefakty powstajce z powodu aliasingu za pomoc technik nadprbkowania, co sprzyja ignorowaniu tego zjawiska na poziomie tworzenia tekstury. Poleganie na nadprbkowaniu prowadzi do kocowej nieefektywnoci mimo tego, e sam algorytm produkcji tekstury bez wbudowanego mechanizmu antialiasingu bdzie najczciej dziaa duo szybciej ni wersja z antialiasingiem. Przyczyn jest to, e aby uzyska obraz dobrej jakoci renderer bdzie najprawdopodobniej nadprbkowywa piksele caego obrazu zamiast tylko te zajte przez tekstur. Ponadto nawet wysoki stopie nadprbkowania moe w pewnych przypadkach nie by wystarczajcy. Tekstury proceduralne obliczaj zwykle kolor powierzchni dla danego punktu w przestrzeni. Stosowanie antialiasingu analitycznego wie si zazwyczaj ze znacznym nakadem obliczeniowym i wymaga dostarczenia przez renderer pewnych dodatkowych informacji o wielkoci obszaru dla ktrego maj si odby obliczenia. Rnica stopnia skomplikowania tekstur generujcych te same wzory z zastosowaniem antialiasingu analitycznego i bez niego czsto jest bardzo dua, na niekorzy tych pierwszych. Mimo tego jednak dodatkowy wysiek woony w implementacj procedur produkujcych wysokiej jakoci antialiasowane obrazy w wikszoci przypadkw jest opacalny. Oprcz ju wymienionych czynnikw wpywajcych na ocen tekstury proceduralnej istnieje jeszcze jeden, ktrego znaczenie byo przez dugi czas niedoceniane a ktry ma bardzo due znaczenie dla tekstur pisanych z myl o udostpnianiu szerokiemu gronu uytkownikw. Jest nim atwo obsugi. atwo obsugi tekstur zaley od ich parametryzacji. Tekstura powinna dawa uytkownikowi du swobod w kontroli efektw, nie przytaczajc jednoczenie nadmiernym skomplikowaniem. Zoono funkcji cieniujcych ronie jednak czsto do tego stopnia, e 15

spotyka si tekstury kontrolowane za pomoc kilkudziesiciu parametrw. Parametry s przewanie wyraane liczbami, ktre niedowiadczonym uytkownikom (czyt.: wszystkim poza autorem procedury) mog sprawia kopoty. Dobranie waciwych wartoci parametrw w takich przypadkach jest trudne, o ile nie zna si algorytmw zastosowanych w konkretnym przypadku i nie wie jak kady z parametrw na nie wpywa. Poniewa korzysta maj z tekstur ludzie, ktrzy nie chc powica wiele czasu na poznawanie fizycznych czy jakichkolwiek innych podstaw dziaania procedury (czsto bd to artyci, nie majcy wielkiego pojcia o zasadach dziaania technik proceduralnych), to parametry powinny by intuicyjne i nie powinno ich by wiele. Problem polega na tym, e redukujc liczb parametrw tracimy elastyczno procedury. Posugujc si za Kentonem Musgrave [T&M 1998] pojciem wielowymiarowej przestrzeni estetycznej, mona powiedzie, e tracimy kolejne stopnie swobody. Aby pogodzi atwo obsugi z zachowaniem odpowiedniej elastycznoci czsto ukrywa si przed uytkownikiem cz parametrw przyjmujc jakie ustalone wartoci i dostarczajc procedur w kilku wersjach. Jeli nadto algorytm posuguje si mao intuicyjnymi parametrami, mona je zastpi takimi, ktre odpowiadaj intuicji i konwertowa wewntrz procedury (zastpujc na przykad kilka parametrw majcych wpyw na ilo detali jednym, opisanym jako stopie szczegowoci). Powysze kryteria ocena zostan zastosowane w czasie projektowania tekstur oraz do ich kocowej oceny.

16

3. Przegld stosowanych metod symulacji zjawisk naturalnych


W tym rozdziale przedstawione zostay fotografie wzorw wystpujcych w naturze oraz rne podejcia do ich symulacji, bd to uzasadnionej fizycznie, bd opartej tylko na wraeniach estetycznych. Informacje zawarte w rozdziale stanowiy punkt wyjcia do opracowania metod symulacji dajcych realistyczne obrazy zjawisk podobnych do opisywanych.

3.1. Kategorie tekstur proceduralnych rozwaane w pracy


Tekstury proceduralne mog by tworzone dwoma sposobami: implicit i explicit. W przypadku explicit funkcja generuje cay obraz, stosujc dowoln kolejno tworzenia kolejnych pikseli. Funkcje implicit odpowiadaj natomiast na pytanie o jaki konkretny punkt. W przypadku tekstur, ktre s obliczane w trakcie renderingu (tzn. przed renderingiem nie znamy ich pooenia na wynikowym obrazie, nie moemy wic okreli stopnia szczegowoci ani rozmiarw tekstury) najlepszym rozwizaniem s wanie tekstury implicit. Definicja explicit wymagaaby prawdopodobnie wygenerowania caej tekstury przed rozpoczciem renderingu i zapamitania jej. Kolejno pikseli tekstury o jakie renderer pytaby byaby bowiem najczciej rna od kolejnoci w jakiej generuje je funkcja. Tutaj interesowa nas bd jedynie tekstury generowane w sposb implicit. Tekstury proceduralne pozwalaj na symulacj bardzo szerokiego zakresu zjawisk naturalnych, od struktury drewna, kamienia naturalnego (marmury, granity), po chmury, ogie, wod. W tej pracy zajm si pewnym podzbiorem tekstur proceduralnych. Przykadami interesujcych mnie wzorw s kamienne mury, wzory powstajce na skrze niektrych zwierzt (yrafy, w, due koty gepard, jaguar, leopard, ocelot) (Rysunek 3-1 Wzory na skrze zwierzt), skra ludzka, zmity papier (Rysunek 3-2), kora drzew(Rysunek 3-3), styropian, piana, struktura gbki (Rysunek 3-4), kamienie naturalne, mury kamienne, wzory tworzce si na wyschnitej ziemi (Rysunek 3-5), cienie kaustyczne rzucane przez wod(Rysunek 3-6), inne, abstrakcyjne wzory (Rysunek 3-7). Cech wspln tych wzorw jest sposb, w jaki dziel przestrze. Zarwno wzory na yrafie jak kora niektrych drzew dziel powierzchni na komrki o mniej lub bardziej regularnych ksztatach. Podobnie z pozostaymi przykadami. Funkcje produkujce wzory tego typu to tekstury komrkowe.

17

jaguar

leopard

ocelot

pantera

w
Rysunek 3-1 Wzory na skrze zwierzt

yrafa

skra
Rysunek 3-2 Skra i papier

zmity papier

18

Rysunek 3-3 Kora i drewno

piana styropian

piana na powierzchni piwa


Rysunek 3-4 Piana i styropian

gbka symulacja

19

kamienny mur

kamienny mur

spkana powierzchnia wyschnitej ziemi

kra lodowa

Rysunek 3-5 Kamienne mury, wyschnita ziemia, kra

Rysunek 3-6 Cienie kaustyczne rzucane przez wod

Rysunek 3-7 Wzory abstrakcyjne

20

3.2. Techniki zaawansowane


Poniej przytaczam wyniki bada nad zjawiskami, ktre mog by symulowane za pomoc tekstur komrkowych. Szereg podej wzorowao si na fizycznych podstawach powstawania wzorw (teorie Reaction-Diffusion oraz Cell Division powstawania wzorw na skrze ssakw), pozostae, o ile wiadomo, nie maj nic wsplnego z rzeczywistymi procesami.

3.2.1. Szum Perlina


Najwiksz rewolucj w symulacji naturalnych zjawisk przy pomocy teksturowania proceduralnego byo wprowadzenie w 1985 przez Kena Perlina funkcji generujcej szum (tzw. Perlin noise), ktrej charakterystycznymi cechami s: powtarzalno (dla okrelonych parametrw ma zawsze t sam warto) ograniczenie wartoci do przedziau [-1, 1] skoczona czstotliwo (maksymalna czstotliwo rwna 1) W odrnieniu od szumu Perlina, szum biay nie ma ograniczenia czstotliwoci, nie jest te powtarzalny. Dla teksturowania proceduralnego jest praktycznie bezuyteczny. Pierwszym powodem jest to, e wzory wygenerowane za jego pomoc byyby za kadym razem inne. Niemoliwe staoby si odtworzenie wzoru, a co za tym idzie generowanie animacji ani rnych widokw tego samego obiektu. Drugim, fakt, e biay szum wprowadza nieskoczon liczb szczegw. Uniemoliwioby to przeprowadzenie antialiasingu, poniewa prbkowanie nigdy nie mogoby mie wystarczajcej czstotliwoci. Oryginalny szum Perlina jest implementowany jako funkcja interpolujca midzy losowymi wartociami generowanymi w wzach wielowymiarowej dyskretnej siatki. Perlin noise jest narzdziem wykorzystywanym przy bardziej zaawansowanych algorytmach i jako taki jest podstaw wikszoci tekstur proceduralnych. Pozwala na symulacj zjawisk, ktre maj charakter fraktalny, czy takich, gdzie mona zaobserwowa naoone na siebie wzory o rnych wielkociach. Wikszo zjawisk naturalnych, czy to ruch gazi na wietrze czy struktura chmur bd kamienia, ma wanie charakter fraktalny. Rysunek 3-8 przedstawia kilka zjawisk, ktrych podstaw jest fraktalna wersja Perlin noise. Na Rysunek 3-9 wida wykorzystanie szumu do znieksztacenia powierzchni obiektu.

Rysunek 3-8 Zastosowanie szumu Perlina do generacji tekstur. Od lewej: powierzchnia planety, szum jako funkcja przeczajca, marmur, drewno.

21

Rysunek 3-9 Ken Perlin. Szum uyty z technik odwzorowania nierwnoci do wizualizacji nierwnoci powierzchni.

Ze pomoc tej metody nie mona wygenerowa wikszoci wzorw komrkowych, jednak z powodzeniem mona jej uywa do produkcji np. granitu, czy powierzchni styropianu, widzianych z dostatecznie duej odlegoci (tzn. takiej, z ktrej nie mona dostrzec wyranych szczegw).

3.2.2. Wzory kamiennych murw


K. Miyata na konferencji SIGGRAPH 1990 zaprezentowa metod generacji tekstur przypominajcych kamienne mury. Jego metoda produkuje tekstury powierzchniowe (zdefiniowane w przestrzeni st obiektu). Obliczany jest kolor oraz odchylenie normalnej wizualizujce nierwnoci powierzchni (bump mapping). Miyata zauway, e do stworzenia tekstury muru potrzebne s dwa modele: struktura pocze midzy kamieniami oraz tekstura pojawiajca si na kamieniach. W ten sposb wyodrbni dwa etapy produkcji tekstury. W pierwszym, na podstawie parametrw okrelajcych redni wielko kamieni, ich zrnicowanie oraz sposb rozoenia na powierzchni generuje wzr imitujcy poczenia midzy kamieniami. W ten sposb powierzchnia zostaje podzielona na nieregularne komrki (Rysunek 3-10). Drugi etap polega na naoeniu tekstury kamienia, wygenerowanej przy pomocy fraktalnej turbulencji. Dla kadej komrki parametry tekstury (kolor, stopie szczegowoci) nieznacznie si rni, w ten sposb obraz nabiera wikszego realizmu (Rysunek 3-11).

Rysunek 3-10 K. Miyata poczenia midzy kamieniami muru

Rysunek 3-11 K.Miyata tekstura muru

Rozwizanie Miyaty posiada cztery podstawowe wady: Tekstura jest zdefiniowana na powierzchni, wic jest naraona na znieksztacenia zwizane z przeksztaceniami do dwuwymiarowej przestrzeni parametrw tekstury st. Nie jest moliwa poprawna wizualizacja styku oddzielnych powierzchni (dla ktrych odwzorowanie w przestrze s,t jest zdefiniowane oddzielnie). Jest to widoczne na Rysunek 3-12 na rogu budynku kamienie na ssiednich cianach s od siebie niezalene, gdy tymczasem po obu stronach powinny by widoczne czci tych samych kamieni. Dwuetapowy sposb generacji tekstury wymaga znacznego nakadu oblicze przed rozpoczciem renderingu.

22

Generacja struktury pocze odbywa si w sposb explicite, wic dla ustalonej wielkoci i szczegowoci muru. Miyata nie przedstawia innych zastosowa tej techniki, wic jej uniwersalno nie jest dua.

Rysunek 3-12 K. Miyata Edo Castle. Zastosowanie techniki generowania powierzchniowej tekstury muru.

3.2.3. Wzory na skrze ssakw Reaction - Diffusion


ReactionDiffusion to proces, opisany po raz pierwszy przez Alana Turinga (1952), w ktrym dwa lub wicej zwizkw chemicznych (zwanych morfogenami, ang. morphogenes) rozpraszaj si na powierzchni i reaguj ze sob produkujc stabilne wzory. Dyfuzja i reakcje s opisane za pomoc ukadu nieliniowych rwna rniczkowych czstkowych. W systemie ReactionDiffusion musz zawsze wystpowa przynajmniej dwa morfogeny, rnice si prdkociami dyfuzji. Jedna z tych substancji musi by ponadto zdolna do zwikszania szybkoci produkcji. Pozostae substancje pomagaj lub usiuj zahamowa ten proces. ReactionDiffusion moe generowa rnorodne wzory zoone z plam lub pasw, przypominajce te spotykane na skrze ssakw (koty, zebry). Biologowie s zdania, e cz wzorw spotykanych w naturze moe by wanie wynikiem procesw symulowanych za pomoc ReactionDiffusion, jednak nie zostao to dotychczas udowodnione. Jako pierwszy zaimplementowa ReactionDiffusion Greg Turk [Turk 1991]. Jego metoda umoliwia tworzenie wzoru bezporednio na modelu geometrycznym. Przebiega ona w kilku fazach: 1. Powierzchnia modelu dzielona jest na komrki o zblionych polach

23

2. Kadej komrce przypisywana jest pocztkowa zawarto morfogenw i przeprowadzana jest symulacja ReactionDiffusion. W trakcie symulacji zawartoci substancji w komrkach zmieniaj si zgodnie z zasadami dyfuzji (przechodzenie zwizkw do komrek zawierajcych mniejsze ich stenia) oraz reakcji (na przykad wysoka zawarto pewnego zwizku chemicznego moe spowodowa zniszczenie zwizku, ktry wystpuje w mniejszym steniu). 3. Po zakoczeniu symulacji i uzyskaniu stabilnych zawartoci morfogenw, koncentracja jednego z nich decyduje o zabarwieniu komrki. Kocowy kolor w kadym punkcie jest kolorem rednim ssiadujcych komrek. Systemy ReactionDiffusion produkuj z reguy bardzo proste wzory (Rysunek 3-13, grny rzd). Turk wprowadzi moliwo generacji take bardziej skomplikowanych wzorw (np. wzr rozetkowy leoparda, siatka na yrafie, wzory na wach, rybach) stosujc szereg systemw. Pierwszy system tworzy wzr wyjciowy. Pewne komrki zostaj zablokowane (tzn. zawarto zwizkw chemicznych w nich nie moe si ju zmienia) i przeprowadzana jest kolejna symulacja, ktra wprowadza dodatkowe szczegy. Teraz znowu pewne komrki mog zosta zablokowane i proces moe by powtarzany. Przykady wzorw powstaych w ten sposb widoczne s na Rysunek 3-13 (dolny rzd).

Rysunek 3-13 G. Turk. Wzory wyprodukowane za pomoc nakadania kilku systemw reaction diffusion.

Rysunek 3-14 G. Turk. Wzory reaction diffusion na obiektach

24

Problemem zwizanym z systemami ReactionDiffusion ograniczajcym ich szerokie zastosowanie jest dua ilo parametrw. Uzyskanie podanego wzoru nie jest dziki temu zadaniem trywialnym. Nie istnieje te jeden model ReactionDiffusion pozwalajcy na uzyskanie wszystkich wzorw. Do generacji wzorw przypominajcych ctki stosowany jest przez Turka inny model ni do generacji paskw zebry. Z kolei dopiero poczenie obydwu modeli pozwala na stworzenie wzoru skry yrafy. ReactionDiffusion s take bardzo wymagajce obliczeniowo. Zoono obliczeniowa zaley od iloci komrek na ktrych przeprowadzana jest symulacja, a skada si na ni gwnie symulacja numeryczna ukadu rwna rniczkowych czstkowych (w rozwizaniu Turka dodatkowe koszty wnosz podzia powierzchni na komrki oraz obliczanie wynikowego koloru z przylegych komrek).

Cell Division
Walter zaproponowa model Cell Division [Walter 1998]. Jest to nastpny model inspirowany obserwacjami biologicznymi. W ReactionDiffusion kolor jest kontrolowany za pomoc zwizkw chemicznych, w Cell Division wzory odzwierciedlaj sposb uoenia komrek. Kolory wosw s rezultatem rnych typw komrek. Ten model zosta stworzony do generacji powtarzajcych si ctkowanych wzorw wystpujcych w przypadku kilku gatunkw ssakw (due koty, zebry i yrafy). Oto zaoenia algorytmu: 1. Pocztkowo model pokrywany jest komrkami 2. Komrki rni si liczb pochodnych lub szybkoci reprodukcji 3. Komrki, ktrym przypisane s ciemniejsze kolory maj wiksz prdko reprodukcji ni te janiejsze 4. Komrki mog zmienia swj rodzaj (kolor). Ilo zmian moe by ograniczona. 5. Nowo podzielone komrki rozszerzaj si tak, aby kada moga zaj tak sam powierzchni, jak poprzednio Atrakcyjno tego podejcia polega na tym, e w ten sposb mona wygenerowa du liczb wzorw zwierzcych stosujc niewielk liczb parametrw. Jest to dua zaleta w porwnaniu z Reaction-Diffusion. Walter w swoim referacie opisuje system, w ktrym uywa 2 parametrw do produkcji wzorw wikszoci zwierzt z rodziny kotw. Do produkcji ctkw jaguara i leoparda (tzw. rozety, ang. rosette) Walter uywa dodatkowych 5 parametrw. Parametry te s jednak mao intuicyjne podobnie jak w przypadku Reaction-Diffusion trudno je dobra tak, aby otrzyma wzr jakiego konkretnego zwierzcia. Ich wpyw na wynikowy wzr jest trudny do przewidzenia, a co za tym idzie przydatno samej metody maleje. Trzeba przyzna, e efekty s zaskakujco dobre dla zwierzt nalecych do rodziny kotw, oraz dla yraf (Rysunek 3-15). Podane przez autorw wyniki numerycznych porwna wzorw wygenerowanych z naturalnymi pokazuj 7% bd.
skra naturalna wzr wygenerowany

jaguar

25

gepard (wzr rozetkowy)

yrafa
Rysunek 3-15 M. Walter. Tekstury wygenerowane metod Cell Division i ich naturalne odpowiedniki.

Implementacja opisana przez Waltera i Fourniera w [Walter 1998] ogranicza si do produkcji kwadratowych tekstur powierzchniowych.

Podsumowanie
Istnieje jeszcze wiele modeli tumaczcych powstawanie wzorw na skrach zwierzt. Model mechaniczno-chemiczny wyjania powstawanie wzorw siami dziaajcymi na komrki. Wzory ssakw s take generowane za pomoc automatw komrkowych. Wszystkie wspomniane metody generowania wzorw na skrze ssakw uywaj podstaw, ktre s uwaane za zgodne z naturalnymi (a przynajmniej za prawdopodobnie zgodne). Wynikajcy std sposb dziaania algorytmw praktycznie dyskwalifikuje je w naszych zastosowaniach. Zarwno Reaction-Diffusion, Cell Division jak i pozostae metody dziaaj w sposb explicite, ewoluujc wzr przed rozpoczciem renderingu. Turk w swojej implementacji Reaction-Diffusion unika rzutowania paskiego obrazu na model przeprowadzajc proces ewolucji tekstury na samej geometrii. To oczywicie podwysza jako wynikw, ale wprowadza dodatkowe koszty obliczeniowe (podzia geometrii na komrki). Wprowadza take dodatkowe wymagania co do systemu, w ktrym przeprowadzany jest rendering. Renderer musi by bowiem zdolny do dostarczenia geometrii teksturowanego modelu. Zarwno Reaction-Diffusion, jak i Cell Division s bardzo wymagajce obliczeniowo. Przykadowe tekstury autorw generowane byy na wysokiej wydajnoci wieloprocesorowych maszynach.

3.2.4. Komrkowe funkcje bazowe tekstur (cellular texture basis function)


Worley zaproponowa realizacj komrkowej funkcji bazowej, ktra daje moliwoci generacji dosy szerokiego zakresu tekstur. Autor wykorzysta j do symulacji nieregularnych powierzchni przypominajcych pyty, skry, zmitego papieru, lodu, ska, powierzchni pokrytych grami i kraterami. Rysunek 3-16 pokazuje przykad wykorzystania komrkowej funkcji bazowej do generacji tekstury przypominajcej kamienny mur.

26

Rysunek 3-16 S. Worley Przykad wykorzystania komrkowej funkcji bazowej

Funkcja nie posiada wad rozwizania Miyaty, to znaczy nie wymaga dugiej fazy oblicze wstpnych i nie przeprowadza oblicze w sposb explicite. Jest take wydajna i stosunkowo nieskomplikowana. Dziaanie funkcji jest oparte na podziale przestrzeni wedug diagramu Voronoi. Majc dany zbir S n punktw przestrzeni R d , diagram Voronoi jest podziaem przestrzeni R d na n wielociennych obszarw vo( p), p S . Kady obszar vo( p) , zwany komrk Voronoi, jest zdefiniowany jako zbir punktw w R d , ktre s od p w odlegoci mniejszej ni kady inny punkt nalecy do S [Fukuda 2000]. vo( p) = {x R d | dist ( x, p ) dist ( x, q)q S p} Rysunek 3-17 przedstawia przykadowy diagram Voronoi w przestrzeni R 2 .

Rysunek 3-17 Diagram Voronoi

Sposb dziaania funkcji komrkowej Worleya dla R 3 : Przestrze dzielona jest na kostki. Podzia przestrzeni na kostki suy dalej optymalizacji poszukiwa n najbliszych punktw. W kadej kostce umieszczana jest w losowych pozycjach pewna ilo punktw (ilo punktw jest obliczana na podstawie prawdopodobiestwa o rozkadzie 27

Poissona, liczba losowa jest otrzymywana na podstawie wsprzdnych kostki (i, j, k)). Zbir wszystkich wylosowanych punktw to S Obliczanie wartoci funkcji dla punktu X: o Obliczanych jest n punktw nalecych do S lecych najbliej X o W zalenoci od potrzeb zwracany jest identyfikator n-tego najbliszego punktu, kierunek do niego itp.

Worley eksperymentuje z rnymi funkcjami oceniajcymi odlego punktu X od punktw nalecych do S . Funkcja wynikajca z definicji diagramu Voronoi poszukuje pierwszego najbliszego punktu uywajc metryki Euklidesowej. Autor podaje przykady zastosowania innych funkcji, np. Fn podajc n-ty najbliszy punkt, oraz kombinacje liniowe rnych funkcji Fn . Przykady tych eksperymentw znajduj si na Rysunek 3-18.

Rysunek 3-18 S. Worley - Przykady tekstur uzyskanych dziki zastosowaniu rnych kombinacji liniowych funkcji Fn

Funkcje bazowe Worleya daj moliwo atwej rozbudowy. Mog by, podobnie jak szum Perlina, atwo skadane z innymi funkcjami (np. pooenie punktw nalecych do S moe by kontrolowane za pomoc innych funkcji teksturujcych, albo te wyjcie funkcji komrkowych moe by wykorzystywane przez inne funkcje teksturujce) oraz nakadane warstwami. Mona te wyobrazi sobie zastosowanie innych ni wedug diagramu Voronoi, podziaw przestrzeni. Metoda Worleya doczekaa si wielu implementacji (np. [Legakis]). Sposb generacji tekstur komrkowych Worleya zosta zaadoptowany przez Jamesa M. Kukla i Edwarda J. Bedwell ([Kukla]) do produkcji realistycznych wzorw skry. Przeksztacili oni oryginalne funkcje dzielce przestrze uzyskujc bardzo dobre wyniki symulacji m.in. naskrka ludzkiego. Wyniki niektrych ich prac znajduj si na Rysunek 3-19.

28

Rysunek 3-19 J. Kukla - Tekstury skry.

3.2.5. Podsumowanie
Z reguy te metody generacji, ktre uywaj podstaw fizycznych s w stanie tworzy ograniczon liczb wzorw. Nam chodzi o symulacj szerokiego krgu zjawisk fizycznych, ktrych jedynymi wsplnymi cechami s waciwoci wizualne podzia przestrzeni na komrki. Reaction-diffusion oraz Cell Division osigaj bardzo dobre wyniki w symulacji skry zwierzt. Autorzy mwi o innych potencjalnych zastosowaniach, ale nie podaj adnych konkretnych rezultatw. Przede wszystkim za te algorytmy dziaaj w sposb explicite i s mao wydajne. Pozostae sposoby generacji tekstur, czyli szum Perlina, metoda Miyaty oraz tekstury komrkowe Worleya nie tumacz podstaw powstawania adnych zjawisk. Miyata pokazuje jednak bardzo ograniczone zastosowanie swojej techniki. Techniki mao wydajnej i rwnie nie speniajcej oczekiwa stawianych przed tworzonym systemem. Szum Perlina bdzie wykorzystywany na pewno jako funkcja skadana z innymi. Sam nie jest jednak wystarczajcy, poniewa nie jest w stanie produkowa wikszoci wzorw komrkowych. Najbardziej obiecujce, bo posiadajce najszersze moliwoci zastosowania i rozbudowy wydaj si funkcje Worleya. Przykady podane przez autora oraz inne, ktre bazuj na tym sposobie podziau przestrzeni udowadniaj, e lista moliwych do uzyskania efektw jest duga. Funkcje te s stosunkowo wydajne i atwo poddaj si optymalizacji (przez obliczanie pewnych wartoci przed rozpoczciem renderingu, zastosowanie cache, itp.).

3.3. Dostpne komercyjnie biblioteki do tworzenia wzorw proceduralnych


Istnieje szereg bibliotek produkujcych tekstury proceduralne, jednak wikszo z nich to produkty komercyjne. Poniej przedstawiam dwie wybrane implementacje: LIBTEX oraz PixelLoom.

LIBTEX
LIBTEX [Walter 1992] to niezaleny od aplikacji zbir funkcji umoliwiajcych zastosowanie technik teksturowania w systemach do renderingu. Zakres obsugiwanych efektw jest bardzo may (istniej 3 rodzaje tekstur przestrzennych), aczkolwiek biblioteka moe by rozbudowywana. Architektura biblioteki jest bardzo prosta system dostarcza wsprzdnych punktu, ktry jest aktualnie cieniowany, a na jego podstawie obliczany zostaje kolor wynikowy. Sposb ewaluacji tekstur przestrzennych pokazuje Diagram 3-1.

29

Diagram 3-1 LIBTEX ewaluacja tekstur przestrzennych

W przypadku tekstur proceduralnych LIBTEX nie korzysta z adnych dodatkowych informacji o kontekcie cieniowania. Biblioteka przeprowadza te, co prawda, odwzorowanie nierwnoci powierzchni, gdzie korzysta z wartoci normalnej do cieniowanej powierzchni, jednak ta operacja oraz teksturowanie 2D nie wykorzystuj technik proceduralnych, a jedynie tradycyjne tekstury w postaci obrazw 2D lub map nierwnoci. LIBTEX przeprowadza prbkowanie punktowe. Nie posiada moliwoci antialiasingu tekstur.

PixelLoom
To najbardziej interesujca, bo posiadajca najwiksze moliwoci, biblioteka. Jest ona jednak produktem komercyjnym, dlatego nie ma na temat jej architektury ani sposobu dziaania wielu informacji. Rysunek 3-20 przedstawia obraz wygenerowany przy uyciu tekstur proceduralnych wchodzcych w skad biblioteki.

Rysunek 3-20 Obraz wygenerowany przy pomocy biblioteki PixelLoom

30

PixelLoom jest bibliotek suc jako baza do budowy aplikacji generujcych tekstury fotorealistyczne. Miaa si pod postaci TextureGenerator ukaza jako modu rozszerzenia do 3D Studio MAX, Lightwave i SoftImage. Nie wiadomo jednak jakimi moliwociami integracji z systemami do renderingu dysponuje. PixelLoom jest wykorzystywany przez kilka programw do generacji paskich tekstur. Jednym z nich jest CorelTEXTURE. CorelTEXTURE umoliwia tworzenie tekstur za pomoc techniki nakadania kolejnych warstw. Kada z warstw jest generowana przez jeden z wbudowanych algorytmw. Z interesujcej nas grupy zjawisk mona tam znale algorytm Komrki generujcy wiele rodzajw prostych tekstur komrkowych. Rysunek 3-21 przedstawia przykady moliwych do uzyskania efektw. CorelTEXTURE generuje jedynie paskie tekstury.

papier

chropowaty kamie

kamienie

wzr abstrakcyjny

Rysunek 3-21 Przykady tekstur komrkowych wygenerowanych za pomoc CorelTEXTURE

Podsumowanie
Wikszo bibliotek tekstur jest zorientowana na konkretny system do renderingu. Przykadami s IFW Procedural Textures (http://www.shaders.org) duy zbir tekstur dla LightWave/Inspire Shades project (http://amber.rc.arizona.edu/lw/shades/) zbir tekstur dla LightWave, gwnie konwertowane z shaderw RenderMan RenderMan Repository (http://www.renderman.org) - zbir procedur teksturujcych pisanych w jzyku Shading Language 31

Wynika to z rnic midzy interfejsami proceduralnymi, ktre wystpuj midzy systemami. Uycie biblioteki z kadym nowym systemem wymaga stworzenia interfejsu poredniczcego adaptujcego bibliotek do konkretnego systemu. Pociga to za sob dodatkow komplikacj algorytmw i moe pocign spadek wydajnoci.

32

4. Metody i techniki wykorzystane w pracy


Rozdzia ten opisuje sposb generacji tekstur proceduralnych, jakiego uyto w trakcie bada. Definiuje pojcie funkcji bazowej, metody ich skadania oraz konkretne algorytmy i implementacje funkcji uywanych dalej do produkcji ciekawych wzorw proceduralnych. W szczeglnoci omawiane s metody oparte na definicji szumu wg. Perlina, podziale przestrzeni wg. diagramu Voronoi oraz ich proponowane rozszerzenia do wersji fraktalnych i wykorzystujcych rne metryki.

4.1. Funkcja teksturujca jako zoenie funkcji bazowych


Funkcja teksturujca wyznacza pewne atrybuty cieniowanej powierzchni. Jako wejcie otrzymuje parametry kontekstu wejciowego, a obliczone atrybuty umieszcza w kontekcie wyjciowym. W przypadku biblioteki TexLib jest ona zbiorem tzw. funkcji bazowych tworzcych pewien algorytm cieniujcy. Mona wic powiedzie, e system generacji tekstur opisany w tej pracy umoliwia tworzenie wzorw za pomoc skadania pewnych funkcji bazowych. Funkcje bazowe mog implementowa algorytmy o rnym poziomie zoonoci, od prostych funkcji czsto uywanych w grafice komputerowej, jak sin(x), fmod(a, x), po bardziej skomplikowane funkcje szumu Perlina i inne wielowymiarowe (posiadajce wiksz liczb parametrw) i majce wiele wyj (parametrw wyjciowych). Funkcja bazowa jest okrelona pewnymi parametrami wejciowymi oraz produktami w postaci wyj. Kade z wej oraz wyj funkcji bazowej posiada swj identyfikator, typ oraz warto domyln. Na przykad, specyfikacja funkcji Checker jest przedstawiona w Tabela 4-1. Dalej, w opisach konkretnych algorytmw, specyfikacja suy prezentacji podstawowych waciwoci danej funkcji i moe by wykorzystywana jako szybkie przypomnienie efektw dziaania i sposobu jej wykorzystania.
Checker

Funkcja przypisujca punktowi P jeden z dwch podanych kolorw. Tworzy wzr trjwymiarowej szachownicy.

identyfikator parametru
P scale white black color

typ Point Vector Color Color Color

warto domylna (0, 0, 0)

opis

WEJCIA punkt w przestrzeni, dla ktrego obliczy kolor skala wzoru (wartoci > 1 powoduj zmniejszenie wzoru, (1, 1, 1) wartoci <1 jest powikszenie) (1, 1, 1) kolor pl parzystych (0, 0, 0) kolor pl nieparzystych WYJCIA kolor dla podanego punktu P
Tabela 4-1 Specyfikacja funkcji Checker

33

Skadanie funkcji bazowych odbywa si przy zastosowaniu pewnych regu: 1. Kademu z wej mona przypisa wyjcie innej funkcji bazowej jeli jest ono tego samego typu. Niech bd dane funkcje bazowe F i G takie, e
(o1, o2, ..., on) = F(p1, p2, ..., pn) o = G(pg1, pg2, ..., pgn), p1, p2, ..., pn parametry wejciowe, o, o1, o2, ..., on wyjcia wartoci produkowane przez funkcj

gdzie:

Wtedy przypisanie wyjcia funkcji G i-temu wejciu funkcji F mona zinterpretowa jako zoenie funkcji w ktrym uzyskujemy nastpujc posta funkcji F:
(o1, o2, ..., on) = F(p1,...,p(i-1), G(pg1, pg2, ..., pgn), ...,pn)

Na przykad, niech Checker bdzie okrelona jako


checker(P, scale, white, black)

Wtedy wyjcie grnej funkcji Checker na Rysunek 4-1 A mona zapisa


checker1( P1, scale1, checker2(P2, scale2, white2, black2), checker3(P3, scale3, white3, black3) ),

przy czym white3 i black3 mog by produktami jakich innych funkcji bazowych, natomiast white2 i black2 s wartociami domylnymi. 2. Wejcie bez przyporzdkowanego wyjcia innej funkcji bazowej ma warto sta rwn jego wartoci domylnej. 3. Po trzecie, jeli przyjmiemy, e funkcje bazowe to zbir wzw V grafu G=(V, E), a poczenia parametrw wejciowych z wyjciowymi s zbiorem jego krawdzi E, przy czym poczenie z dowolnym wejciem lub wyjciem funkcji bazowej f jest traktowane jak poczeniem z t funkcj to G musi by grafem zorientowanym, acyklicznym. Poprawne jest zatem poczenie na rysunku Rysunek 4-1 A, natomiast przypadek B jest niepoprawny i niemoliwy do obliczenia ze wzgldu na cykl prosty.

A Poprawny graf pocze midzy funkcjami

B Bdny graf pocze midzy funkcjami (cykl zaznaczony na czerwono)

Rysunek 4-1 Przykady pocze midzy funkcjami bazowymi

Kade wejcie i wyjcie moe by opisane jednym ze zdefiniowanych typw. Tabela 4-2 zawiera opisy wszystkich dostpnych typw.

34

nazwa typu Int Float Point Vector Color ColorArray FloatArray

charakterystyka

warto cakowita warto zmiennoprzecinkowa wsprzdne punktu, tablica 3 wartoci typu Float wektor, tablica 3 wartoci typu Float kolor RGB, tablica 3 wartoci typu Float (r, g, b), przy czym r, g, b le w przedziale [0..1] tablica wartoci typu Color tablica wartoci typu Float

Tabela 4-2 Typy parametrw wejciowych/wyjciowych funkcji bazowych

4.2. Drzewa cieniowania


Grafy okrelone w poprzednim punkcie stanowi drzewa cieniowania. Drzewo cieniowania moe modyfikowa jeden lub wiele z parametrw cieniowanej powierzchni. To, jakie parametry mog by zmienianie, jest w pewnym stopniu uzalenione od konkretnego systemu renderujcego. Maksymalny zestaw parametrw powierzchni moliwych do modyfikacji jest okrelony i zaimplementowany w abstrakcyjnej funkcji bazowej o nazwie OutContext jako jej wejcia. Cz systemw do renderingu moe nie udostpnia moliwoci modyfikacji wszystkich okrelonych tam parametrw. Potrzebne do ewaluacji drzewa parametry (kontekst cieniowania dla kadej obliczanej przez system renderujcy prbki obrazu) mog by pobierane z wyj abstrakcyjnej funkcji InContext, ktra z kolei pobiera je z systemu do renderingu. Funkcje OutContext i InContext s nazywane abstrakcyjnymi, poniewa s interpretowane przez konkretny system do renderingu. Nie jest take moliwe ich dodawanie do drzewa cieniowania zakada si, e w drzewie istniej zawsze pojedyncze instancje tych funkcji (tzn. puste drzewo cieniowania zawiera konteksty). Konkretne zmienne stanu kontekstu cieniowania biblioteki TexLib zostay ustalone na podstawie kilku systemw do grafiki fotorealistycznej. Dokadny ich opis mona znale w punkcie 5.5.5.

4.3. Opis zaimplementowanych algorytmw


Poniej opisane s zaimplementowane algorytmy oraz odpowiadajce im w bibliotece funkcje bazowe uywane dalej do produkcji wzorw proceduralnych. Opisy zawieraj take szczegy implementacyjne oraz metody usprawnienia i antialiasingu.

4.3.1. Odwzorowanie nierwnoci powierzchni


Specjaln funkcj jest funkcja CalculateNormal modyfikujca (zakcajca) wektor normalny do paszczyzny majc dan funkcj wysokoci. Jest uywana do odwzorowania nierwnoci powierzchni (ang. bump mapping) w systemach, ktre nie udostpniaj rzeczywistego znieksztacania powierzchni. Tabela 4-3 prezentuje specyfikacj tej funkcji.
CalculateNormal

Funkcja obliczajca zmodyfikowany wektor normalny do paszczyny majca dan funkcj wysokoci. Uwaga: Funkcja wymusza obliczenie wartoci height_func kilkukrotnie, przez to wszystkie wzory poczone w drzewie cieniowania pod wykorzystujcy je parametr height_func bd ewaluowane kilka razy dla rnych wartoci punktu P.

35

identyfikator parametru

typ

warto domylna

opis

sample P N height_fu nc amp_scale

Sample Point Vector Float Float Vector

(0, 0, 0) (0, 0, 1) 0

WEJCIA Parametry cieniowanego punktu (opis patrz punkt...). Uwaga: System wykorzystujcy bibliotek musi poprawnie wypeni struktur sample. Nie wszystkie systemy udostpniaj potrzebne informacje. punkt w przestrzeni, dla ktrego obliczy kolor normalna do paszczyzny w punkcie cieniowania funkcja wysokoci

Amplituda nierwnoci. Im wiksza tym bardziej odchylane 0.1 s normalne tym wyraniejsze nierwnoci na paszczynie. WYJCIA Nowy wektor normalny do paszczyzny

Tabela 4-3 Specyfikacja funkcji bazowej CalculateNormal

Obliczenie normalnej opiera si na geometrii przedstawionej na Rysunek 4-2.


V U D

DPdv DPdu

Rysunek 4-2 Geometria odwzorowania nierwnoci powierzchni

Na rysunku: N normalna do paszczyzny N zmodyfikowana normalna dPdu, dPdv pochodne punktu w kierunkach osi parametrw u, v paszczyzny Majc dan funkcj wysokoci height_func, wektory U oraz V s obliczane jako height _ func P (N ) U = u v height _ func P V = (N ) v u Wektor U ley wic w tej samej paszczynie co dPdu, a jego dugo jest rwna zmianie height_func w kierunku wektora u. Wektor V ley w paszczynie dPdv i ma dugo rwn zmianie height_func w kierunku v. Suma tych dwch wektorw daje odchylenie D. Nowa warto N = N+D.

36

height _ func height _ func oraz funkcja oblicza wartoci height_func u v w punkcie P, oraz punktach P + u * i P + v * .
Aby zbada wartoci Do renderingu obrazka widocznego w metryce funkcji uyto realistycznego modelu owietlenia. Ciekawostk jest, e mona osign interesujce efekty pseudo-owietlenia traktujc kierunek normalnej jako kolor. Rysunek 4-3 jest przykadem takiego zastosowania funkcji CalculateNormal.

Rysunek 4-3 Pseudo model owietlenia

4.3.2. Szum Perlina Algorytm


W punkcie 3.2.1 zostay przedstawione gwne wasnoci szumu Perlina, czyli powtarzalno, ograniczenie wartoci oraz ograniczenie czstotliwoci (maksymalna czstotliwo jest rwna 1). Dodatkowo, dobra funkcja generujca szum to taka, ktra zachowuje statystyczn niezmienniczo przy obrotach i przesuniciach. Oznacza to, e funkcja wyglda podobnie niezalenie od tego jak j obrcimy i przesuniemy. Implementacja szumu wykorzystana w bibliotece jest oparta na technice szumu gradientowego (ang. gradient noise), ktry zachowuje wszystkie te wasnoci. Nie jest tak w przypadku najprostszej i najbardziej intuicyjnej metody, w ktrej stosujemy dyskretn siatk n-wymiarow (zalenie od tego w jakiej przestrzeni powstaje tekstura) z losowymi skalarnymi wartociami w kadym wle. Wartoci w wzach najbliszym pewnej cigej wartoci, dla ktrej szukamy wartoci szumu interpolujemy dostajc skalarn warto szumu. Szum tak powstay nie zachowuje wasnoci niezmienniczoci i podczas obrotw widoczne s pewne artefakty. Metoda gradientowa take stosuje dyskretn siatk, lecz w kadym jej wle losowany jest wektor kierunku. Wane jest przy tym, aby kady kierunek by jednakowo prawdopodobny. Dla 2-wymiarowej siatki (dla ustalenia uwagi, bd si dalej posugiwa przykadem 2-wymiarowego szumu) ustalamy wic funkcj dajc w wyniku wektor 2-wymiarowy: g (i, j ) = ( g x , g y ) , gdzie i, j dyskretne wsprzdne siatki Liczc warto szumu dla punktu (x, y), wybieramy takie wsprzdne dyskretne w siatce (i, j), e i jest najwiksz liczb cakowit mniejsz od x; j jest najwiksz liczb cakowit mniejsz od y. W ten sposb (x, y) ley w komrce ograniczonej punktami (i+1, j+1), (i, j+1), (i+1, j), (i, j). Wpyw kadego z wektorw gradientu (wektory G na Rysunek 4-4) obliczamy jako iloczyn skalarny odpowiedniego wektora G oraz wektora od punktu (x, y) do wza siatki (wektory V na rysunku). Dostajemy w ten sposb 4 wartoci skalarne I: I ( i , j ) = G(i , j ) * (( x, y ) (i, j ))

I ( i +1, j ) = G( i +1, j ) * (( x, y ) (i + 1, j )) I ( i , j +1) = G( i , j +1) * (( x, y ) (i, j + 1)) I ( i +1, j +1) = G( i +1, j +1) * (( x, y ) (i + 1, j + 1))
37

Wartoci te interpolujemy z wagami zalenymi od odlegoci punktu (x, y) od poszczeglnych wzw siatki, oznaczonych dalej jako Sx waga dla wymiaru x, oraz Sy waga dla wymiaru y.

(i, j)
G(i, j)

G(i+1,j)
+1 ,
1)

(i+1, j)
j)

, j+ V(i

i ,j) V(
V( i+1

(x, y)
, j+ 1)

V(i

(i, j+1)
G(i,j+1)

(i+1, j+1)

G(i+1, j+1)

Rysunek 4-4 Obliczanie szumu Perlina 2D metod gradientow

a = I (i , j ) + S x ( I ( i +1, j ) I ( i , j ) ) b = I ( i , j +1) + S x ( I (i +1, j +1) I (i , j +1) ) noise( x, y ) = a + S y (b a)


Narzuca si tutaj obliczenie Sx = x-i, Sy = y-j, jednak w praktyce znacznie lepsze wyniki daje nieliniowa zaleno wag S od odlegoci od wzw siatki. Zastosowano tutaj funkcj smoothstep( x) = 3x 2 2 x3 , czsto uywan w grafice komputerowej jako funkcja wygadzajca. smoothstep jest przedstawiona na wykresie Rysunek 4-5. Jak wida, funkcja szybko zmierza do wartoci kracowych dla parametrw bliskich 0 i 1, natomiast parametry z przedziau rodkowego s rozcigane.
Smoothstep(x) 1

0.5

0.5

Rysunek 4-5 Wykres funkcji smoothstep(x)

38

Tak obliczona funkcja noise moe atwo by wykorzystana do generacji wzorw fraktalnych. Dodajc do siebie wartoci noise o rnych czstotliwociach uzyskujemy ciekawe efekty fraktalnego szumu bd tzw. turbulencji. Przykadowe obrazy s widoczne na Rysunek 4-6.

A - fraktalny szum

B - fraktalna turbulencja

Rysunek 4-6 Przykady szumu fraktalnego

Kolejne warstwy szumu posiadaj czstotliwo d razy wiksz. Zwykle d=2, a wic i-ta warstwa ma czstotliwo 2i. Szum z i-tej warstwy posiada take di razy mniejsz amplitud. Turbulencje uzyskuje si sumujc wartoci absolutne funkcji noise. Dodawanie szumu w celu uzyskania szumu i turbulencji fraktalnych zachodzi wic w nastpujcy sposb: octaves noise(d i P) fractal ( P, octaves, d ) = di i =0

turbulence( P, octaves, d ) =

octaves

i =0

abs (

noise(d i P) ) di

Implementacja
W bibliotece zostaa zaimplementowana abstrakcyjna klasa CNoise, ktra definiuje zachowanie szumu. Posiada ona midzy innymi funkcje pobierajce jednowymiarowe i trjwymiarowe wartoci szumu dla punktu w przestrzeni R1 i R3. S one wirtualne i abstrakcyjne i maj nastpujce deklaracje:
virtual virtual virtual virtual FLOAT FLOAT Point Point Get(FLOAT x) = 0; Get(Point &p) = 0; Get3D(FLOAT x) = 0; Get3D(Point &p) = 0;

Zarwno szum Perlina jak i opisane dalej inne rodzaje szumw s zdefiniowane w klasach pochodnych CNoise (CNoisePerlin itp.). Dodatkowo istnieje specjalna klasa pochodna CNoise o nazwie CNoiseFractal implementujca algorytm uzyskiwania szumu fraktalnego. Klasa ta jest sparametryzowana instancj klasy pochodnej CNoise (np. klasy CNoisePerlin, albo nawet CNoiseFractal) oraz nastpujcymi wartociami:

39

Typ int

Nazwa fractal

Opis

int float

octaves persistence

0 szum 1 szum fraktalny 2 turbulencja fraktalna Okrela maksymaln liczb warstw szumu Okrela czstotliwo kadej nastpnej warstwy i jest odpowiednikiem 1/d w opisywanym algorytmie

Funkcja bazowa
Funkcja bazowa NoisePerlin, ktra wykorzystuje opisane zaimplementowane w bibliotece TexLib ma nastpujce wasnoci:
NoisePerlin

powyej

algorytmy

Produkuje wartoci szumu Perlina. Zalenie od tego, jakie parametry wyjciowe s wykorzystywane, dla danego punktu P zwraca wartoci jedno lub trjwymiarowe. Potrafi take oblicza szum fraktalny, bd turbulencj fraktaln. Obrazek widoczny obok powsta przez wizualizacj trjwymiarowych wartoci szumu jako kolorw.
identyfikator parametru P fractal octaves typ warto domylna opis

point int int

persisten ce

float

min, max

float

float color

float color

WEJCIA Punkt, dla ktrego obliczy warto 0 szum, 1 szum fraktalny, 2 turbulencja fraktalna Maksymalna ilo oktaw (warstw) szumu Czstotliwo oktawy i+1 fi+1 jest rwna fi+1= fi * (1/persistence), natomiast amplituda a 0.5 ai+1 = ai*persistence Wartoci mniejsze powoduj may wpyw dalszych oktaw szumu, wartoci wiksze - duy. Standardowo szum zwraca wartoci z przedziau [-1..1]. Te parametry pozwalaj zmieni t charakterystyk przez ustalenie wartoci minimalnej i maksymalnej. -1, 1 Naley zwrci uwag na to, e jeli liczony jest szum fraktalny, otrzymywane wartoci kocowe nie bd si prawdopodobnie mieciy w zadanym przedziale. WYJCIA jednowymiarowa warto szumu trjwymiarowa warto szumu (0, 0, 0) 0 3
Tabela 4-4 Specyfikacja funkcji bazowej NoisePerlin

4.3.3. Podzia przestrzeni wedug diagramu Voronoi Algorytm


Rozdzia 3 podaje definicj diagramu Voronoi oraz algorytm Worleya, ktry stosuje ten podzia przestrzeni. Algorytm zaimplementowany w bibliotece TexLib dziaa w podobny sposb: 40

budowana jest 3-wymiarowa siatka wsprzdne kadego z wzw dyskretnej siatki (i, j, k) s przesuwane o pewien losowy wektor o dugoci z przedziau [0..1]. Zbir przeksztaconych punktw to S. dla punktu P(x, y, z), wsprzdne siatki (i, j, k) s obliczane dla kadego wymiaru jako najwiksze liczby cakowite mniejsze od odpowiedniej wsprzdnej (x, y, z) szukanych jest n najbliszych P punktw ze zbioru S. Obliczone wsprzdne (i, j, k) su przyspieszeniu wyszukiwania najbliszych punktw. Najbliszym bdzie bowiem ktry z punktw, ktrych wsprzdne dyskretne le w przedziale (i-1..i+1, j-1..j+1, k-1..k+1). Podany algorytm jest realizowany przez funkcj noiseV(P, irregularity), gdzie parametr irregularity jest maksymaln dugoci wektora odchylajcego pierwotne pooenia punktw ze zbioru S (patrz. punkt 2. algorytmu). Wynikiem wywoania funkcji noiseV dziaajcej w opisany powyej sposb moe by (patrz: Rysunek 4-7): A - Odlego do n-tego najbliszego punktu ze zbioru S. Na rysunku np. odlego |PC| dla n=1, odlego |PS(i-1, j, k)| dla n=2 itd. B - Wsprzdne n-tego najbliszego punktu ze zbioru S. Na rysunku punkt C dla n=1, punkt S(i-1, j, k) dla n=2 itd. C - Najmniejsza odlego do jednej z paszczyzn prostopadych do wektorw C-S(l, m, n) i przechodzcych przez ich rodki, gdzie: C jest punktem S(i, j, k), najbliszym punktowi P, (l, m, n)(i, j, k) Innymi sowy, odlego do najbliszej ciany komrki wynikajcej z podziau Voronoi. Na rysunku jest to odlego d, bdca odlegoci od paszczyzny prostopadej do wektora V=C-S(i-1, j+1, k) i przechodzcej przez punkt M, ktry jest rodkiem wektora V.

S(i-1, j, k)

S(i+1, j, k)

P M

S(i, j, k)=C

m /2

37

S(i-1, j+1, k)

S(i+1, j+1, k)

Rysunek 4-7 Wyniki dziaania funkcji noiseV. Przekrj przez przestrze R3.

41

Kolejne ilustracje (Rysunek 4-8) pomog wyobrazi sobie, jakie moliwoci daje tak zdefiniowana funkcja.

A odlego od punktu ze zbioru S

B wsprzdne punktu ze zbioru S

C odlego od granicy komrki

Rysunek 4-8 Typy wynikw zwracanych przez funkcj noiseV.

Ilustracja A to wynik dziaania funkcji zwracajcej odlego od najbliszego punktu ze zbioru S. Zwracana warto skalarna suy jako waga przy liniowej interpolacji midzy dwoma kolorami. Ilustracja B dobrze ilustruje podzia przestrzeni na wg. diagramu Voronoi. W poczeniu z wartoci odlegoci od granicy komrki (Ilustracja C) daje to moliwoci budowy wzorw typu kamie naturalny, mur kamienny itp. Naley tutaj zauway ciekaw moliwo, jak daj zoone funkcje biorce jako parametry wartoci odlego od n-tego punktu ze zbioru S. Oznaczmy przez noiseVn funkcj zwracajc n-ty najbliszy punkt i posiadajc parametr irregularity = 0.5. Tabela 4-5 pokazuje przykadowe liniowe i nieliniowe kombinacje funkcji tego typu. Na ilustracjach w tabeli wynik skalarny funkcji F zosta uyty do interpolacji liniowej midzy kolorami czarnym i biaym. Wszystkie funkcje z powyszej tabeli zostay znalezione z uyciem automatycznych funkcji przeszukiwania dziedziny parametrw, o ktrych bdzie mowa pniej. Te kilka przykadowych obrazw pokazuje duy potencja, ktry ju w swojej podstawowej wersji, posiada funkcja noiseV. Opisywane w Rozdziale 3 wzory ludzkiej skry zostay przez Jamesa M. Kukla i Edwarda J. Bedwell ([Kukla]) stworzone wanie przy uyciu liniowych kombinacji funkcji Worleya.

42

F = -0.8*noiseV1 0.9*noiseV2 + 0.6*noiseV3

F = 0.6*noiseV1 0.2*noiseV2 + 0.3*noiseV4 0.4*noiseV5

F = 0.4*noiseV1 0.7*noiseV2

F = ( 1.6*noiseV1 0.8*noiseV2 + 2*noiseV3 + 1.7*noiseV4 ) * 1.6*noiseV1

F = 1.6*noiseV1 * ( 0.7*noiseV1 + 1.2*noiseV2 0.9*noiseV3 )

F = ( -0.6*noiseV1 0.9*noiseV2 + 1.7*noiseV3 ) * ( 1.7*noiseV1 + 1.8*noiseV2 0.9*noiseV3 )

Tabela 4-5 Przykady zoonych funkcji wykorzystujcych noiseVn

Fraktalny podzia przestrzeni wedug diagramu Voronoi


Moliwoci funkcji noiseV znacznie si zwikszaj, jeli wzi pod uwag jej fraktalne wersje. Jedna z tych wersji zostaa ju przedstawiona przy okazji opisu funkcji szumu Perlina. Mona j zastosowa wprost w przypadku funkcji noiseV zwracajcej wynik typu A odlego do najbliszego punktu ze zbioru S. Tak wic: octaves noiseV (d i P, irregularity ) fractalV ( P, octaves, d , irregularity ) = di i =0

turbulenceV ( P, octaves, d , irregularity ) =

octaves

i =0

abs(

noiseV (d i P, irregularity ) ) di

43

Drugie podejcie do stworzenia fraktalnej funkcji noiseV polega na zastosowaniu podpodziaw ju podzielonej przestrzeni. Efekt takich podpodziaw bdzie wyglda jak na Rysunek 4-9, na ktrym zastosowano 3 poziomy funkcji noiseV zwracajcej wynik typu B wsprzdne najbliszego punktu ze zbioru S.

A podzia na 1 poziomie

B podzia na 2 poziomach

C podzia na 3 poziomach

Rysunek 4-9 Ilustracja fraktalnego podpodziau przestrzeni

Na ilustracji B niektre z komrek zostay podzielone funkcj noiseV o dwukrotnie wikszej czstotliwoci. Na ilustracji C niektre z podzielonych wczeniej komrek ulegy kolejnemu podziaowi. Podzia komrek na kadym etapie (w kadej iteracji) jest kontrolowany za pomoc wspczynnikw prawdopodobiestwa podziau. Na powyszym przykadzie dla obydwu etapw by on rwny 0.5. Warunek podziau wyglda nastpujco: f < wsp_podziau[warstwa], gdzie: f liczba losowa z przedziau [0..1], niezmienna dla danej komrki (ustalana na podstawie obecnego najbliszego punktu ze zbioru S; wsp_podziau wspczynnik podziau dla warstwy na ktrej si znajdujemy Algorytm kontrolujcy obliczenia zwizane z tym wzorem wyglda jak na Program 4-1.
let warstwa = 0; //ptla obliczania punktu S repeat { S = noiseV(P); //oblicz najbliszy punkt ze zbioru S f = losowa(S); //we losow liczb dla punktu S if ( (warstwa < max_ilo_warstw) and //jeli moe by wicej warstw (f < wsp_podziau[warstwa]) ) //warunek podziau { warstwa += 1;// przechodzimy do kolejnej warstwy P = P * d; // zmieniamy czstotliwo (patrz: opis fraktalnego // szumu Perlina) P = P + S; // dodatkowe, opcjonalne przesunicie dziki ktremu // ssiednie komrki nie cz si ze sob } else break; } //S wynik: punkt ze zbioru S najbliszy punktowi P // na warstwa warstwie

Program 4-1 Algorytm fraktalnego podpodziau przestrzeni

44

Ciekawe efekty daje uycie zoonych funkcji, ktrych skadowe zwracane s przez funkcje fractalV bd turbulenceV. Oznaczmy przez fractalVn oraz turbulenceVn funkcj fraktaln uywajc fractalV(P, 3, 0.5, 0.5) lub turbulenceV(P, 3, 0.5, 0.5) zwracajc n-ty najbliszy punkt. Przykadowe rezultaty tak uzyskanych funkcji znajduj si w Tabela 4-6.

F = ( turbulenceV1*0.7 turbulenceV2*0.8 + turbulenceV3 + turbulenceV*0.8 )* ( -turbulenceV1*0.2 turbulenceV2*0.2 turbulenceV3*0.7 + turbulenceV4*0.8 )

F = ( turbulenceV1 + turbulenceV2*0.7 + turbulenceV3*0.7 + turbulenceV4*0.6 ) * ( turbulenceV1*0.6 turbulenceV2*0.6 turbulenceV3*0.4 )

F = ( fractalV1*0.2 fractalV2*0.6fractalV3*0.9 ) * (-fractalV1*0.9)

F = ( -fractalV1*0.4 fractalV2*0.3 fractalV4*0.3 ) * ( turbulenceV1*0.8 + turbulenceV2*0.4 + turbulenceV3 )

Tabela 4-6 Przykady zoonych funkcji wykorzystujcych fractalVn i turbulenceVn

45

Niewtpliwie s to najciekawsze z zaprezentowanych tutaj wzorw, jednak ze wzgldu na swoj zoono, jeli chodzi o parametry, nie s proste do wykorzystania praktycznego polegajcego na symulacji dobrze znanych z natury wzorw.

Zastosowanie nieeuklidesowych metryk


Diagram Voronoi zdefiniowany wg [Fukuda 2000] w Rozdziale 3 wykorzystuje metryk Euklidesa do stwierdzenia odlegoci dist od punktw nalecych do zbioru S
dist ( X ( x1 , x2 ,.., xn ), Y ( y1 , y2 ,.., yn )) =

(x y )
i i n

Istnieje jeszcze co najmniej kilka ciekawych metryk, ktre mona tutaj zastosowa: metryki Euklidesowe, czyli zachowujce rwnanie trjkta ([Cahn], [Duda]). dist ( X , Y ) dist (Y , Z ) + dist ( X , Z ) o metryka Manhattan: odlego midzy dwoma punktami w przestrzeni nwymiarowej jest rwna sumie odlegoci midzy poszczeglnymi wymiarami. Nazwa Manhattan pochodzi std, e w miecie odlegoci midzy 2 punktami nie mona zmierzy prost, lecz liniami prostopadymi do siebie. dist ( X ( x1 , x2 ,.., xn ), Y ( y1 , y2 ,.., yn )) = xi yi
n

o metryka Chebycheva: odlego midzy dwoma punktami w przestrzeni nwymiarowej jest rwna maksimum z rnic midzy poszczeglnymi wymiarami dist ( X ( x1 , x2 ,.., xn ), Y ( y1 , y2 ,.., yn )) = Max ( x1 y1 , x2 y2 ,.., xn yn )

metryki nieeuklidesowe [Fielding] o metryka cosinusowa: cosinus kta midzy dwoma wektorami xi yi n dist ( X , Y ) = xi2 yi2 n n

Oto przykady wzorw uzyskanych dziki tym metrykom (wszystkie wzory zostay uzyskane przy uyciu tego samego drzewa cieniowania, jedyn rnic jest wykorzystana metryka):

A metryka Euklidesa

B - metryka Chebycheva

46

Euklidesowa P P Chebycheva Manhattan

C metryka Manhattan

Strefy punktw o rwnych odlegociach od punktu P dla rnych metryk.

Rysunek 4-10 Wpyw zastosowania rnych metryk odlegoci

Funkcje bazowe
Zaimplementowane zostay 2 funkcje bazowe wykorzystujce algorytm podziau przestrzeni wedug diagramu Voronoi. Ich metryki zostay przedstawione w Tabela 4-7 i Tabela 4-8.
NoiseWorley

Produkuje wartoci szumu Worleya (wynikajcego z podziau przestrzeni wedug diagramu Voronoi) 1D oraz 3D. Wynik skalarny jest dla punktu P odlegoci od najbliszego punktu ze zbioru S. Wynik 3D to wsprzdne tego punktu. Warto border_dist jest odlegoci od granicy komrki.
identyfikator parametru P metrics fractal octaves typ warto domylna opis

point int int int

(0, 0, 0) 0 0 3

persisten ce

float

0.5

WEJCIA Punkt, dla ktrego obliczy warto Jak stosowa metryk obliczania odlegoci: 0 euklidesowa 1 Manhattan 2 Chebycheva 0 szum, 1 szum fraktalny, 2 turbulencja fraktalna Maksymalna ilo oktaw (warstw) szumu Czstotliwo oktawy i+1 fi+1 jest rwna fi+1= fi * (1/persistence), natomiast amplituda a ai+1 = ai*persistence Wartoci mniejsze powoduj may wpyw dalszych oktaw szumu, wartoci wiksze - duy.

47

Nieregularno komrek. Ta warto powinna zawiera si w przedziale [0..1]. Wartoci wiksze od 1 mog Float 0.5 wprowadzi do obrazu artefakty, wartoci mniejsze od 0 s niedopuszczalne i zamieniane na 0. Wartoci liniowych wspczynnikw przy obliczaniu linear_co FloatArra [1] jednowymiarowej wartoci szumu. Domylnie warto eff y funkcji jest obliczana jako F1. WYJCIA float Float Jednowymiarowa warto szumu. Trjwymiarowa warto szumu, bdca wsprzdnymi punktu rodka color Color najbliszej komrki. Parametr linear_coeff nie ma znaczenia dla tego parametru wyjciowego.
irregular ity border_di st

Float

Odlego do ciany komrki


Tabela 4-7 Specyfikacja funkcji bazowej NoiseWorley
FractalNoiseWorley

Produkuje wartoci szumu Worleya (wynikajcego z podziau przestrzeni wedug diagramu Voronoi) 1D oraz 3D na losowym poziomie podpodziau. Poziom podpodziau w danej komrce jest rekurencyjnie kontrolowany za pomoc wspczynnikw okrelajcych prawdopodobiestwo przejcia na nastpny poziom. Wynik skalarny jest dla punktu P odlegoci od najbliszego punktu ze zbioru S na danym poziomie. Wynik 3D to wsprzdne tego punktu. Warto level jest poziomem podziau.
identyfikator parametru P metrics typ warto domylna opis

point int

(0, 0, 0) 0 [0.5]

divide_fa FloatArra ctor y

persisten ce

float

0.5

irregular ity

Float

0.5

WEJCIA Punkt, dla ktrego obliczy warto Jak stosowa metryk obliczania odlegoci: 0 euklidesowa 1 Manhattan 2 Chebycheva Wspczynniki prawdopodobiestwa przejcia w danej komrce na nastpny poziom (do nastpnej warstwy). Czstotliwo warstwy i+1 fi+1 jest rwna fi+1= fi * (1/persistence), natomiast amplituda a ai+1 = ai*persistence Wartoci mniejsze powoduj pojawienie si maych komrek na nastpnych warstwach, wartoci wiksze duych komrek (dla wartoci >1 komrki bd wiksze od tych na oryginalnej warstwie. Nieregularno komrek. Ta warto powinna zawiera si w przedziale [0..1]. Wartoci wiksze od 1 mog wprowadzi do obrazu artefakty, wartoci mniejsze od 0 s niedopuszczalne i zamieniane na 0. WYJCIA 48

float color level

Float Color Int

Jednowymiarowa warto szumu Trjwymiarowa warto szumu, bdca wprzdnymi punktu rodka najbliszej komrki. Poziom zagbienia (aktualna warstwa)

Tabela 4-8 Specyfikacja funkcji bazowej FractalNoiseWorley

4.4. Automatyzacja poszukiwania uytecznych wzorw proceduralnych


Ze wzgldu na rnorodno dostpnych algorytmw oraz ich kombinacji, trudno jest zdecydowa, ktry z nich bdzie dawa najlepsze efekty w interesujcej nas dziedzinie. Z tego powodu zastosowano kilka metod przyspieszajcych proces powstawania tekstury proceduralnej.

4.4.1. Losowe parametry


Na podstawie pokazanych przykadw mona odnie wraenie, e opisane algorytmy produkuj jedynie wzory mniej lub bardziej abstrakcyjne, nie majce wiele wsplnego z tymi spotykanymi w naturze. Rzeczywicie, wikszo uzyskiwanych wzorw nie przypomina niczego spotykanego w rzeczywistoci. Jest tak, poniewa ilustracje przedstawiane w poprzednim punkcie zostay w wikszoci wygenerowane pautomatycznie, tzn. wikszo parametrw rcznie zbudowanego drzewa cieniowania zostaa dobrana losowo. Nietrudno jednak w zbiorze tak stworzonych obrazw i drzew cieniowania wybra te, ktre, po kilku dalszych poprawkach, bd mogy suy do symulacji realnych zjawisk. W rzeczywistoci, najwiksza ilo ciekawych symulacji odkrytych w trakcie bada, powstaa dziki tej metodzie. Zostaa ona take wykorzystana do pocztkowej eksploracji moliwoci algorytmw. System do budowy drzew cieniowania wykorzystany do bada udostpnia proste metody, dziki ktrym mona generowa dowoln ilo obrazw, dobierajc wczeniej dla interesujcych nas parametrw zakresy, z ktrych bd losowane ich wartoci. Kada z wartoci z wybranego zakresu posiada takie samo prawdopodobiestwo wybrania.

4.4.2. Przeszukiwanie domeny parametrw


Po wstpnym zapoznaniu si z moliwociami, jakie daje konkretny algorytm, bd cae drzewo cieniowania (np. za pomoc metody dobierania losowych parametrw) wybieramy te przypadki, ktre s najbardziej zblione do wzoru, ktry chcemy symulowa. Dalszy dobr parametrw pozostawiamy odpowiednio zawonemu zakresowi losowych parametrw, stosujc iteracyjnie metod parametrw losowych, bd przeszukujemy ten zakres systematycznie. Opisywany system posiada mechanizm przeszukiwania pewnej ustalonej domeny parametrw. Po ustaleniu przedziaw oraz rozdzielczoci poszukiwania, system generuje kolejne obrazy. Jest to sposb szczeglnie przydatny wtedy, gdy staramy si lepiej zrozumie wpyw jakiego wybranego parametru lub kilku parametrw na efekt kocowy. Sposb dziaania tego mechanizmu jest oczywisty dla 1 parametru. Niech bdzie nim A i niech bdzie dany przedzia przeszukiwania [0..1] z rozdzielczoci 0.1. W rezultacie dostaniemy 11 obrazw, w ktrych parametr A bdzie kolejno przyjmowa wartoci 0.0, 0.1, 0.2, ... 1.0. Dla 2 i wikszej iloci parametrw o zakresach [p1, k1], [p2, k2], ..., [pn, kn] i rozdzielczoci r dostaniemy ((k1-p1)*(k2-p2)* .. *(kn-pn))/r obrazw, gdzie rozpatrzone zostan wszystkie kombinacje parametrw. Przykadowo, majc dane nastpujce parametry i ich zakresy: A[0..1], B[0..1], C[0..1] oraz rozdzielczo r = 1, dostaniemy nastpujcych 8 obrazw:
1:A=0, B=0, C=0 2:A=0, B=0, C=1 3:A=0, B=1, C=0 4:A=0, B=1, C=1 .. 8:A=1, B=1, C=1

49

5. Biblioteka do tworzenia tekstur proceduralnych TexLib


W tym rozdziale opisana zostaa architektura, sposb dziaania oraz wybrane aspekty implementacji biblioteki TexLib stworzonej i wykorzystywanej w trakcie bada nad teksturami proceduralnymi.

5.1. Architektura
Zarwno bibliotek jak i system, ktre j wykorzystuje, mona podzieli z naszego punktu widzenia na pewne moduy funkcjonalne (niekoniecznie pokrywajce si z moduami wynikajcymi z implementacji). Architektura biblioteki oraz potencjalnego systemu j wykorzystujcego przedstawiona zostaa na Diagram 5-1. SYSTEM funkcja cieniujca kontekst cieniowania BIBLIOTEKA TexLib kontekst cieniowania funkcje cieniujce obsuga drzew cieniowania

interfejs

serializacja

GUI

Diagram 5-1 Architektura biblioteki TexLib (moduy funkcjonalne)

5.1.1. Interfejs
Biblioteka komunikuje si z systemem renderujcym za pomoc interfejsu, ktry udostpnia funkcje definiowania i obsugi drzew cieniowania. To, w jaki sposb interfejs jest uywany przez system renderujcy, jest zalene od jego implementacji, jednak najczciej funkcje interfejsu biblioteki s wywoywane z funkcji cieniujcych (patrz: opis przebiegu renderingu w punkcie 2.1).

5.1.2. Moduy funkcjonalne systemu renderujcego


Funkcje cieniujce maj dostp do informacji zwizanych z aktualnym kontekstem cieniowania, ktry jest niezbdny dla ewaluacji odpowiednich parametrw powierzchni przez bibliotek. Aplikacja musi wic, za pomoc odpowiednich funkcji interfejsu, przekaza swj aktualny kontekst cieniowania. Dokadny przebieg procesu cieniowania zosta przedstawiony w punkcie 5.3

5.1.3. Biblioteka
Z punktu widzenia aplikacji i interfejsu do biblioteki, w TexLib mona wydzieli 4 gwne moduy funkcjonalne: 1. Obsuga drzew cieniowania. Modu obsugi drzew cieniowania przechowuje definicje tekstur (bdcych zoeniami podstawowych funkcji cieniujcych) oraz wykonuje ich 50

ewaluacj. Drzewa cieniowania mog by z poziomu interfejsu budowane, zapisywane, odczytywane i wykorzystywane do ewaluacji konkretnych wartoci modyfikujcych wasnoci powierzchni. 2. Funkcje cieniujce. Biblioteka posiada pewn liczb wbudowanych, standardowych funkcji cieniujcych. S to midzy innymi funkcje zwizane z podstawowymi operacjami skadania kilku innych funkcji, interpolacji, narzdzia wspomagajce budowanie tekstur modyfikujcych normalne cieniowanych powierzchni i inne. Biblioteka moe by atwo rozszerzana o dodatkowe funkcjonalnoci zwizane z funkcjami cieniujcymi dziki dodatkowym moduom (oznaczonym na diagramie jako dodatkowe funkcje cieniujce). Ilo dodatkowych moduw rozszerzajcych jest nieograniczona (implementacyjnie, moduy z funkcjami cieniujcymi to biblioteki czone dynamicznie (DLL w przypadku Windows). Standardowo istnieje 1 modu rozszerzajcy bibliotek o nowe funkcje cieniujce oznaczony na diagramie jako standardowy modu funkcji cieniujcych. Zawarte s w nim wszystkie funkcje wykorzystywane w tej pracy do produkcji tekstur. 3. Serializacja. Drzewa cieniowania mog by zapisywane i odczytywane z dysku, czym zajmuje si modu serializacji. Modu tworzy pliki w formacie *.TREE (opis formatu *.TREE zosta przedstawiony w dodatku Dodatek B). 4. Kontekst cieniowania. W trakcie procesu tworzenia obrazu (renderingu) biblioteka musi zna aktualny kontekst cieniowania (czyli wsprzdne cieniowanego punktu, normalna do powierzchni, informacje zwizane z antialiasingiem i wiele innych informacji). Przechowywaniem oraz dostarczaniem kontekstu odpowiednim funkcjom wewntrz biblioteki TexLib zajmuje si modu funkcjonalny oznaczony na Diagram 5-1 jako kontekst cieniowania.

5.1.4. Interfejs graficzny


Na Diagram 5-1 zosta umieszczony jeszcze jeden modu funkcjonalny interfejs graficzny, ktry nie wchodzi w skad biblioteki TexLib, ale zosta na potrzeby tej pracy zaimplementowany jako oddzielna aplikacja. Aplikacja ta, opisana w rozdziale 6, umoliwia wygodn budow drzew cieniowania za pomoc standardowego graficznego interfejsu uytkownika. Aplikacja wykorzystuje TexLib za pomoc innego interfejsu ni systemy renderujce (aczkolwiek jest zintegrowana z systemem do renderingu LADS, ktry z kolei wykorzystuje opisany interfejs do wizualizacji budowanych drzew cieniowania)

5.2. Implementacja - diagram klas


5.2.1. Diagramy klas
Biblioteka zostaa zaimplementowana C++ z wykorzystaniem technik obiektowych udostpnianych przez jzyk programowani. Podejcie obiektowe dao moliwo zaprojektowania atwej do rozbudowania architektury. Diagramy 5.2, 5.3, 5.4 oraz 5.5 przedstawiaj schematy klas biblioteki.

51

Diagram 5-2 Diagram klas typw wartoci

52

Diagram 5-3 Diagram klas zwizanych ze wzorami

53

Diagram 5-4 Diagram klas funkcji zarzdzajcych wzorami

54

Diagram 5-5 Diagram klas podstawowych implementacji algorytmw szumw

55

5.2.2. Opisy najwaniejszych klas


Poniej znajduj si opisy najwaniejszych klas przedstawionych na diagramach ()

Klasa CAbstractValue (abstrakcyjna)


Klasa opisujca abstrakcyjn warto parametrw wejciowych i wyjciowych wzorw. Po niej dziedzicz klasy wartoci konkretnych typw (Int, Float, Color, Point, Vector, Sample). Najwaniejsze funkcjonalnoci tej klasy to: Referencja do waciciela. Kada warto posiada swojego waciciela (wskanik m_pOwner), ktrym jest parametr wyjciowy wzoru (patrz: klasa CLinkOut). Przechowywanie znacznika poprawnoci wartoci. Dziki temu obiekty wykorzystujce wartoci typw pochodnych CAbstractValue mog stwierdzi, czy odczytywana warto jest poprawna, czy te naley wymusi jej odwieenie przez waciciela. Obsuga serializacji. Kada warto umie zapisa si i odczyta z podanego strumienia. Zliczanie statystyk. Kada klasa pochodna od CAbstractValue przecia operator przypisania, dziki czemu mona jego implementacje wykorzysta do zliczania statystyk w czasie renderingu. W tym celu zostaa te wprowadzona funkcja Initialise(), ktra inicjalizuje wewntrzne liczniki statystyk (dla kadej klasy pochodnej CAbstractValue s to inne parametry). Funkcja Initialise() jest wywoywana dla kadej wartoci przed rozpoczciem renderingu (w czasie inicjalizacji drzewa cieniowania) Tworzenie wartoci losowych. Kada warto moe przybiera wartoci losowe. Wartoci te s ustalane w funkcji Initialise(), jeli zgoszono tak potrzeb. Ma to sens tylko wtedy, jeli obiekt wartoci nie ma waciciela (czyli jeli aden obiekt nie zmodyfikuje wylosowanej wartoci)

Klasa CPattern (abstrakcyjna)


CPattern opisuje wzr, czyli funkcj cieniujc. Kada funkcja cieniujca musi implementowa kilka funkcji, ktre umoliwiaj midzy innymi ewaluacj odpowiednich parametrw, inicjacj itd. Tabela 5-1 zawiera opis tych funkcji. Funkcja cieniujca opisana przez CPattern zawiera pewn liczb parametrw wejciowych i wyjciowych. S one opisane odpowiednio przez klasy CLinkIn oraz CLinkOut. Klasy te przechowuj dane o parametrach takie, jak nazwa, warto domylna (tylko dla parametrw wejciowych) oraz aktualna, konieczno ewaluacji wartoci itp.

Nazwa funkcji
Initialise()

Opis funkcji Inicjacja wzoru. W trakcie tego procesu wykonywane s wszystkie operacje, ktre nie musz by powtarzane w trakcie renderingu. Inicjowane s take wartoci parametrw wejciowych, ktrych zmian nie przewiduje si w trakcie renderingu. Funkcja wywoywana, jeli warto parametru o identyfikatorze id staje si nieaktualna (np. w czasie zmiany kontekstu wejciowego spowodowanej rozpoczciem oblicze dla kolejnej prbki). Powinna zaznaczy wszystkie wartoci parametrw wyjciowych jako nieaktualne (te wanie operacje wykonuje domylna implementacja, przecianie nie jest wic zwykle konieczne). Funkcja, ktra powinna ustawi poprawne wartoci parametrw 56

Invalidate(int id)

Evaluate()

wyjciowych. Istnieje take alternatywna posta Evaluate(int id), ktra powinna obliczy parametr o identyfikatorze id. Zwykle jednak Evaluate(int id) wywouje Evaluate(), poniewa specyfika wzorw nie pozwala na obliczenie pojedynczego parametru wyjciowego, bez obliczania innych.
Tabela 5-1 Funkcje wirtualne klasy CPattern

Obiekty klasy CPattern posiadaj wskanik na obiekt CPatternFactory (patrz: opis klasy CPatternFactory). Specjalnym przypadkiem klas CPattern s klasy CInContext oraz COutContext, ktre opisuj konteksty odpowiednio wejciowy oraz wejciowy. Zachowanie niektrych funkcji (Evaluate, Initialise), rni si w ich przypadku nieco od reszty wzorw zdefiniowanych bd to standardowo bd przez uytkownika.

Klasa CPatternFactory (abstrakcyjna)


Klasa pochodna CPatternFactory jest klas pomocnicz dla kadej klasy pochodnej CPattern i suy tworzeniu nowych obiektw danego wzoru (patrz te: opis klasy CManager). Przechowuje take nazw wzoru.

Klasa CManager
Implementuje wzorzec Singleton [Gamma 1995]. Moe istnie tylko jeden obiekt tej klasy. Klasa suy do zarzdzania wzorami dostpnymi w bibliotece. Najwaniejsze jej funkcjonalnoci to: Przechowywanie informacji o wszystkich dostpnych wzorach. Klasa CManager posiada tablic obiektw klas CPatternFactory, ktre pozwalaj na tworzenie nowych obiektw klas wzorw (funkcja New() w klasie CPatternFactory). Wykorzystano tutaj wzorzec projektowy Abstract Factory [Gamma 1995]. adowanie zewntrznych bibliotek wzorw (DLL)

Klasa CShadeTree
Klasa opisuje drzewo cieniowania, czyli zbir dowolnej iloci poczonych ze sob wzorw i wartoci. Specjalnym przypadkiem s wzory CInContext oraz COutContext, czyli konteksty wejciowy i wyjciowy. Obiekty tych klas istniej w drzewie cieniowania zawsze, i zawsze moe by tylko jeden kontekst wejciowy i wyjciowy. Klasa ta zajmuje si take serializacj drzew cieniowania (zapisywaniem i adowaniem plikw *.TREE). Wzory oraz wartoci stae s przechowywane wewntrz klasy w dwch tablicach. Poczenia midzy parametrami wejciowymi i wejciowymi wzorw s realizowane przez klasy CLinkIn oraz CLinkOut. Parametry wejciowe, czyli obiekty klasy CLinkIn, posiadaj wskaniki na wartoci (CAbstractValue), ktrych wacicielami (patrz: opis klasy CAbstractValue) mog by obiekty CLinkOut. Jeli obiekt CLinkIn posiada wskanik na warto bez waciciela, to oznacza to warto sta.

57

5.3. Procesu renderingu z wykorzystaniem interfejsu biblioteki TexLib


Oglny schemat dziaania systemu renderujcego zosta przedstawiony w punkcie 2.1. Przebieg fazy cieniowania z punktu widzenia systemu renderujcego z uwzgldnieniem wykorzystania TexLib wyglda jak na Diagram 5-6.

Przygotowanie kontekstu cieniowania dla prbki

Obliczenie koloru, przesunicia oraz przezroczystoci wiata To i inne skadowe bez modelu owietlenia Zastosowanie modelu owietlenia

Przeksztacenia dodatkowe (jasno, kontrast, gamma)

Diagram 5-6 Faza cieniowania z uwzgldnieniem biblioteki TexLib

Biblioteka TexLib moe by wykorzystywana w fazach obliczania przesunicia, przezroczystoci oraz koloru (zaley to od tego, jakie parametry powierzchni bd przez ni modyfikowane). Biblioteka nie zakada adnej kolejnoci wykonywania oblicze zwizanych z modyfikacj parametrw powierzchni przez system renderujcy. W szczeglnoci, kolejno nie musi wyglda jak na diagramie powyej. Niewtpliwie jednak przygotowanie kontekstu wejciowego (czyli obliczenie wsprzdnych cieniowanego punktu, normalnej do powierzchni w tym punkcie, danych zwizanych z filtrowaniem (antyaliasingiem) musi nastpi dla kadego cieniowanego punktu przed rozpoczciem korzystania z TexLib. Sposb dziaania systemu wykorzystujcego TexLib w fazie cieniowania opisuje dokadniej pseudokod Program 5-1.
() zainicjuj bibliotek TexLib; zaaduj drzewo cieniowania tree uywajc TexLib; ustaw parametry w tree jeli to konieczne; zainicjuj tree; () dla kadej prbki { ()

58

wyznacz swj kontekst cieniowania dla prbki; () ustaw kontekst cieniowania w TexLib; zaznacz wszystkie wartoci parametrw wyjciowych wzorw nieaktualne; if (tree modyfikuje normaln) { pobierz warto normalnej z tree; ustal warto normalnej w swoim kontekcie; } if (tree modyfikuje przezroczysto) { pobierz warto przezroczystoci z tree; ustal warto przezroczystoci w swoim kontekcie; } if (tree modyfikuje kolor) { pobierz warto koloru z tree; ustal warto koloru w swoim kontekcie; } () } skasuj drzewo cieniowania tree; () przetwarzanie dodatkowe (post-processing); ()

jako

Program 5-1 Faza cieniowania z uyciem TexLib

Jak wida na powyszym pseudokodzie, proces renderingu przebiega w kilku fazach. Wszystkie one s inicjowane wywoaniami odpowiednich funkcji interfejsu biblioteki z poziomu systemu renderujcego. Poniej znajduje si opis wszystkich tych faz wraz z opisem odpowiednich funkcji interfejsu biblioteki. Deklaracje funkcji interfejsu uywaj kilku specjalnych typw, ktre zostay opisane w Tabela 5-2.
Identyfikator typu PTREE PINCX POUTCX Opis

Wskanik na obiekt drzewa cieniowania Wskanik na obiekt kontekstu wejciowego Wskanik na obiekt kontekstu wyjciowego Identyfikator parametru wejciowego lub wyjciowego wzoru (take parametrw kontekstw). Moe by liczb cakowit identyfikujc jednoznacznie parametr w ramach wzoru (zwracany przez odpowiednie funkcje interfejsu) lub acuchem znakw z nazw parametru. Uwaga: Zalecane jest uywanie identyfikatorw liczbowych ze wzgldu na wydajno.
Tabela 5-2 Charakterystyczne typy interfejsu biblioteki TexLib

ID

5.3.1. Fazy procesu renderingu w bibliotece TexLib


1. Inicjalizacja biblioteki. TexLib przygotowuje wzory standardowe, aduje zewntrzne biblioteki wzorw (znajdujce si w dynamicznie czonych bibliotekach w odpowiednim podkatalogu). Inicjowane s take wszystkie statyczne tablice wartoci i 59

inne zmienne, ktre nie ulegaj zmianie w trakcie dziaania biblioteki (np. losowe tablice mieszajce). Nie istniej specjalne funkcje suce inicjalizacji biblioteki. Ta operacja jest wykonywana przy pierwszym uyciu dowolnej funkcji interfejsu ktra tego wymaga, przezroczycie dla uytkownika. 2. Budowa drzewa cieniowania. TexLib aduje wskazany plik *.TREE z definicj drzewa cieniowania. Alternatywnie, drzewo jest budowane za pomoc wywoa odpowiednich funkcji interfejsu (funkcje te s opisane dokadniej w punkcie 5.4). Tak zbudowane drzewo moe zosta zapisane do pliku *.TREE i odczytanie przy nastpnej potrzebie. Jeli wzr zosta zaadowany, istnieje moliwo jego modyfikacji.
PTREE TCShadeTreeCreate(PINCX *incx, POUTCX *outcx)

Parametry

incx (OUT) kontekst wejciowy nowo utworzonego drzewa cieniowania outcx (OUT) kontekst wyjciowy nowo utworzonego drzewa cieniowania

Warto zwracana Wskanik do nowo utworzonego drzewa cieniowania, lub warto PTREE_NULL, jeli operacja tworzenia nie powioda si Tworzy nowe drzewo cieniowania, ktre zawiera tylko 2 standardowe wzory: InContext oraz OutContext.
bool TCShadeTreeLoad(PTREE tree, char *fileName)

Parametry

wskanik na wczeniej stworzone drzewo cieniowania (za pomoc funkcji TCShadeTreeCreate) fileName (IN) nazwa pliku *.TREE z ktrego odczyta definicj drzewa. cieki wzgldne odnosz si do katalogu roboczego aplikacji (systemu renderujcego) wykorzystujcego bibliotek.

tree (IN)

Warto zwracana true, jeli operacja wczytania powioda si, false w przeciwnym wypadku. Operacja wczytania moe nie powie si z kilku powodw: nie istnieje plik o podanej nazwie plik zawiera nieprawidow definicj drzewa (jest niepoprawny syntaktycznie, patrz: Dodatek B) definicja drzewa uywa nieznanych wzorw (tzn. wzorw doczanych jako dodatki w formie bibliotek DLL) aduje drzewo z pliku, ktrego nazwa jest okrelona parametrem fileName. Parametr tree musi zawiera wskanik na wczeniej utworzone drzewo. Jeli zawierao ono ju jakie wzory (zostao na przykad wczeniej wczytane za pomoc TCShadeTreeLoad), to zostan one przed operacj wczytania skasowane.
Tabela 5-3 Funkcje interfejsu biblioteki zwizane z tworzeniem drzew cieniowania

3. Inicjalizacja drzewa cieniowania. Przed rozpoczciem renderingu biblioteka inicjuje wzr. Jest to zwizane z wydajnoci, o czym bya mowa w punkcie 2.4. Wikszo systemw daje moliwo inicjacji tekstur proceduralnych wywoujc przed rozpoczciem renderingu (ale ju po ustawieniu parametrw tekstury) odpowiedni procedur. To wywoanie zostao zaznaczone w Program 5-1. Procedura inicjacji drzewa cieniowania nie powinna by wywoywana dla kadej cieniowanej prbki ze wzgldw wydajnociowych. Takie wywoanie nie zmienioby jednak wygldu generowanego obrazu. 60

bool TCShadeTreeInitialise(PTREE tree)

Parametry

tree (IN)

wskanik na drzewo cieniowania

Warto zwracana true, jeli inicjalizacja powida si, false w przeciwnym wypadku. Operacja inicjalizacji moe si nie powie z kilku powodw: brak pamici do inicjalizacji tablic lub stworzenia potrzebnych obiektw w jednym ze wzorw nieprawidowe drzewo cieniowania, tzn. drzewo zawiera cykle proste (waciwie taka sytuacja nie powinna si zdarzy, poniewa narzdzia suce do budowy drzew cieniowania opisywane dalej nie pozwalaj nazbudowanie nieprawidowego drzewa Funkcja inicjalizuje podane drzewo cieniowania. W tym czasie inicjalizowane s take wszystkie wzory i zmienne wchodzce w skad drzewa.
Tabela 5-4 Funkcje interfejsu biblioteki suce do inicjalizacji drzewa cieniowania

4. Rendering. a. Okrelenie kontekstu cieniowania Obliczenie wasnoci kadej prbki, ktr dostarczy system renderujcy wie si z kilkoma operacjami. System musi poinformowa TexLib o rozpoczciu oblicze dla nowej prbki wywoaniem odpowiedniej procedury interfejsu. Po tym powinno nastpi ustawienie kontekstu wejciowego dla aktywnego drzewa cieniowania. Ustawienie kontekstu wymaga rnej iloci operacji, zalenie od tego, jakie wartoci tego kontekstu s przez konkretne drzewo wykorzystywane b. Ewaluacja Ewaluacja jest od strony systemu renderujcego bardzo prosta i polega na pobieraniu wyj kontekstu wyjciowego aktywnego drzewa cieniowania. Kade pobranie moe (ale nie musi, zaley to od tego, czy kontekst wejciowy zmieni si od czasu poprzedniego dania obliczenia) wywoa cig ewaluacji wewntrz drzewa. Istniej dwa tryby ewaluacji: punktowy i powierzchniowy (ang. point i area), zalene od tego, czy system chce uywa antialiasingu czy nie. Zgoszenie odpowiedniego dania odbywa si poprzez ustawienie odpowiedniej zmiennej kontekstu wejciowego biblioteki.
int TCShadeTreeOutCxModified(PTREE tree, ID id)

Parametry

tree (IN) id (IN)

wskanik na drzewo cieniowania identyfikator parametru wyjciowego kontekstu wyjciowego drzewa (definicje parametrw patrz punkt 5.5)

Warto zwracana 0 jeli podany parametr wyjciowy kontekstu wyjciowego nie jest modyfikowany, warto rna od 0 w przeciwnym wypadku Funkcja suy do badania, czy dane drzewo cieniowania modyfikuje podany parametr kontekstu wyjciowego. System renderujcy moe w ten sposb zbada, ktre z parametrw swojego kontekstu zmienia na podstawie kontekstu wyjciowego drzewa cieniowania. atwo si w ten sposb np. dowiedzie, czy dane drzewo modyfikuje kolor powierzchni, jej normaln czy te przezroczysto. Zastosowanie tej, jak i wikszoci innych opisywanych tu funkcji interfejsu, mona znale w aplikacji opisanej w rozdziale 6.

61

void TCShadeTreeOutCxGetxxx(PTREE tree, ID id, yyy),

gdzie xxx, yyy wedug Tabela 5-6 Parametry tree (IN) id (IN) yyy (OUT) Warto zwracana Nic

wskanik na drzewo cieniowania identyfikator parametru wyjciowego kontekstu wyjciowego drzewa (definicje parametrw patrz punkt 5.5) warto parametru wyjciowego kontekstu wyjciowego

Funkcja suy do pobierania obliczonych przez drzewo cieniowania wartoci.


int TCShadeTreeInCxUsed(PTREE tree, ID id)

Parametry

tree (IN) id (IN)

wskanik na drzewo cieniowania identyfikator parametru wyjciowego kontekstu wyjciowego drzewa (definicje parametrw patrz punkt 5.5)

Warto zwracana 0, jeli parametr wejciowy kontekstu wejciowego podanego drzewa cieniowania jest uywany przez jaki wzr, warto rna od 0 w przeciwnym wypadku Funkcja sprawdza, czy podany parametr wejciowego kontekstu wejciowego jest uywany przez jakikolwiek wzr. Jeli nie jest (tzn. jeli funkcja zwraca warto 0), system renderujcy nie musi ustawia tej wartoci kontekstu w czasie renderingu, co moe prowadzi do polepszenia wydajnoci.
void TCShadeTreeInCxSetxxx(PTREE tree, ID id, yyy)

Parametry

tree (IN) id (IN) yyy (IN)

wskanik na drzewo cieniowania identyfikator parametru wyjciowego kontekstu wyjciowego drzewa (definicje parametrw patrz punkt 5.5) warto parametru wejciowego kontekstu wejciowego

Warto zwracana Nic Funkcja ustawia warto kontekstu wejciowego drzewa. Musi by wywoywana dla kadego parametru kontekstu wejciowego biblioteki, ktry jest uywany przez dane drzewo.
void TCShadeTreeInvalidateAll(PTREE tree) void TCShadeTreeInvalidate(PTREE tree, ID id)

Parametry

tree (IN) id (IN)

wskanik na drzewo cieniowania identyfikator parametru wejciowego kontekstu wejciowego

Warto zwracana Nic Funkcja powiadamia drzewo cieniowania o deaktualizacji wartoci parametru wejciowego kontekstu wejciowego. Drzewo nie przeliczy swoich parametrw wyjciowych jeli system nie wywoa jednej z powyszych funkcji. Pierwsza posta funkcji dezaktualizuje wszystkie parametry wejciowe, natomiast druga tylko jeden, podany parametr (w ten sposb moemy uzyska pewn optymalizacj ewaluacji drzewa cieniowania, poniewa przeliczane bd tylko te parametry wyjciowe, ktre zale od tych zdeaktualizowanych za pomoc TCShadeTreeInvalidate ).
Tabela 5-5 Funkcje interfejsu biblioteki wykorzystywane w trakcie renderingu

62

Przyrostek funkcji, np: TCShadeTreeOutCxGet... Int Float Point Color Vector Sample FloatArray ColorArray

Parametry funkcji zalene od przyrostka funkcje Get int * FLOAT * FLOAT[3] FLOAT[3] FLOAT[3] TSample * int *, FLOAT * int *, FLOAT[3] * funkcje Set int FLOAT FLOAT[3] FLOAT[3] FLOAT[3] TSample int, FLOAT * int, FLOAT[3] *

Tabela 5-6 Przyrostki funkcji interfejsu i odpowiadajce im parametry

5. Zakoczenie dziaania biblioteki Zakoczenie dziaania wie si ze skasowaniem wszystkich uytych drzew cieniowania oraz zwolnieniem wykorzystywanych obiektw pomocniczych. Operacje te s wykonywane po wywoaniu odpowiednich funkcji interfejsu.
void TCShadeTreeDestroy(PTREE tree)

Parametry

tree (IN)

wskanik na drzewo cieniowania

Warto zwracana Nic Funkcja kasuje podane drzewo cieniowania. Uwaga: parametr tree musi by prawidowym wskanikiem na drzewo cieniowania.
void TTerminate()

Parametry

Nic

Warto zwracana Nic Funkcja powinna by wywoana po zakoczeniu pracy z bibliotek. Zwolniona zostanie pami po wszystkich wykorzystywanych obiektach oraz odadowane zostan biblioteki dynamiczne z dodatkowymi wzorami.
Tabela 5-7 Funkcje interfejsu biblioteki zwizane z koczeniem dziaania

5.4. Interfejs programistyczny-rozszerzanie biblioteki o nowe wzory


Wspomniano ju o tym, e TexLib wykorzystuje dodatkowe dynamicznie adowane biblioteki z implementacj nowych wzorw. Jest to jedyna, ale dajca due moliwoci metoda, za pomoc ktrej moemy dowolnie rozszerza moliwoci biblioteki. Kady nowy wzr musi by zdefiniowany wedug pewnych regu i implementowa cile okrelone funkcjonalnoci. Na definicje wzoru skadaj si pochodne 2 klas (opisanych wczeniej w punkcie 5.2): CPattern oraz CPatternFactory. Pierwsza z nich implementuje waciwy algorytm obliczajcy pewne parametry wyjciowe, druga istnieje w celach pomocniczych pomocniczych, jako fabryka nowych obiektw wzoru. Przykadowa klasa CPatternFactory dla wzoru o nazwie Checker jest widoczna na Program 5-2.

63

class CFactoryChecker : public CPatternFactory { virtual CPattern *New() { return new CPatternChecker(this); }; virtual char *GetName() { return name; }; private : static char name[]; }; char CFactoryPattern::name[] = Checker;

Program 5-2 Przykadowa klasa typu CPatternFactory

Klasa dziedziczca po CPattern implementuje kilka metod umoliwiajcych jej wykorzystanie w drzewach cieniowania. Program 5-3 zawiera przykadow deklaracj CPatternFactory, zawierajc funkcje, ktre s w CPattern zadeklarowane jako abstrakcyjne, a wic ktrych pokrycie jest konieczne w klasach pochodnych.
class CPatternChecker : public CPattern { public: CPatternChecker(CFactoryChecker *pFactory); virtual void Evaluate(); virtual void EvaluateArea(); virtual void Initialise(CShadeTree *pShadeTree = NULL); };

Program 5-3 Przykadowa klasa typu CPattern

Biblioteka DLL zawierajca definicje nowych wzorw musi ponadto zawiera publiczn (eksportowan) funkcj o sygnaturze TPatternFactories *Init(), ktra po zawoaniu zwrci tablic obiektw typu CPatternFactory (dla kadego nowego typu naley stworzy jeden obiekt CPatternFactory). Obiekty te (ich funkcja New()) posu bibliotece do tworzenia obiektw wzorw.

5.5. Zawarto kontekstu cieniowania w popularnych systemach grafiki fotorealistycznej


Biblioteka i jej wzory dziaaj na pewnym standardowym kontekcie cieniowania, ustalonym na podstawie analizy kilku kontekstw popularnych systemw do renderingu (3dsMAX, LightWave, RenderMan, BMRT, LADS). Parametry dobrano tak, aby udostpniay jak najwikszy zakres dziaania, jednoczenie jednak biorc pod uwag to, e kady system dziaa w odmienny sposb. Istniej parametry, ktre s wykorzystywane i udostpniane w interfejsach programistycznych do tworzenia tekstur proceduralnych w prawie kadym systemie. Parametry bardziej zaawansowane, zwizane z antyaliasingiem wzorw, nie s ju niestety traktowane w ten sam sposb przez systemy do grafiki 3D i rni si bardzo oferowanymi moliwociami, dokadnoci oblicze, czy w kocu wydajnoci. Wartoci zmiennych opisujcych podobne charakterystyki cieniowanej prbki mog si znacznie rni midzy rnymi systemami [T&M 1998]. Ponadto, kady z systemw ma swoje charakterystyczne zmienne, ktre nie wystpuj w innych programach. Zwykle s one zwizane z pewnymi niestandardowymi moliwociami lub sposobami dziaania (np. moliwo wykorzystania tekstury podczas renderingu radiosity w 64

jednym z systemw implikuje obecno w kontekcie cieniowania zmiennych pozwalajcych na dokadn identyfikacj cieniowanego wielokta w ten sposb mona wykorzysta wczeniej obliczone owietlenie). Poniej znajduje si zestawienie najwaniejszych informacji, ktre popularne systemy udostpniaj w swoich interfejsach do programowania tekstur proceduralnych. Dla kadego systemu przedstawiono 3 kategorie zmiennych: podstawowe, zwizane z antialiasingiem oraz inne. Odpowiadaj one przedstawionej wyej klasyfikacji.

5.5.1. 3dsMAX release3


Jest to system, ktra udostpnia programicie obiektowy interfejs budowy moduw rozszerze (midzy innymi funkcji cieniujcych). Klasa ShadeContext udostpnia kontekst cieniowania. Jej metody oraz atrybuty daj dostp midzy innymi do zmiennych opisanych w Tabela 5-8 Wybrane zmienne kontekstu cieniowania systemu 3dsMAX release 3 (niektre z nich s dostpne przez wywoanie funkcji, wszystkie przedstawione parametry s tylko do odczytu):
Nazwa Typ podstawowe ScreenUV UVW P V Normal OrigNormal Gnormal CurTime Opis

punkt 2D Znormalizowane pooenie piksela na ekranie punkt punkt punkt punkt punkt punkt float Wsprzdne w ukadzie UVW Wsprzdne cieniowanego punktu Wektor widoku o pocztku w punkcie pooenia kamery i kierunku do cieniowanego punktu (znormalizowany) Normalna w kierunku obserwatora (mona j zmodyfikowa za pomoc funkcji SetNormal) Oryginalna normalna do powierzchni (normalna wynikajca z geometrii, na ktr nie ma wpywu uycie SetNormal) Normalna trjkta) geometryczna (normalna do cieniowanego

Aktualna warto czasu (jeli aktualnie renderowana jest animacja)


antialiasing

Antialias DP DUVW

boolean punkt punkt float

Okrela, czy antialiasingu

cieniowanie

powinno

uywa

metod

Pochodna P wzgldem piksela. Mwi o tym, jak szybko zmienia si pozycja wzgldem ekranu. Pochodne UVW dla punktu. Uywana do celw antialiasingu. Opisuje jak szybko zmienia si normalna. Zmienna jest uywana gwnie do antyaliasingu podczas tworzenia obliczania mapowania rodowiskowego. Im wiksza warto Curve, tym wiksza powierzchnia musi by prbkowana.
inne

Curve

Node

obiekt

Jest to wskanik do obiektu przechowujcego informacje na 65

INode

temat cieniowanego wza sceny. Wzy posiadaj swoje nazwy, macierze transformacji, klucze animacji. Mog by ukadane w hierachii. Jest to wskanik do obiektu cieniowanej geometrii. Wsprzdne barycentryczne cieniowanego trjkta Wspczynnik zaamania wiata

GetEvalObject BarycentricCoords GetIOR

obiekt Object punkt float

Tabela 5-8 Wybrane zmienne kontekstu cieniowania systemu 3dsMAX release 3

Klasa ShadeOutput, w ktrej materia pozostawia wyniki oblicze, posiada atrybuty opisujce kolor, przezroczysto oraz wspczynnik zaamania (ang: index of refraction)

5.5.2. LightWorks
LightWorks Application Development System jest opisany w ... Udostpnia midzy innymi informacje przedstawione w Tabela 5-9 Wybrane zmienne kontekstu cieniowania systemu LightWorks.
Nazwa Typ podstawowe C P I E alpha Opis

kolor punkt

Kolor powierzchni w aktualnie cieniowanym punkcie Wsprzdne w ukadzie obiektu aktualnie cieniowanego punktu Pooenie obserwatora Wspczynnik pokrycia powierzchni (1 powierzchnia pokrywa cakowicie, 0 powierzchnia niewidoczna) Przezroczysto. Jest to filtr, przez ktry mnoony jest kolor spoza powierzchni. Naley zauway rnic midzy t zmienn a zmienn alpha, ktra steruje widocznoci powierzchni. Dla alpha = 0 powierzchnia bdzie niewidoczna, tymczasem dla T = (0, 0, 0) powierzchnia bdzie miaa kolor C. Dla T= (1, 1, 1) moe wydawa si janiejsza, poniewa do koloru C dodany zostanie komponent koloru spoza paszczyzny. Jasno I prbki po uwzgldnieniu alpha i T jest wyliczana z modelu (I oznacza jasno spoza paszczyzny):

wektor Wektor kierunku patrzenia punkt float

kolor

I = alpha * C + alpha * T * I '+ (1 alpha) I '


Zauwamy, e dla obiektu na czarnym tle ( I=(0, 0, 0) ) parametr T nie ma znaczenia.
N, Ng

wektor

Normalne: uywana do cieniowania oraz geometryczna normalna aktualnie renderowanego trjkta.

66

u, v, s, t

float

Parametry powierzchni koordynaty tekstury.


antialiasing

opisanej

parametrycznie

oraz

dPds, dPdt, dPdu, dPdv ds, dt, du, dv

Pochodne koordynat tekstury oraz parametrw powierzchni wektor opisuj jak zmienia si pozycja wraz ze zmian parametrw powierzchni. float Zmiana parametrw powierzchni LADS udostpnia wielokt, ktry ma ksztat przecicia aktualnie cieniowanej powierzchni z piramid widzenia wychodzc z obliczanego piksela. Jest to informacja, ktra wielokt umoliwia bardzo dokadny analityczny antialiasing (funkcja cieniujca powinna obliczy kolor redni dla powierzchni ograniczonej do pixel polygon.

pixel polygon

Tabela 5-9 Wybrane zmienne kontekstu cieniowania systemu LightWorks

5.5.3. RenderMan
RenderMan to jeden z niewielu systemw implementujcych standard opisu scen trjwymiarowych o nazwie RenderMan Interface. Jest midzy innymi wykorzystywany w produkcji profesjonalnych efektw specjalnych do filmw. Ma due moliwoci wanie dziki interfejsowi teksturowania proceduralnego. Tabela 5-10 Wybrane zmienne kontekstu cieniowania standardu opisu scen 3D RenderMan Interface
Nazwa Typ podstawowe Opis

punkt

Wsprzdne cieniowanego punktu w lokalnym ukadzie wsprzdnych. Odpowiednie funkcje pozwalaj na przeksztacenie punktu do dowolnego innego ukadu (np. wiata, kamery, itp..)

I E N, Ng u, v, s, t L C, O

Kierunek promienia przecinajcego powierzchni (wektor od wektor punktu pooenia kamery, jeli przeksztacenie kamery okrelona kamer typu pinhole). punkt wektor float Pooenie obserwatora. Normalne: uywana do cieniowania oraz geometryczna normalna aktualnie renderowanego trjkta. Parametry powierzchni koordynaty tekstury. opisanej parametrycznie oraz

wektor Kierunek nadchodzcego promienia. kolor Kolor oraz filtr (przez ktry mnoony jest kolor promienia przez powierzchni) powierzchni.
antialiasing

dPdu, dPdv du, dv

wektor float

Pochodne parametrw powierzchni opisuj jak zmienia si pozycja wraz ze zmian parametrw powierzchni. Zmiana parametrw powierzchni. 67

inne time dtime dPdtime

float float wektor

Aktualny czas (jeli renderowana jest animacja) Ilo czasu zawarta w aktualnie obliczanej klatce animacji. Okrela jak pozycja P zmienia si w jednostce czasu (warto zdeterminowana przez motion blur na scenie)

Tabela 5-10 Wybrane zmienne kontekstu cieniowania standardu opisu scen 3D RenderMan Interface

5.5.4. LightWave
System LightWave, prcz standardowych wartoci P, N, s, t, udostpnia w swoim interfejsie warto spotSize, ktra jest przyblionym promieniem okrgu, w ktrym mona zawrze powierzchni cieniowanej paszczyzny widocznej przez aktualnie obliczany piksel obrazu. Mona j zinterpretowa jako przyblienie rednicy okrgu opisanego na wielokcie pixel polygon obliczanym przez renderer LightWorks.

5.5.5. Kontekst w bibliotece TexLib


W interfejsach tekstur proceduralnych we wszystkich opisanych systemach istniej wartoci tylko do odczytu (zwykle P, I, L, s, t, pochodne P: dPds, dPdt, dPdu, dPdv) i takie, ktre mona czyta i modyfikowa jako wasnoci powierzchni (C, N, T, alpha). Biblioteka TexLib rozdziela te dwa rodzaje zmiennych i umieszcza je w dwch osobnych kontekstach: wejciowym i wyjciowym. Kontekst wejciowy jest zbiorem pewnych najczciej uywanych w innych systemach zmiennych. Wybrano te, ktre s niezbdne do ewaluacji trjwymiarowych tekstur proceduralnych oraz kilka, ktre nie s dostpne we wszystkich systemach, a ktrych obecno znacznie zwiksza potencjalne moliwoci biblioteki. Zmienne s przedstawione w Tabela 5-11.
Zmienna P N Typ (Tabela 4-2) Opis

Point Vector

Wsprzdne aktualnie cieniowanego punktu w ukadzie lokalnym obiektu Wektor normalny do aktualnie cieniowanej paszczyzny Kolor paszczyzny w cieniowanym punkcie P. System renderujcy moe stosowa drzewo cieniowania TexLib na przykad do modyfikacji ju rzutowanej na geometri tekstury tradycyjnej. W takim przypadku musimy zna ten wczeniej naoony kolor paszczyzny. Przezroczysto powierzchni. Podobnie jak w przypadku koloru C, biblioteka moe tylko modyfikowa wczeniej ustalon przez wykorzystujcy j system warto, musimy wic zna warto ustalon przez system. Kierunek promienia przecinajcego powierzchni w cieniowanym punkcie (od ang. Incident vector). Punkt pooenia obserwatora (od ang. Eye point)

Color

Color

I E

Vector Point

68

u, v, s, t, dPds, dPdt, dPdu, dPdv ds, dt, du, dv

Float Vector Float

Parametry powierzchni opisanej parametrycznie oraz koordynaty tekstury. Pochodne koordynat tekstury oraz parametrw powierzchni opisuj jak zmienia si pozycja wraz ze zmian parametrw powierzchni. Zmiana parametrw powierzchni rednica okrgu opisanego na wielokcie bdcym przeciciem stoka widzenia wychodzcego z aktualnie cieniowanego piksela oraz cieniowanej paszczyzny. Jest to warto podobna do tej wykorzystywanej w systemie LightWave. W przypadku systemu LADS spotSize jest przektn prostokta opisanego na pixel polygon. Dla systemw liczcych antialiasing analityczny jedynie za pomoc pochodnych punktu P (dPds, dPdt, itp..) spotSize moe by obliczany nastpujco:
spotSize = max( dPdu * du ^ dPdv * dv , MinSpotSize) , gdzie ^ oznacza iloczyn wektorowy 2 wektorw

spotSize

Float

AA

Int

Zmienna przeczajca uycie antialiasingu analitycznego (od ang. Analytic Antialiasing). Warto AA=0 oznacza wyczenie antialiasingu, AA0 oznacza wczenie antialiasingu. Wszystkie wzory udostpniajce ten tryb zaczn go wykorzystywa. Warto czasu. Suy do renderingu animacji i jest umown wartoci zmiennoprzecinkow (tzn. nie mona interpretowa upywu czasu od wartoci time=0 do time=1 jako np. 1 sekundy, poniewa to, jak time bdzie wykorzystany zaley od systemu wykorzystujcego bibliotek)

time

Float

Tabela 5-11 Zmienne kontekstu wejciowego biblioteki TexLib

Wartoci dPds, dPdt, dPdu, dPdv, ds., dt, du, dv, spotSize s wykorzystywane waciwie wycznie dla wzorw, w ktrych potrzebny jest antialiasing. Ze wzgldu na wygod uycia zostay one zamknite w jednej strukturze typu TSample. Definicj tej struktury przedstawia Program 5-4.
typedef struct { /* * analytic antialiasing toggle */ int AA; /* * derivatives */

69

FLOAT

dPds[3], dPdt[3], dPdu[3], dPdv[3];

/* * changes in texture/parameter space */ FLOAT ds, dt, du, dv; /* * antialiasing filter size */ FLOAT spotSize; } TSample;

Program 5-4 Definicja typu struktury TSample znajdujcej si w interfejsie TexLib

Zawarto kontekstu wyjciowego umoliwia zmian koloru, przezroczystoci oraz normalnej do paszczyzny. Istnieje take moliwo przesunicia punktu P, ale obsuguje j niewiele systemw (jest nim np. raytracer Blue Moon Rendering Tool).
Zmienna C N Typ (patrz Tabela 4-2) Opis

Color Vector

Nowy kolor paszczyzny dla punktu P kontekstu wejciowego Zmodyfikowana normalna dla punktu P kontekstu wejciowego Zmodyfikowany punkt P kontekstu wejciowego. Uwaga: Nie kady system udostpnia moliwo modyfikacji paszczyzny (przemieszczenia, ang. displacement). Jeli tak, to zmienn t wykorzystuje si zwykle przesuwajc wejciowy punkt P wzdu wektora normalnego N. Zmodyfikowana przezroczysto. Wspczynnik pokrycia powierzchni.

Point

T alpha

Color Float

Tabela 5-12 Zmienne kontekstu wyjciowego biblioteki TexLib

5.6. Wybrane szczegy implementacyjne


5.6.1. Wzory definiowane w bibliotekach DLL
TexLib wykorzystuje biblioteki DLL do rozszerzania zbioru podstawowych wzorw. Wzory specjalne, takie jak CalculateNormal, Add, Multiply itp. s zdefiniowane w rdzeniu biblioteki a tym samym dostpne bez dodatkowych plikw DLL. Cz wzorw, ktre mog by dystrybuowane z bibliotek jako standardowe (np. NoisePerlin) s zdefiniowane w bibliotece patterns.dll umieszczonej w podkatalogu aplikacji wykorzystujcej TexLib o nazwie Patterns. Podczas uruchamiania aplikacji, TexLib jest inicjalizowany. W czasie tego procesu wszystkie biblioteki DLL z podkatalogu Patterns s wczytywane do pamici. Kada 70

biblioteka z definicjami wzorw oprcz definicji samych klas wzorw (patrz punkt 5.4) musi zawiera eksportowan funkcj o nazwie Init i deklaracji:
PATTERNS_API TPatternFactories *Init();

Funkcja zwraca tablic obiektw fabryk wzorw. Tablic tworzy si w sposb podany w Program 5-5
PATTERNS_API TPatternFactories *Init(); { TPatternFactories *pFactories; pFactories = new TPatternFactories(); pFactories->Add(new CFactoryWzor1()) // pFactories->Add(new CFactoryWzorN()); return pFactories; }

Program 5-5 Inicjacja wzorw w bibliotece DLL

5.6.2. Ewaluacja drzewa cieniowania


Wszystkie parametry wzorw, w tym take kontekstw, s ewaluowane tylko w razie potrzeby. Prba pobrania parametru wyjciowego dowolnego wzoru powoduje cig ewaluacji wszystkich parametrw, od ktrych dany parametr zaley. Wynika std, e rozpoczcie ewaluacji drzewa moe by rozpoczte tylko przez prb odczytania przez system wykorzystujcy je ktrego z parametrw wyjciowych kontekstu wyjciowego. Przeanalizujmy kolejno ewaluacji parametrw drzewa pokazanego na Diagram 5-7. Ewaluacja rozpoczyna si od parametru color wzoru A. Wymusza to ewaluacj parametru P wzoru E, po czym nastpuje pobranie koloru black lub white. Pobranie koloru white wie si z dalszym obliczeniem P wzoru D i pobraniem wczeniej przeliczonego parametru P wzoru E (parametr P wzoru E jest wic liczony tylko raz na prbk). Po wyliczeniu parametru P wzoru B zakoczona zostanie ewaluacja parametru color wzoru A i wynik zostanie przekazany do kontekstu wyjciowego. aden z parametrw wzoru C nigdy nie bdzie obliczony, poniewa nie ma adnego parametru kontekstu wyjciowego, ktry by zalea od ktrego z nich.. Naley zauway wynikajce std moliwoci optymalizacji od strony systemu wykorzystujcego TexLib. Nie musi on bowiem uzupenia parametrw kontekstu wejciowego, ktrych drzewo cieniowania nie uywa. Naley take zwrci uwag na to, e parametry kontekstu wejciowego, ktre posiadaj swoje odpowiedniki w kontekcie wyjciowym nie musz by koniecznie w kontekcie wyjciowym prawidowe. Nie bd prawidowe (bd rwne wartociom domylnym) jeli nie ma jawnego poczenia midzy nimi w drzewie cieniowania. Oczywicie nic nie stoi na przeszkodzie, aby takie poczenia tworzy w kadym budowanym drzewie cieniowania.

71

Diagram 5-7 Przykad kolejnoci ewaluacji parametrw drzewa cieniowania

Jeszcze jedna moliwo optymalizacji, trudna jednak do wykorzystana w praktyce, polega na obliczeniu we wzorze tylko tych parametrw wyjciowych, ktre s potrzebne. Zwykle wzory wypeniaj wszystkie swoje wyjcia, poniewa takie rozwizanie jest prostsze do zaimplementowania. Istnieje jednak moliwo obliczenia tylko potrzebnych wartoci dziki funkcjom w klasie CPattern o deklaracjach
void Evaluate(int ID); void EvaluateArea(int ID);

Parametrami funkcji s identyfikatory wyj, ktrych ewaluacja jest potrzebna. Domylna implementacja tych funkcji polega na wywoaniu odpowiednio Evaluate() oraz EvaluateArea(), co powoduje obliczenie wszystkich parametrw wyjciowych, nawet tych nigdy nie uywanych.

5.6.3. Zapobieganie cyklom


Wspomniano ju, e drzewa cieniowania nie mog zawiera cykli prostych. Rozpoznawanie cykli odbywa si w trakcie procesu renderingu i jest oparte na flagach w obiektach klasy CPattern. Kady obiekt wykorzystujcy wyjcia innych wzorw ustawia flag m_bBeingEvaluated na pocztku funkcji Evaluate... i czyci j po odczytaniu ostatniego potrzebnego parametru wyjciowego innego wzoru. Jeli na pocztku ewaluacji (po wejciu do

72

jednej z funkcji Evaluate... ) flaga jest ustawiona, to oznacza to, e drzewo cieniowania zawiera cykl.

5.7. Integracja z pakietem LADS do renderingu fotorealistycznego


Integracja aplikacji Edytora z LADS posiada wiele aspektw, ktre podzieli mona na dwie grupy. 1. Integracja systemu LADS z bibliotek TexLib. Wie si ona z obsug drzew cieniowania oraz wykorzystaniem danych dostarczanych przez kontekst wyjciowy biblioteki na poziomie procedur cieniujcych (ang. shaders) systemu LADS. 2. Rendering z wykorzystaniem renderera LADS z poziomu Edytora. Obsuga odpowiednich funkcjonalnoci LADS z poziomu interfejsu Edytora, wizualizacja obrazw obliczonych przez pakiet. Drugi aspekt integracji z pakietem LADS jest mniej ciekawy z punktu widzenia grafiki trjwymiarowej i tekstur proceduralnych. Pewne szczegy tego procesu s podane w punkcie 6.3.

5.7.1. System do renderingu fotorealistycznego LightWorks


LADS (LightWorks Application Development System) jest pakietem wspomagajcym budow aplikacji wykorzystujcych grafik trjwymiarow. Edytor drzew cieniowania uywa tego systemu w poczeniu z bibliotek TexLib do wizualizacji drzew cieniowania. LADS zosta zaprojektowany do szybkiego tworzenia aplikacji, w ktrych zachodzi potrzeba wykorzystania technik grafiki trjwymiarowej. Posiada rozbudowany system programowania tekstur proceduralnych, ktry pozwala na modyfikacj dowolnych parametrw powierzchni za pomoc kilku rodzajw tzw. procedur cieniujcych (ang: shaders). W szczeglnoci, umoliwia modyfikacj wszystkich parametrw, ktre zawiera OutContext biblioteki TexLib. Dostarcza te wszystkich parametrw InContext tej biblioteki. Architektura systemu jest przedstawiona na Diagram 5-8.
Aplikacja Interfejs API

Geometry Repository

System Services

Modul 3

LightWorks
Diagram 5-8 Architektura systemu LADS

Modul n

73

Jak wida, struktura systemu LADS opiera si na moduach, a komunikacja aplikacji z systemem oraz moduw midzy sob odbywa si za pomoc interfejsu bdcego zbiorem funkcji API. Wikszo moduw jest zalena od innych. Istniej dwa podstawowe moduy systemu wykorzystywane przez wikszo pozostaych, opcjonalnych moduw. S one odpowiedzialne za udostpnianie funkcjonalnoci zwizanych z konkretnym systemem operacyjnym (np. alokowanie pamici modu System Services) oraz przechowywaniem geometrii (modu Geometry Repository). W konfiguracji systemu uywanej wraz z Edytorem wystpuj dodatkowo nastpujce moduy: drivery suce do wywietlania renderowanych obrazw w okienku systemu Windows oraz umoliwiajce zapis obrazw na dysk w formatach jpg, tif, tga oraz bmp Command Interpreter Module, ktry zajmuje si odczytywaniem scen z przykadow geometri modu zajmujcy si okrelaniem widocznoci geometrii modu cieniowania modu udostpniajcy interfejs do tworzenia tekstur proceduralnych. Spord wszystkich wymienionych moduw nas najbardziej interesuje modu interfejsu tekstur proceduralnych. Jego miejsce w procesie renderingu pokazuje Diagram 5-9. modu cieniujcy okrelanie widocznoci (visibility processor) funkcja cieniujca cieniowanie (shading) funkcja cieniujca

Diagram 5-9 Architektura procesu renderingu w systemie LADS

Funkcje cieniujce nale wanie do moduu teksturowania. Algorytm cieniowania jest realizowany przez procedury z moduu cieniowania. Korzystaj one z moduu okrelania widocznoci okrelajc, ktre powierzchnie s w danym pikselu widoczne. Modu okrelania widocznoci realizuje w ten sposb jeden z kilku wbudowanych algorytmw renderingu (scanline, raytracing, radiosity). Dla kadego piksela tworzony jest nastpnie przez procedury moduu cieniowania odpowiedni kontekst wywoania funkcji cieniujcych. Istnieje kilka rodzajw funkcji cieniujcych, ktre odpowiedzialne s za okrelenie rnych waciwoci powierzchni. Dla wszystkich tych rodzajw dla tego samego piksela kontekst jest taki sam, jednak rni si one dostpem do globalnych zmiennych go reprezentujcych. Rol kluczowych dla naszych zastosowa rodzajw funkcji przedstawia Tabela 5-13.

74

Typ funkcji cieniujcej (ang. shader)

Opis

COLOUR TRANSPARENCY DISPLACEMENT

Okrela kolor cieniowanej paszczyzny. Okrela widoczno oraz przezroczysto paszczyzny. Modyfikuje normaln do powierzchni symulujc w ten sposb jej nierwnoci.

Tabela 5-13 Typy funkcji cieniujcych moduu cieniowania systemu LADS

Dokadny przebieg procesu okrelania wasnoci powierzchni jest przedstawiony na Diagram 5-10. Naley pamita o tym, e proces ten moe by wykonywany dla jednego piksela obrazu kilkakrotnie dla rnych powierzchni. Nie jest to wic algorytm moduu cieniowania a jedynie jego element. Element ten jest jednak najbardziej nas interesujc czci produkcji obrazu przez system LightWorks. Wynika to z tego, e wanie tutaj nastpuje integracja funkcjonalnoci biblioteki TexLib z systemem do renderingu.

Przestrze tekstury Shader DISPLACEMENT Shader TRANSPARENCY wiata Shader COLOUR

Model owietlenia

Postprocessing

Diagram 5-10 Przebieg procesu ewaluacji wasnoci powierzchni w systemie LADS

Kady shader posiada funkcj uniforms, ktra jest woana przed rozpoczciem renderingu po to, aby funkcja moga zainicjowa swoje zmienne zalene tylko od parametrw, ktre nie zmieniaj si w trakcie procesu renderingu. Jest ona odpowiednikiem inicjalizacji drzewa cieniowania w bibliotece TexLib. W czasie procesu renderingu , dla kadej prbki wywoywane s funkcje preview lub full shaderw, zalenie od trybu tworzenia obrazu. Rendering koczy si wywoaniem dla kadego z shaderw funkcji unload.

75

5.7.2. Wykorzystanie biblioteki TexLib w procesie cieniowania systemu LightWorks


Drzewa cieniowania TexLib mog modyfikowa jedn, kilka, lub nie modyfikowa adnej z wasnoci powierzchni. W zalenoci od tego jakie wasnoci s rzeczywicie modyfikowane (odpowiednia funkcja interfejsu biblioteki pozwala si tego dowiedzie), w procesie cieniowania LightWorks wykorzystywane s rne shadery. W systemie LightWorks wystpuje pojcie materiau. Materia jest zbiorem shaderw. Mog by w nim zawarte wszystkie rodzaje funkcji (midzy innymi COLOUR, TRANSPARENCY i DISPLACEMENT) biorce udzia w procesie cieniowania przedstawionym na Diagram 5-10. W zalenoci od tego, jakie parametry s kontrolowane przez aktualne drzewo cieniowania, Edytor tworzy materia zawierajcy odpowiednie rodzaje shaderw. S to: shader typu COLOR, jeli drzewo cieniowania modyfikuje parametr kontekstu wyjciowego C shader typu TRANSPARENCY jeli drzewo modyfikuje parametry T i/lub alpha shader typu DISPLACEMENT jeli drzewo modyfikuje parametr N lub P Na potrzeby Edytora zdefiniowano specjalne shadery kadego z tych 3 typw. Obsuga biblioteki TexLib jest w kadym z nich zalena od tego w jakim momencie procesu cieniowania jest on uywany oraz jakie inne shadery s wykorzystywane. Tak wic na przykad to, w ktrym momencie tworzone i niszczone jest drzewo cieniowania zaley od tego, czy drzewo cieniowania normaln N czy te nie (jeli tak, to drzewo musi by utworzone w shaderze DISPLACEMENT, inaczej dopiero w TRANSPARENCY lub COLOUR, poniewa DISPLACEMENT nie bdzie istnia w materiale). Algorytm dziaania znajduje na Program 5-6 (program jest przykadem uycia interfejsu biblioteki TexLib).
[...] #include TexLib/CInterf.h //plik nagwkowy interfejsu biblioteki TexLib shader DISPLACEMENT/TRANSPARENCY/COLOUR { function uniforms { if (istnieje ju tree) pobierz istniejce drzewo tree else { //wczytaj drzewo cieniowania z pliku tree = TCShadeTreeCreate(kontekst_wej, kontekst_wyj); TCShadeTreeLoad(tree, nazwa_pliku); //jeli operacja si udaa zainicjuj drzewo if (tree) TCShadeTreeInitialise(tree);

function preview/full { if ( jest to pierwszy shader w procesie renderingu DISPLACEMENT->TRANSPARENCY->COLOUR ) { ustaw kontekst wejciowy drzewa tree {

76

// ustaw C,N,P,I,s,t oraz sample jeli uywane w drzewie: if (TCShadeTreeInCxUsed(tree, inX) TCShadeTreeInCxSetXXX(tree, inX, C/N/P/I/s/t/) zaznacz_globalnie_kontekst_jako_ustawiony_dla_tej_prbki;

//zdeaktualizuj kontekst wejciowy drzewa TCShadeTreeInvalidateAll(tree);

//pobierz wyniki switch (rodzaj_tego_shadera) { case DISPLACEMENT: { if (TCShadeTreeOutCxModified(tree, outN) TCShadeTreeOutCxGetVector(tree, outN, N); else TCShadeTreeOutCxGetPoint(tree, outP, P); } break; case TRANSPARENCY: { if (TCShadeTreeOutCXModified(tree, outT) TCShadeTreeOutCxGetColor(tree, outT, T); if (TCShadeTreeOutCXModified(tree, out_alpha) TCShadeTreeOutCxGetColor(tree, out_alpha, alpha); } break; case COLOUR: { TCShadeTreeOutCxGetColor(tree, outC, C); } break; } function unload { //skasuj wykorzystane drzewo if (drzewo tree nie skasowane) TCShadeTreeDeleteDestroy(tree); }

[...]

Program 5-6 Algorytm dziaania shaderw DISPLACEMENT, TRANSPARENCY oraz COLOUR uywajcych biblioteki TexLib

5.7.3. Przykadowa implementacja shadera LADS wykorzystujcego TexLib


Program 5-7 zawiera przykadow definicj shadera typu COLOUR wykorzystujcego kolor obliczony przez odpowiednie drzewo cieniowania TexLib. Jedynym parametrem shadera jest nazwa pliku zawierajcego definicj drzewa cieniowania. Zakadamy, e drzewo wykorzystuje podstawowe wartoci kontekstu wejciowego oraz modyfikuj warto C kontekstu wyjciowego.
#include "li/lishader.h" #include "texlib/cinterf.h" //nagwek systemu LADS //nagwek zawierajacy f-cje interfejsu TexLib //deklaracja shadera typu COLOUR

colour shader "texlib sample"

77

//deklaracja parametru shadera z nazw pliku z drzewem cieniowania parameter "file name" LtString p_filename = "" ; PTREE tree; PINCX incx; POUTCX outcx; //zmienna przechowujca obiekt drzewa cieniowania //obiekt kontekstu wejciowego drzewa cieniowania //obiekt kontekstu wyjciowego drzewa cieniowania

shader function //funkcja definiujca kolor powierzchni { //ustawienie parametrw kontekstu wejciowego //wartoci in... s zdefiniowanie w cinterf.h //zmienne N, P, I, s, t s zmiennymi globalnymi shadera i zawieraj //wartoci odpowiednio normaln, wsp. punktu, kierunek promienia //kolidujacego z paszczyzn, koordynaty tekstury TCShadeTreeInCxSetVector( tree, inN, N ); TCShadeTreeInCxSetPoint ( tree, inP, P ); TCShadeTreeInCxSetVector( tree, inI, I ); TCShadeTreeInCxSetFloat ( tree, in_s, s ); TCShadeTreeInCxSetFloat ( tree, in_t, t ); //kontekst zosta zmieniony naley o tym poinformowa bibliotek TCShadeTreeInvalidateAll(tree); //pobranie wartoci wyjciowej drzewa koloru powierzchni TCShadeTreeOutCxGetColor(tree, outC, Co);

uniforms function //funkcja wywoywana przed kadym renderingiem { //kasujemy drzewo cieniowania, ktre zostao stworzone przed poprzednim //renderingiem if ( tree notequal NULL ) TCShadeTreeDestroy(tree); //utworzenie nowego drzewa cieniowania tree = TCShadeTreeCreate(&incx, &outcx); //wczytanie definicji drzewa z pliku o podanej nazwie TCShadeTreeLoad(tree, p_filename); //zainicjowanie drzewa cieniowania TCShadeTreeInitialise(tree); //ustawnie wartoci kontekstu wejciowego, ktre pozostan stae //w czasie tego renderingu. w tym przypadku warto czasu TCShadeTreeInCxSetFloat(tree, in_time, 0); //funkcja wywoywana podczas niszczenia obiektu //shadera w systemie LADS

unload function {

if ( tree notequal NULL ) { TCShadeTreeDestroy(tree); tree = NULL; } //funkcja wywoywana po stworzeniu obiektu shadera

load function {

78

tree = NULL; }

Program 5-7 Przykadowa imlementacja shadera LADS wykorzystujcego TexLib

Kompilacja shadera wymaga uycia narzdzia dostarczanego z systemem oraz dostepnoci wszystkich wymaganych nagwkw (midzy innymi nagwka cinterf.h zawierajcego deklaracje biblioteki TexLib). Do konsolidacji niezbdny jest plik biblioteki texlib.lib oraz pliki *.lib systemu LADS. Po zainicjowaniu shadera w tworzonej aplikacji, naley stworzy jego instancj i poda nazw pliku *.tree (patrz Dodatek B) zawierajcego definicj drzewa cieniowania. Wykonanie renderingu po przypisaniu shadera do obiektw na scenie spowoduje wykonanie funkcji uniforms wczytujcej drzewo oraz funkcji shader dla kadej cieniowanej prbki.

79

6. Edytor drzew cieniowania


Ten rozdzia przedstawia system dziaajcy w oparciu o graficzny interfejs uytkownika umoliwiajcy prost i szybk edycj drzew cieniowania (zwany dalej w tekcie Edytorem) oraz ich rendering z wykorzystaniem systemu do renderingu LADS.

6.1. Funkcjonalno aplikacji Edytora


Edytor realizuje zaoenie mwice o atwoci obsugi tekstur proceduralnych. Prezentuje wizualnie struktur tekstur proceduralnych w przejrzysty i prosty sposb. Kady z parametrw wzorw wchodzcych w skad drzewa cieniowania posiada elementy interfejsu uytkownika pozwalajce na jego atw zmian oraz atwo dostpny opis zastosowania. Edytor jest aplikacj typu MDI (MultiDocument Interface), przez co pozwala na prac z wieloma teksturami jednoczenie umoliwiajc atwe porwnywanie efektw dziaania kilku algorytmw. Aplikacja okazaa si w trakcie bada wspaniaym i bardzo uytecznym narzdziem do poszukiwania nowych wzorw proceduralnych. Stao si tak midzy innymi dziki wbudowanemu systemowi pautomatycznego doboru parametrw oraz moliwoci szybkiego podgldu wynikw (za naciniciem jednego klawisza). Poniej znajduje si zestawienie moliwoci Edytora podzielone na kilka kategorii. 1. Konstrukcja drzew cieniowania Wizualizacja struktury drzew w postaci diagramw atwe wstawianie nowych wzorw i wartoci za pomoc odpowiednich okienek dialogowych. Tworzenie pocze midzy parametrami wzorw i wartociami z uyciem technologii drag & drop. Zawsze widoczne opisy kadego z parametrw wzorw. 2. Edycja wartoci parametrw Dobr wartoci uatwiony za pomoc GUI (np. wybr koloru za pomoc standardowego okienka wyboru koloru Windows). Losowe dobieranie wybranych parametrw z pewnego ustalonego zakresu. Przeszukiwanie pewnej domeny parametrw (od pewnej ustalonej wartoci do wartoci kocowej, z zadan rozdzielczoci). Statystyki kadego z parametrw wyjciowych (wartoci minimalna, maksymalna, rednia, odchylenie standardowe i inne). 3. Wizualizacja dziaania drzew cieniowania Moliwo szybkiego podgldu dziaania drzewa, w dowolnej rozdzielczoci, przy uyciu kilku trybw dostpnych w systemie LightWorks oraz przy zastosowaniu dowolnej sceny zdefiniowanej w formacie *.lwc. Obsuga i wizualizacja wszystkich parametrw znajdujcych si w kontekcie wyjciowych TexLib. Moliwo renderingu animacji o dowolnej iloci klatek, ustalenia czasu startu, koca oraz skoku midzy kolejnymi klatkami (obsuga wartoci time w kontekcie wejciowym biblioteki). Eksport do plikw *.jpg, *.tga oraz *.tiff (animacje mog by eksportowane do automatycznie numerowanych plikw) 80

Eksport plikw *.tree dla kadej renderowanej klatki animacji (wane jeli renderujemy cig klatek z losowo dobieranymi parametrami).

6.2. Interfejs uytkownika


Edytor jest aplikacj uruchamian w systemie Windows i wykorzystuje standardowy interfejs graficzny uytkownika tego systemu. Oglny widok aplikacji jest przedstawiony na Rysunek 6-1.

Rysunek 6-1 Widok oglny Edytora drzew cieniowania

Okno aplikacji jest podzielone na 3 czci: 1. Standardowe menu oraz pasek narzdzi aplikacji typu Multi Document Interface. 2. Widok edytora diagramw drzew cieniowania. Tutaj odbywa si edycja drzew cieniowania. Istnieje oddzielne okno dla kadego otwartego dokumentu. 3. Widok waciwoci wzoru. Tutaj wywietlane s szczegowe informacje dla aktualnie zaznaczonego w oknie 2 wzoru.

6.2.1. Dodawanie i usuwanie wzorw i wartoci


Edytor udostpnia dwa sposoby dodawania nowych wzorw i wartoci. Pierwszy polega na uyciu menu kontekstowego. Po klikniciu prawym przyciskiem myszy w oknie edytora diagramu pojawi si menu jak na Rysunek 6-2.

Rysunek 6-2 Menu kontekstowe dodawania wzorw i wartoci

Alternatywn drog jest wybranie z menu aplikacji pozycji Add. W obydwu przypadkach wybranie Add Pattern doprowadzi nas do okna dialogowego widocznego na Rysunek 6-3. Lista w oknie Add Pattern zawiera identyfikatory wszystkich 81

dostpnych wzorw standardowo wbudowanych w bibliotek oraz dodatkowych, zdefiniowanych w bibliotekach DLL.

Rysunek 6-3 Okienko dialogowe dodawania nowego wzoru

Wybranie jednej z pozycji i nacinicie OK. spowoduje umieszczenie w edytorze diagramw w miejscu kursora myszki symbolu dodanego wzoru. Wybranie opcji Add Value spowoduje ukazanie si okienka Add new value (Rysunek 6-4), gdzie z listy typu ComboBox moemy wybra typ nowej wartoci a w okienku edycyjnym Properties wpisa wasnoci. Dla podanego na rysunku przykadu Properties powinno zawiera trzy oddzielone spacjami wartoci zmiennoprzecinkowe z zakresu [0..1]. Formaty dla innych typw zawiera Tabela 6-1.

Rysunek 6-4 Okienko dialogowe dodawania nowej wartoci staej

Typ
Int Float Color Point Vector FloatArray

Format tekstowy w okienku Properties Liczba cakowita, Przykad: -1 Liczba zmiennoprzecinkowa, Przykad: 0.5 3 liczby zmiennoprzecinkowe oddzielone spacjami, Przykad .2 .9 .4 Jak Color Jak Color Seria liczb zmiennoprzecinkowych poprzedzona liczb naturaln, oddzielone jedn lub wicej spacjami. Pierwsza liczba okrela rozmiar 82

tablicy, nastpne s jej elementami. Jeli liczba elementw jest mniejsza od zadeklarowanego rozmiaru, to pozostae elementy s inicjowane zerami. Przykad: 3 .2 4.5 -2.25 trjelementowa tablica Seria trjek liczb zmiennoprzecinkowych poprzedzona liczb naturaln, oddzielone jedn lub wicej spacjami. Pierwsza liczba okrela rozmiar tablicy, kada nastpujca trjka liczb okrela kolejny kolor. Podobnie jak w przypadku FloatArray, elementy nie podane s inicjowane zerami (kolorem czarnym w przypadku, gdy brakuje jakiej trjki). Przykad: 2 0 0 0 1 1 1 kolor czarny i biay

ColorArray

Tabela 6-1 Format tekstowy wartoci typw w bibliotece TexLib

Okienko Add Value zawiera nieaktywny przycisk Properties. Aktywuje si on po otworzeniu tego samego dialogu za pomoc podwjnego kliknicia na ju stworzonej wartoci. W tym przypadku umoliwia on, zalenie od typu wartoci, ustawienie jej parametrw. Dla wartoci typu Color przycisk Properties otwiera standardowe w Windows okno wyboru kolorw (Rysunek 6-5).

Rysunek 6-5 Waciwoci wartoci staych

W przypadku innych typw (Int, Float, Point, Vector, FloatArray, ColorArray) Properties pozwala na ustawienie parametrw randomizacji. Randomizacja polega na losowym dobraniu wartoci przed rozpoczciem renderingu. Dialog Value Properties pozwlaa na ustalenie zakresu losowania oraz, w przypadku tablic, minimalnej i maksymalnej iloci elementw (Rysunek 6-6). Randomizacja jest szczeglnie uyteczna podczas renderingu zestawu obrazkw (animacji).

83

Rysunek 6-6 Waciwoci wartoci staych zwizane z losowoci (waciwoci wartoci typu FloatArray).

6.2.2. Tworzenie pocze midzy wzorami


Tworzenie powiza pomidzy parametrami wzorw odbywa si w oknie edytora diagramw. Aby zrealizowa poczenie midzy parametrem pewnego wzoru a wyjciem innego wzoru naley: Klikn prawym przyciskiem myszy na wzorze, ktrego parametr wejciowy chcemy poczy z innym. Pojawi si menu kontekstowe (Rysunek 6-7) w ktrym poniej pozycji INPUTS: znajduje si lista parametrw wejciowych. Wybieramy jeden z nich. Za wskanikiem myszy zacznie poda linia o pocztku w symbolu wzoru. Klikn lewym przyciskiem myszy na wzorze, ktrego parametr wyjciowy chcemy wykorzysta lub na wartoci staej. W pierwszym przypadku (Rysunek 6-8) menu kontekstowe zawiera bdzie pozycj OUTPUTS: oraz nastpujc po niej list parametrw wyjciowych wraz z opisem typu kadego z nich. Wybieramy jeden z parametrw, przy czym jego typ musi by taki sam jak typ parametru wejciowego wybranego w poprzednim kroku. Jeli typy nie bd zgodne, Edytor wywietli odpowiedni informacj, a proces tworzenia poczenie nie powiedzie si.

84

Rysunek 6-7 Proces tworzenia poczenia midzy parametrami wybieranie parametru wejciowego

Po tych operacjach na diagramie pojawi si linia czce wybrane wzory (lub wzr i warto sta), opisana nazwami poczonych parametrw, co oznacza, e operacja powioda si.

Rysunek 6-8 Proces tworzenia poczenia midzy parametrami wybieranie parametru wyjciowego

85

6.2.3. Waciwoci wzorw


Cz okna roboczego oznaczona jako 3 na Rysunek 6-1 pokazuje wszystkie parametry wybranego wzoru oraz ich waciwoci. Rysunek 6-9 przedstawia waciwoci przykadowego wzoru Checker. Cz oznaczona jako 1 opisuje parametry wejciowe. Dla kadego parametru zaznaczony jest jego typ oraz rdo wartoci: DEFAULT: jeli parametr uywa swojej domylnej wartoci CONSTANT: jeli parametr uywa wartoci staej (jest poczony z wartoci w drzewie cieniowania) X of NAME: jeli uywa parametru wyjciowego X wzoru o nazwie NAME Po wybraniu dowolnego parametru z listy (podwietleniu) poniej pojawia si szczegowy opis w postaci: tekstowej informacji (na rysunku ... tekst No description), mwicej o przyjmowanym zakresie parametrw, ich znaczeniu itp., zalenie od parametru powtrzonej informacji o rdle danych wartoci domylnej (DEFAULT:...). Cz oznaczona jako 2 opisuje parametry wyjciowe. Podobnie jak wyej, jest tutaj lista wszystkich parametrw z podanym typem a po Rysunek 6-9 Widok waciwoci wzorw. 1zaznaczeniu konkretnego parametru w okienku parametry wejciowe, 2-parametry wyjciowe poniej dostajemy szczegowy opis. W przypadku parametrw wyjciowych opis zawiera: informacj tekstow o parametrze opis produkowanych wartoci, moliwych zastosowa itp., zalenie od potrzeby liczb uytkownikw tego parametru (czyli innych wzorw, a waciwie parametrw wejciowych wzorw, ktre wykorzystuj ten parametr) zalenie od typu parametru, wywietlane s take statystyki z ostatniego renderingu: o warto minimalna (min), o warto maksymalna (max), o rednia (avg), liczona jako wartosci avg = n n o odchylenie standardowe (stdDev), liczone jako

stdDev =

n ( wartosci2 ) ( wartosci ) 2 n(n 1)

86

Odchylenie standardowe opisuje to, jak szeroko wartoci s rozproszone od wartoci redniej. W praktyce jest przydatne do ustawiania wartoci progowych wyboru koloru dla wzoru Interpolator3D. o ilo oblicze parametru (sets). Jest to w praktyce liczba ewaluacji wzoru do ktrego naley parametr, zaley od rozdzielczoci obrazu oraz tego, jak wiele pikseli jest zajtych przez powierzchni, ktrej parametry s opisywane danych drzewem cieniowania. Naley zauway, e liczba ta moe si rni (i zwykle rni si) dla rnych systemw renderujcych, poniewa niektre z nich uywaj technik nadprbkowania lub innych podobnych technik wygadzania tekstur (antialiasingu), ktre mog wymusza ewaluacj wzoru wicej ni jeden raz na piksel.

6.2.4. Rendering
Edytor pozwala na rendering dowolnej sceny zapisanej w formacie *.lwc systemu LADS speniajcej opisane w punkcie ... zaoenia. Menu Scene zawiera pozycj Parameters (Rysunek 6-10), po wybraniu ktrej ukazuje si okno z ustawieniami sceny (Rysunek 6-11).

Rysunek 6-10 Menu parametrw sceny

Rysunek 6-11 Okienko dialogowe z ustawieniami parametrw sceny

Dialog ten pozwala na wybranie modelu owietlenia dla materiau, ktry bdzie uywa drzewo cieniowania aktywnego dokumentu. Dostpne s opcje plastic model owietlenia typu plastik, oraz constant model, w ktrym paszczyzna ma kolor niezaleny od owietlenia. Mona tutaj take wybra scen *.lwc z opisem geometrii (wszystkie sceny znajduj si w podkatalogu Scenes katalogu z ktrego uruchomiony zosta Edytor). Po zaznaczeniu sceny w okienu na prawo pojawi si podgld, w ktrym materia przeznaczony do uycia z drzewem cieniowania ma naoony wzr trjwymiarowej czerwono-zielonej kratki. Opcje renderingu s dostpne po wybraniu z menu Render pozycji Parameters (Rysunek 6-12). 87

Rysunek 6-12 Menu renderingu

Okno dialogowe Rendering Settings zawiera szereg opcji dotyczcych formatu obrazka, formatu zapisu na dysk oraz animacji (Rysunek 6-13).

Rysunek 6-13 Okienko dialogowe z parametrami renderingu

Sekcja Output zawiera rozmiar obrazka (rozmiar moe by dowoln liczb naturaln nie wiksz ni 4096) oraz tryb renderingu. Dostpne s 3 tryby renderingu wykorzystywane przedz LightWorks: PREVIEW, FULL oraz RTFULL. Ich opis mona znale w punkcie... Sekcja Output to file okrela nazw pliku oraz format obrazka, jeli ma by zapisany na dysku. Pozostawienie okienka FileName pustego lub wpisanie tam bdnego katalogu spowoduje, e obraz nie zostanie zapisany. Opcja Write tree file always oznacza zapisywanie razem z obrazkiem pliku *.TREE , ktry posuy do jego generacji. Jest to szczeglnie przydatne przy renderingu z losowymi parametrami. Jeli renderujemy wiele obrazw, to odpowiedni plik *.TREE jest jedynym rdem informacji na temat wartoci parametrw ktry zostay zastosowane. Sekcja Animation opisuje sposb renderowania animacji. Render animation przecza tryb renderingu animacji. Okienka edycyjne Start time, End time oraz Step okrelaj odpowiednio czas startu, koca oraz rozdzielczo czasow renderingu kolejnych klatek. Czas jest podczas tworzenia kolejnych klatek animacji dostarczany do kontekstu wejciowego drzewa w parametrze time. Obrazki s zapisywane na dysk z nazwami podanymi w oknie

88

FileName z przyrostkiem bdcym kolejnym numerem klatki. Dla przykadu z Rysunek 6-13 powstayby pliki test0001.jpg, test0002.jpg itd.

Rysunek 6-14 Wizualizacja postpu procesu renderingu

Rendering rozpoczyna wybranie z menu opcji Render/Render, nacinicie kombinacji Ctrl+R lub nacinicie przycisku Render.. w oknie Rendering settings. Widok ekrany w czasie procesu renderingu przedstawia Rysunek 6-14.

6.2.5. Serializacja drzew cieniowania


Edytor odczytuje i zapisuje pliki w formacie ST (ang. shade tree) oraz TREE. Pliki typu TREE zawieraj opis drzewa cieniowania i s serializowane (zapisywane i odczytywane) przez bibliotek. Dodatkowe informacje zwizane z interfejsem uytkownika oraz konfiguracj Edytora s zapisywane w plikach ST. Pliki te dodatkowo zawieraj odwoanie do definicji drzewa cieniowania czyli pliku TREE. Wybranie opcji Save, bd Save As z menu File powoduje wic utworzenie 2 plikw o tej samej nazwie, lecz 2 typach: ST i TREE. Pliki te znajduj si w tym samym katalogu i s potrzebne w trakcie odczytywania. Edytor odczytuje pliki typu ST, ale w trakcie procesu korzysta z odpowiadajcego mu TREE. Edytor umoliwia ponadto import drzew bezporednio z pliku TREE po wybraniu opcji File/Import from TREE. Zaimportowany diagram nie bdzie posiada poprawnego formatowania (tzn. symbole wzorw nie bd poprawnie rozoone na ekranie).

6.3. Wybrane szczegy implementacyjne


Poniej opisane zostay niektre z aspektw integracji Edytora z systemem LADS.

89

6.3.1. Opis scen trjwymiarowych


Sceny s opisane w formacie LWC systemu LADS. Plik sceny *.lwc zawiera cig wywoa funkcji API systemu. Sceny wykorzystywane wraz z Edytorem musz spenia pewne specjalne wymagania: 1. Scena musi opisywa list obiektw geometrii o ustalonej nazwie primList (od ang. primitive). Drzewo cieniowania zostanie wykorzystane do renderingu tej wanie geometrii. 2. Scena musi definiowa list wiate o ustalonej nazwie lightList. Aktywacj/deaktywacj wiate na scenie steruje Edytor. 3. Scena musi definiowa widok o nazwie camera. 4. Scena musi definiowa materia matShadeTree. Materia ten bdzie wykorzystywa aktywne drzewo cieniowania i bdzie przypisany do geometrii primList. Bdzie take posiada model owietlenia zdefiniowany przez uytkownika Edytora (patrz punkt 6.1). Zdefiniowano kilka podstawowych scen zawierajcych prost geometri. Istniej te sceny o bardzo skomplikowanej geometrii (100 tysicy trjktw), symulujce realne warunki renderingu i uywane dalej do testw wydajnoci biblioteki (patrz Rozdzia 7). Wszystkie pliki opisujce sceny musz znajdowa si w podkatalogu Scenes Edytora. Podczas inicjacji s stamtd odczytywane a ich nazwy umieszczane w odpowiednim okienku dialogowym umoliwiajcym potem ich wybr.

6.3.2. Rendering
Rendering sceny jest wykonywany w oddzielnym wtku, przez to interfejs uytkownika jest cay czas aktywny. Umoliwiao to dodanie opcji przerwania renderingu w jego trakcie. Od strony systemu LADS uyty zosta mechanizm call-back (wykorzystywany w tym systemie nader czsto) LADS woa co jaki okrelony czas funkcj callback Edytora, ktra powiadamia go w odpowiednim momencie o chci przerwania renderingu. System LADS udostpnia kilka trybw renderingu, w tym: PREVIEW szybki tryb renderingu scanline, bez antialiasingu, FULL tryb z antialiasingiem analitycznym RTFULL tryb, w ktrym uywany jest wbudowany raytracer, metod antialiasngu jest tutaj nadprbkowanie. Wzory TexLib nie uywaj antialiasingu analitycznego. Edytor korzysta z jednego z tych trybw zalenie od opcji, ktr wybierze uytkownik.

90

7. Badania eksperymentalne
Ten rozdzia zawiera opis zakresu przeprowadzonych eksperymentw, zestawienie oraz analiz ich wynikw. W skad zestawienia wynikw wchodz kolorowe fotorealistyczne obrazy oraz opis metody ich uzyskania i sposobw ulepszenia. W ramach analizy osignitych rezultatw przedstawiono wyniki czasowe oraz porwnanie wygenerowanych obrazw z fotografiami lub obrazami uzyskanymi innymi metodami grafiki komputerowej.

7.1. Cel i zakres ekperymentw


Celem bada eksperymentalnych bya ocena moliwoci oraz zaimplementowanych algorytmw w dziedzinie symulacji naturalnych powierzchni. Ocen przeprowadzono na podstawie opisanych w punkcie 2.4 parametrw: wydajno algorytmw (czasowa i pamiciowa), porwnanie ze zjawiskami wystpujcymi w naturze, jako obrazu, atwo uycia. wydajnoci

W ramach bada stworzonych zostao szereg drzew cieniowania symulujcych przykadowe zjawiska opisane w punkcie 3.1. Kade z nich zostao opisane pod ktem sposobu wykorzystania zaimplementowanych algorytmw (topologii drzew) oraz dziedziny symulowanych zjawisk. Przedstawione zostay take przykadowe obrazy stworzone przy uyciu opisanego w Rozdziale 6 Edytora. Wybrane obrazy posuyy dalej do porwna z fotografiami rzeczywistych zjawisk bd z najlepszymi ze znanych symulacji stworzonych za pomoc innych metod grafiki komputerowej. Obrazy przedstawiajce stosunkowo zoone sceny posuyy take do oceny jakoci rozumianej jako ocena iloci znieksztace wynikajcych z uproszcze bd niedokadnoci symulacji. Testy wydajnociowe zostay przeprowadzone przy uyciu kilku rnych zestaww obiektw symulujcych zmienne warunki wykorzystania biblioteki. Ocena atwoci uycia jest, podobnie jak ocena jakoci obrazu, subiektywna, i zostaa opracowana na podstawie dowiadcze zebranych w trakcie przeprowadzania eksperymentw.

7.2. Symulacje zjawisk wystpujcych w naturze


W tym punkcie zebrane zostay najciekawsze wyniki eksperymentw majcych na celu stworzenie jak najbardziej realnie wygldajcych symulacji. Kady z prezentowanych wzorw posiada: kilka obrazw przedstawiajcych go w praktycznym wykorzystaniu opis dziedziny realizowanych symulacji opis drzewa cieniowania, za pomoc ktrego zosta stworzony, wraz z jego schematem (uproszczonym w razie potrzeby) nazw pliku rdowego z definicj drzewa cieniowania

91

7.2.1. Skra salamandry


[SALAMANDRA.TREE] Wzr przypominajcy skr salamandry plamistej.

Drzewo cieniowania Do utworzenia wzoru wykorzystany zosta iloczyn jednowymiarowych wynikw funkcji NoiseWorley, ktry zosta przekazany funkcji Interpolate3D. Interpolate3D zwraca kolor zaleny od przekazanej wartoci. Ustalone zostay 4 kolory, ktre symuluj wygld skry salamandry plamistej.

Wykorzystanie praktyczne

92

7.2.2. Cienie kaustyczne


[CAUSTICS.TREE] Wzr symulujcy cienie kaustyczne czsto widoczne na dnie basenu.

Drzewo cieniowania Wzr powstaje z sumowania 2 warstw kolorw (funkcja Add) pochodzcych z interpolatorw kolorw (Interpolator3D). Obydwa interpolatory pobieraj jako parametry wyniki funkcji NoiseWorley, przy czym jedna z nich jest wersj fraktaln, druga jest obliczana na podstawie pewnej kombinacji liniowej. Jedna z nich jest take obliczana na podstawie punktu P znieksztacanego wczeniej za pomoc szumu (NoisePerlin). Jest to zabieg czsto stosowany przy wzorach skadanych z kilku warstw. Ciekawostk jest to, e wzr ten daje si atwo animowa. Efekt ten uzyskuje si przesuwajc punkt cieniowania z klatki na klatk za pomoc nastpujcej konstrukcji:

93

Punkt P uzyskany z funkcji TransformSample mona dalej przekazywa tak, jak do tej pory robilimy to z P pochodzcym bezporednio z kontekstu wejciowego. Efekt animacji jest bardzo realistyczny. Katalog Images/Water zawiera klatki takiej przykadowej animacji.

Wykorzystanie praktyczne

94

7.2.3. Skra wyprawiona


[LEATHER.TREE] Wzr symulujcy kolor oraz faktur powierzchni wyprawionej skry zwierzcej.

Drzewo cieniowania Cao symulacji zawarta jest w funkcji bazowej Leather. Wykorzystuje ona NoiseWorley oraz NoisePerlin tworzc kilka warstw znieksztace. Wynik funkcji Leather jest interpretowany jako wysoko (i przekazywany do funkcji CalculateNormal) lub jako wspczynnik, na podstawie ktrego Interpolator3D ustala kolor.

95

Wykorzystanie praktyczne

96

7.2.4. Skra wa
[SNAKE.TREE] Wzr symulujcy kolor oraz faktur skry wa.

Drzewo cieniowania

Ten wzr skada si z 2 warstw: warstwa podstawowa, ktra wykorzystuje zoenie funkcji NoiseWorley. Pierwsza (wewntrzna jeli zinterpretowa diagram uywajc zapisu matematycznego) zwracajca wartoci trjwymiarowe suy wstpnemu podziaowi przestrzeni na komrki, ktrych kolor jest nastpnie ustalany przy uyciu kolejnej funkcji NoiseWorley warstwa dodatkowa, wprowadzajca szum, ktry podnosi realizm obrazu Punkt P jest przed przekazaniem do jakichkolwiek innych funkcji znieksztacany w funkcji TransformSample. Jeszcze jedna funkcja NoiseWorley oraz odpowiadajca jej CalculateNormal realizuje odwzorowanie nierwnoci powierzchni.

97

Wykorzystanie praktyczne

98

7.2.5. Spkana ziemia


[SOIL2.TREE] Wzr symulujcy faktur spkanej ziemi na dnie wyschnitego jeziora.

Drzewo cieniowania

Dziaanie tego drzewa cieniowania jest zblione do drzewa symulujcego skr salamandry.

99

Wykorzystanie praktyczne

7.2.6. Twrczo H.R.Gigera


[GIGER.TREE] Wzr przypominajcy fragmenty obrazw H.R.Gigera autora midzy innymi scenografii do filmw serii Obcy.

Drzewo cieniowania Wzr jest tworzony za pomoc 2 fraktalnych jednowymiarowych funkcji NoiseWorley, ktrych wyniki s mnoone. Dodatkowo dodano odwzorowanie nierwnoci powierzchni, ktre dobrze widoczne jest na poniszej ilustracji:

100

Wykorzystanie praktyczne

101

7.3. Ocena efektywnoci


7.3.1. Warunki eksperymentu
Eksperymenty wydajnociowe zostay przeprowadzone przy uyciu komputera z procesorem Intel Pentium III Celeron 800MHz, 256MB pamici operacyjnej i systemem WindowsXP Professional. W celu oszacowania iloci czasu przeznaczonego przez system renderujcy (w tym przypadku LADS) na cieniowanie z uyciem biblioteki TexLib, zastosowano 3 sceny oraz 3 rne drzewa cieniowania. Konfiguracja scen zostaa dobrana tak, e mona je uzna za przypadki pesymistyczny, optymistyczny i poredni ze wzgldu na rol oblicze przeprowadzanych wewntrz TexLib. W przypadku traktowanym jako pesymistyczny, obiekt, ktrego materia wykorzystuje jedno z drzew cieniowania TexLib, zajmuje 100% obrazu. Dodatkowo, stosowany jest uproszczony model owietlenia, ktry nie bierze pod uwag adnych wiate znajdujcych si na scenie. Na scenie pes.lwc istnieje tylko 1 obiekt zoona z 2 trjktw paszczyzna. Punkt obserwatora znajduje si nad ni, a kierunek patrzenia jest do niej prostopady. W ten sposb paszczyzna wypenia ca powierzchni obrazu. Przypadek optymistyczny to taki, kiedy stosunkowo mao oblicze jest przeprowadzanych w bibliotece. Scena opt.lwc zawiera stosunkowo zoon geometri zawierajc ok. 100 tysicy niezalenych trjktw, ukadajcych si we fragment fraktalnego tetrahedronu. Materia wykorzystujcy badane drzewa cieniowania jest wykorzystywany tylko na ok. 30 trjktach tworzcych na rodku sceny niewielkich rozmiarw sfer i pojawia si na 7% pikseli wynikowego obrazu. Wszystkie materiay uywaj standardowego modelu owietlenia typu plastic. 102

Scena mid.lwc reprezentuje przypadek, ktry mona uzna za poredni. Znajduje si na niej umiarkowana ilo geometrii, a obiekt wykorzystujcy w materiale TexLib zajmuje 10% obrazu wynikowego. Scena mid2.lwc jest scen podobn do mid.lwc. Rni si od niej tym, e 52% pikseli wynikowego obrazu zawiera obiekt z materiaem wykorzystujcym badane drzewo cieniowania.

Dla kadej ze scen zosta zmierzony czas renderingu bez wykorzystania TexLib, jako czas bazowy, do ktrego odnosz si dalsze pomiary. Kolejne pomiary dotycz 6 rnych drzew cieniowania: empty.tree wzr kopiujcy wartoci C, N, T kontekstu wejciowego do kontekstu wyjciowego. Nie wykonuje adnych dodatkowych oblicze. Koszt ewaluacji tego drzewa jest rwny kosztowi zainicjowania oraz kadorazowej inicjacji kontekstu wejciowego dla wszystkich obliczanych prbek. checker.tree prosty wzr trjwymiarowej kratki. Najwiksz ilo czasu zajmuje w tym przypadku komunikacja midzy bibliotek TexLib a systemem renderujcym. salamandra.tree bardziej zoony wzr zoony z 4 funkcji bazowych (w tym 2 stosunkowo wolne NoiseWorley) oraz 6 pocze midzy nimi. Tutaj wikszo czasu procesora przypadajca na obliczenia cieniowania bdzie przeznaczona na ewaluacj 6 funkcji bazowych. Wzr modyfikuje tylko kolor powierzchni. salamandra2.tree j.w., z t rnic, e wzr modyfikuje zarwno kolor jak i normaln do powierzchni. salamandra3.tree jak salamandra.tree, z t rnic, e wzr modyfikuje kolor, normaln oraz przezroczysto powierzchni. complex.tree najbardziej skomplikowany wzr, zoony z najbardziej wymagajcych algorytmw fraktalnych wersji NoiseWorley FractalNoiseWorley. Modyfikuje kolor powierzchni

7.3.2. Czynniki wpywajce na czas generowania obrazu


Czynnikami majcymi najwikszy wpyw na czas generacji obrazu s: System renderujcy. Z oczywistych wzgldw ma on due znaczenie na generacj obrazu. Przy scenach zawierajcych skomplikowan geometri najwiksza ilo oblicze jest przeznaczana na przeksztacenia geometryczne. Cieniowanie w takim przypadku moe by spraw drugorzdn. Jednak nawet dla scen z prost geometri wpyw prdkoci systemu renderujcego ma istotne znaczenie. Zoono drzewa cieniowania. Ilo oraz rodzaj funkcji bazowych umieszczonych w drzewie cieniowania jest najwaniejszym czynnikiem decydujcym o prdkoci uzyskania wynikw dla wikszoci scen. Dalsza analiza tego wpywu znajduje si w punkcie 7.3.3. Uywane wartoci kontekstu wejciowego. Implementacja shadera konkretnego systemu renderujcego, ktra uywa TexLib, powinna bra pod uwag to, jakie atrybuty kontekstu wejciowego s wykorzystywane w drzewie i przekazywa bibliotece tylko te potrzebne. Ewaluacja niektrych z tych atrybutw (ktrych drzewo cieniowania i tak nie uywa) moe bowiem zaj niepotrzebnie czas. Ilo modyfikowanych atrybutw kontekstu wyjciowego. Wikszo z systemw renderujcych bdzie si posugiwaa oddzieln funkcj cieniujc (shaderem) dla modyfikacji kadego z atrybutw kontekstu wyjciowego. Moe to wnie dodatkowy koszt to procesu generacji.

103

W kolejnym punkcie znajduje si bardziej szczegowa analiza wszystkich czynnikw majcych wpyw na prdko generacji obrazw.

7.3.3. Rezultaty liczbowe


Tabela 7-1 zawiera wyniki pomiarw czasw renderingu dla rnych konfiguracji scen oraz drzew cieniowania. Uwzgldniono wszystkie kombinacje scen i wzorw opisanych w punkcie 7.3.1.
scena nazwa wzoru none empty checker salamandra salamandra2 salamandra3 complex none empty checker salamandra salamandra2 salamandra3 complex none empty checker salamandra salamandra2 salamandra3 complex none empty checker salamandra salamandra2 salamandra3 complex pomiary czasu* [s] 6.189 6.510 6.990 11.296 24.927 25.804 17.174 1.763 1.863 2.183 7.731 24.180 24.205 14.711 1.922 2.130 3.115 31.860 111.430 111.561 69.480 1.632 1.742 3.906 59.846 235.589 238.133 120.630 6.289 6.350 7.300 11.297 24.660 25.366 17.134 1.732 1.893 2.193 7.733 24.740 24.852 14.912 1.863 1.993 3.255 31.283 111.547 111.944 65.384 1.622 1.743 3.895 60.540 235.233 234.787 120.500 6.109 6.629 6.960 11.238 24.176 25.807 17.135 1.722 1.892 2.153 7.732 24.440 24.541 15.600 1.852 1.963 3.950 31.255 111.394 111.330 65.540 1.623 1.762 3.895 58.976 236.154 238.200 120.200 redni czas T [s] 6.196 6.383 7.083 11.277 24.588 25.659 17.148 1.739 1.883 2.176 7.732 24.453 24.533 15.074 1.879 2.029 3.440 31.466 111.457 111.612 66.801 1.626 1.749 3.899 59.787 235.659 237.040 120.443 Teval [s] 0.000 0.188 0.888 5.081 18.392 19.463 10.952 0.000 0.144 0.437 5.993 22.714 22.794 13.335 0.000 0.150 1.561 29.587 109.578 109.733 64.922 0.000 0.123 2.273 58.162 234.033 235.414 118.818

opt.lwc (przypadek optymistyczny)

mid.lwc (przypadek poredni)

mid2.lwc

pes.lwc (przypadek pesymistyczny)

*) Wszystkie czasy zostay zmierzone przy uyciu wbudowanego zegara aplikacji Edytora drzew cieniowania. Obrazy wyrenderowane zostay w rozdzielczoci 800x600, przy uyciu trybu renderingu PREVIEW systemu LADS (brak nadprbkowania oraz antialiasingu geometrycznego wygadzajcego artefakty na brzegach geometrii). Tabele i wykresy pochodz ze skoroszytu w formacie MS Excel znajdujcego si w pliku Images\pomiary.xls
Tabela 7-1 Wyniki pomiarw czasw renderingu

Czas renderingu pokazany w Tabela 7-1 w kolumnie T jest sumarycznym czasem trwania wszystkich operacji potoku renderingu.

104

Najbardziej interesujcy nas czas, czyli czas, ktry system przeznacza na ewaluacj drzewa cieniowania TexLib, obliczamy jako rnic cakowitego czasu T i czasu renderingu sceny bez uycia TexLib (z wzorem oznaczonym w tabeli jako none). Zamiast materiau, ktry wykorzystuje TexLib, jest w takim przypadku wykorzystywany substytut, posiadajcy najprostszy model owietlenia (kolor stay). Tak obliczony czas jest umieszczony w kolumnie Teval. Teval jest z kolei nastpujc sum czasw: Teval = Tinit + samples * (Tctx + T patterns ) , gdzie: Tinit czas inicjacji drzewa oraz poszczeglnych funkcji bazowych, Tctx czas przygotowywania kontekstu kontekstu wejciowego dla drzewa oraz wszystkich innych operacji zwizanych z komunikacj midzy bibliotek a systemem renderujcym (poinformowanie biblioteki o zmianie kontekstu, przekazanie wynikw oblicze), Tpatterns czas ewaluacji wszystkich funkcji w drzewie dla pojedynczej prbki samples liczba prbek, dla badanych obrazw w rozdzielczoci 800x600 warto ta jest rwna48e4. Badania wykazay, e Tinit jest relatywnie may (bliski 0) dla wszystkich wzorw i moe by pominity jako czynnik wpywajcy na czas Teval. (Naley zaznaczy, e w kadym renderingu istniao i byo ewaluowane tylko jedno drzewo cieniowania. Jeli na scenie znajdowa si wicej ni obiekt, to kady z nich wykorzystywa to samo drzewo cieniowania. Ta uwaga jest istotna, jeli analizujemy wielkoci czasw zwizane z inicjacj drzewa cieniowania i poszczeglnych funkcji wchodzcych w jego skad. W mocy tego zaoenia czas kadego renderingu zawiera czas inicjacji pojedynczego drzewa cieniowana.) Niewiele wikszy wpyw ni Tinit ma na cakowity czas ewaluacji drzewa cieniowania take czas Tctx. Czas Teval dla wszystkich scen w wierszu empty jest nastpujc sum (nie wystpuje tu czas zwizany z obliczeniami funkcji bazowych): Teval = Tinit + samples * Tctx , gdzie T init 0 rednia jego warto dla 4 uytych w testach scen wynosi: 0.151s, co jest wartoci stosunkowo niewielk (rwn 3.15e-7s dla jednej prbki 0.151/48e4) i na potrzeby dalszej analizy pomijaln. Jak si mona spodziewa, wpyw iloci pikseli cieniowanych za pomoc TexLib na cakowity czas ewaluacji drzewa cieniowania bdzie liniowy. Potwierdza to Wykres 7-1. Czas renderingu w oczywisty sposb bardzo mocno zaley od wykorzystanych w drzewie funkcji bazowych. Wida to ju na krzywych z Wykres 7-1, gdzie pokazano czasy dla 3 wzorw o rnym stopniu skomplikowania (najprostszy checker, najbardziej zoony complex).

105

czas ewaluacji drzewa cieniowania Teval [s]

120 100 80 60 40 20 0 0 20 40 60 80 100 % pikseli cieniowanych za pomoc TexLib na obrazie

checker salamandra complex

Wykres 7-1 Czas ewaluacji drzewa cieniowania w zalenoci od pokrycia obrazu pikselami cieniowanymi za pomoc TexLib

Generalnie, czas renderingu zaley w niewielkim stopniu od tego, jakie wartoci kontekstu wyjciowego modyfikujemy. W przypadku odwzorowania nierwnoci powierzchni (modyfikacji normalnej N) uywamy jednak w wikszoci przypadkw funkcji bazowej CalculateNormal, ktrej dziaanie opiera si na kilkukrotnej ewaluacji funkcji wysokoci. W zalenoci od stopnia zoonoci tej funkcji, czas renderingu moe znacznie wzrosn. Wykres 7-2 przedstawia przyrosty czasu generacji obrazu w zalenoci od tego, jakie parametry kontekstu wyjciowego s modyfikowane. Zosta on stworzony na podstawie czasw Teval dla scen salamandra, salamandra2 oraz salamandra3. Kolejne przyrosty uzyskano z rnic czasw generacji tych 3 scen (sceny te, jak wczeniej opisano, rni si tylko iloci modyfikowanych parametrw wyjciowych)
100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0% 1.021 1.381 modyfikacja przezroczystoci (T) modyfikacja normalnej N modyfikacja koloru (C) 5.081 opt.lwc (T=19.5s) 5.993 mid.lwc (T=22.8s) 29.587 mid2.lwc (T=110s) 58.162 pes.lwc (T=235s)

1.071

0.746

13.311

16.721

79.991

175.871

sceny
(w nawiasie podano czasy ewaluacji drzewa cieniowania Teval)

Wykres 7-2 Procentowy przyrost czasu generacji obrazu po wprowadzeniu zmian kolejnych parametrw kontekstu wyjciowego

106

Jak wida, modyfikacja normalnej ma znaczny wpyw na szybko generacji obrazu. Wpyw dodania modyfikacji parametrw alpha bd T jest natomiast niezaleny od stopnia skomplikowania sceny i jest zwizany raczej z czasem inicjacji dodatkowego shadera, a wic jest zaleny od konkretnego systemu. wiadczy o tym wikszy procentowy udzia czasu w scenach generowanych najszybciej (opt.lwc, mid.lwc) oraz jego staa (ok. 1s) warto dla wszystkich przypadkw. W testach wykorzystano sceny, ktre mona przyj za przypadki optymistyczny, pesymistyczny i poredni, jeli chodzi o znaczenie oblicze wykonywanych wewntrz biblioteki. Oto jak przedstawia si procentowy udzia czasu spdzonego na ewaluacji drzew cieniowania w tych 3 rnych przypadkach (Do stworzenia wykresu uyto danych zmierzonych przy wykorzystaniu wzoru complex).
100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0%

10.952 13.335 64.922 118.818

cieniowanie TexLib obl. geometryczne+ cieniowanie

6.196 1.739 opt.lwc (T=17.1s) mid.lwc (T=15s) 1.879 mid2.lwc (T=66.8s) 1.626 pes.lwc (T=120.4s)

sceny

Wykres 7-3 Stosunek czasw cieniowania wykonywanego przy uyciu TexLib do czasw innych operacji przeprowadzanych w systemie do renderigu

Cieniowanie z kadym z przypadkw zajmuje znaczn ilo czasu, sigajc nawet 98%.

7.4. Ocena jakoci - porwnania


W tym punkcie porwnano fotorealistyczne obrazy uzyskane dziki TexLib z innymi naturalnymi lub wygenerowanymi innymi metodami grafiki komputerowej. Zestawienia przykadowych obrazw zawarte s w Tabela 7-2.

107

Fotografia lub obraz wygenerowany innymi metodami grafiki komputerowej

Obraz wygenerowany przy pomocy TexLib

skra wa Obraz wygenerowany w tym przypadku posiada nieco rnicy si od przykadowego wzr. Nie jest to jednak duy mankament, poniewa w praktyce, tekstura ta byaby uyta prawdopodobnie na obiekcie nie bdcym, jak tutaj, paszczyzn. Ksztat ctek ulegby wtedy znieksztaceniu zmniejszajc efekt sztucznoci. Zdjcie po lewej stronie nie przedstawia paszczyzny, co dodaje obrazowi pewnej gbi. Brak jej w tej prostej scenie naszej symulacji.

cienie kaustyczne Cienie kaustyczne na powyszym zdjciu s widziane pod pewnym ktem, std atwo odrni obraz sztuczny od naturalnego. Symulacja wyglda jednak bardzo naturalnie, co jest jeszcze bardziej podkrelone w animacji, ktrej kilkadziesit wygenerowanych klatek mona znale w katalogu Water.

skra wyprawiona Ta symulacja jest jedn z najbardziej realistycznych. Maa wielko detali nie pozwala na powyszych obrazach tego doceni. Istniej tutaj take dosy znaczne rnice w kolorystyce, jednak oglne wraenie jest bardzo dobre, a po naoeniu tekstury na modele skrzanych przedmiotw (np. tapicerka samochodu, torba itp.) efekt moe by trudny do odrnienia od zdjcia. 108

wyschnita ziemia Kolejny przykad dobrej symulacji naturalnego zjawiska. Mona zauway, e wygenerowany obraz posiada nieco mniej szczegw ni zdjcie (drobne nierwnoci ziemi, przebarwienia). Nic nie stoi na przeszkodzie, aby symulacj wzbogaci o dodatkowe elementy oparte na szumie czy kolejnych warstwach pkni. W tym przykadzie chodzio o pokazanie oglnej faktury ziemi bez zbytniego rozbudowywania topologii drzewa cieniowania.
Tabela 7-2 Porwnanie tekstur uzyskanych dziki TexLib z naturalnymi zjawiskami

7.5. Podsumowanie
Ocena atwoci generowania nowych tekstur jest trudna do przeprowadzenia ze wzgldu na brak danych zebranych od wikszej liczby uytkownikw systemu. Mona jednak powiedzie, e stosunek moliwoci do stopnia skomplikowania procesu tworzenia symulacji zjawisk rzeczywistych jest bardzo wysoki i znacznie przewysza znane systemy opisywane np. w punkcie 3.3, ktrych funkcjonalno jest ograniczona skoczonym zbiorem algorytmw i ich parametrw. Jeli traktowa wartoci stae w drzewie cieniowania jako odpowiedniki parametrw w systemach do generacji tekstur, to w stworzonym systemie nie istnieje ograniczenie liczby parametrw. Drzewa cieniowania nie maj bowiem ograniczenia stopnia skomplikowania. Mocn stron opracowanych technik jest realizm produkowanych symulacji. Porwnanie z naturalnymi zdjciami zamieszczonymi powyej pokazuje, e mona uzyska stosunkowo prostymi drzewami cieniowania zaskakujco dobre efekty. Dziedzina moliwych symulacji jest ponadto bardzo dua, jako e wiele naturalnych powierzchni ma charakter komrkowy, a produkcja takich wanie jest z uyciem TexLib najprostsza. S przypadki, kiedy jako obrazu uzyskiwana dziki TexLib odbiega od ideau. Na obrazach wystpuj artefakty wynikajce bd z wystpowania w obrazie wysokich czstotliwoci (efekty aliasingu), bd nieprzewidzianych efektw skadania funkcji bazowych. Obydwie przyczyny wystpowania artefaktw mog by rozwizane za pomoc algorytmw antialiasingu, ktre tutaj nie zostay zaimplementowane.

109

8. Podsumowanie
Tekstury proceduralne uchodz za niepraktyczne ze wzgldu na koszt ich uzyskania. Implementacja dobrej tekstury moe trwa dugo w stosunku do uzyskania zdjcia danej powierzchni. Opracowana biblioteka funkcji bazowych TexLib, w poczeniu z aplikacj wykorzystujc graficzny, intuicyjny interfejs uytkownika, zdaje si dewaluowa to twierdzenie. Tekstury wykorzystane w Rozdziale 7 daj w wikszoci przypadkw zdecydowanie wicej ni zadowalajce efekty, a przecie proces ich tworzenia od pomysu do gotowego obrazu trwa krtko w porwnaniu w tradycyjnym podejciem do implementacji tekstur proceduralnych. Moliwo szybkiego wprowadzania i podgldu zmian w opracowywanym wzorze, stosowanie raz zaimplementowanych rozwiza wielokrotnie (w postaci funkcji bazowych lub wczeniej zaprojektowanych fragmentw drzew cieniowania), statystyki wartoci parametrw wyjciowych oraz wiele innych udogodnie sprawia, e tworzenie nowych wzorw nie jest przy uyciu TexLib mudnym zajciem dla wtajemniczonych. Jest wrcz przeciwnie nowe tekstury powstaj z atwoci, i mog by projektowane nawet przez tych, ktrzy bd ich potem bezporednio uywa, czyli artystw. Tworzenie tekstur przez osoby bezporednio zainteresowane ich wykorzystaniem jest bardzo dobrym rozwizaniem, poniewa umoliwia uniknicie nieporozumie i przypadkw nieumiejtnego uycia parametrw. Uzyskano tym sposobem take wietne narzdzie do twrczej nauki o teksturach proceduralnych. Student moe awo przeprowadza dowiadczenia na predefiniowanych funkcjach bazowych, a osignwszy biego i wystarczajce zrozumienie efektw ich skadania, moe pokusi si o implementacje wasnych. Zadanie to uatwi system rozszerze oparty na bibliotekach DLL. Edytor drzew cieniowania zosta zintegrowany z bardzo dobrym pakietem do grafiki fotorealistycznej LADS. Jest to jednak tylko przykadowa integracja, jako, e, zgodnie z zaoeniami, biblioteka TexLib moe by uyta z kadym systemem, ktry udostpnia interfejs teksturowania proceduralnego w postaci pewnego jzyka cieniowania (ktry w szczeglnych przypadkach jest zwykym C bd C++). TexLib zostaa zaimplementowana w C++, opracowano jednak interfejs jzyka C, co w pewnych przypadkach jest jedyn moliwoci integracji (przykadem moe by RenderMan, bd wanie LADS). Otwart spraw pozostaje antialiasing funkcji bazowych. W istniejcej wersji adna z funkcji bazowych nie realizuje antialiasingu analitycznego, co wymusza stosowanie metod antialiasingu dostarczanych przez systemy do renderingu. Sprowadza si to do mniej lub bardziej sprawnego nadprbkowania, ktre nie zawsze przynosi bardzo dobre efekty, a podnosi za to wymagania wydajnociowe. Istnieje jeszcze wiele sposobw rozbudowy stworzonego systemu. Jednym z ciekawszych jest rozbudowa Edytora o moliwoci budowy drzew cieniowania za pomoc programowania genetycznego. Traktujc zbir drzew cieniowania jako populacj, chromosomem bdzie pojedyncze drzewo cieniowania, natomiast genem moemy nazwa skadow funkcj cieniujc. Etap algorytmu genetycznego realizujcy ewolucj, bdzie uywa podstawowych operatorw genetycznych: mutacji i krzyowania. Wynikiem dziaania operatora krzyowania 2 chromosomw bdcych drzewami cieniowania, bdzie nowe drzewo, ktre bdzie zawierao elementy obydwu drzew rdowych. Mutacja natomiast stworzy nowe drzewo cieniowania zastpujc pewn liczb skadowych funkcji innymi. Poniewa trudno wyobrazi sobie funkcj oceniajc kadego z osobnikw populacji (czyli obraz generowany przez dane drzewo cieniowania), kady krok ewolucji populacji koczyby si prezentacj wynikw uytkownikowi, ktry odrzucaby 110

niepotrzebne osobniki. Wiadomo o kilku podobnych podejciach do generacji tekstur, jednak we wszystkich nie uywano tak funkcjonalnie rozbudowanych drzew cieniowania. Kolejn moliwoci rozbudowy, usprawniajc proces tworzenia tekstur, jest udostpnienie podgldu zmian drzewa cieniowania w Edytorze w czasie rzeczywistym. Istniejce rozwizanie pozwala, co prawda, na szybki podgld zmian, jednak polega on zawsze na regeneracji caego obrazu. Za pomoc odpowiedniego systemu bylibymy zdolni do wywietlenia obrazu ze zmienionymi atrybutami powierzchni z pominiciem systemu renderujcego i caego standardowego potoku renderingu. Jest to moliwe, o ile w czasie pierwszej generacji obrazu dla nowych parametrw obserwacji sceny zapamitamy dla kadego piksela informacje o paszczynie, do ktrej naley, oraz modelu owietlenia. Edycja drzew cieniowania staaby si wtedy jeszcze wygodniejsza, poniewa regeneracja obrazu byaby dla czci scen oraz czci parametrw danego drzewa o wiele szybsza (w niektrych przypadkach w czasie rzeczywistym).

111

9. Literatura
[Gamma 1995] E. Gamma, R. Helm, R. Johnson, J. Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley, Reading Mass., 1995 [T&M 1998] D. Ebert, F. K. Musgrave, D. Peachey, K. Perlin, S. Worley, Texturing and Modeling. A procedural approach., Academic Press Professional, 1998 [Pixar] Pixar, The RenderMan Interface 3.2, July 2000 [Foley] J. D. Foley, Wprowadzenie do grafiki komputerowej, Wydawnictwo Naukowo-Techniczne, Warszawa 1995 [Watt 2000] Alan Watt, 3D Computer Graphics, Addison-Wesley, Harlow 2000 [Egerton 1999] Patricia A. Egerton and W.S. Hall, Computer Graphics: Mathematical First Steps, Prentice Hall, London 1999 [Rogers] David F. Rogers, State of Art In Computer Graphics. Aspects of visualization, Springer-Verlag, New York 1994 [Apodaca] Tony Apodaca, How PhotoRealistic RenderMan Works, SIGGRAPH 2000: Advanced RenderMan 2 [Fukuda 2000] K. Fukuda, Frequently Asked Questions in Polyhedral Computation, Swiss Federal Institute of Technology, Department of Mathematics, http://www.ifor.math.ethz.ch/~fukuda/polyfaq/polyfaq.html, October 2000 [Miyata 1990] K. Miyata, A Method of Generating Stone Wall Patterns, SIGGRAPH '90 Conference Proceedings, pp.387-394, 1990. [Turk 1991] G. Turk, Generation Textures on Arbitrary Surfaces Using ReactionDiffusion, Computer Graphics (SIGGRAPH 91 Proceedings), 25(4):289-298, July 1991 [Worley] Steven Worley, A Cellular Texture Basis function, http://graphics.lcs.mit.edu/~mcm/6.838j/talk.html [Walter 1992] M. Walter, LIBTEX A Software Toolkit for Texture Synthesis in Computer Generated Images, Instituto de Informatica, Porto Alegre Brasil, 1992 [Walter 1998] M. Walter, A. Fournier, M. Reimers, Clonal Mosaic Model for the Synthesis of Mammalian Coat Patterns, , Department of Computer Science University of British Columbia [Kukla] J. M. Kukla, E. J. Bedwell, A procedural texture for epidermal tissue, Department of Computer Science and Electrical Engineering, University of Maryland Baltimore County, http://www.csee.umbc.edu/~ebedwe/skin/img/ [Legakis] Justin Legakis, Cellular Textures, http://graphics.lcs.mit.edu/~legakis/gallery_cellular.html [Blinn 9/1998] Jim Blinn, Ten More Unsolved Problems in Computer Graphics, IEEE Computer Graphics and applications 9/10 1998 [Glassner 3/2000] Andrew Glassner, The Digital Ceraunoscope, IEEE Computer Graphics and applications, 3/4 2000 [Cahn] J.W.Cahn, W.C.Carter, Crystal Shapes and Phase Equilibria: A Common Mathematical Basis, http://pruffle.mit.edu/~ccarter/hub_paper/section3_3.html, Marzec 1995 [Fielding] Alan Fielding, Distance and Similarity Measures, http://obelia.jde.aca.mmu.ac.uk/multivar/dist.htm, 2002 112

Dodatek A. Propozycja wiczenia laboratoryjnego


A.1. Instrukcja dla studentw
A.1.1. Cel wiczenia
Celem wiczenia jest zapoznanie si z pojciem tekstur proceduralnych, podstawowymi technikami ich generacji oraz zaprojektowanie i zaimplementowanie wasnych algorytmw produkujcych wysokiej jakoci fotorealistyczne obrazy. W wiczeniu wykorzystana zostanie rozszerzalna biblioteka funkcji cieniujcych TexLib oraz aplikacja edytor sucy do definiowania drzew cieniowania zoonych z funkcji cieniujcych zdefiniowanych w bibliotece. Edytor zosta zintegrowany z system do generowaniu grafiki fotorealistycznej LightWorks Application Development System, dziki czemu moliwy jest rendering obrazw bezporednio z poziomu aplikacji.

A.1.2.

Wprowadzenie - tekstury proceduralne

Tekstury proceduralne to dzisiaj podstawa generacji profesjonalnych, fotorealistycznych obrazw uywanych w filmie, reklamie wizualizacji architektonicznej itd. Ich generacja polega na obliczeniu pewnych waciwoci powierzchni (wynikajcych z modelu powierzchni) na podstawie kontekstu cieniowania (czyli informacji o aktualnie cieniowanej prbce obrazu: wsprzdnych punktu w jednym z ukadw wsprzdnych tekstury bd przestrzeni). Funkcja ustalajca te wartoci to wanie tekstura proceduralna. Od tradycyjnych tekstur bdcych najczciej dwuwymiarowymi zdjciami lub innymi obrazami, odrniaj je midzy innymi: niezaleno od docelowej rozdzielczoci wikszo procedur potrafi wygenerowa dowoln ilo detali zalenie od odlegoci obserwatora od obserwowanej powierzchni moliwo generacji tekstur wielowymiarowych (dwuwymiarowych, przestrzennych bd przestrzennych animacji, czyli tekstur czterowymiarowych) stosunkowo may rozmiar definicji (w porwnaniu z wysokiej jakoci zdjciami) parametryczny interfejs umoliwiajcy generacj wielu rnych obrazw za pomoc jednej procedury

A.1.3.

Biblioteka do tworzenia drzew cieniowania

Biblioteka zawiera zbir tzw. funkcji bazowych. Dla uytkownika funkcja bazowa jest funkcj posiadajc pewne wejcia i wyjcia. Kade wejcie i wyjcie ma okrelony typ. Tabela 1 zawiera klasy definiujce dostpne typy danych oraz ich opis (wszystkie klasy CValue.. dziedzicz po abstrakcyjnej klasie wartoci CAbstractValue).
klasa (przedrostek CValue*) opis

Int Float Point Vector Color ArrayFloat ArrayColor Sample

int float lub double, zalenie od definicji FLOAT w pliku types.h tablica float[3] lub double[3] tablica float[3] lub double[3] tablica float[3] lub double[3] tablica float[] lub double[] tablica float[3][] lub double[3][] struktura opisujca aktualn prbk, zawiera np. informacje potrzebne do implementacji antialiasingu analitycznego
Tabela 9-1 Typy danych interfejsu wzorw.

113

Kade z wej funkcji bazowej moe pobiera dane z 3 rde: swojej domylnej wartoci, ktra jest staa i ktrej zmiana jest niedostpna dla uytkownika wartoci dostarczonej przez uytkownika (ktra pozostaje staa przez cay czas renderingu) wyjcia innego wzoru, ktrego typ jest kompatybilny (w praktyce oznacza to identyczny typ) Przykadowy diagram funkcji bazowych (pochodzcy z edytora drzew cieniowania, opisywanego dalej) jest zamieszczony na Rysunek 9-1.

Rysunek 9-1 Przykadowy diagram funkcji bazowych

Widzimy na nim 6 funkcji bazowych oznaczonych prostoktami. Strzaki symbolizuj poczenie parametrw wyjciowych z wejciowymi, przy czym biegn one od parametru wyjciowego do wejciowego. Wartoci w owalach to zdefiniowane przez uytkownika stae. Funkcje bazowe s zdefiniowane jako klasy dziedziczce po klasie CPattern (ktrej deklaracj przedstawia Program 9-1). Opis funkcji klasy CPattern zawiera Tabela 9-2.
class CPattern { public: CPattern(CPatternFactory *pFactory); virtual ~CPattern(); //ewaluacja virtual void Evaluate() = 0; virtual void Initialise() = 0; //pobieranie aktualnych wartoci parametrw wejciowych/wyjciowych CAbstractValue *GetInputBoundValue(UINT in); CAbstractValue *GetInputValidValue(UINT in); CAbstractValue *GetOutputValue(UINT out); /*...*/

114

protected: //funckje dodajce nowe parametry wejciowe/wyjciowe //name nazwa parametru //type jeden z predefiniowanych typw parametrw //value oznacza warto domyln UINT AddInput(String name, int type, CAbstractValue *value); UINT AddOutput(String name, int type); /*...*/ private: //fabryka obiektw podawana jako parametr konstruktora klasy CPatternFactory *m_pFactory; };

Program 9-1 Skrcona definicja klasy CPattern


nazwa funkcji (prototypy znajduj si w Program 9-1)

opis

konstruktor

Parametrem kontruktora jest obiekt klasy dziedziczcej po CPatternFactory. Jest to fabryka funkcji cieniujcych, ktrej odpowiednia metoda zwraca nowe obiekty CPattern. Przykad definicji znajduje si w projekcie sample_src/sample_ptn Initialise Funkcja abstrakcyjna, ktrej zadaniem w pochodnej klasie jest inicjacja wzoru. Wykonywane operacje zale od konkretnej implementacji, jednak zasad jest, e inicjowane s tutaj wszystkie wartoci niezmienne dla danych parametrw wejciowych. Naley zwrci uwag na to, e cz parametrw wejciowych danej funkcji bazowej moe ulega zmianie w trakcie procesu renderingu, dlatego inicjowane powinny by tylko te zmienne, ktre zale od parametrw wejciowych, co do ktrych zakadamy, e bd niezmienne. Informacj o takim zaoeniu naley umieci w dokumentacji funkcji cieniujcej. Evaluate Funkcja abstrakcyjna obliczajca dla danych parametrw wyjciowych oraz zmiennych zainicjowanych w funkcji Initialise wartoci parametrw wyjciowych. GetInputBoundValue Funkcja zwraca wskanik na obiekt wartoci, ktry jest aktualnie wykorzystywany przez parametr wejciowy o podanym identyfikatorze in. GetInputValidValue Funkcja zwraca wskanik na obiekt aktualnej wartoci. W razie potrzeby warto ta jest ewaluowana. Dla przykadu, wywoanie GetInputValidValue dla funkcji Checker z parametrem okreslajcym identyfikator wejcia white spowoduje ewaluacj funkcji Interpolator3D, ktra z kolei wymusi ewaluacj Leather oraz InContext. GetOutputValue Funkcja zwraca wskanik na obiekt odpowiedniej wartoci wyjciowej, ktrej identyfikator jest podawany jako parametr. Jest uywana w funkcji Evaluate do ustawiania wartoci parametrw wyjciowych. AddInput Funkcja suy do dodawania nowych parametrw wejciowych i powinna by uywana tylko w konstruktorze. Wartoci zwracan jest identyfikator, uywany potem w 115

AddOutput

wywoaniach GetInput... Funkcja suy do dodawania nowych prametrw wyjciowych i powinna by uywana tylko w kontruktorze. Wartoci zwracan jest identyfikator, uywany potem w wywoaniach GetOutpuValue.
Tabela 9-2 Opis metod klasy CPattern

Przykad definicji wzoru Checker, na ktrym mona oprze wasne implementacje funkcji bazowych, znajduje si w plikach sample_src/sample_ptn/sample_ptn.* Istniej dwie specjalne klasy funkcji bazowych okrelajce kontekst cieniowania i suce do komunikacji biblioteki TexLib z wykorzystujcym je systemem do renderingu. S to, widoczne na Rysunek 9-1, InContext oraz OutContext. Funkcja InContext okrela dla kadej ewaluacji drzewa (kadej prbki) kontekst wejciowy. Zawiera on nastpujce parametry:
Zmienna P N C T I E u, v, s, t dPds, dPdt, dPdu, dPdv ds, dt, du, dv Typ (CValue..) Opis

Point Vector Color Color Vector Point Float Vector Float

Wsprzdne aktualnie cieniowanego punktu w ukadzie lokalnym obiektu Wektor normalny do aktualnie cieniowanej paszczyzny Kolor paszczyzny w cieniowanym punkcie P. Przezroczysto powierzchni. Kierunek promienia przecinajcego powierzchni w cieniowanym punkcie (od ang. Incident vector). Punkt pooenia obserwatora (od ang. Eye point) Parametry powierzchni opisanej parametrycznie oraz koordynaty tekstury. Pochodne koordynat tekstury oraz parametrw powierzchni opisuj jak zmienia si pozycja wraz ze zmian parametrw powierzchni. Zmiana parametrw powierzchni rednica okrgu opisanego na wielokcie bdcym przeciciem stoka widzenia wychodzcego z aktualnie cieniowanego piksela oraz cieniowanej paszczyzny. Moe to by (zalenie od systemu renderujacego) w przyblieniu warto: spotSize = max( dPdu * du ^ dPdv * dv , MinSpotSize) , gdzie ^ oznacza iloczyn wektorowy 2 wektorw Zmienna przeczajca uycie antialiasingu analitycznego (od ang. Analytic Antialiasing). Warto AA=0 oznacza wyczenie antialiasingu, AA0 oznacza wczenie antialiasingu. 116

spotSize

Float

AA

Int

Wszystkie wzory udostpniajce ten tryb zaczn go wykorzystywa. Warto czasu. Suy do renderingu animacji i jest umown wartoci zmiennoprzecinkow (tzn. nie mona interpretowa upywu czasu od wartoci time=0 do time=1 jako np. 1 sekundy, poniewa to, jak time bdzie wykorzystany zaley od systemu wykorzystujcego bibliotek)

time

Float

Funkcja OutContext okrela kontekst wyjciowy. Drzewo cieniowania moe za jego pomoc modyfikowa kilka atrybutw powierzchni:
Zmienna C N Typ (patrz Tabela 4-2) Opis

Color Vector

Nowy kolor paszczyzny dla punktu P kontekstu wejciowego Zmodyfikowana normalna dla punktu P kontekstu wejciowego Zmodyfikowany punkt P kontekstu wejciowego. Uwaga: Nie kady system udostpnia moliwo modyfikacji paszczyzny (przemieszczenia, ang. displacement). Jeli tak, to zmienn t wykorzystuje si zwykle przesuwajc wejciowy punkt P wzdu wektora normalnego N. Zmodyfikowana przezroczysto. Wspczynnik pokrycia powierzchni.

Point

T alpha

Color Float

Interfejs do tworzenia funkcji bazowych


Wzory definiowane s w bibliotekach DLL, ktre, po umieszczeniu w podkatalogu Patterns, s adowane automatycznie przez TexLib. Katalog sample_src/sample_ptn/ zawiera przykadowy projekt Visual C++6.0, ktry mona wykorzysta do stworzenia wasnej biblioteki funkcji cieniujcych. Tworzenie nowej klasy definiujcej funkcj bazow odbywa si w nastpujcy sposb: 1. Utworzenie klasy pochodnej CPattern oraz odpowiadajcej jej klasy CPatternFactory. 2. Definicja parametrw nowej funkcji cieniujcej za pomoc wywoa AddInput/Output w konstruktorze nowej klasy. 3. Implementacja funkcji Initialise oraz Evaluate nowej klasy typu CPattern. 4. Now klas funkcji cieniujcych naley zarejestrowa w bibliotece za pomoc wywoania metody Add w funkcji Init biblioteki DLL (patrz plik sample_ptn.cpp). Rejestracja pozwoli na wykorzystanie nowego wzoru m.in. w aplikacji Edytora drzew cieniowania. Pliki nagwkowe oraz niezbdny do konsolidacji bibliotek DLL plik texlib.lib zawierajcy implementacj biblioteki TexLib, znale mona w katalogu TexLib.

117

Predefiniowane narzdzia definicji tekstur


Biblioteka zawiera zbir klas bdcych narzdziami do tworzenia tekstur proceduralnych. S to midzy innymi: podstawowe funkcje czsto uywane w definicji tekstur proceduralnych: o float FLOOR(float x) oraz float CEIL(float x) o float CLAMP(float x, float a, float b) o float SMOOTHSTEP(float x) o float LERP(float t, float x0, float x1) oraz float SMOOTHSTEP_INTERP(float t, float x0, float x1) o float SPLINE(float x, float k0, float k1, float k2, float k3) klasa CNoisePerlin obliczajca wartoci szumu Perlina (metod gradientow) ([T&M 1998]), klasa CNoiseWorley realizujca podzia przestrzeni wg. diagramu Voronoi ([Worley]), klasa CNoiseFractal obliczajca fraktalne wersje powyszych funkcji ([T&M 1998]). Wszystkie narzdzia mona wykorzystywa przy implementacji wasnych funkcji cieniujcych po wczeniu nagwka utils.h. Dokumentacja narzdzi znajduje si w powyszym pliku nagwkowym.

A.1.4.

Edytor drzew cieniowania

Edytor drzew cieniowania suy do szybkiej edycji drzew cieniowania, ich zapisywania i odczytywnia. Obsuga Edytora jest opisana w oddzielnym dokumencie Edytor.pdf.

A.1.5.

Zadania

Zadanie polega na stworzeniu biblioteki DLL rozszerzajcej zbir funkcji bazowych biblioteki TexLib oraz przeprowadzenia eksperymentw. Kade z poniszych zada naley wykona wedug nastpujcego algorytmu: utworzy now funkcj (lub kilka funkcji) bazow zgodnie z opisem w punkcie A.1.3 Interfejs do tworzenia funkcji bazowych, wykorzystujc przykadowy projekt uy nowej funkcji w drzewie cieniowania modyfikujcym odpowiednie atrybuty powierzchniowe, wymagane przy konkretnym zadaniu zaimplementowa odpowiednie metody klas nowych funkcji stworzy bibliotek DLL i umieci j w podkatalogu Patterns katalogu Edytora drzew cieniowania przeprowadzi eksperymenty majce na celu ocen jakoci oraz wydajnoci implementacji: o wydajno stworzonych algorytmw dla scen testowych (sceny opt.lwc, mid.lwc, mid2.lwc oraz pes.lwc) o jako uzyskiwanych obrazw (poprzez porwnanie z podobnymi efektami realizowanymi za pomoc innych metod grafiki fotorealistycznej lub zdjciami) o jako parametryzacji, czyli jej intuicyjno oraz wpyw parametrw na uzyskiwane rezultaty przygotowa sprawozdanie wedug zamieszczonego niej opisu Zadania wymienione dalej s uszeregowane wedug rosncego stopnia trudnoci.

Zadanie 1
Zaprojektowa drzewo cieniowania z uyciem predefiniowanych funkcji bazowych, ktre bdzie symulowao wygld kamienia naturalnego. 118

Zadanie 2
Zbudowa drzewo cieniowania generujce obraz chmur typu cumulus. Drzewo ma wykorzystywa parametr time kontekstu wejciowego do generacji animacji przepywajcych, formujcych si chmur. Wygenerowa klatki animacji chmur za pomoc funkcjonalnoci Edytora drzew cieniowania.

Zadanie 3
Zdefiniowa funkcj cieniujc, ktra przy wykorzystaniu odpowiedniej sceny (np. top.lwc) moe posuy do generacji obrazw moliwych do wykorzystania jako tradycyjne, paskie tekstury. Powinna wic dziaa w przestrzeni okrelonej przez s,t. Funkcja powinna umoliwia generacj kilku rodzajw ciekawych, abstrakcyjnych lub naturalnych wzorw. Dodatkowym wymaganiem jest moliwo generacji wzorw okresowych (zaptlajcych si), dziki ktrym gotow tekstur bdzie mona uywa z odwzorowaniem zaptlajcym do teksturowania nieskoczenie duych powierzchni.

Zadanie 4
Zdefiniowa funkcj bazow modyfikujc kolor oraz realizujc odwzorowanie nierwnoci powierzchni symulujc wygld kory drzewa. Funkcja powinna by moliwa do uycia w drzewie cieniowania o topologii przedstawionej na diagramie na Rysunek 9-2. Moe by zdefiniowana zarwno w przestrzeni s,t jak i lokalnej R3 obiektu.

Rysunek 9-2 Przykadowy diagram drzewa cieniowania

119

Zadanie 5
Zdefiniowa funkcj bazow modyfikujc kolor oraz realizujc odwzorowanie nierwnoci powierzchni symulujc wygld uski ryby. Funkcja powinna by moliwa do uycia w drzewie cieniowania o topologii przedstawionej na diagramie z Rysunek 9-2 i powinna wykorzystywa lokalny ukad wsprzdnych R3 obiektu.

Zadanie 6
Zdefiniowa funkcj bazow realizujc prosty Rysunek 9-3 Rybia uska rendering wolumetryczny, wizualizujc efekty wyadowa atmosferycznych. Funkcja powinna dziaa w ukadzie wsprzdnych R3 wiata. Analiza zjawiska wyadowa atmosferycznych znajduje si w artykule: Andrew Glassner, The Digital Ceraunoscope: Synthetic Thunder and Lightning, IEEE Computer Graphics and applications, nr 3-4/2000 Wskazwka: funkcja musi wykorzystywa kierunek promienia I i odpowiednio modyfikowa atrybut alpha oraz C.

Zadanie 7
Zdefiniowa funkcj bazow, dziki ktrej bdzie mona uzyska efekt przezroczystych baniek (jak na Rysunek 9-4). Naley zasymulowa prosty model owietlenia. Funkcja powinna dziaa w lokalnym ukadzie wsprzdnych R3 obiektu. Dodatkowo, prosty model owietlenia mona zastpi fizycznie poprawnym, ktry jest opisany midzy innymi w artykule: Andrew Glassner, Soap Bubbles, IEEE Computer Graphics and applications, nr 9-10/2000 Wskazwka: funkcja powinna ledzi dla kadej prbki promie o kierunku I pobranym z kontekstu wejciowego. Rozkad baniek w przestrzeni przypomina diagram Voronoi.

A.1.6.

Sprawozdanie

Rysunek 9-4 Piana na powierzchni piwa

Do zadania powinno powsta sprawozdanie zawierajce midzy innymi: opis uytych algorytmw opis sposobu przeprowadzania eksperymentw i ich cele wyniki eksperymentw w postaci: o zestawienia czasw renderingu dla rnych scen oraz ustawie parametrw wejciowych o prezentacji obrazw przedstawiajcych zastosowanie stworzonych funkcji w praktyce

120

A.1.7.

Literatura

[Egerton 1999] Patricia A. Egerton and W.S. Hall, Computer Graphics: Mathematical First Steps, Prentice Hall, London 1999 [Rogers] David F. Rogers, State of Art In Computer Graphics. Aspects of visualization, Springer-Verlag, New York 1994 [Watt 2000] Alan Watt, 3D Computer Graphics, Addison-Wesley, Harlow 2000 [T&M 1998] D. Ebert, F. K. Musgrave, D. Peachey, K. Perlin, S. Worley, Texturing and Modeling. A procedural approach., Academic Press Professional, 1998 [Worley] Steven Worley, A Cellular Texture Basis function, http://graphics.lcs.mit.edu/~mcm/6.838j/talk.html [Pixar] Pixar, The RenderMan Interface 3.2, July 2000 [Apodaca 2000] Tony Apodaca, How PhotoRealistic RenderMan Works, SIGGRAPH 2000: Advanced RenderMan 2

A.2. Zalecenia dla prowadzcego


to: Wszystkie dane niezbdne do przeprowadzenia wiczenia znajduj si w katalogu Lab. S

Przykadowy projekt Visual C++ 6.0 umoliwiajcy stworzenie biblioteki DLL rozszerzajcej TexLib, wraz z plikami potrzebnymi do kompilacji i konsolidacji plikiem texlib.lib oraz koniecznymi plikami nagwkowymi (podkatalog Project) Sceny, ktrych studenci powinni uywa do testw swoich rozwiza. Ujednolicenie scen pomoe dodatkowo w porwnywaniu wynikw osiganych przez rne osoby (podkatalog Scenes). Aplikacja Edytora drzew cieniowania wraz z dokumentem opisujcym sposb jej obsugi (podkatalog Editor) Przykadowe drzewa cieniowania (podkatalog Editor\Trees) Dokument zawierajcy instrukcj dla studentw wraz z przykadowymi zadaniami.

Realizacja wiczenia przez studenta nie powinna zaj w czasie trwania semestru wicej ni 3-4 tygodnie, zakadajc jedn godzin zaj laboratoryjnych tygodniowo. Program dobrano tak, aby wstpna implementacja oraz konfiguracja projektu zaja ok. 1h, a student mg skupi si dalej na implementacji waciwych algorytmw. Pomc ma w tym przykadowy projekt, ktry mona znale w katalogu sample_src.

A.2.1.

Ocena

Ocenie powinny podlega nastpujce waciwoci prac: efekty wizualne, trafno i skuteczno zastosowanych sposobw generacji tekstury wydajno zastosowanych algorytmw atwo obsugi zdefiniowanych wzorw (dobr parametrw, intuicyjno ich uycia i wpywu na efekty) jako sprawozdania

Ocena efektw wizualnych to nie tylko subiektywna ocena walorw plastycznych wykonana przez prowadzcego. Tutaj przyjrze si naley realizmowi stworzonych wzorw (porwnania z przykadami wzitymi z natury) oraz moliwociom tworzenia rnych wariantw wzoru, jakie

121

daje przyjte rozwizanie. Algorytm powinien by oceniany za swoj oryginalno, prostot i skuteczno. Wydajno najlepiej sprawdza stosujc standardowe sceny z przypisanymi do pewnych elementw geometrii teksturami. Przykady takich scen mona znale w katalogu Scenes. S one zalecane do eksperymentw take w instrukcji dla studentw. Bardziej szczegowy opis scen mona znale w punkcie 7.3.1. Edytor drzew cieniowania udostpnia funkcj obliczania czasu renderingu, ktr mona wykorzysta do porwnania czasw osiganych przez algorytmy. Bardzo wanym elementem oceny jest atwo i intuicyjno obsugi zdefiniowanej funkcji. Istotna jest ilo parametrw, ich nazwy oraz funkcje, jakie peni i ich wpyw na dzianie algorymtu. Generalnie, parametry powinny by zrozumiae dla kogo, kto nie zna algorytmu stojcego za interfejsem. Powinny dziaa zgodnie z tym, co sugeruj nazwy i zdrowy rozsdek.

A.2.2.

Moliwe modyfikacje wiczenia

Prowadzcy ma due moliwoci modyfikacji wiczenia. Zadania studentw mog polega na symulacji bardzo rnych powierzchni i zjawisk naturalnych. Mog take nie wymaga implementacji, a jedynie zaznajomienia si z pojciem tekstur proceduralnych i zaprojektowania pewnych drzew cieniowania z uyciem Edytora. atwo w ten sposb kontrolowa stopie trudnoci zada: od tworzenia adnie wygldajcych obrazw z uyciem predefiniowanych funkcji bazowych (uatwia to studentom zrozumienie zasad tworzenia tekstur, rnic midzy teksturami powierzchniowymi i przestrzennymi) przez definicj nieskomplikowanych tekstur modyfikujcych kolor, po implementacj rendererw wolumetrycznych czy rendererw obiektw opisanych za pomoc funkcji gstoci (tzw. hipertekstur) ([T&M 1998], str 209). Przykady wszystkich z tych rodzajw zada zostay umieszczone w instrukcji dla studentw.

122

Dodatek B. Format pliku zapisu drzewa cieniowania (*.tree)


B.1.1. Format pliku *.tree
Plik definicji drzewa cieniowania skada si z 3 czci: definicji wzorw, definicji staych wartoci oraz definicji powiza midzy wejciami i wyjciami. Kada cz posiada swj nagwek. S to: #PATTERNS rozpoczyna definicj wzorw #VALUES rozpoczyna definicj wartoci staych #BINDINGS rozpoczyna definicj powiza Program 2 zawiera przykadow definicj drzewa cieniowania
// Drzewo cieniowania tworzce tekstur // koloru (dwukolorowej trjwymiarowej // kratki). #PATTERNS 1 InContext 2 Checker 3 OutContext #VALUES 1 COLOR 0.0 0.0 0.0 2 COLOR 1.0 1.0 1.0 #BINDINGS 2 P 1 P 2 white 1 2 2 black 1 1 3 C 2 C

Program 9-2 Przykadowy plik zawierajcy definicj drzewa cieniowania

B.1.2.

Definicja wzorw

Kada linia oznacza instancj wzoru o podanej nazwie. Zawsze wystpuj tutaj przynajmniej 2 standardowe wzory. Indeks 1 posiada InContext kontekst wejciowy, na ostatnim miejscu znajduje si OutContext kontekst wyjciowy.

B.1.3.

Definicja wartoci

Kada warto, podobnie jak wzr, posiada swj indeks. Druga warto to identyfikator typu, ktry moe przyj jedn z nastpujcych postaci: INT FLOAT POINT VECTOR COLOR ARRAY_FLOAT ARRAY_COLOR
Tabela 9-3 Identyfikatory typw wystpujce w definicji wartoci w pliku *.tree

123

B.1.4.

Definicja powiza

Definicja powizania wyglda nastpujco: id_pat id_in [ id_pat2 | -1] [ id_out | id_val ] id_pat id_in id_pat2 id_out id_val Przykadowo, definicja 3 thresholds 2 array_of_floats

124

You might also like