Was ist der effizienteste Weg, um einen Shader zu verwischen?

7

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 .

besorgter Bürger
quelle
Sie können versuchen, die bilineare Filterung selbst zu implementieren. Es ist nicht besonders schwierig, obwohl es langsamer als die bilineare Hardware ist. Wenn dies jedoch zu langsam ist oder ein bilineares Tippen nicht gut genug ist, müssen Sie möglicherweise nur in die Kugel beißen und in das 8-Bit-Format konvertieren und / oder mehrere Tippen ausführen. Oder zielen Sie auf DX11-Hardware ab :)
Nathan Reed
siehe meine Antwort hier gamedev.stackexchange.com/questions/18662/… und bewerten Sie es, wenn Sie
möchten

Antworten:

0

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.

Tordin
quelle
Danke, das hat sehr gut funktioniert. Es ist sowohl physisch korrekter als auch effizienter als Unschärfe.
Betroffener
Es freut mich, dass ich helfen konnte!
Tordin