shader_type canvas_item; render_mode blend_mix; uniform int particles_anim_h_frames; uniform int particles_anim_v_frames; uniform bool particles_anim_loop; void vertex() { float h_frames = float(particles_anim_h_frames); float v_frames = float(particles_anim_v_frames); VERTEX.xy /= vec2(h_frames, v_frames); float particle_total_frames = float(particles_anim_h_frames * particles_anim_v_frames); float particle_frame = floor(INSTANCE_CUSTOM.z * float(particle_total_frames)); if (!particles_anim_loop) { particle_frame = clamp(particle_frame, 0.0, particle_total_frames - 1.0); } else { particle_frame = mod(particle_frame, particle_total_frames); } UV /= vec2(h_frames, v_frames); UV += vec2(mod(particle_frame, h_frames) / h_frames, floor(particle_frame / h_frames) / v_frames); } void fragment() { float b = texture(TEXTURE, UV).w; float n = texture(NORMAL_TEXTURE, UV).w; if(b == 0f && n >= 1f) { //COLOR.xyz = vec3(1, 1, 1) - texture(SCREEN_TEXTURE, SCREEN_UV).xyz; COLOR = vec4(0, 0, 0, 0.9f); } else { COLOR = texture(TEXTURE, UV); } }