OpenGL ES2.0 の GLSL でフラグメント シェーダーを作成するのは初めてで、特定のグラフィックのベベル効果を作成するフラグメント シェーダーを作成しようとしています。これまでに私ができることは次のとおりです(下の壁やその他のテクスチャリングは無視して、ベベル効果が適用されている上部のみを見てください):
望ましい結果は次のとおりです。
対角線でのシェーディングの違いに注意してください。それらは、水平方向のエッジよりもシェーディングが薄くなります。斜めのエッジから水平または垂直への移行に注目してください。また、ベベルの厚みにも注意してください。この望ましい結果にできるだけ近づけたいと思います。
現在、私が使用しているフラグメント シェーダーは非常に単純です。コードは次のとおりです。
#ifdef GL_ES
precision mediump float;
#endif
varying vec2 v_texCoord;
uniform sampler2D s_texture;
uniform float u_time;
void main()
{
vec2 onePixel = vec2(0, 1.0 / 640.0);
vec2 texCoord = v_texCoord;
vec4 color;
color.rgb = vec3(0.5);
color += texture2D(s_texture, texCoord - onePixel) * 5.0;
color -= texture2D(s_texture, texCoord + onePixel) * 5.0;
color.rgb = vec3((color.r + color.g + color.b) / 3.0);
gl_FragColor = vec4(color.rgb, 1);
}
目的の効果を作成するには、シェーダーに何を追加する必要がありますか?