rj-action-library/Runtime/Rendering/Compositor/CompositorEffects/GreyScale/GrayScaleShader.glsl

39 lines
772 B
Plaintext
Raw Normal View History

2025-04-23 12:00:43 +00:00
#[compute]
#version 450
layout( local_size_x = 16, local_size_y = 16, local_size_z = 1 ) in;
layout( rgba16f, set = 0, binding = 0)
uniform image2D color_image;
layout(push_constant, std430)
2025-07-25 08:13:35 +00:00
uniform Parameters
2025-04-23 12:00:43 +00:00
{
vec2 raster_size;
2025-07-25 08:13:35 +00:00
float amount;
float method;
2025-04-23 12:00:43 +00:00
2025-07-25 08:13:35 +00:00
} parameters;
2025-04-23 12:00:43 +00:00
void main()
{
ivec2 uv = ivec2( gl_GlobalInvocationID.xy );
2025-07-25 08:13:35 +00:00
ivec2 size = ivec2( parameters.raster_size );
2025-04-23 12:00:43 +00:00
if ( uv.x >= size.x || uv.y >= size.y )
{
2025-07-25 08:13:35 +00:00
return;
2025-04-23 12:00:43 +00:00
}
vec4 color = imageLoad( color_image, uv );
2025-07-25 08:13:35 +00:00
float gray = color.r * 0.2 + color.g * 0.7 + color.b * 0.1;
float avg = ( color.r + color.g + color.b ) / 3.0;
gray = mix( gray, avg, parameters.method );
2025-04-23 12:00:43 +00:00
2025-07-25 08:13:35 +00:00
color.rgb = mix( color.rgb, vec3( gray ), parameters.amount );
2025-04-23 12:00:43 +00:00
imageStore( color_image, uv, color );
}