diff --git a/armorpaint/shaders/layer_invert.kong b/armorpaint/shaders/layer_invert.kong index 3f0399f8..f3d1d163 100644 --- a/armorpaint/shaders/layer_invert.kong +++ b/armorpaint/shaders/layer_invert.kong @@ -25,11 +25,15 @@ struct vert_out { fun layer_invert_vert(input: vert_in): vert_out { var output: vert_out; + + var cpos: float4 = constants.pos; + var ctex: float4 = constants.tex; + output.pos = float4(input.pos, 0.0, 1.0); - output.pos.xy = output.pos.xy * constants.pos.zw + constants.pos.xy; + output.pos.xy = output.pos.xy * cpos.zw + cpos.xy; output.pos.xy = output.pos.xy * 2.0 - 1.0; output.pos.y = -output.pos.y; - output.tex = input.pos * constants.tex.zw + constants.tex.xy; + output.tex = input.pos * ctex.zw + ctex.xy; output.col = constants.col; return output; } diff --git a/armorpaint/shaders/layer_view.kong b/armorpaint/shaders/layer_view.kong index 40091fcc..6d805a41 100644 --- a/armorpaint/shaders/layer_view.kong +++ b/armorpaint/shaders/layer_view.kong @@ -26,11 +26,15 @@ struct vert_out { fun layer_view_vert(input: vert_in): vert_out { var output: vert_out; + + var cpos: float4 = constants.pos; + var ctex: float4 = constants.tex; + output.pos = float4(input.pos, 0.0, 1.0); - output.pos.xy = output.pos.xy * constants.pos.zw + constants.pos.xy; + output.pos.xy = output.pos.xy * cpos.zw + cpos.xy; output.pos.xy = output.pos.xy * 2.0 - 1.0; output.pos.y = -output.pos.y; - output.tex = input.pos * constants.tex.zw + constants.tex.xy; + output.tex = input.pos * ctex.zw + ctex.xy; output.col = constants.col; return output; } diff --git a/base/shaders/bloom_downsample_pass.kong b/base/shaders/bloom_downsample_pass.kong index e9f2feef..71e016b6 100644 --- a/base/shaders/bloom_downsample_pass.kong +++ b/base/shaders/bloom_downsample_pass.kong @@ -32,7 +32,7 @@ fun bloom_downsample_pass_vert(input: vert_in): vert_out { return output; } -fun downsample_dual_filter(tex: tex2d, tex_coord: float2, texel_size: float2): float3 { +fun downsample_dual_filter(tex_coord: float2, texel_size: float2): float3 { var delta: float3 = float3(texel_size.xy, texel_size.x) * float3(0.5, 0.5, -0.5); var result: float3; @@ -47,14 +47,14 @@ fun downsample_dual_filter(tex: tex2d, tex_coord: float2, texel_size: float2): f fun bloom_downsample_pass_frag(input: vert_out): float4 { var color: float4; - color.rgb = downsample_dual_filter(tex, input.tex, constants.screen_size_inv); + color.rgb = downsample_dual_filter(input.tex, constants.screen_size_inv); if (constants.current_mip_level == 0) { var brightness: float = max(color.r, max(color.g, color.b)); var softening_curve: float = brightness - bloom_threshold + bloom_knee; softening_curve = clamp(softening_curve, 0.0, 2.0 * bloom_knee); - softening_curve = softening_curve * softening_curve / (4 * bloom_knee + epsilon); + softening_curve = softening_curve * softening_curve / (4.0 * bloom_knee + epsilon); var contribution_factor: float = max(softening_curve, brightness - bloom_threshold); diff --git a/base/shaders/bloom_upsample_pass.kong b/base/shaders/bloom_upsample_pass.kong index 6649561c..c76e8eb6 100644 --- a/base/shaders/bloom_upsample_pass.kong +++ b/base/shaders/bloom_upsample_pass.kong @@ -31,28 +31,28 @@ fun bloom_upsample_pass_vert(input: vert_in): vert_out { return output; } -fun upsample_dual_filter(tex: tex2d, tex_coord: float2, texel_size: float2): float3 { +fun upsample_dual_filter(tex_coord: float2, texel_size: float2): float3 { var delta: float2 = texel_size * constants.sample_scale; var result: float3; result = sample_lod(tex, sampler_linear, tex_coord + float2(-delta.x * 2.0, 0.0), 0.0).rgb; result += sample_lod(tex, sampler_linear, tex_coord + float2(-delta.x, delta.y), 0.0).rgb * 2.0; result += sample_lod(tex, sampler_linear, tex_coord + float2(0.0, delta.y * 2.0), 0.0).rgb; - result += sample_lod(tex, sampler_linear, tex_coord + delta, 0.0).rgb * 2.0; + result += sample_lod(tex, sampler_linear, tex_coord + delta, 0.0).rgb * 2.0; result += sample_lod(tex, sampler_linear, tex_coord + float2(delta.x * 2.0, 0.0), 0.0).rgb; result += sample_lod(tex, sampler_linear, tex_coord + float2(delta.x, -delta.y), 0.0).rgb * 2.0; result += sample_lod(tex, sampler_linear, tex_coord + float2(0.0, -delta.y * 2.0), 0.0).rgb; - result += sample_lod(tex, sampler_linear, tex_coord - delta, 0.0).rgb * 2.0; + result += sample_lod(tex, sampler_linear, tex_coord - delta, 0.0).rgb * 2.0; return result * (1.0 / 12.0); } fun bloom_upsample_pass_frag(input: vert_out): float4 { var color: float4; - color.rgb = upsample_dual_filter(tex, input.tex, constants.screen_size_inv); + color.rgb = upsample_dual_filter(input.tex, constants.screen_size_inv); if (constants.current_mip_level == 0) { - color.rgb = color.rgb * bloom_strength; + color.rgb = color.rgb * float3(bloom_strength, bloom_strength, bloom_strength); } color.a = 1.0; diff --git a/base/shaders/compositor_pass.kong b/base/shaders/compositor_pass.kong index acbbc635..1f232357 100644 --- a/base/shaders/compositor_pass.kong +++ b/base/shaders/compositor_pass.kong @@ -38,7 +38,7 @@ fun tonemap_filmic(color: float3): float3 { x.x = max(0.0, color.x - 0.004); x.y = max(0.0, color.y - 0.004); x.z = max(0.0, color.z - 0.004); - return (x * (6.2 * x + 0.5)) / (x * (6.2 * x + 1.7) + 0.06); + return (x * (x * 6.2 + 0.5)) / (x * (x * 6.2 + 1.7) + 0.06); } fun compositor_pass_frag(input: vert_out): float4 { @@ -47,13 +47,13 @@ fun compositor_pass_frag(input: vert_out): float4 { // Static grain var x: float = (input.tex.x + 4.0) * (input.tex.y + 4.0) * 10.0; var g: float = (((x % 13.0) + 1.0) * ((x % 123.0) + 1.0) % 0.01) - 0.005; - color.rgb += float3(g, g, g) * constants.grain_strength; + color.rgb = color.rgb + (float3(g, g, g) * constants.grain_strength); - color.rgb *= (1.0 - constants.vignette_strength) + constants.vignette_strength * pow(16.0 * input.tex.x * input.tex.y * (1.0 - input.tex.x) * (1.0 - input.tex.y), 0.2); + color.rgb = color.rgb * ((1.0 - constants.vignette_strength) + constants.vignette_strength * pow(16.0 * input.tex.x * input.tex.y * (1.0 - input.tex.x) * (1.0 - input.tex.y), 0.2)); // Auto exposure - // const float auto_exposure_strength = 1.0; - // float expo = 2.0 - clamp(length(sample_lod(histogram, sampler_linear, float2(0.5, 0.5), 0.0).rgb), 0.0, 1.0); + // const auto_exposure_strength: float = 1.0; + // var expo: float = 2.0 - clamp(length(sample_lod(histogram, sampler_linear, float2(0.5, 0.5), 0.0).rgb), 0.0, 1.0); // color.rgb *= pow(expo, auto_exposure_strength * 2.0); color.rgb = tonemap_filmic(color.rgb); // With gamma diff --git a/base/shaders/deferred_light.kong b/base/shaders/deferred_light.kong index a8ca8174..c0f6cd9f 100644 --- a/base/shaders/deferred_light.kong +++ b/base/shaders/deferred_light.kong @@ -60,7 +60,7 @@ fun deferred_light_vert(input: vert_in): vert_out { var v: float4 = float4(input.pos.xy, 1.0, 1.0); v = constants.invVP * v; v.xyz /= v.w; - output.view_ray = float3(v.xyz - constants.eye); + output.view_ray = v.xyz - constants.eye; return output; } diff --git a/base/shaders/draw/draw_image.kong b/base/shaders/draw/draw_image.kong index eca79cd2..ad0e628b 100644 --- a/base/shaders/draw/draw_image.kong +++ b/base/shaders/draw/draw_image.kong @@ -25,11 +25,15 @@ struct vert_out { fun draw_image_vert(input: vert_in): vert_out { var output: vert_out; + + var cpos: float4 = constants.pos; + var ctex: float4 = constants.tex; + output.pos = float4(input.pos, 0.0, 1.0); - output.pos.xy = output.pos.xy * constants.pos.zw + constants.pos.xy; + output.pos.xy = output.pos.xy * cpos.zw + cpos.xy; output.pos.xy = output.pos.xy * 2.0 - 1.0; output.pos.y = -output.pos.y; - output.tex = input.pos * constants.tex.zw + constants.tex.xy; + output.tex = input.pos * ctex.zw + ctex.xy; output.col = constants.col; return output; } diff --git a/base/shaders/draw/draw_rect.kong b/base/shaders/draw/draw_rect.kong index e6c26d4f..b0b9de90 100644 --- a/base/shaders/draw/draw_rect.kong +++ b/base/shaders/draw/draw_rect.kong @@ -17,8 +17,11 @@ struct vert_out { fun draw_rect_vert(input: vert_in): vert_out { var output: vert_out; + + var cpos: float4 = constants.pos; + output.pos = float4(input.pos, 0.0, 1.0); - output.pos.xy = output.pos.xy * constants.pos.zw + constants.pos.xy; + output.pos.xy = output.pos.xy * cpos.zw + cpos.xy; output.pos.xy = output.pos.xy * 2.0 - 1.0; output.pos.y = -output.pos.y; output.col = constants.col; diff --git a/base/shaders/draw/draw_text.kong b/base/shaders/draw/draw_text.kong index c9b4076a..f556168d 100644 --- a/base/shaders/draw/draw_text.kong +++ b/base/shaders/draw/draw_text.kong @@ -25,11 +25,15 @@ struct vert_out { fun draw_text_vert(input: vert_in): vert_out { var output: vert_out; + + var cpos: float4 = constants.pos; + var ctex: float4 = constants.tex; + output.pos = float4(input.pos, 0.0, 1.0); - output.pos.xy = output.pos.xy * constants.pos.zw + constants.pos.xy; + output.pos.xy = output.pos.xy * cpos.zw + cpos.xy; output.pos.xy = output.pos.xy * 2.0 - 1.0; output.pos.y = -output.pos.y; - output.tex = input.pos * constants.tex.zw + constants.tex.xy; + output.tex = input.pos * ctex.zw + ctex.xy; output.col = constants.col; return output; } diff --git a/base/shaders/layer_copy.kong b/base/shaders/layer_copy.kong index be4860be..2488c0cf 100644 --- a/base/shaders/layer_copy.kong +++ b/base/shaders/layer_copy.kong @@ -25,11 +25,15 @@ struct vert_out { fun layer_copy_vert(input: vert_in): vert_out { var output: vert_out; + + var cpos: float4 = constants.pos; + var ctex: float4 = constants.tex; + output.pos = float4(input.pos, 0.0, 1.0); - output.pos.xy = output.pos.xy * constants.pos.zw + constants.pos.xy; + output.pos.xy = output.pos.xy * cpos.zw + cpos.xy; output.pos.xy = output.pos.xy * 2.0 - 1.0; output.pos.y = -output.pos.y; - output.tex = input.pos * constants.tex.zw + constants.tex.xy; + output.tex = input.pos * ctex.zw + ctex.xy; output.col = constants.col; return output; } diff --git a/base/shaders/layer_copy_bgra.kong b/base/shaders/layer_copy_bgra.kong index e143f6e4..1bcdcca4 100644 --- a/base/shaders/layer_copy_bgra.kong +++ b/base/shaders/layer_copy_bgra.kong @@ -25,11 +25,15 @@ struct vert_out { fun layer_copy_bgra_vert(input: vert_in): vert_out { var output: vert_out; + + var cpos: float4 = constants.pos; + var ctex: float4 = constants.tex; + output.pos = float4(input.pos, 0.0, 1.0); - output.pos.xy = output.pos.xy * constants.pos.zw + constants.pos.xy; + output.pos.xy = output.pos.xy * cpos.zw + cpos.xy; output.pos.xy = output.pos.xy * 2.0 - 1.0; output.pos.y = -output.pos.y; - output.tex = input.pos * constants.tex.zw + constants.tex.xy; + output.tex = input.pos * ctex.zw + ctex.xy; output.col = constants.col; return output; }