我正在使用Unity,但此问题可能不适用于此引擎。

我已将阴影贴图投影到此球体上,但有放牧的阴影。是否可以避免它或像我使用纹理的原始深度数据一样对其进行校正。



这里是伪着色器代码。

uniform sampler2D _ShadowMap;
float4 shadowCoord : TEXCOORD1;

// vertex shader
o.shadowCoord = mul(unity_World2Shadow[0], mul(_Object2World, v.vertex));

// fragment shader
color.rgb = tex2D(_ShadowMap, i.shadowCoord);
return color;


评论

您好,这可能是一个特殊的问题,因此,您可以编辑帖子并添加GPU代码(顶点/片段着色器),以及将阴影映射发送到GPU的特定CPU代码吗?这是为了进行快速调试。

我添加了代码,但是如您所见,这里没有真正的高级功能。我还指出我正在使用Unity。

这应该与stackoverflow.com/questions/1513383/texture-error-on-a-sphere中的问题相同

#1 楼

阴影映射的缺点之一是,您需要偏移或偏斜用于阴影贴图查找的点。这可以通过多种方式完成-通常通过恒定的(阴影图深度)距离或基于铸造三角形的斜率来完成。这两种方法都倾向于在阴影贴图渲染过程中完成。

我认为您需要解决的球体问题是在沿表面法线偏移一点之前,做阴影图查找。这发生在着色期间(在采样阴影贴图时),而不是在阴影贴图渲染期间。顺便说一句,它也是Unity标准渲染管道的一部分,因此您可以从着色器的包含文件中窃取它。

ref http://www.dissidentlogic.com/old/images/NormalOffsetShadows/GDC_Poster_NormalOffset .png
参考http://www.digitalrune.com/Blog/Post/1765/Shadow-Acne