そこで、XNA でゲームを作成しようとしています。ゲームプレイ画面にエフェクトを追加できるように、レベルにピクセル シェーダーを適用しています。シェーダー自体はうまく機能していますが、パフォーマンスを大幅に低下させる欠陥が 1 つあります。シェーダーがアクティブである限り、画面に描画するものはすべて、最大のアルファ チャネルで描画されたかのように機能します。私は XNA の組み込みColor
クラスを使用して多くのものを描いていますが、その多くはさまざまなアルファを持っています。ただし、シェーダーはこれをすべて無視しているようです。これは、シェーダーからソースを返すだけでも発生します。
私はいくつかの可能な解決策を見てきました。これらの最初のものは RenderTarget2D に描画することでした。これによりこの問題は解決されましたが、アルファに関してはもっと深刻な問題が発生しました。
シェーダーで色にアルファ値を乗算すると効果があるように見えると主張する人が何人かいますが、それはまったく違いがありませんでした。これは、アルファ値の入力が常に 1 として読み取られていることを示唆しています。
ここに私の問題を説明するためのいくつかの画像があります:
うまくいけば、誰かがこれを解決する方法を知っています。