0

Render Monkey と HTC Desire HD の両方で完全に正常に動作するエッジ検出シェーダーがあります。ただし、LG 3D P920 では動作しません。シェーダーは次のとおりです。

つまり、中央のピクセルを取り、その周囲の 8 つの値を減算しています。テクスチャは 512x512 です。

precision highp float;

varying vec2 vTextureCoord;

uniform sampler2D sTexture;

vec4 edges(void)
{
     const float offset = 1.0 / 512.0;
     vec4 c = texture2D(sTexture, vTextureCoord);
     vec4 edge = texture2D(sTexture, vTextureCoord + vec2(-offset, -offset)) +
     texture2D(sTexture, vTextureCoord + vec2(-offset, 0.0)) +
     texture2D(sTexture, vTextureCoord + vec2(-offset, offset)) +
     texture2D(sTexture, vTextureCoord + vec2( 0.0, offset)) +
     texture2D(sTexture, vTextureCoord + vec2( offset, offset)) +
     texture2D(sTexture, vTextureCoord + vec2( offset, 0.0)) +
     texture2D(sTexture, vTextureCoord + vec2( offset, -offset)) +
     texture2D(sTexture, vTextureCoord + vec2( 0.0, -offset));

     return 8.0 * (c + -0.125 * edge);
}

void main() {
     gl_FragColor = edges();
}

現在、PC と Desire HD では、これは主に黒の画像として表示され、色付きのエッジが強調表示されています。ただし、LG デバイスでは露出オーバーの画像として表示されますが、かなりのノイズが含まれています。

精度の問題のように感じます。ご覧のとおり、精度を上げようとしましたが、他に何を試すべきか、またはそれが正しく行われたかどうかはわかりません。

これは、このシェーダーに分離されたものではありません。このデバイスにはノイズがあるように見える照明シェーダーがありますが、他のデバイスにはありません。

私も最終値をクランプしようとしました。

4

1 に答える 1

1

これは精度の問題であることは間違いありません。PowerVR のドキュメントには、サンプラーがより高い精度で指定されない限り、texture2D は lowp データを返すと記載されています。ただし、これはフロート テクスチャでのみ行います。

したがって、サンプラーの精度を上げる代わりに、これには望ましい効果があります。

vec4 edge = texture2D(sTexture, vTextureCoord + vec2(-offset, -offset));
edge += texture2D(sTexture, vTextureCoord + vec2(-offset, 0.0));
edge += texture2D(sTexture, vTextureCoord + vec2(-offset, offset));
edge += texture2D(sTexture, vTextureCoord + vec2( 0.0, offset)) ;
edge += texture2D(sTexture, vTextureCoord + vec2( offset, offset)) ;
edge += texture2D(sTexture, vTextureCoord + vec2( offset, 0.0));
edge += texture2D(sTexture, vTextureCoord + vec2( offset, -offset));
edge += texture2D(sTexture, vTextureCoord + vec2( 0.0, -offset));

そしてlowp vec4 edge =...、私が前に見ていた問題を明らかにします。

PS 必要なチャネルのみを使用して最適化する必要があることはわかっています。この場合は、.rgb

于 2012-01-18T19:20:14.523 に答える