天上天下·零zXr0·唯我独尊 圣魔王·圈圈会零zXr0·炽天使 戰地☆"Абакан
- UID
- 1612612
- 主题
- 681
- 阅读权限
- 60
- 帖子
- 7155
- 精华
- 0
- 积分
- 4772
- 金钱
- 4520
- 荣誉
- 118
- 人气
- 141
- 在线时间
- 8897 小时
- 评议
- 0
- 帖子
- 7155
- 精华
- 0
- 积分
- 4772
- 金钱
- 4520
- 荣誉
- 118
- 人气
- 141
- 评议
- 0
|
映射阴影(Shadow Mapping)
目前大多数游戏使用的方式,主要是验证预置的所谓"光源" 与目标之间有没有障碍,如果有,就把这个障碍物的图像黑化之后映射在目标上.
映射阴影实际上是一堆会动的1x1半透明黑色贴图的组合..... 虽然它是即时运算出,不过仍然只是能动的贴图
它的质量和shadow map的分辨率大小有着很大关系.
如下图中,你会看到一些1X1的黑色像素模块突了出来,那突出的方块实际上就是锯齿. 当你提高阴影的采样精度之后,每个1x1的黑色就会变小(就像你提高桌面分辨率之后,图标和字体变小), 高到一定程度,人的肉眼便无法察觉
一般采样精度至少要1024*1024才能消除阴影的锯齿,交错,而2048*2048的尺寸在诸如地铁2033,潜行者,孤岛危机等高阶游戏中使用.
当映射阴影采样精度过小,或者映射树叶之类的小且与目标距离远的物体,就会导致阴影闪烁,交错,有锯齿.
线性百分比渐进滤波就是通过采样来实现模糊锯齿和消除闪烁的方式,只是会耗费大量资源,后来推出了线性插值滤波,插值的原理就和跳帧差不多,牺牲精度,换来效率和效果.
现在最新的办法是 层叠阴影(Cascaded Shadow Map) 和方差阴影(Variance Shadow Map),
结合使用可以生成几乎不损耗更多性能的 无锯齿且柔化的阴影, 3DMark Vantage或者地铁2033,战地:叛逆连队2等游戏中就有使用, 只是似乎在DX9模式下不能用.
层叠阴影的原理是将视锥分割成多个,这是为了知道你的视角与物体的距离,,然后根据物体的视锥调整阴影细节的等级.
层叠阴影解决了映射阴影的问题------根据距离决定阴影精度,而不是视锥. 这就导致了一些距离你较近,但是你看不到/看不清的物体会使用高精度的阴影. 而那些距离你较远,却看得很清楚的物体没有阴影.
至于视锥的分割,是由专门的高数算法来推导,是引擎开发者的事,游戏开发工具的使用者无需关心,
层叠阴影适合表现大规模的场景----------------即使你在空中,一些物体距离你非常远,也能生成出看起来还不错的阴影.
BF:BC2的单通道稳定层叠限制盒阴影(Single-pass Stable Cascaded Bounding Box Shadow Maps) 就是一种加强版的层叠阴影, DX11模式的软阴影开启之后,性能损失不超过5%,如显卡强力(开DX11模式玩游戏的卡,怎么也不能是5750以下吧), 性能损失可能为1%-2%


四种阴影实现方式:
[ 本帖最后由 zhutou121 于 2010-9-27 11:37 编辑 ] |
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
|