【Defold】Shader:Edgeを検出する
スプライトのエッジを検出したい。
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);
}
そこそこ短いコードで検出できるので嬉しい。