目标
- 解决Unity VR场景中的锯齿和阴影抖动问题
工具
- Unity2019.4.9
- SteamVR Unity Plugin 2.7.3
- Post Processing 2.3.0
操作步骤
-
新建Unity工程导入SteamVR Unity Plugin,按照向导进行配置,我选择Accept All,当弹出对话框询问是否使用XR时,选择Legacy VR。
-
打开Package Manager安装Post Processing
-
新建一个层,命名为Post Processing
-
打开Project Settings/Quality面板,设置Anti Aliasing 为2x Multi Sampling,注意这个值在较低的SteamVR Unity Plugin版本中可以设置为Disabled,建议不要设置为4x或8x
-
继续在Project Settings/Quality面板上,找到Shadows Projection 选项,设置为Stable Fit,Shadowmask Mode选择Distance Shadowmask
-
打开Project Settings/Player面板,在XR Settings中设置Stereo Rendering Mode 为Multi Pass,注意这一步非常重要
-
在VR场景中找到主相机(在我的项目中采用了SteamVR Unity Plugin的Player预设体,主相机为VRCamera),添加Post-process layer 组件,并做如下设置
-
现在可以运行了,可以通过激活Post-process layer组件和关闭该组件进行效果对比
要点
- 在Quality设置面板中,Anti Aliasing是指硬件的抗锯齿,即使设置到8x仍然很难满足VR项目的需要,尤其当场景中有栏杆、网等由很多线条构成的几何体时会出现大量的闪烁边缘(Flickering edges),因此没有必要设置很高,我采用的是后处理抗锯齿。在早期的SteamVR Unity Plugin 版本中这个选项要求设置为Disabled,因为Valve本身的输出会进行抗锯齿处理。新版本的要求设置成2x以上,否则会提示报错。
- 在Quality设置面板中,Shadows Projection选项设置了阴影的投影方式,一般来讲Close Fit可以使阴影与模型间贴合的更加紧密显得更加真实,但是在VR场景中,Close Fit投影的阴影会出现抖动闪烁的问题,因此要设置为Stable Fit。
- 在XR Settings中,Stereo Rendering Mode必须设置为Multi Pass,这是因为该模式支持后处理抗锯齿,其他模式下采用后处理抗锯齿会出现显示错误:比如重影、锯齿闪等。
- 后处理抗锯齿的三种方式中,我采用了TAA方式,这种方式对于动态过程的抗锯齿有很好的效果。三种抗锯齿方式的详细对比可以查阅相关的文档。