3

hlsl シェーダーの 1 つがピクセルごとに複数のテクスチャ ルックアップを必要とするタスクに直面しています。私の 2D テクスチャは 256*256 に固定されているため、この制約が与えられた特定のテクセルをアドレス指定するには 2 バイトで十分なはずです。次に、各フロートに 2 つの xy 座標を配置し、Vector4 形式の画像にパックすると、ピクセル空間で 8 つの xy 座標を取得するというのが私の考えです。これらの 8 つの座標は、別のテクスチャをサンプリングするために使用されます。

これを行う理由は、グラフィックス メモリを節約し、処理時間を最適化するためです。複数のテクスチャ ルックアップを必要としないためです。

ところで: 1 つのサンプリングを使用して 4 つの float から/への 16 バイトのエンコード/デコードが、エンコードされていないデータを使用した 4 つのサンプリングよりも遅いかどうかを知っている人はいますか?


編集:これはShader Model 3用です

4

1 に答える 1

1

ターゲティングしている場合は、 とをSM 4.0-SM 5.0使用できます。Binary CastsBitwise operations

uint4 myUInt4 = asuint(myFloat4);

uint x0 = myUInt4.x & 0x000000FF; //extract two xy-coordinates (x0,y0), (x1,y1)
uint y0 = (myUInt4.x & 0x0000FF00) >> 8;
uint x1 = (myUInt4.x & 0x00FF0000) >> 16;
uint y1 = (myUInt4.x & 0xFF000000) >> 24;

//repeat operation for .y .z and .w coordinates

以前のシェーダー モデルの場合、FP の精度に依存するため、より複雑になる可能性があると思います。

于 2010-05-22T22:28:33.143 に答える