Jak zaimplementowałbyś efekt aberracji chromatycznej za pomocą shaderów?
Czy renderowanie świata przy różnych odległościach ustawiania ostrości dla każdego koloru rozwiązałoby problem (może przy użyciu tylko jednego przejścia renderowania głębi)?
Jak zaimplementowałbyś efekt aberracji chromatycznej za pomocą shaderów?
Czy renderowanie świata przy różnych odległościach ustawiania ostrości dla każdego koloru rozwiązałoby problem (może przy użyciu tylko jednego przejścia renderowania głębi)?
Odpowiedzi:
Aberracja chromatyczna powstaje, gdy obiektyw nie może ustawić ostrości każdego koloru na ten sam punkt ogniskowania. Prostym sposobem na sfałszowanie tego efektu i renderowanie go jako szybkiego postprocesu na pełnym ekranie jest zastosowanie przesunięcia do każdego kanału kolorów w module cieniującym fragmenty.
Używając innego przesunięcia dla każdego kanału, można uzyskać rozsądny faks żądanego efektu. Przykład tej techniki można znaleźć tutaj ; moduł cieniujący fragmenty wyglądałby mniej więcej tak:
Ten prosty hack tak naprawdę nie bierze pod uwagę faktu, że aberracja chromatyczna jest efektem soczewki: aby uzyskać lepszą symulację, naprawdę chcesz renderować coś, co działa jak soczewka. Jest to podobne do renderowania obiektów odbijających lub załamujących światło. W związku z tym typowy moduł cieniujący odbicie / załamanie może być podstawą do wprowadzenia aberracji chromatycznej.
Zwykle oblicza się pojedynczy wektor refrakcji na podstawie wektora widoku i określonego indeksu refrakcji , używając funkcji refrakcji GLSL w module cieniującym wierzchołek:
Następnie użyłbyś tego wektora w module cieniującym fragmenty, aby przeprowadzić wyszukiwanie tekstury kostki (do mapy środowiska). Zwykle odbywa się to również w połączeniu z efektem odbicia i w połączeniu zastosowano obliczony termin Fresnela .
Aby zasymulować aberrację chromatyczną , w module cieniującym wierzchołków można wykonać trzy różne obliczenia wektora załamania, każde nieznacznie przesunięte za pomocą różnych wskaźników załamania:
Tych trzech różnych wektorów można użyć do wykonania trzech różnych przeglądów mapy kostki, które można ze sobą mieszać podobnie do sposobu mieszania kolorów w prostym przykładzie:
Aby uzyskać więcej informacji, dostępna jest pomarańczowa książka OpenGL, która zawiera przykład podstawowych efektów odbicia i załamania, a także przykład efektu aberracji chromatycznej.
źródło