前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Unity HDRP 多摄像机分层渲染

Unity HDRP 多摄像机分层渲染

作者头像
汐夜koshio
发布2021-02-04 10:28:23
2.3K0
发布2021-02-04 10:28:23
举报
文章被收录于专栏:U3D

新版 Unity引入了全新的 HDRP(High Definition Render Pipeline)渲染管线,开发者从此可以更加愉快的添加各类屏幕后预设效果。官方文档位置如下:

https://docs.unity3d.com/Packages/com.unity.render-pipelines.high-definition@8.2/manual/index.html

例如,添加一个全局的Bloom效果只需要在菜单中选择一个预设组件即可,比以前方便太多。

不过实际使用过程中还是遇到了一个问题:

虽然Volume组件中可以选择全局(Global)或者局部(Local)的渲染方式,但Local方式并不能按层来进行后处理,而是需要在每一个待渲染的预制体上都挂载一个触发器(Trigger)来进行识别,

然而大部分实际的开发情况是,只需要将不进行后处理的预制体筛选出来单独放在一层渲染即可,其余正常进行后处理的场景物体不做任何特殊处理。

那么有没有办法按层而不是仅仅只能按物体来区分渲染呢?

查阅了官方文档和网上资料后,发现了一种十分简单的实现方式——用两个摄像机分别渲染。

基本思路为:

对两个摄像机的Culling Mask属性中各自需要渲染的层进行区分,并使其中一个摄像机打开后处理的开关,另一个摄像机不打开。

以UI层为例,实际上有一些场景中的3D UI并不需要任何的屏幕后效果;如果开全局Bloom,UI的设计效果会受到很大影响,但如果用Local模式,策划就需要每个关卡添加触发器结果可能当场吐血。

为了避免如上惨剧发生,可以建立一个单独渲染场景UI的摄像机与主摄像机进行区分,并将UI摄像机Transform复位后挂载到主摄像机的子节点下。

主摄像机A设置如下:

UI 摄像机B设置如下:

Stack为摄像机的渲染栈,栈渲染即不用一个摄像机来渲染所有内容,而使用多个相互堆叠的摄像机来实现层级式帧渲染的方式。

并且在摄像机的渲染栈中可以很方便的取得其他关联摄像机的信息,只需要引入如下命名空间即可:

using UnityEngine.Rendering.Universal;

例如我们可以很方便的对UI摄像机与主摄像机实现数据同步:

代码语言:javascript
复制
        //设置UI摄像机与主摄像机保持同步
        var uiCamera = Camera.GetComponent<UniversalAdditionalCameraData>().cameraStack[0];
        uiCamera.orthographic = Camera.orthographic;
        uiCamera.fieldOfView = CameraFOV;
        uiCamera.orthographicSize = OrthographicSize;
        uiCamera.nearClipPlane = NearClipPlane;
        uiCamera.farClipPlane = FarClipPlane;
        //...
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-02-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档