Ich spiele mit einfachen prozeduralen 3D-Modellen, um kleine Gebäude für den 3D-Druck zu erstellen. Ein Beispiel:
Um die Modelle auf dem Bildschirm besser lesbar zu machen, habe ich eine grundlegende Schattenzuordnung für ein einzelnes gerichtetes Licht implementiert. Da sich meine Szene nicht ändert, rendere ich die Schattenkarte nur einmal mithilfe eines an der Achse ausgerichteten Felds der Szene, um die Grenzen der Schattenkarte zu bestimmen. Die Schatten und Grenzen sehen aus, als hätte ich alle Matrizen richtig, aber ein bisschen näher heranzukommen sieht schrecklich aus:
Nach der Lektüre, die ich gemacht habe, verstehe ich das Peter-Panning und was ich dagegen tun könnte, aber die ausgefransten Kanten, von denen ich glaube, dass sie eine Form von projektivem Aliasing sind, sehen so schlecht aus, dass ich denke, dass etwas in meiner grundlegenden Implementierung nicht stimmt.
Ich habe den Pixel-Shader gehackt, um die Grenzen des Schattentexels anzuzeigen:
Ich habe bilineare Filterung in der Textur (ohne diese bekomme ich ernsthafte Schattenakne). Leider ist mein PCF-Versuch auch gescheitert - es sieht genauso zerlumpt aus:
Hier ist der Einzelfall mit deaktivierter bilinearer Filterung:
Erscheint dies als "typisches" projektives Aliasing? Könnte das Problem durch dynamisches Rendern der Schattenkarte unter Verwendung des auf die Szene beschränkten Ansichtsstumpfs, möglicherweise durch Kaskadierung, behoben werden?
Bearbeiten: Hinzufügen einer Nahaufnahme der bilinearen Filterung, Post Shadow Vergleich, nur um zu zeigen, was ich bekomme. Schlechte Schattenakne tritt wegen der inneren Kanten auf; Ich modelliere mit gestapelten virtuellen Blöcken und führe keine ordnungsgemäße Gewerkschaftsoperation aus. Nach meiner Lektüre ist das Implementieren von Booleschen Operationen auf Polyedern nicht trivial, aber ich kann auch statische Schattenvolumina implementieren und einige 3D-Drucksoftware bereinigen.