阴影(本修正的核心根因):
- Shadow pass 光源正交写深度(2048 D32),Forward 采样比较;
写入与采样共用同一 lightSpace 矩阵,杜绝姿态/镜像不一致
- 修复:push constant range 64B→128B(原 Shadow pass 推 {lightVP,model}
超出 layout 声明范围 = UB,阴影中模型矩阵读到垃圾导致旋转错乱)
- 修复:ShadowFactor 缺少 NDC→UV 映射(*0.5+0.5),采样区域整体错位
- 修复:RG ShaderRead stage 位值直转(eFragment=0x10 在 PipelineStage2
是 TESSELLATION_CONTROL),改为逐位显式映射
- Camera perspective 深度重映射到 Vulkan [0,1](公式与 ortho 不同:
M22=M22*0.5-0.5, M32*=0.5);光源 ortho remap 用 M32=M32*0.5+0.5
引擎配套:
- TransformComponent 重构为 position/rotation/scale + Compose()
- Texture::CreateSolidColor / Model::CreatePlane 程序化资产
(两段式上传公共路径),AssetManager.CreatePlane 带缓存入口
- RG 新增 GetPhysicalView(h, slot):按帧槽位把 RG 资源绑进外部描述符
(阴影图 per-slot 物理镜像各自绑定)
验证:validation 0 error 0 warning,阴影随实体旋转正确
18 lines
478 B
GLSL
18 lines
478 B
GLSL
#version 450
|
||
|
||
// Shadow pass vertex:光源视角写深度。
|
||
// push constant = { lightVP, model },与 Forward pass 用同一份
|
||
// lightVP(UBO.lightSpace)和同一份 model(TransformComponent.world),
|
||
// 保证阴影贴图与主视角几何严格一致。
|
||
|
||
layout(location = 0) in vec3 inPosition;
|
||
|
||
layout(push_constant) uniform ShadowPush {
|
||
mat4 lightVP;
|
||
mat4 model;
|
||
} pc;
|
||
|
||
void main() {
|
||
gl_Position = pc.lightVP * pc.model * vec4(inPosition, 1.0);
|
||
}
|