トゥーン シェーダーをセットアップしようとしていますが、何をしても、境界線は常に特定のポイントで 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 に制限する方法を知っている人はいますか?