#version 430 core in vec3 vertexPosition; in vec3 vertexNormal; in vec3 particlePosition; in vec3 particleColor; out VertexBlock { flat vec3 color; vec3 pos; vec3 normal; } v_out; uniform mat4 mvp; uniform mat3 modelViewNormal; uniform mat4 modelView; void main(void) { vec4 pos = vec4(vertexPosition.xyz, 1.0) + vec4(particlePosition, 0.0); gl_Position = mvp * pos; v_out.pos = vec4(modelView * pos).xyz; v_out.normal = normalize(modelViewNormal * vertexNormal); v_out.color = mix(particleColor * 0.2, particleColor, smoothstep(0.5, 0.8, abs(v_out.normal).z)); }