Kann jemand einen Algorithmus für einen HLSL Pixel Shader (für WPF oder Silverlight 3) empfehlen, um einen Punktierungseffekt zu erzielen? Hier einige Beispiele: http://www.nolinovak.com /, http://sprouls.com/WPF oder Silverlight 3 Pixelshader für Punktierungseffekt
Antwort
Die folgende Forschungsarbeit kann helfen. EFFICIENT STIPPLE RENDERING by Jens Krüger and Rüdiger Westermann
Die Antwort ist näher als Sie denken. E-Mail Hugues Hoppe (http://hhoppe.com) wie er früher in Stroked Surface Texturing war. Seine Erklärungen und Vorschläge werden mehr involviert sein als Sie wollen, aber er weiß wie.
Große Punktierung erfordert wahrscheinlich die vorherrschende 3D-'Richtung 'der Oberfläche an jedem Punkt (Gradient?), Die über die Fähigkeiten Ihrer Shader-Modelleinschränkungen (Zwei-Durchlauf-Render und mehrere Renderziele oder ein großes Pixel- Vertex-Datenstruktur). Eine naive erste Version würde den Grauwert jedes Pixels in eine Wahrscheinlichkeit umwandeln, dass das Pixel schwarz oder weiß ist. Das bringt dir 1 Pixel Punkte, was nicht das ist, was du willst.
Sie könnten versuchen, den Graustufenwert als Stapelmaß (Z) in einer 3D-gestapelten Textur zu verwenden, wobei jede Textur (X, Y) ein handgezeichnetes, zufällig aussehendes, homogenes Punktierungsmuster ist. Die Grenzen zwischen den Dunkelstufen werden seltsam aussehen, aber versuchen Sie, in der Stapeldimension am nächsten Punkt und linear zu sampeln.
Ich schreibe nicht den Code für Sie ... zumindest nicht kostenlos.
Irgendeine Idee, wie das zu HLSL übersetzen würde? –