タグ付けされた質問 「fragment-shader」

1
フラグメントシェーダーでテクスチャ座標を計算すると、テクスチャへのアクセスがはるかに遅くなるのはなぜですか?
GLSLでテクスチャを使用する場合、頂点シェーダーで最終的なテクスチャ座標を計算し、varyings を使用してそれらをフラグメントシェーダーに渡すのが最善です。y座標の単純な反転の例: // Vertex shader attribute vec2 texture; varying highp vec2 texCoord; // ... void main() { texCoord = vec2(texture.x, 1.0-texture.y); // ... } // Fragment shader varying highp vec2 textureCoordinates; uniform sampler2D tex; // ... void main() { highp vec4 texColor = texture2D(tex, texCoord); // ... } Y座標の反転、またはvec2(0.5)テクスチャ座標への追加などのさらに単純な操作がフラグメントシェーダーで実行される場合、テクスチャアクセスは非常に遅くなります。どうして? 注意として、たとえば、2つのテクスチャをブレンドして、それらの加重和を使用すると、時間の点ではるかに安価であり、各ピクセルに対して実行する必要があるため、テクスチャ座標自体の計算はそれほどコストがかかるとは思われません。

1
LUTを使用してモバイルデバイスのTrig Heavyシェーダーを高速化する
私が取得しようとしていますこのシェーダを本当に古いのiDevice上で実行するだけでなく、最終的にはアンドロイド。 コードをフラグメントごとに2つの正弦関数に下げても、シェーダーは約20 fpsで実行されます。 私は古いシェーディングテクニックの本から一枚の葉を取り、事前定義されたTrig値の束を保持する配列を作成し、どういうわけかそれらを使用してシェーダーを近似することを検討しました。 上でリンクしたシェーダーでは、trig関数に送られる値を丸めることにより、マウスを左に動かすと(ダウンしている間)、シェーダーの品質が低下することをすでにシミュレートしています。左側に非常に近く、完全に異なるかなりクールなシェーダーのように見えるため、実際にはかなりクールです。 とにかく、私には2つのジレンマがあります。 GLSLシェーダーで定数などの360値の配列を含む最も効率的な方法は何か、わからないのですか? 0から360までの角度が必要な場合、通常のように数値を範囲内に配置する方法を理解できません(はい、GPUがラジアンを使用していることがわかっています)。 func range(float angle) { float temp = angle while (temp > 360) {temp -= 360;} while (temp < 0) {temp += 360;} return temp; } ただし、GLSLでは、whileループまたは再帰関数を使用できません。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.