Shadows实时阴影原理
文章目录
一、Shadows Mapping
最主流的阴影算法,分俩趟Pass渲染。
1.第一个Pass:从光源Light射出方向出发,记录到达像素(片元)最浅的距离
得到一张Texture,也就是深度图:0-1 黑-白 物体离得越近越黑。
2.第二个Pass:从眼睛(摄像头)看向方向出发,渲染场景得到像素(片元),如片元A
计算这些片元(如A)到光源的距离:黄线,和Pass1的距离一样,说明光源可见 A没有被遮挡,没有阴影。
如果片元A到光源的距离,黄线比在Pass1深度图记录的距离(B到光源)更远,则说明片源A被遮挡,A处有阴影。
二、Shadows Mapping 由于数值精度会出现的问题 Shadows Bias:
由于光源离地平线越近,光源到像素的距离1和摄像头到像素的距离2就会不一致,地面就会出现类似摩尔纹的阴影错误。
通常可以增加一个根据角度改变的偏移距离Bias值来解决摩尔纹的阴影错误。
但如果Bias过大就会又出现如图脚步阴影悬空的问题。(也叫彼得潘),工业界一般靠调整Bias值来大体解决这个问题。
三、阴影抗锯齿Percentage Closer Filtering (PCF)
PCF总体上就是从原来的和P点比较变成了和P点周围比较再做平均值,就是一种模糊。
具体在(一.2)这个步骤,即“如果片元A到光源的距离,黄线比在Pass1深度图记录的距离(B到光源)更远,则说明片源A被遮挡,A处有阴影。”
比较距离时不再只和深度图的一个点做比较,而是和这个点周围如3x3范围的每个点(片元)做一个平均或加权过滤(Filtering),这样的结果就是消除了阴影边缘的锯齿。
四、实现软阴影 Precentage closer soft shadows (PCSS)
对于阴影我们观察到一个现象:阴影离投射物越远,阴影越浅。反之离投射物越近,阴影越硬,如笔尖。
总的来说,PCSS就是用PCF的做法 调大Filer size实现的软阴影。
从以上观察我们知道阴影的深浅和遮挡物到阴影的距离即dReceiver的距离相关,越近阴影越深。
1.绿色Blocker为遮挡物。
2.W灰色为阴影,它的大小和绿色遮挡物Blocker的距离成远大近小:
相似三角形计算公式: W灰色:W黄色 =(d蓝色-d绿色):d绿色
Filer的大小就取决于W灯光大小和dBlocker距离。
如上图,PCSS分三步:
1.计算遮挡物P周围范围平均深度
2.用这个平均深度估算出第3步在P周围应该Filer size 多大
3.用这个Filer size 进行PCF计算(本质上就是确定P范围区域内有百分之多少比P点深度浅),从而得出0~1间数值的软阴影。
四、基于方差的软阴影 VSSM
PCSS中第1步和第3步计算量超大非常消耗性能,所以人们又提出针对这两步优化的软阴影算法VSSM:
我们可以近似认为P点在其周边范围的深度排名符合正太分布,所以问题演化成了求期望和方差(二者可确定正太分布图)
求期望:
方法1:MipMap 但只能求近似
方法2:SAT 二维前缀和 精确
求方差:
如图公式,X的方差=等于X平方的期望E - X期望E的平方
期望E上述SAT已求得,X的平方可将深度图数值的平方预计算存入贴图RGB的另一个通道。
小总结:
VSSM虽然很巧妙但不够精确,随着对图像空间降噪的处理手段越来越多,如TAA等,PCSS现在又回归成了软阴影的主流。
五、距离场软阴影 SDF Soft Shadows
Signed Distance Field(SDF)有向距离场:定义场景中矩阵任意一点到物体的最小距离,有向用正负表示在物体内外。
软阴影可以看作是从Shader Point出发看向面光源,有多少面光源被遮挡。
我们可以用SDF的范围来近似的得到大概有多少光源被挡住,从而确定软阴影的0~1。
注意,即使是点光源也是有发光范围的。实际中我们通过确定Shader Point被遮挡的角度来确定软阴影的0~1黑度。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2022-11-15 Unity高性能无卡顿取图像——实时推流/截屏录屏等功能