Bawię się prostym proceduralnym modelowaniem 3D, aby stworzyć malutkie budynki do drukowania 3D. Przykład:
Aby modele były bardziej czytelne na ekranie, zaimplementowałem podstawowe mapowanie cieni dla pojedynczego światła kierunkowego. Ponieważ moja scena się nie zmienia, po prostu renderuję mapę cienia za pomocą wyrównanego do osi pola sceny, aby dowiedzieć się, jakie powinny być granice mapy cienia. Cienie i granice wyglądają tak, jakby wszystkie macierze były prawidłowe, ale przybliżenie się wygląda okropnie:
Z lektury, którą wykonałem, rozumiem panoramowanie Petera i co mogę z tym zrobić, ale poszarpane krawędzie, które moim zdaniem są formą aliasingu projekcyjnego, wyglądają tak źle, że myślę, że coś jest nie tak z moją podstawową implementacją.
Zhakowałem moduł cieniujący piksele, aby pokazać granice teksli:
Mam dwuliniowe filtrowanie w teksturze (bez tego mam poważny trądzik w cieniu). Niestety, moja próba PCF również się nie powiodła - wygląda na równie nierówną:
Oto przykładowy przypadek z wyłączonym filtrowaniem dwuliniowym:
Czy to wygląda jak „typowe” aliasing projekcyjny? Czy dynamiczne renderowanie mapy cienia przy użyciu fragmentu widoku przyciętego do sceny, być może z kaskadowaniem, może rozwiązać ten problem?
Edycja: Dodając zbliżenie do filtrowania dwuliniowego, porównuj cienie, aby pokazać, co otrzymuję. Trądzik zły cień pojawia się z powodu wewnętrznych krawędzi; Modeluję ze stosami wirtualnych bloków i nie wykonuję poprawnej operacji łączenia. Z mojego czytania, implementowanie operacji logicznych na wielościanach nie jest trywialne, ale pozwoli mi również na implementację statycznych woluminów cienia, a także oczyszczenie niektórych programów do drukowania 3D.
źródło
Powiedziałeś, że „… filtrowanie dwuliniowe w teksturze…”. Wygląda na to, że interpolujesz wartości głębokości mapy cienia. Prawidłowym sposobem użycia interpolacji z mapą cienia jest zastosowanie jej do wyników testów cienia (o ile pamiętam, OpenGL to obsługuje). Możesz nawet połączyć interpolację wyników testów cienia z PCF, co zapewni znacznie lepsze wyniki. Jak jednak zauważyłeś, aliasing to plaga, która zawsze dąży do mapowania cieni :)
Chociaż rozumiem, że szukasz rozwiązań dotyczących mapowania cieni (nawet ponieważ jest to dość proste do wdrożenia), czy zastanawiałeś się kiedyś nad użyciem woluminów cienia? Jest o wiele bardziej skomplikowany do wdrożenia, ale w ogóle nie cierpi na aliasing, i myślę, że pasowałby dobrze do twoich celów.
źródło