W
WAVINDY
Guest
Hey there all, I'm looking to figure out this thing that happens when I apply a dithering system with surfaces involved.
I made it work perfectly using a video found here: GM Wolf's Dithering Method
The end result is almost there, but for example, when I shoot a bullet, the bullet's drawing of a light around it makes horizontal lines when it's light intersects another like this:
Here's the Shader:
The drawing of shader onto objects through draw event of obj_lighting:
I made it work perfectly using a video found here: GM Wolf's Dithering Method
The end result is almost there, but for example, when I shoot a bullet, the bullet's drawing of a light around it makes horizontal lines when it's light intersects another like this:
Here's the Shader:
GML:
//
// Simple passthrough vertex shader
//
attribute vec3 in_Position; // (x,y,z)
//attribute vec3 in_Normal; // (x,y,z) unused in this shader.
attribute vec4 in_Colour; // (r,g,b,a)
attribute vec2 in_TextureCoord; // (u,v)
varying vec2 v_vTexcoord;
varying vec4 v_vColour;
void main()
{
vec4 object_space_pos = vec4( in_Position.x, in_Position.y, in_Position.z, 1.0);
gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos;
v_vColour = in_Colour;
v_vTexcoord = in_TextureCoord;
}
GML:
//
// Simple passthrough fragment shader
//
varying vec2 v_vTexcoord;
varying vec4 v_vColour;
uniform vec2 texSize;
uniform sampler2D ditherTex;
float height = 4.;
vec2 size = vec2(16,16);
vec2 tSize = vec2(32,64);
vec2 rSize = size / tSize;
void main()
{
float band = floor(texture2D( gm_BaseTexture, v_vTexcoord ).r * 8.);
vec2 offset = vec2(rSize.x * floor(band / height), rSize.y * mod(band, height));
vec2 texcoord = vec2( (mod((v_vTexcoord.x * texSize.x) , size.x) / (tSize.x)),
(mod((v_vTexcoord.y * texSize.y) , size.y) / (tSize.y)));
gl_FragColor = texture2D(ditherTex, texcoord + offset);
}
GML:
draw_set_blend_mode(bm_add);
surface_set_target(surface);
draw_clear_alpha(c_black,1);
with (obj_Light)
draw_self();
with (obj_Character)
draw_sprite_ext(spr_Light2,random(3),x,y,3,3,0,c_white,1);
with (obj_bullet)
draw_sprite_ext(spr_Light2,0,x,y,1,1,0,c_white,1);
surface_reset_target();
draw_set_blend_mode(bm_normal);
texture_set_interpolation(0);
shader_set(shd_dither);
shader_set_uniform_f(u_size, room_width, room_height);
texture_set_stage(u_dither_tex, dither_tex);
draw_surface(surface,0,0);
shader_reset();
Last edited by a moderator: