目的:如何实现超远的光源的阴影,最好可以兼顾近景与远景的阴影。(本文仅作为日常工作的调研记录)
测试场景(只有一个平行光作为主光源):
Shadow Distance = 50时,近景可以看到角色和树下的阴影,远处的山上没有阴影。
Shadows的配置如下:
查阅了官方资料与其他资料后,提出了两种方案:
方法1:可以将近景的阴影与远景的阴影分开处理,通过动态设置Shadow Distance来规避时近景阴影质量下降的问题及远景没有阴影的问题。
方法2:调整Shadow Projection
属性说明:
Shadow Projection
Choose which method to use for projecting shadows from a directional light.
Close Fit
Renders higher resolution shadows but they can sometimes wobble slightly if the camera moves.
Stable Fit
Renders lower resolution shadows but they don’t wobble with camera movements.
平行光投射阴影有2种方式:
Close Fit渲染较高分辨率的阴影,但是如果相机移动时,有时阴影会轻微摆动。
Stable Fit渲染的阴影分辨率较低,不过相机移动时不会发生摆动。
将Stable Fit 改为 Close Fit,可以兼顾近景与远景的需求,设置如下
可以获得下图的效果:
可以看到近景的阴影差别不大,远处的高山上也有了阴影。需注意当镜头移动时,要确认阴影会否出现抖动的问题,如果性能开销可以接受,可以适当提高Shadow Resolution的设置来规避。(场景远处的效果并不是最终效果,仅在当前的项目场景上为新项目调研效果)
由于不确定Shadow Distance 与 Shadow Projection对于开销的影响,对不同配置下的当前场景开销做了对比:
Shadow Distance : 50
Shadow Projection : Stable Fit Close Fit
Shadow Projection : Close Fit
Shadow Distance : 100 1000 10000
Shadow Projection: Close Fit
Shadow Distance : 10000
Shadow Resolution: Medium High Very High
除了出现个别10ms的峰值,性能消耗并没有明显的上升,峰值出现的频率也在较低的水平。可以尝试采用该方法来兼顾近景与远景的阴影
参考资料:
https://docs.unity3d.com/Manual/class-QualitySettings.html