Rendering wolumetryczny - cz. II

20.12.2010 - Adam Błaszkiewicz
TrudnośćTrudnośćTrudność
Krok 9 - Proste rozmycie

Aby pozbyć się ostrych krawędzi, refleksów itp., możemy nałożyć na obraz lekkie rozmycie. W naszym programie robimy to, zlewając piksel z dwoma sąsiednimi pikselami. Dodatkowo, wynik zapisujemy natychmiast do danego piksela i używamy nowego koloru piksela przy przetwarzaniu kolejnych pikseli. Jest to bardzo proste rozwiązanie, bo nie potrzebuje żadnej dodatkowej pamięci. Dodatkowo, rozmycie jest propagowane dużo dalej niż tylko do jednego sąsiedniego piksela, uzyskujemy więc rozmycie o większym „promieniu” za darmo - algorytm rozmywania wciąż ma kwadratową złożoność czasową. Wadą tego rozwiązania jest to, że rozmywamy tylko w prawo i w dół. Można temu zapobiec, powtarzając algorytm w odwrotnym kierunku, ale nie robimy tego w naszym programie.

1
2
3
4
5
6
7
8
9
10
11
12
for (int y = 2; y < sizeY + 1; ++y)
{
    for (int x = 2; x < sizeX + 1; ++x)
    {
        pixels[x, y].color =
            0.5 * pixels[x, y].color +
            0.25 * pixels[x - 1, y].color +
            0.25 * pixels[x, y - 1].color;
    }
 
    // (...)
}

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

Copyright © 2008-2010 Wrocławski Portal Informatyczny

design: rafalpolito.com