2

そこで、XNA でゲームを作成しようとしています。ゲームプレイ画面にエフェクトを追加できるように、レベルにピクセル シェーダーを適用しています。シェーダー自体はうまく機能していますが、パフォーマンスを大幅に低下させる欠陥が 1 つあります。シェーダーがアクティブである限り、画面に描画するものはすべて、最大のアルファ チャネルで描画されたかのように機能します。私は XNA の組み込みColorクラスを使用して多くのものを描いていますが、その多くはさまざまなアルファを持っています。ただし、シェーダーはこれをすべて無視しているようです。これは、シェーダーからソースを返すだけでも発生します。

私はいくつかの可能な解決策を見てきました。これらの最初のものは RenderTarget2D に描画することでした。これによりこの問題は解決されましたが、アルファに関してはもっと深刻な問題が発生しました。

シェーダーで色にアルファ値を乗算すると効果があるように見えると主張する人が何人かいますが、それはまったく違いがありませんでした。これは、アルファ値の入力が常に 1 として読み取られていることを示唆しています。

ここに私の問題を説明するためのいくつかの画像があります:

シェーダーを有効にした結果ですこれは、それがどのように見えるべきかです

うまくいけば、誰かがこれを解決する方法を知っています。

4

1 に答える 1

0

GraphicsDevice.BlendState = BlendState.NonPremultiplied;Draw() メソッドでは、シェーダーを呼び出すメソッド ( など) を呼び出す前に、: を呼び出す必要があり ますDrawUserIndexedPrimitives

それ以外の場合、フレームワークは、アルファ値が事前に乗算されており、RGB 値をフレーム バッファーに直接ブリットできると想定します。

于 2017-05-10T03:34:17.440 に答える