我看到一個更好的素描效果的代碼,但是我在過濾不好,我不能寫一個自定義過濾器GPUImage應用此:
float res = iResolution.x;
float n0 = 97.0/res;
float n1 = 15.0/res;
float n2 = 97.0/res;
float n3 = 9.7/res;
float total = n2 + (4.0 * n0) + (4.0 * n1);
const vec3 div3 = vec3(1.0/3.0);
void main(void) {
float offset, temp1, temp2;
vec4 m, p0, p1, p2, p3, p4, p5, p6, p7, p8;
offset = n3;
p0=texture2D(iCamera,iScreen);
p1=texture2D(iCamera,iScreen+vec2(-offset,-offset));
p2=texture2D(iCamera,iScreen+vec2(offset,-offset));
p3=texture2D(iCamera,iScreen+vec2(offset, offset));
p4=texture2D(iCamera,iScreen+vec2(-offset, offset));
offset=n3*2.0;
p5=texture2D(iCamera,iScreen+vec2(-offset,-offset));
p6=texture2D(iCamera,iScreen+vec2(offset,-offset));
p7=texture2D(iCamera,iScreen+vec2(offset, offset));
p8=texture2D(iCamera,iScreen+vec2(-offset, offset));
m = (p0 * n2 + (p1 + p2 + p3 + p4) * n0 + (p5 + p6 + p7 + p8) * n1)/total;
//convert to b/w
temp1 = dot(p0.rgb, div3);
temp2 = dot(m.rgb, div3);
//color dodge blend mode
if (temp2 <= 0.0005) {
gl_FragColor = vec4(1.0, 1.0, 1.0, p0.a);
} else {
gl_FragColor = vec4(vec3(min(temp1/temp2, 1.0)), p0.a);
}
}
你是怎麼產生的第一形象? – janusbalatbat
@janusfidel第一張圖片是從草圖應用程序生成的。 –
我的「草圖」濾鏡僅僅是邊緣強度由黑暗指示的Sobel邊緣檢測。上面的圖像是通過完全不同的方式處理的。邊緣附近較暗的暈圈似乎表明使用了不清晰的遮罩,所以這是一個階段。它也看起來像他們應用噪聲紋理的圖像。我只能說,你應該嘗試不同的過濾器組合,看看最接近你的是什麼。 –