0

トゥーン シェーダーをセットアップしようとしていますが、何をしても、境界線は常に特定のポイントで 1 ピクセルよりも太くなります。

悪い http://dl.dropboxusercontent.com/u/62862049/Screenshots/wg.png

これは本当に悪いです。次のフラグメント シェーダを使用しています。

precision mediump float;
    varying vec4 pos_var;
    uniform sampler2D rgb;
    uniform sampler2D depth;
    float dep(vec2 pos){
        return texture2D(depth,vec2(float(pos.x)/512.0,float(pos.y)/512.0)).x;
    }
    void main(void) {
        vec4 rgb = texture2D(rgb,vec2((pos_var.x+1.0)*0.5,(pos_var.y+1.0)*0.5));
        vec2 p = vec2(int(floor((pos_var.x+1.0)*0.5*512.0)), int(floor((pos_var.y+1.0)*0.5*512.0)));

        float d = dep(p);
        float dx = dep(vec2(p.x-1.0,p.y));
        float dX = dep(vec2(p.x+1.0,p.y));
        float dy = dep(vec2(p.x,p.y-1.0));
        float dY = dep(vec2(p.x,p.y+1.0));
        float t = 0.0002;
        gl_FragColor = (
            (dx>d+t) || 
            (dX>d+t) || 
            (dy>d+t) || 
            (dY>d+t)) 
            ? vec4(0.0,0.0,0.0,1.0) 
            : rgb;
    }

これは、その深さを隣接するピクセルと比較することによって、ピクセルが境界であるかどうかを判断しています。ここで、depthは最初のパスでレンダリングされた各ピクセルの深度値をrgb持つテクスチャであり、色を持つテクスチャです。depピクセルの深さを取得するヘルパー関数でtあり、任意の許容範囲です。境界線の太さを 1 に制限する方法を知っている人はいますか?

4

0 に答える 0