2

Silverlight でゲーム関連のレンダリングを行っています。ピクセル シェーダーを (回転) 変換のある画像にアタッチすると、奇妙で​​ファジーなピクセル化効果が発生します。

これが問題のスクリーンショットです。左の画像は変換だけです。右側の画像には、変換とピクセル シェーダーが含まれています。


(出典: andrewrussell.net )

この動作は、私のブログで確認できます(Silverlight コントロールをクリックして、ピクセル シェーダーを追加します)。

問題のピクセル シェーダーは、画像の色に色合いを付けるために使用される SilverSprite のシェーダーです。ソースコードはこちらでご覧いただけます。

私が適用している変換はMatrixTransform(手動で計算された変換、スケーリング、回転マトリックスを使用)です。画像を回転させると問題が発生します。

シェーダーと変換の両方が適用される要素は、コード内で にImage追加されるCanvasです。画像ImageSourceは ですWriteableBitmapが、効果は で発生しBitmapImageます。

私の質問は、このあいまいなピクセレーションの原因は何ですか? そして、それを減らすか取り除くために何ができるでしょうか?

4

1 に答える 1

2

PDC09 でのこのプレゼンテーションを見た後、Silverlight のレンダリング システムがどのように機能するかについての理解が深まりました。この問題は、プレゼンテーションでは直接対処されませんが、物事のレンダリング順序を知っていると役立ちます。

私の質問に関連するレンダリング手順の順序は次のとおりです。オブジェクトの子 (および/またはそれ自体) がレンダリングされ、そのレンダリングは を通過しEffect、次に を通過しRenderTransformます。

RenderTransformオブジェクトまたはその子に が適用されているオブジェクトに が適用される場合(Effectつまり、レンダリング ツリーで の後にある)、これを生成する「低品質」モードで行われるようです。 「ぼやけ」。RenderTransformEffectRenderTransform

Effect解決策は、 to をのに移動することRenderTransformです。私の場合、これは をImage単独Canvasで配置し、 を に適用し、をRenderTransformに適用することを意味します。ImageEffectCanvas

于 2010-08-14T12:54:47.787 に答える