shadow acne(阴影失真)和peter panning(阴影悬浮)
原文链接:https://blog.csdn.net/lawest/article/details/106364935
总结下来就是:
因为深度贴图的分辨率有限,导致多个像素点采样1个深度,导致阴影失真(acne)
1个解决方法是添加bias,也就是给像素的z加上偏移,这个方法会导致阴影悬浮(peter panning)
最好的解决阴影失真的方法是cull font,只渲背面的深度
可参考:https://zhuanlan.zhihu.com/p/45653702
---------------------
在之前学习阴影映射时看的是这篇文章https://learnopengl-cn.github.io/05 Advanced Lighting/03 Shadows/01 Shadow Mapping/。
但是里面有两个点当时是云里雾里,现在重新学习如何实现柔和边缘阴影时有又遇到些问题,就是在阴影映射是出现的shadow acne(阴影失真)和peter panning(阴影悬浮),
阴影失真如图:
出现这个问题的原因原文根本就没讲清楚,给出的图和解释也十分误导人,而且给出的解决方法也十分含糊,当时看的的怀疑人生,怀疑自己的智商,在终于搞懂之后我那个气啊,当时就把桌子给掀了。
会出现阴影失真的根本原因是所生成的深度贴图的分辨率是有限的,就会造成在fragment位置处取深度图中的值发生采样就会出现问题,这里我引用知乎用户王十一的回答用的图(懒得自己画)。如图:以四个格子为四个fragment为例,由于深度图分辨率有限四个格子会采样同一个深度值(由于纹理参数设置的是临近GL_NEAREST,设置线性也会有这个问题)。
如图假设采样这个四方格的正中心,假设这个深度值为10。
这四个fragment分别取名a,b,c,d,由于光源的位置会导致求得的四个距离会不一样,先求a到光源的距离假设为9.8<10,b到光源的距离是11.6 >10,c到光源的距离12.1>10,c到光源的距离9.5<10,。就会导致a和d亮,b和c暗,他们本来应该都是亮的才对。然后整个光源视椎体下各个片段都会出现这个问题,就会出现上面的明暗交错的条纹。
原文说的解决方法是将fragment到光源的距离适当的缩小bias,就会避免这个问题,但是这种解决方法会带来另外一个问题,那就是peter panning(阴影悬浮),bias越大悬浮的越厉害。
如果解决一个问题的方法会带来另外一个问题我们为什么要用呢?
glCullFace(GL_FRONT);
使用正面剔除来生成深度贴图可以解决正面的阴影失真,也就是说只有物体背面才会产生深度信息,向地板这种只有一个面的物体不会产生深度信息,这也是合理的,但是这也只能在封闭的物体上这么做,但是即使这样物体的背面还是会出现阴影失真,这时候可以用glPolygonOffset来解决这个问题,将深度图中的值稍微减小一点而不是片段到光源的距离,两者结合就可以解决这个问题。
shadow acne(阴影失真)和peter panning(阴影悬浮)相关推荐
- 关于阴影映射的那些事,shadow acne(阴影失真)和peter panning(阴影悬浮)
在之前学习阴影映射时看的是这篇文章https://learnopengl-cn.github.io/05 Advanced Lighting/03 Shadows/01 Shadow Mapping/ ...
- OpenGL.Shader:12-阴影实现 - 解决阴影失真
OpenGL.Shader:12-阴影实现 - 解决阴影失真 紧接上文的内容,那么怎么解决阴影失真的问题呢?这些问题其实都是不可回避的存在,现代技术只能尽量优化效果已达以假乱真的效果. 首先回到深度纹 ...
- AE插件:Shadow Studio for Mac(优雅漂亮真实阴影特效插件)
Shadow Studio for Mac是一款非常酷的AE插件,可以模拟各种阴影样式.拥有柔和阴影,径向阴影,内部阴影,长阴影等多功能多线程插件,可实现最快速度渲染.使用传统方法实现光线跟踪等计算柔 ...
- (九)unity自带的着色器源码剖析之——————UnityShadowLibrary.cginc文件分析(实时阴影和烘焙阴影、阴影淡化、阴影渗漏处理、PCF阴影过滤解决实时阴影锯齿)
一.阴影与全局照明系统的关系 Unity3D引擎可以根据宏SHADOWS_SCREEN和LIGHTMAP_ON是否启用决定是否在全局照明系统下对阴影进行混合处理.如果这两个宏同时启用,则HANDLE_ ...
- ue4场景没阴影_UE4 Mobile使用动态阴影的一些小结
UE4在Mobile平台里,除了预先烘焙的静态阴影之外,对于动态物体一般使用两种阴影:调制阴影(Modulated Shadows)和级联阴影(Cascade Shadows,简称CSM). 调制阴影 ...
- visio任意区域填充斜线阴影_DX12渲染管线(6) - 级联阴影与距离场阴影
接上一期: 膜力鸭苏蛙可:引擎搭建记录(5) - 距离场 : 建场zhuanlan.zhihu.com 项目地址: MrySwk/GravityEnginegithub.com 上一期,我们完成了 ...
- android 加阴影,Android设置控件阴影的三种方式
释放双眼,带上耳机,听听看~! 第一种方式:elevation View的大小位置都是通过x,y确定的,而现在有了z轴的概念,而这个z值就是View的高度(elevation),而高度决定了阴影(sh ...
- html盒子阴影的语法,css3 盒阴影box-shadow
1.描述: box-shadow可以设置一个或多个下拉阴影的框,此属性使用于盒模型不是用来设置文字阴影,设置文字阴影可以使用text-shadow 2.语法: box-shadow:h-shadow ...
- 文件用手机拍照片打印时,打印出来总是有黑阴影,如何去掉黑色阴影打印清晰的图片
文件用手机拍照片打印时,打印出来总是有黑阴影,如何去掉黑色阴影打印清晰的图片 目录 文件用手机拍照片打印时,打印出来总是有黑阴影,如何去掉黑色阴影打印清晰的图片 1.将需要打印的图片复制粘贴至Word ...
最新文章
- Spring Boot req中@NotNull, @NotEmpty和@NotBlank之间的区别是什么?
- Python第五课(字典)
- mysql基础知识整理_mysql基础知识整理(一)
- Service order description modify and save
- Android onLoadFinished与onLoaderReset
- 搭建opencv环境
- Git 学习笔记--git 查看某个文件的修改历史
- 大背景在网页设计中应用的30个优秀案例
- php unset引用变量后不会删除值
- 电池充电器UL1310、启动电源UL2743、电脑风扇507测试报告怎么办理?
- centos7 yum 配置阿里云镜像
- 2017滴滴校招编程
- 7-7 阿泽的交友标准 (10 分)
- 中国传媒大学计算机课程表,中国传媒大学新闻学院课程表.doc
- HDFS性能压测工具
- 刚子扯谈:网站运营路在何方?
- 串口开发 打印机 读卡器 遇到的问题
- 香帅的北大金融学课笔记5 -- 基金分类
- 微信红包的随机算法是怎样实现的?
- python--ant环境搭建