Ostatnio wiele osób zadaje pytania na temat tego, czym jest HDRI. To właśnie dla nich napisałem ten mały tutorialik.
High Dynamic Range Images, czyli obrazy o wysokim zakresie dynamiki, zawierają informację na temat koloru i jasności punktów, w dużo większym zakresie niż to ma miejsce w przypadku zwykłych obrazów 24-bitowych. Jak zapewne wiecie, w normalnych obrazach wartości opisujące poszczególne właściwości punktów zapisane są w formacie 8-bitowym, który obejmuje wartości od 0 do 255 na każdy pojedynczy kanał. 0 jest reprezentowane przez kolor czarny, natomiast 255 przez kolor biały. W sumie dostajemy 256 możliwych kombinacji, za pomocą których możemy określić wartości punktu, który zostanie wyświetlony na monitorze. W przypadku HDRI sprawa się ma nieco inaczej. W odróżnieniu od zapisu 8-bitowego gdzie czarne jest czarne, a białe jest 100% procentową intensywnością wyświetlanego punktu, obrazy HDRI pozwalają na przekroczenie wartości 100% nasycenia. Dla lepszego zrozumienia wysunę tu porównanie do świateł zawartych w Twojej scenie, gdzie wartość każdego z nich nie musi się mieścić w granicach 100%. W przypadku HDRI jest dokładnie tak samo.
Może jakiś przykład. Spójrz za okno. Czy widzisz niebo ? No właśnie, ale co z tego? Już wyjaśniam. Załóżmy, że masz przed sobą kartkę papieru, która jest biała, oraz kawałek jasno rozświetlonego nieba. Na rysunku 8-bitowym obydwa przedmioty zostaną opisane kolorem białym, jednakowo nasyconym. W rzeczywistości ten kawałek nieba jest nawet tysiąc razy jaśniejszy, więc zapisanie go po prostu jako kolor biały, nie oddaje nam rzeczywistego stanu otaczającego nas świata. I tu właśnie wychodzi cała idea HDRI. Wszystkie dodatkowe informację na temat punktów mogą zostać zapisane dzięki wykorzystaniu 32 bitów przypadających na jeden kanał! Używając Radiosity i HDRI możemy łatwo w realistyczny sposób oświetlić naszą scenę bez używania żadnych innych źródeł światła! Dodatkowo bardzo dobrze sprawdzają się takie obrazy w przypadku Reflection i Refraction map, gdzie wszystkie dodatkowe informacje (pod warunkiem że program potrafi je wykorzystać) zostają uwzględnione przy renderingu w wyniku czego zyskujemy realistyczne refleksy i załamania na obiektach. Nie będę w tym miejscu wykładał teorii i wzorów na temat HDRI, gdyż nie to jest moim celem, a jedynie przedstawienie istotnego wykorzystania tej techniki zapisu obrazu. Jeżeli ktoś z Was byłby zainteresowany szerszym opisem tego tematu niech się ze mną skontaktuje, a ja udostępnię dodatkowe materiały teoretyczne.
Pic1. Obraz oświetlony za pomocą obrazu HDRI. Exposure L+300
Pic2. Obraz oświetlony przy pomocy LDRI. Exposure L+300
Pic3. Obrazy HDRI o różnej ekspozycji kolorów Najprostszym sposobem uzyskania HDRI jest sporządzenie sceny przy pomocy programu 3D, poczym jej wyrenderowanie i zapisanie otrzymanego obrazu w postaci któregoś z 32-bitowych formatów np. Tiff LogLuv. Właściwość taką posiada np. Lightwave3D. Następnie tak zapisany obraz możemy użyć w późniejszych pracach. Innym sposobem jest sporządzenie HDRI z kilku obrazów low dynamics na specjalnym programie, którym może być np. darmowy HDRShop. W tym przypadku stworzenie odpowiedniej mapy może być nieco kłopotliwe, szczególnie kiedy dysponujemy nie najlepszymi zdjęciami. W tym wypadku zanim przystąpimy do wykonania jednej mapy HDRI powinniśmy zretuszować nasze zdjęcia przy pomocy filtrów "czyszczących" dla lepszego rezultatu. Należy jednocześnie pamiętać, że zdjęcia te powinny zawierać w miarę wszystkie informacje o jasności i cieniach przy środkowym poziomie ekspozycji tonów. Wyżej wspomniany program pozwala nam także na zamienienie każdego LDRI na HDRI, wykorzystując podaną przez nas krzywą kalibrującą, którą zazwyczaj jest Gamma Curve.
Na prostym przykładzie pokażę teraz w jaki sposób oświetlić scenę przy pomocy HDRI. Jako, że używam do pracy Lightwave3D, właśnie na tym programie oprę ten mały przykład. Uruchom więc swój ulubiony program do grafiki 3D :-). Utwórz scenę, w której będą, powiedzmy trzy sfery (kulki) umieszczone obok siebie na jakimś podłożu. Następnie wejdź do menu Effects i dodaj do listy Environment, ImageWorld, gdzie jako LightProbe wskaż swój HDR Image, następnie w menu Global Illumination ustaw Global Light intensity na 0% i włącz radiosity (do naszych testów w zupełności wystarczy Interpolated, Tolerance = 1). Teraz już tylko uruchom rendering. Właśnie oświetliłeś swoją pierwszą scenę przy pomocy HDRI. W przypadku ImageWorld możesz łatwo zmienić jasność HDR Image poprzez zwiększenie lub zmniejszenie jasności w tymże module. Modyfikacji na mapach HDRI możesz dokonywać także przy pomocy ImageEditor używając do tego celu filtra HDRI Exposure. Zauważ jednocześnie, że nie musisz oświetlać sceny używając HDRI wyłącznie w ten sposób. Tekstur HDRI możesz przecież używać dokładnie tak samo jak wszystkich innych, a informacje w nich zawarte zostaną dodatkowo uwzględnione przez program przy renderingu. W przypadku tekstur kontrola jasności jest nadzorowana przez odpowiednie ustawienie wartości Luminosity. Jeżeli używasz innego programu niż Lightwave, zwróć się do instrukcji w celu zrozumienia jak działa system HDRI w Twoim programie.
To tyle póki co... Mam nadzieję, że choć w pewnym stopniu przybliżyłem wam czym jest HDRI, gdyby jednak coś nadal było niejasne - napiszcie.
Na koniec jeszcze kilka link'ów:
Lighthgen - plug-in dla Lightwave3D. Tworzy scenę do wykorzystania w lightprobe. HDRShop - program do manipulacji obrazami HDRI mkhdr - darmowy soft do tworzenia HDRI z serii LDRI "From Fisheye to HDRI" - tutorial w jaki sposób stworzyć HDRI |