Przezroczystość

Przezroczystość (po angielsku: transparency) oznacza że promienie światła przechodzą przez dany obiekt "na wylot", w rezultacie czego widzimy co znajduje się za obiektem. W świecie rzeczywistym najczęściej obserwujemy ten efekt w przypadku szkła (wszelkie szyby, okna), i wody. De facto, wszystkie materiały są w jakimś stopniu przezroczyste, jeżeli tylko są wystarczająco cienkie (łatwo to sprawdzić np. trzymając cienką kartkę papieru przed jasnym światłem).

Przezroczystość i załamywanie się promieni

Prosty eksperyment jak przezroczystość działa w rzeczywistości: weź głęboki talerz, nalej do niego (prawie do pełna) czystej wody, po czym zanurz w nim łyżkę lub nóż. Kiedy spojrzysz na talerz pod odpowiednim kątem (z bliska i z boku) zauważysz że łyżka wydaje się złamana przy powierzchni wody, tak jakby część znajdująca się pod wodą była ułożona pod innym kątem niż część ponad wodą.

Nóż złamany w wodzie Nóż poza wodą

Powód: promienie światła są załamywane kiedy przechodzą z wody do powietrza.

Dokładniejsze wyjaśnienie tego zjawiska na rysunku poniżej:

index of refraction

Różne rodzaje materiałów powodują różne załamania promieni. To jak bardzo promienie się załamują (a więc także, jak bardzo my postrzegamy to załamanie) zależy od współczynników załamania materiałów z których i do których przechodzi światło. W naszym eksperymencie: z wody do powietrza. Dla ciekawych: można zerknąć na przykładowe współczynniki załamania różnych materiałów (z Wikipedii). Po angielsku współczynnik załamania to index of refraction, w skrócie IOR, albo refractive index.

Przezroczystość w Blenderze

Ćwiczenie z Blendera: pobawimy się przezroczystością w Blenderze.

  1. Otwórz Blendera. Domyślna scena powinna już zawierać jeden sześcian — to dobrze, wyobraźmy sobie że ten domyślny sześcian reprezentuje wodę (za chwilę sprawimy że będzie niebieski i przezroczysty).

    Dodaj nowy obiekt (np. dodatkowy sześcian). Przyjmijmy że ten nowy obiekt reprezentuje łyżkę z naszego eksperymentu. Przesuwając, skalując i obracając ustaw nowy obiekt tak żeby był częściowo zanurzony w pierwszym sześcianie. Ustaw też kamerę tak żeby widziała oba sześciany jednocześnie, mniej więcej tak jak poniżej:

    Blender camera and cubes Blender camera and cubes

    (Przypomnienie: klawiszem Z przełączamy się pomiędzy widokiem "wypełnionym" (solid) a widokiem siatki (wireframe), jak na powyższych obrazkach.)

    (Przypomnienie podstawowych komend Blendera: patrz nasza sciąga.)

    Wygeneruj ładny obrazek (rendering) tak jak robiliśmy na seminarium: menu Rendering -> Render Image. Jeżeli sześcian nie jest wystarczająco oświetlony, dodaj 2-3 światła naokoło, tak jak robiliśmy na seminarium ("Add -> Lamp -> Point", po czym przesuwamy światło gdzie chcemy).

  2. Wyłącz generowanie cieni (cienie mogą dodawać nieco zbyt dużo szczegółów do naszego obrazka, i w rezultacie przezroczystość nie będzie tak oczywista). Zaznacz każde światło prawym klawiszem myszy, po czym wybierz zakładkę "Light", po czym w sekcji Shadow ustaw No Shadow.

    Blender camera and cubes

    Jak zawsze, sprawdź wynik generując obrazek przez Rendering -> Render Image.

  3. Zmień materiał sześcianu reprezentującego wodę na niebieski. Tym bawiliśmy się na seminarium, dla przypomnienia: zaznaczamy duży sześcian prawym klawiszem myszy, wybieramy zakładkę "Material" po prawej stronie, (klikamy "New" jeżeli nie widzimy żadnych ustawień), po czym klikamy na kolor pod "Diffuse" żeby ustawić nowy kolor.

    Blender color
  4. Teraz włącz prostą przezroczystość na sześcianie wody: w ustawieniach materiału włącz Transparency i zmniejsz Alpha (np. do 0.5). Alpha reprezentuje "nieprzenikalność" materiału — 1 oznacza obiekt nieprzezroczysty, 0 oznacza obiekt kompletnie przezroczysty (niewidoczny).

    Blender simple transparency

    Wygeneruj ładny obrazek (Rendering -> Render Image) aby zobaczyć efekt: mamy przezroczystość (poprzez nasz sześcian-wodę widzimy nasz sześcian-łyżkę). Chociaż nie mamy załamywania się promieni. Czyli nie jest to efekt fizycznie poprawny (chociaż na potrzeby wielu gier 3D to wystarczająco dobra przezroczystość!).

  5. Teraz włącz "prawdziwą" (fizycznie poprawną) przezroczystość na sześcianie wody: w ustawieniach materiału Transparency ciągle powinno być włączone i Alpha ciągle powinna być gdzieś pomiędzy 0 a 1 (np. 0.5). Przestaw tryb na Raytrace. Po czym delikatnie zmień wartość IOR, np. na 1.1 lub 1.2 lub 1.3 ("dzikie", tzn. dalekie od 1, wartości IOR bardzo szybko dają niezbyt sensowne wyniki).

    Blender IOR transparency

    Znowu wygeneruj ładny obrazek (Rendering -> Render Image). Teraz mamy ładną przezroczystość i nasz sześcian-łyżka powinien wydawać się złamany na powierzchni wody.

  6. Po zrobieniu Rendering -> Render Image (F12) możemy zapamiętać nasz obrazek do pliku PNG przez Image -> Save As Image.

    Blender transparency result

Copyright 2011-2013 by Michalis Kamburelis, for Uniwersytet Dzieci. Free to reuse on terms of GNU GPL >= 2.