Temat 9: Materiały i tekstury przezroczyste. Zastosowanie krzywych Beziera do tworzenia obiektów. O przezroczystości tekstur wspominaliśmy już nieco w temacie 4, ale wygląd utworzonych obiektów pod względem parametrów fizycznych światła odbiegał od rzeczywistości. Tym razem, oprócz przezroczystości tekstur na powierzchni brył, zajmiemy się również własnościami ich wnętrza. Ćwiczenie 055 Na początek utwórz poniższą scenę: Scena przedstawia płaszczyznę z teksturą dwubarwnej szachownicy, a w niewielkiej odległości nad nią umieszczona jest jednobarwna kula, której kolor podaliśmy w skali RGB. Do definicji koloru dodajmy składową filtru o wartości 0.9. Spowoduje to efekt 90% przezroczystości przy zachowaniu pełnej intensywności koloru: Grafika 3D program POV-Ray - 60 -
Mamy chwilowo zdefiniowaną tylko powierzchnię. Dodajmy definicję wnętrza (interior) materiału (material) naszej bryły: Funkcja ior zawiera współczynnik załamania światła zależny od materiału, z którego wykonano bryłę. W tym przypadku wpisaliśmy współczynnik dla szkła (średni). Poniższa tabela zawiera wartości współczynnika dla innych ośrodków: Wartości IOR dla różnych substancji Próżnia 1 Powietrze 1.0003 Woda 1.33 Lód 1.31 Alkohol etylowy 1.37 Szkło crown 1.50 1.54 Szkło flint 1.66 Diament 2.417 Plexiglas 1.489 Wpisując wartość współczynnika załamania przyjęliśmy, że nasza kula jest szklana. Przy wyborze innego materiału mogłaby ona wyglądać tak: lód plexiglas diament Grafika 3D program POV-Ray - 61 -
We wszystkich ośrodkach, dla których współczynnik załamania jest różny od 1 światło ulega rozszczepieniu (dispersion). Właściwym zakresem wartości rozszczepienia są liczby 1.01..1.1. Wartość dispersion_samples (2..100) odpowiada za ilość kroków przejścia kolorów widma od czerwieni do fioletu. Oczywiście im większa jest ta wartość, tym obraz dokładniejszy, ale renderowanie obrazu trwa dłużej. Podstawową wartością jest 7. Efekt dyspersji może być wzmocniony poprzez dodanie kaustyki. Wartości wahają się od 0.0 do 1.0, choć można wpisywać liczby większe: Dotychczas światło przechodzące przez naszą kulę miało cały czas stałą intensywność. W rzeczywistości, światło przechodzące przez przezroczysty obiekt traci na jasności. Parametr fade_distance określa w jednostkach POV-Ray'a, jak daleko po wejściu w obiekt światło wytraci połowę swej intensywności. W parze z poprzednim parametrem idzie kolejny: fade_power. Jest on odpowiedzialny za sposób, w jakim światło wytraca w obiekcie swoje nasilenie. Właściwie odpowiada on za wykładnik funkcji zmniejszającej intensywność światła. Warto poeksperymentować w celu znalezienia ciekawych rozwiązań. Najlepsze są wartości powyżej 1000. Przy przechodzeniu przez materiał światło może zmieniać barwę, za co odpowiada parametr fade_color. Grafika 3D program POV-Ray - 62 -
Jeśli scena jest tak skonstruowana, że w rzeczywistości promienie ulegałyby wielokrotnemu odbiciu/ załamaniu, to program domyślnie przestanie symulować odbicie/załamanie po 5 operacjach. Aby to zmienić warto na początku sceny wpisać global_settings {max_trace_level wartość}. Nie zaleca się używania wartości powyżej 20, ze względu na wydłużenie czasu renderingu. Oczywiście w zależności od potrzeb nie trzeba wypisywać wszystkich funkcji w sekcji interior. Najbardziej wskazane jest podanie współczynnika załamania światła. Często w definicji materiału zamiast podawać filtr koloru podajemy transmisję. Wtedy wraz ze wzrostem przezroczystości spada intensywność koloru: Grafika 3D program POV-Ray - 63 -
Spróbujmy teraz zastosować poznane w ostatnim ćwiczeniu wiadomości w praktyce. Ćwiczenie 056 Utwórz nowy plik i wpisz poniższy kod: Zapisz plik w osobnym folderze i przekopiuj do tego foldera plik graficzny druk.gif. Zrenderuj program: Tekstura z pliku graficznego została wstawiona na ścianki prostopadłościanu (box), poczynając od przedniej ścianki. Dlatego też nasz cienki (grubość 0.001) prostopadłościan musieliśmy wstawić pionowo. Tylna ścianka prostopadłościanu leży na osi X, dlatego też możemy nasz prostopadłościan obrócić o 90 stopni wokół tej osi: Grafika 3D program POV-Ray - 64 -
Teraz książka leży na blacie (konkretnie wystaje nad blat o 0.001). Kamera skierowana jest na punkt <0, 0, 0>, czyli lewy dolny róg książki. Ponadto książka ma zbyt małe rozmiary. Dlatego przesuniemy ją (translate), a następnie przeskalujemy (scale): Teraz deklarujemy lupę jako część wspólną dwóch kul i wstawiamy obiekt do sceny nadając mu wspomniane w poprzednim ćwiczeniu własności szkła: Grafika 3D program POV-Ray - 65 -
Na przecięciu kul powstała soczewka, która leży nad punktem x=0, z=0 i o 1 nad płaszczyzną blatu. Musimy zatem przesunąć soczewkę nad tekst i odpowiednio obniżyć. Obniżenie to (czyli przesunięcie wzdłuż osi Y, musimy ustalić doświadczalnie (metodą prób i błędów: Ćwiczenie 057 W tym ćwiczeniu wydrążymy w środku szklaną kulę i puste jej wnętrze wypełnimy lodem (dla lepszego odróżnienia zabarwionym). W nowym pliku wpisz kod: Grafika 3D program POV-Ray - 66 -
Deklarując otoczkę z kuli o promieniu 2.5 wycięliśmy kulę o promieniu 2.3 i powstała bańka o ściankach grubości 0.2. Wstawiliśmy ją do sceny nadając jej własności szkła. Poniżej wpisujemy kod definiujący kulę wypełniającą wnętrze bańki i nadajemy jej własności szkła: Po zrenderowaniu sceny okaże się, że praktycznie nic się nie zmieniło. Wstawiona we wnętrzu kula lodowa jest niewidoczna. Dzieje się tak dlatego, że zewnętrzna warstwa wstawionej kuli pokrywa się z wewnętrzną warstwą bańki. Wystarczy zmniejszyć promień lodowej kuli z 2.3 do 2.299, czyli o 0.001: Grafika 3D program POV-Ray - 67 -
Tym razem efekt renderingu będzie zadowalający: Aby lepiej zaobserwować, co się właściwie dzieje na utworzonej scenie, zmodyfikujemy nieco otoczkę poprzez przycięcie jej górnej części. W tym celu odejmujemy od zewnętrznej kuli dodatkowo prostopadłościan: Dotychczas tworzyliśmy tylko bryły podstawowe lub bryły dające się otrzymać poprzez działania na bryłach podstawowych. Ale jak utworzyć np. kieliszek do wina? Na szczęście jest on bryłą obrotową. Figurę płaską tworzącą bryłę obrotową otrzymamy korzystając z bezpłatnego programu KrzywaBeziera. Grafika 3D program POV-Ray - 68 -
Ćwiczenie 058 Uruchom program KrzywaBeziera. Kliknij drugi przycisk na belce narzędziowej i zaznacz opcję Ustaw punkt <0,0>. Kliknij w białym obszarze roboczym. Ukaże się układ współrzędnych. Zaznacz opcję Ustaw punkt <1,1> i kliknij w I ćwiartce tego układu. Masz zaznaczony kwadrat o boku 1: Teraz kliknij pierwszą ikonę i przycisk [Utwórz Krzywą]. W trybie pracy Edycja klikaj dwukrotnie kolejno w każdym punkcie kontrolnym tworzącym krzywą. Kształt krzywej możesz dopasować przeciągając czerwone punkty kontrolne. Postaraj się osiągnąć efekt zbliżony do poniższego: Grafika 3D program POV-Ray - 69 -
Kliknij trzeci przycisk na belce narzędziowej. Zaznacz opcje Utwórz całą scenę oraz Lathe i kliknij przycisk [Do schowka]. Kod sceny zostanie skopiowany. Wystarczy teraz wkleić go do nowego pliku POV-Ray a i zapisać scenę. Po usunięciu starego numeru wersji (pierwsza linijka kodu) oraz zapisaniu i zrenderowaniu pliku otrzymamy poniższe rezultaty: Grafika 3D program POV-Ray - 70 -
Dokonujemy niezbędnych zmian w kodzie tak, aby widoczny był cały kieliszek: Grafika 3D program POV-Ray - 71 -
Wystarczy teraz definicję koloru kieliszka zastąpić definicją materiału o własnościach szkła i zrenderować scenę: Oczywiście kod kieliszka możemy przekopiować do dowolnej innej sceny. Sama bryła obrotowa (kieliszek) została utworzona poleceniem: lathe { bezier_spline ilość_parametrów lista_parametrów_krzywej_beziera własności_materiału } Warto byłoby jeszcze napełnić nasz kieliszek płynem, ale o tym w następnym temacie. Grafika 3D program POV-Ray - 72 -