2011-07-05 16 views
0

ランダムな方法でテクスチャデータを効率的にフェッチする方法はありますか?つまり、ルックアップテーブルとしてテクスチャを使いたいので、その要素にランダムにアクセスする必要があります。したがって、私はランダムにサンプリングしています。それは完全に失われた原因ですか?OpenGL ES 2.0での効率的なランダムテクスチャサンプリング

答えて

2

ランダムアクセスはGLSLの基本機能です。例えば。

あなたはピクセルシェーダで直接サンプル位置を計算するのではなく、頂点シェーダで出て、それらが様々なとして自動的に補間することを許可した場合、ハードウェアによっては、テクスチャを読むために多くを要することがあり
vec2 someLocation = ... whatever you like ...; 
vec4 sampledColour = texture2D(sampler, someLocation); 

これは、あなたがやっていることの予測可能性の低下に関連する不変のハードウェアコストです。

+0

ええ、ランダムアクセスはかなり可能ですが、私はGPUを使ったランダムアクセスをCPUから読み込むよりもはるかに問題があるので、ペナルティを最小限に抑える一般的な方法があるのか​​疑問に思っていますランダムアクセスの –

+1

私はあなたのプラットフォームが何であるか分かりませんが、トレンドを理解することは、これが今よりもずっと重要になっていることです(携帯電話型のデバイスがカーブ上のより早い点にあるという警告)。なぜなら、複数の断片に対してGPUが明らかに簡単に並行して行う作業と、単一の作業ごとに個別に行う必要がある作業とが関係しているからです。しかし、GPGPUへのプッシュは、スマートアクセスパターンを推測するための戦略のように、もう少しCPUを増やすために、誰もが一般化できるようにしました。だからあなたはパフォーマンスヒットを得るかもしれませんが、心配する必要はありません。 – Tommy

1

ランダムな値を含む別のテクスチャをシェーダに渡して、そこからサンプルを抽出することができます。それはあなたに各テクスチャ座標の同じ無作為の値を与えますが、それを望んでいなければ、各フレームを更新した均一なシードで常に座標を掛けることができます。

+0

申し訳ありません。そんなつもりじゃなかった。私はランダムな値を生成することには興味がありません。私は、シリアル化された方法ではなく、ランダムな方法でテクスチャデータにアクセスする可能性が最も高いことを意味しています。 –

関連する問題