私はシェーダーと HLSL を初めて使用します。深刻な間違いをしていないことを願っています。HLSL で 2 つのテクスチャをブレンドしようとしています。テクスチャとサンプラーの両方をセットアップしました。
Texture2D<float4> First : register(t0);
Texture2D<float4> Second : register(t1);
uniform sampler FirstSampler : register(s0);
uniform sampler SecondSampler : register(s1);
私のピクセル シェーダーでは、テクスチャをサンプリングしています。
float4 firstSample = First.Sample(FirstSampler, coords);
float4 secondSample = Second.Sample(SecondSampler, coords);
ここで、firstSample
orを直接返すsecondSample
と、正しい結果が得られます。ただし、テクスチャ間を補間しようとしています。私は試した:
float4 returnValue = lerp(firstSample, secondSample, 0.5);
しかし、私が得ているのは、純粋な黒と 2 番目のテクスチャの間の補間です。場所を入れ替えても、同じ結果が得られます。重みを 0.0 に設定すると、純粋な黒などになります。これは、 に何か問題があることを意味しfirstSample
ます。の代わりに純粋な数学コンポーネントごとにそれらの間を手動で補間しようとしましたlerp
が、同じ結果が得られます。最も奇妙なことはfirstSample
、他のサンプルと対話せずに自分の値を直接返すか、何らかの値を返す場合です (例:return float4(firstSample.b, firstSample.g, firstSample.r, 1);
チャネル スワッピングの場合)、動作する結果が得られますが、テクスチャを他のサンプルで使用しようとすると、テクスチャ サンプルが実質的に無効 (黒) になります。その理由は何ですか?私はシェーダーに非常に慣れていないため、おそらく私が明らかに間違っていることですが、それが何であるかを見つけることができませんでした。