为啥我用three.js,设置光照效果,会有如此明显的一圈一圈的水波纹一样的黑影
自阴影深度比较导致的误差。shadow map的实现中有两个深度,一个是在光源视角绘制的深度,一个是摄像机视角绘制再通过光源逆矩阵变换得到的深度,这两个值会被用于比较,如果前者小于后者,则说明当前绘制点被遮挡了,产生了阴影。对于没有被遮挡的点,这两个值理论上应该是一样大的,但问题在于对于精度有限的运算系统,即便同一个点得到的两个深度也有微小差距,于是就产生了条纹状的错误自阴影,改善这个问题的方法是引入一个bias,只有两个深度差距超过一定程度才认为是被遮挡,否则把深度的不同视为精度误差。======更新======刚好今天有人又问到有关阴影瑕疵的问题,就把我的理解再整理一下:shadow bias问题的根本是标准的阴影贴图算法是通过深度比较得出是否是阴影,它是一个不连续的估计值,所以在引入了bias后,bias大了就会peter panning小了就会shadow ance(因为是一刀切)。而pcf方法就是让这个不连续的估计值变得连续一些。但其实已经有很多sm的做法它对“是否在阴影中”的估计结果本身就是一个连续函数,目前比较主流的两个分别是VSM和ESM,他们的估计值本身连续,又能很好的配合线性插值直接平均深度(而不是平均深度的比较结果),比较容易利用硬件机能进行大量采样,没有了bias的问题,也自然地提供了软阴影,目前来看以ESM效果更佳。因为后者实现更简单,也依赖更少的带宽(VSM需要RG32F,ESM只需要R32F)
■网友

看蝴蝶结。第二个图,就是自身不receiveShadow的效果 @crazyxiazi
■网友
这是因为阴影贴图的深度数据和离光源近的表面的坐标相互交错。你可以在生成阴影贴图的时候,只绘制反向的那些表面。不过好像这个也有另一个问题。还可以调整阴影深度的offset,不过这比较trick。等大牛解答。==================阴影贴图保存离光源最近的东西的距离。理想情况下,这应当和实际的模型完全一致。但是实际上,一来贴图是分格的,而模型是三角面片的平面;二来存在计算精度误差。所以这种“一致”是台阶状的拟合。
■网友
确实是bias的问题,可以设置鞋子自生不做为阴影的reciver。不过,不清楚three\u0026#39;.js是否支持这种自定义----------------------------------------------------self Shadow的问题在Shadow Map 这个方法里面是一直存在的.一般能用的也就是1.更好的Depth纹理的精度,2或者更合适的远近平面,这个都是为解决精度问题存在的.有一种方法是根据深度的梯度来动态的算bias.这个在微软的shadow map tutorial里面有介绍的.可以看一下Common Techniques to Improve Shadow Depth Maps (Windows). 在Nvidia的SDK 10中的percentage closer softe shadows 里面有怎样计算depth gradient shader代码.但是实际上我在Opengl es 2.0 实现过,有改善,但也不是完全解决. webgl 也是基于es 写的,题主如果有意的话,可以尝试一下.
■网友
因为阴影贴图是光栅化之后生成的,如果光栅化的分辨率不够,做深度对比时可能会出现shadow acne。如下图。黄色的面是光栅化后的阴影贴图,黑色加粗是shadow acne。最原始的解决办法是在做深度比较时加bias,最简单的理解,就是将下图锯齿状的黄色面沿着光照射过来的方向、整体往上平移一定程度,如是则所有的被遮挡区域将全部判决为黑色阴影,acne消失。但这种办法bias的取值需要人肉调整,这是个脏活,取值太小,则shadow acne依然存在,太大了会出现Peter Pan现象。所以现在这种原始阴影贴图方式已经过时了,都是用prefiltered shadow map,感兴趣的可以自己查一下。
推荐阅读
- 为啥看到书柜上的藏书会有心旷神怡的感觉
- 为啥知乎上普便有一种【我在北上广深打工,所以拥有更好的视野】这样的错觉
- 为啥工商银行的用户体验如此之差
- 汽车|看了中消协4S店服务测评调查结果,终于知道法系车为啥卖不好了
- 你为啥从窝窝商城离职?
- 为啥5G和2.4G默认的BSSID是相同的
- 为啥电器实体店的价格比淘宝贵那么多
- 现在在线学习视频有很多了,为啥大部分人还是喜欢下载下来观看
- 为啥到现在你还没有女朋友 ?
- 天赐的声音|33岁张雨绮为啥总离婚?看过这些照片就明白了,都是性感惹得祸
