用Projector来优化阴影

Posted wolf96

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用Projector来优化阴影相关的知识,希望对你有一定的参考价值。

以前的项目使用projector做中配的影子,高配角色实时阴影,低配画一个半透明的黑圆

基本原理就是将画影子的相机挂到Projector上,用该相机画指定layer的物体用黑色的shader画到一张RT上,,再用这个RT作为Projector的Cookie投影到其他Layer,这个shader是一个半透明的,用这个shader再画一遍物件通过Blend DstColor Zero将投影贴图与之前的colorbuffer上的颜色混合

http://docs.unity3d.com/Manual/class-Projector.html

插件:

https://assetstore.unity.com/packages/tools/particles-effects/fast-shadow-receiver-20094

https://assetstore.unity.com/packages/tools/particles-effects/dynamic-shadow-projector-35558

http://nyahoon.com/products/fast-shadow-receiver

Fast Shadow Receiver相比上面的方法主要是减少了采样投影图片的像素数量,尤其是forward

Fast Shadow Receiver有两种模式

Plane模式

需要指定一个平面,影子投影到平面上会根据范围生成一个小的mesh,这个小片采样影子贴图,如果投影到其他物体上,其他物体整个都需要采样影子贴图

Mesh模式

需要预先bake所有mesh信息到asset上(八叉树),实时通过求交生成块mesh只覆盖影子的部分,这个小块mesh采样影子贴图

缺点是物件从此不能动了

 

优点

如果用projector可以提供高分辨率的影子(因为投影到的范围变小),并且可以做软阴影(模糊),也可以把projector当贴花用,,或者模拟spot light

forward下每个物体都要采样screenspace shadow map,Deferred在lightpass采样screenspace shadow map应该是全屏幕采样,用这个插件只有一小部分范围会采样影子图片

缺点

没自阴影,相同层之间没有投影

不知道影子mesh作为半透明渲染在某些平台会不会有性能问题

unity的shadowmask会将动态影子与静态影子比较好的融合在一起,但是Fast Shadow Receiver只是将影子叠加到静态影子上面,比较突兀

https://blog.csdn.net/UWA4D/article/details/78918883

上文用projector主要是为了解决场景静态合批被动态阴影打断的问题

----by wolf96 2019/4/10

 

以上是关于用Projector来优化阴影的主要内容,如果未能解决你的问题,请参考以下文章

用Projector来优化阴影

unity3d 阴影渲染提示realtime shadows require unity pro

Projector的一些参数设置

Unity - Shader - Projector 高空云层底下透明阴影 - semitransparent shadow

unity3d Light Probe不产生阴影。

Unity 关于图形渲染优化的建议摘录