如何使用级联阴影贴图完全摆脱彼得平移?

问题描述 投票:0回答:1

我正在使用 C 和 opengl 4.0 制作体素开放世界游戏。我使用本教程实现了级联阴影贴图:https://learnopengl.com/Guest-Articles/2021/CSM

无论我如何设置偏差变量,我都无法摆脱彼得平移。我的影子是这样的: current shadows

如您所见,立方体及其阴影之间有细小的间隙。我不想这样。

这就是我设置偏差变量的方式:

float bias = max(0.005f * (1.0f - dot(normal, lightDirection)), 0.00028f);
const float biasModifier = 0.2f;
if(layer==0){
bias *= 1 / (cascade0range * biasModifier);
}
else if(layer==1){
bias *= 1 / (cascade1range * biasModifier);
}
else if(layer==2){
bias *= 1 / (cascade2range * biasModifier);
}
else if(layer==3){
bias *= 1 / (cascade3range * biasModifier);
}

如果您想查看所有代码,这是项目的存储库: https://github.com/SUKRUCIRIS/OPENGL_VOXEL_GSU

我尝试更多地减少偏差变量,但它导致了阴影痤疮,即使如此,差距仍然存在: shadow acne still there is a gap

c opengl glsl opengl-4
1个回答
0
投票

我通过在阴影传递期间剔除正面来解决了这个问题。

glCullFace(GL_BACK);
glFrontFace(GL_CW);

然后我在正常渲染时恢复了它

glCullFace(GL_FRONT);
glFrontFace(GL_CCW);
© www.soinside.com 2019 - 2024. All rights reserved.