Rendering wolumetryczny - cz. II

20.12.2010 - Adam Błaszkiewicz
TrudnośćTrudnośćTrudność

W tym artykule zajmiemy się kontynuacją projektu z pierwszego artykułu o renderingu wolumetrycznym, w którym utworzyliśmy mapę głębokości. Artykuł ten dostępny jest w ramce poniżej.

Dodatkowe efekty

Analizując głębokości kilku sąsiednich pikseli będziemy aproksymować normalną powierzchni w danym miejscu - otrzymujemy mapę normalnych. Posiadając informacje o normalnych, uda nam się dość prosto zasymulować oświetlenie kierunkowe. W zależności od kąta pomiędzy kierunkiem światła a normalną w danym punkcie, obliczymy natężenie światła rozproszonego (ang. diffuse) w tym miejscu (pikselu). Aby wygenerować cienie, będziemy dodatkowo śledzić promień od badanego punktu w stronę światła. Jeśli natrafimy po drodze na punkt materialny, nie oświetlamy sprawdzanego miejsca - światło nie dociera tutaj do obiektu.

Dodatkowo, obliczymy światło odbite (ang. specular) - w tym celu zbudujemy promień odbity, korzystając z normalnej powierzchni w danym punkcie oraz promienia od kamery do tego punktu. Otrzymany wektor powie nam, skąd powinno padać światło, aby po odbiciu od powierzchni raziło nas w kamerę. Porównując ten wektor z faktycznym kierunkiem światła, obliczymy natężenie światła odbitego. Analogicznie do światła rozproszonego, obliczając światło odbite będziemy śledzić promień odbity w poszukiwaniu ewentualnej przeszkody, aby wygenerować cienie.

Zwykle, gdy mówi się o świetle rozproszonym i odbitym w grafice komputerowej, wspomina się też światło otaczające (ang. ambient). Tutaj sprawa jest prosta - po prostu dodajemy do każdego piksela kolor, bez żadnego cieniowania. W programie przykładowym światło otaczające zostało pominięte.

Następnie wygenerujemy prostą mgłę, zabarwiając piksele na dany kolor, tym mocniej, im większa jest ich głębokość.

Na końcu dołożymy do tego wszystkiego post-processing w postaci lekkiego rozmycia i korekcji kontrastu.

5
Twoja ocena: Brak Ocena: 5 (2 ocen)

Copyright © 2008-2010 Wrocławski Portal Informatyczny

design: rafalpolito.com