Ich arbeite derzeit an Reflexionen auf dem Bildschirm. Ich habe perfekt reflektierende spiegelähnliche Oberflächen, und ich muss jetzt eine Unschärfe verwenden, um die Reflexion auf Oberflächen mit einem niedrigen Spiegelglanzwert diffuser erscheinen zu lassen. Ich habe jedoch Schwierigkeiten zu entscheiden, wie ich die Unschärfe anwenden soll.
Meine erste Idee war, nur eine niedrigere Mip-Ebene des Bildschirm-Rendertargets abzutasten. Das Rendertarget verwendet jedoch SurfaceFormat.HalfVector4 (für HDR-Effekte), was bedeutet, dass XNA keine lineare Filterung zulässt. Die Punktfilterung sieht schrecklich aus und gibt wirklich nicht den visuellen Hinweis, den ich will.
Ich habe darüber nachgedacht, eine Art Box / Gaußsche Unschärfe zu verwenden, aber das wäre nicht ideal. Ich habe den Textur-Cache bereits in der Raymarching-Phase zerstört, bevor die Unschärfe überhaupt auftritt (eine Reflexion im schlimmsten Fall könnte 32 Abtastwerte pro Pixel sein), und der Unschärfekern, um die Reflexionen ausreichend diffus erscheinen zu lassen, wäre ziemlich groß.
Hat jemand irgendwelche Vorschläge? Ich weiß, dass es machbar ist, da Photon Workshop den Effekt in Unity erzielt hat .
quelle
Antworten:
Ich denke, was Sie lesen, ist eher eine physikalisch korrekte Wiedergabe, wenn Sie schmutzigere Oberflächen haben.
Ein guter Ansatz besteht darin, mehrere Strahlen in einer Halbkugel um den ursprünglichen Reflexionsvektor zu reflektieren. Von dort aus können Sie sie verwischen oder einfach summieren, um einen einfachen, aber schnellen Effekt zu erzielen.
Natürlich können Sie das Originalbild unscharf machen, aber wenn Sie möchten, dass verschiedene Materialien unterschiedliche "Rauheiten" aufweisen, sollten Sie stattdessen darüber nachdenken, das gestochen scharfe Originalbild zu verwischen.
quelle