用Projector来优化阴影

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

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

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

用Projector来优化阴影_第1张图片

插件:

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

 

你可能感兴趣的:(Unity3D,Shader)