2016-04-28 51 views
6

I zostały czytania na mapowanie cień, i okazało się, że poniższy poradnik:Co powoduje trądzik cienia?

http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-16-shadow-mapping/

To ma sens dla mnie, aż do punktu, w którym autor rozpoczyna omawianie „cień” trądzik artefakt. Wyjaśniają przyczynę na poniższym schemacie (bez słów): enter image description here

Nadal mam wiele problemów ze zrozumieniem, co tak naprawdę powoduje trądzik cieni i dlaczego dodanie błędu stronniczego go rozwiązuje.

Wygląda na to, że rozdzielczość mapy cienia nie ma wpływu na trądzik. Co to jest? Może precyzja pływaka, czy może coś innego?

Odpowiedz

7

Tak, jest to problem precyzyjny. Naprawdę nie jest to problem pływacki, tylko skończona precyzja.

Teoretycznie mapa cienia zapisuje "odległość do najbliższego obiektu od światła". Ale w praktyce przechowuje "odległość ± eps od światła".

Następnie, podczas testowania, masz odległość od siebie do tego samego światła. Ale znowu, w praktyce ± eps2. Więc jeśli porównasz te dwie wartości, okaże się, że eps zmienia się różnie podczas interpolacji dla renderowania lub cieniowania mapy w tle. Więc jeśli porównasz d ± eps < d2 ± eps2, jeśli d2==d, możesz otrzymać nieprawidłowy wynik, ponieważ eps!=eps2. Ale jeśli porównasz d ± eps < d2 + max(eps) + max(eps2) ± eps2, wszystko będzie dobrze.

W tym przykładzie . To się nazywa samo cieniowanie. I można je łatwo naprawić za pomocą powyższego błędu lub po prostu nie testując przeciwko sobie w raytracing.

Jest o wiele trudniejszy w przypadku różnych obiektów, a gdy eps i eps2 znacznie się różnią. Jednym ze sposobów radzenia sobie z nim jest kontrola eps (http://developer.download.nvidia.com/SDK/10.5/opengl/src/cascaded_shadow_maps/doc/cascaded_shadow_maps.pdf). Lub można po prostu wziąć o wiele więcej próbek.

Aby spróbować odpowiedzieć na pytanie: Podstawową kwestią jest to, że odwzorowanie cienia porównuje idealne odległości. Ale te odległości nie są idealne, ale skwantowane. A skwantyzowane wartości są zwykle w porządku, ale w tym przypadku porównujemy je w dwóch różnych przestrzeniach.