Godot Version
Godot 4.5.1
Question
I’m modifying the MToonShader to add dither fade effect to it. The shader works perfectly if I set the opacity uniform to 0 in the editor before running the game. I can change the value in gdscript without any issues. However if I start the game with opacity to 1, when I decrease the opacity using gdscript, it turns black instead of transparent.
I’ve tried added depth_draw_always and depth_prepass_alpha but no luck.
Here’s the video showing the issue: Video Unavailable
This is shader snippet inside fragment()
render_mode skip_vertex_transform;
uniform float ditherOpacity = 0;
const float bayer4x4[16] = float[](
0.0 / 16.0, 8.0 / 16.0, 2.0 / 16.0, 10.0 / 16.0,
12.0 / 16.0, 4.0 / 16.0, 14.0 / 16.0, 6.0 / 16.0,
3.0 / 16.0, 11.0 / 16.0, 1.0 / 16.0, 9.0 / 16.0,
15.0 / 16.0, 7.0 / 16.0, 13.0 / 16.0, 5.0 / 16.0
);
float fade_opacity = ditherOpacity;
if (fade_opacity <= 0.001) {
discard;
}
if (fade_opacity < 1.0) {
int x = int(mod(FRAGCOORD.x, 4.0));
int y = int(mod(FRAGCOORD.y, 4.0));
int index = y * 4 + x;
float threshold = bayer4x4[index];
if (fade_opacity <= threshold) {
discard;
}
}