Unity Shadow 如何实现超远的光源阴影

目的:如何实现超远的光源的阴影,最好可以兼顾近景与远景的阴影。(本文仅作为日常工作的调研记录)

测试场景(只有一个平行光作为主光源):

Shadow Distance = 50时,近景可以看到角色和树下的阴影,远处的山上没有阴影。

Shadows的配置如下:

Unity Shadow 如何实现超远的光源阴影_第1张图片

 

查阅了官方资料与其他资料后,提出了两种方案:

 

方法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,可以兼顾近景与远景的需求,设置如下

Unity Shadow 如何实现超远的光源阴影_第2张图片

可以获得下图的效果:

可以看到近景的阴影差别不大,远处的高山上也有了阴影。需注意当镜头移动时,要确认阴影会否出现抖动的问题,如果性能开销可以接受,可以适当提高Shadow Resolution的设置来规避。(场景远处的效果并不是最终效果,仅在当前的项目场景上为新项目调研效果)

 

由于不确定Shadow Distance 与 Shadow Projection对于开销的影响,对不同配置下的当前场景开销做了对比:

Shadow Distance : 50

Unity Shadow 如何实现超远的光源阴影_第3张图片  Unity Shadow 如何实现超远的光源阴影_第4张图片

Shadow Projection :     Stable Fit                  Close Fit


 

Shadow Projection :     Close Fit

Unity Shadow 如何实现超远的光源阴影_第5张图片  Unity Shadow 如何实现超远的光源阴影_第6张图片  Unity Shadow 如何实现超远的光源阴影_第7张图片

Shadow Distance :                100                            1000                                        10000


 

Shadow Projection:    Close Fit

Shadow Distance :      10000

Unity Shadow 如何实现超远的光源阴影_第8张图片    Unity Shadow 如何实现超远的光源阴影_第9张图片  Unity Shadow 如何实现超远的光源阴影_第10张图片

Shadow Resolution:        Medium                                                    High                                             Very High


除了出现个别10ms的峰值,性能消耗并没有明显的上升,峰值出现的频率也在较低的水平。可以尝试采用该方法来兼顾近景与远景的阴影

参考资料:

https://docs.unity3d.com/Manual/class-QualitySettings.html

https://blog.uwa4d.com/archives/2127.html

http://www.ceeger.com/Components/class-QualitySettings.html

你可能感兴趣的:(Unity3d,游戏开发)