修渲染两处:透明段剔除背面(闭合体正反面乱序 over 混合=深度错乱,单面玻璃 UE/Unity 语义);prefilter mip0 128→256(roughness 0 镜面反射块状马赛克)

This commit is contained in:
2026-10-08 23:50:11 +08:00
parent c43adc339d
commit 235482733c
2 changed files with 8 additions and 1 deletions
+3 -1
View File
@@ -32,7 +32,9 @@ namespace Engine
{ {
constexpr u32 kFaceCount = 6; constexpr u32 kFaceCount = 6;
constexpr u32 kIrradianceFaceSize = 32; // 漫反射辐照度面边长(低频) constexpr u32 kIrradianceFaceSize = 32; // 漫反射辐照度面边长(低频)
constexpr u32 kPrefilterFaceSize = 128; // pre-filter 面边长(mip0) // pre-filter 面边长(mip0):roughness→0 的镜面反射采 mip0,
// 128²/面放大到全屏 = 块状马赛克;256 = 无 SSR 时的清晰度底线
constexpr u32 kPrefilterFaceSize = 256;
constexpr u32 kPrefilterMips = 5; // mip 分级 roughness 数 constexpr u32 kPrefilterMips = 5; // mip 分级 roughness 数
constexpr u32 kBrdfLutSize = 128; // BRDF LUT 边长 constexpr u32 kBrdfLutSize = 128; // BRDF LUT 边长
constexpr u32 kGroupSize = 8; // compute local_size(shader 同步) constexpr u32 kGroupSize = 8; // compute local_size(shader 同步)
@@ -279,6 +279,11 @@ namespace Engine::Passes
// frag 仍写 gl_FragDepth 的时期做的(禁 early-Z),归因存疑; // frag 仍写 gl_FragDepth 的时期做的(禁 early-Z),归因存疑;
// gl_FragDepth 已删除,FALSE 若复现病态再另行隔离。 // gl_FragDepth 已删除,FALSE 若复现病态再另行隔离。
cmd.setDepthWriteEnable(VK_FALSE); cmd.setDepthWriteEnable(VK_FALSE);
// 单面玻璃:透明段剔除背面。不透明段 cullNone + depthWrite
// 无所谓(深度裁决),透明段 cullNone 会让闭合体(cube)的
// 正反面片按 mesh 顺序乱序 over 混合 = "深度错乱";cull back
// 每像素至多一面。双面透明(树叶卡片)将来加材质开关
cmd.setCullMode(vk::CullModeFlagBits::eBack);
vk::ColorBlendEquationEXT premul; vk::ColorBlendEquationEXT premul;
premul.setSrcColorBlendFactor(vk::BlendFactor::eSrcAlpha) premul.setSrcColorBlendFactor(vk::BlendFactor::eSrcAlpha)