【Defold】Shader:Edgeを検出する

Defold, DEVELOP

スプライトのエッジを検出したい。

varying mediump vec2 var_texcoord0;
uniform lowp sampler2D texture_sampler;
uniform lowp vec4 tint;
void main()
{
	lowp vec4 tint_pm = vec4(tint.xyz * tint.w, tint.w);
	vec4 color = texture2D(texture_sampler, var_texcoord0.xy) * tint_pm;
    -- res: ShaderToyだとiResolutionにあたるもの。
	vec2 res = vec2(1.0, 1.0); 
	vec2 uv = var_texcoord0.xy / res.xy;
	lowp vec4 tint_pm = vec4(tint.xyz * tint.w, tint.w);
	vec4 color = texture2D(texture_sampler, uv) * tint_pm;
	float gray = length(color.rgb);
	gl_FragColor = vec4(vec3(step(0.06, length(vec2(dFdx(gray), dFdy(gray))))), 0.0);
}

そこそこ短いコードで検出できるので嬉しい。

Posted by kazupon