gpt4 book ai didi

c++ - 为什么在使用透明胶片的阴影贴图技术时,这条黑线会出现在投影阴影的边界上?

转载 作者:行者123 更新时间:2023-11-28 02:19:33 25 4
gpt4 key购买 nike

这是问题的截图:http://s13.postimg.org/672twurfr/shadowmap_saturn_rings.jpg

您会注意到土星环的投影阴影顶部有一条黑线,它出现在任何物体阴影的所有边界上。

这是我用来渲染深度图的像素着色器,我使用颜色的绿色和蓝色值来存储 alpha 值。

float depthValue;
float4 color;
float4 textureColor;

textureColor = shaderTexture.Sample(SampleType, input.tex);

depthValue = input.depthPosition.z / input.depthPosition.w;

color = float4(depthValue, textureColor.a, textureColor.a, 1.0f);

return color;

这是我用来渲染将要显示的最终颜色的像素着色器片段:

if((saturate(projectTexCoord.x) == projectTexCoord.x) && (saturate(projectTexCoord.y) == projectTexCoord.y))
{
float4 color_d = depthMapTexture.Sample(SampleTypeClamp, projectTexCoord);

depthValue = color_d.r;

lightDepthValue = input.lightViewPosition.z / input.lightViewPosition.w;

lightDepthValue = lightDepthValue - bias;

if(lightDepthValue < depthValue)
{
lightIntensity = saturate(dot(input.normal, lightDir));
}

else
{
lightIntensity = saturate(dot(input.normal, lightDir))*(1.0f - color_d.g);
}
}

抱歉,信息含糊不清,但我真的不知道问题出在哪里,也许是代码中的其他地方,但绝对不是我正在使用的纹理文件,所以它一定是代码。

知道我可以从哪里开始寻找问题吗?

最佳答案

可能是阴影贴图纹理坐标采样超出范围。我可以看到你正在检查它,但我还是会测试它。在您的 SamplerState 中,您是否设置了 BorderColor?尝试将其设置为红色,看看是否是问题所在。

阴影贴图的深度是否与您在其上应用着色器的渲染目标相同?

编辑。这是我使用 SampleCmpLevelZero 的着色器代码:

if (ShadowCoord.x > 0.0f && ShadowCoord.x < 1.0f && ShadowCoord.y > 0.0f && ShadowCoord.y < 1.0f) 
{
ShadowCoord.z -= 0.001f;
float a = 1;

a = ShadowMap.SampleCmpLevelZero(ShadowSampler, ShadowCoord.xy, ShadowCoord.z).r;
a = linearizeDepth(a);

ambient = float4(a,a,a, 0);

}

关于c++ - 为什么在使用透明胶片的阴影贴图技术时,这条黑线会出现在投影阴影的边界上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33025300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com