From 38caf1a5f0d71748c47918acebfc15116194bcf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tur=C3=A1nszki=20J=C3=A1nos?= Date: Mon, 7 Jul 2025 08:31:24 +0200 Subject: [PATCH] improved MSAA instance transparency --- WickedEngine/shaders/objectHF.hlsli | 35 +++++++++++++++++++---------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/WickedEngine/shaders/objectHF.hlsli b/WickedEngine/shaders/objectHF.hlsli index e36399c62..3054acb18 100644 --- a/WickedEngine/shaders/objectHF.hlsli +++ b/WickedEngine/shaders/objectHF.hlsli @@ -515,17 +515,6 @@ float4 main(PixelInput input, in bool is_frontface : SV_IsFrontFace APPEND_COVER write_mipmap_feedback(push.materialIndex, ddx_coarse(uvsets), ddy_coarse(uvsets)); #endif // TILEDFORWARD -#ifndef DISABLE_ALPHATEST -#ifndef TRANSPARENT -#ifndef ENVMAPRENDERING -#ifdef OBJECTSHADER_USE_DITHERING - // apply dithering: - clip(dither(pixel + GetTemporalAASampleRotation()) - input.GetDither()); -#endif // OBJECTSHADER_USE_DITHERING -#endif // DISABLE_ALPHATEST -#endif // TRANSPARENT -#endif // ENVMAPRENDERING - #ifdef OBJECTSHADER_USE_INSTANCEINDEX ShaderMeshInstance meshinstance = load_instance(input.GetInstanceIndex()); #endif // OBJECTSHADER_USE_INSTANCEINDEX @@ -1078,8 +1067,30 @@ float4 main(PixelInput input, in bool is_frontface : SV_IsFrontFace APPEND_COVER color = saturateMediump(color); + half alphatest = material.GetAlphaTest() + meshinstance.GetAlphaTest(); + #ifndef DISABLE_ALPHATEST - coverage = AlphaToCoverage(color.a, material.GetAlphaTest() + meshinstance.GetAlphaTest(), input.pos); // opaque soft alpha test (MSAA, temporal AA support) +#ifndef TRANSPARENT +#ifndef ENVMAPRENDERING +#ifdef OBJECTSHADER_USE_DITHERING + // apply dithering: + if (GetCamera().sample_count > 1) + { + // AlphaToCoverage will handle it as transparent instead of dithering: + color.a -= input.GetDither(); + alphatest += input.GetDither(); + } + else + { + clip(dither(pixel + GetTemporalAASampleRotation()) - input.GetDither()); + } +#endif // OBJECTSHADER_USE_DITHERING +#endif // DISABLE_ALPHATEST +#endif // TRANSPARENT +#endif // ENVMAPRENDERING + +#ifndef DISABLE_ALPHATEST + coverage = AlphaToCoverage(color.a, alphatest, input.pos); // opaque soft alpha test (MSAA, temporal AA support) #endif // DISABLE_ALPHATEST // end point: