用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
开发者涨薪指南 48位大咖的思考法则、工作方式、逻辑体系
以上是关于用Projector来优化阴影的主要内容,如果未能解决你的问题,请参考以下文章
unity3d 阴影渲染提示realtime shadows require unity pro
Unity - Shader - Projector 高空云层底下透明阴影 - semitransparent shadow