当前位置: 首页 > news >正文

【URP】Unity[相机]渲染类型

【从UnityURP开始探索游戏渲染】专栏-直达

URP 相机渲染类型概述

在 Unity Universal Render Pipeline (URP) 中,相机组件提供了多种渲染类型选项,用于控制相机如何参与渲染流程。这些类型决定了相机是否渲染、如何与其他相机交互以及渲染结果的用途。

主要渲染类型及其用途

Base(基础)

用途‌:这是默认的渲染类型,用于渲染游戏世界的主要视图。Base 相机通常作为场景中的主相机使用。

特点‌:

  • 渲染到屏幕或渲染纹理
  • 可以与其他 Base 相机叠加(通过相机的 Depth 属性控制渲染顺序)
  • 支持后期处理效果

使用示例‌:

csharp
// 创建一个基础相机
Camera mainCamera = gameObject.AddComponent<Camera>();
var urpCameraData = mainCamera.GetUniversalAdditionalCameraData();
urpCameraData.renderType = CameraRenderType.Base;

Overlay(叠加)

用途‌:用于在 Base 相机渲染的内容之上叠加额外的内容,常用于UI、特效或特殊视觉效果。

特点‌:

  • 不能单独渲染,必须叠加在 Base 相机上
  • 可以叠加多个 Overlay 相机到一个 Base 相机
  • 渲染顺序由相机的 Depth 属性控制
  • 可以有自己的后期处理效果

使用示例‌:

csharp
// 创建一个叠加相机用于UI
Camera uiCamera = new GameObject("UICamera").AddComponent<Camera>();
var urpCameraData = uiCamera.GetUniversalAdditionalCameraData();
urpCameraData.renderType = CameraRenderType.Overlay;// 将叠加相机添加到主相机
mainCamera.GetUniversalAdditionalCameraData().cameraStack.Add(uiCamera);

ScreenSpaceOverlay(屏幕空间叠加)

用途‌:类似于旧版Unity的Screen Space - Overlay模式,用于UI渲染。

特点‌:

  • 渲染顺序在所有其他相机之后
  • 不受场景光照影响
  • 适合用于传统的UI系统

使用示例‌:

csharp
// 创建一个屏幕空间叠加相机
Camera uiOverlayCamera = new GameObject("UIOverlayCamera").AddComponent<Camera>();
var urpCameraData = uiOverlayCamera.GetUniversalAdditionalCameraData();
urpCameraData.renderType = CameraRenderType.ScreenSpaceOverlay;

相机组合使用示例

基础+叠加相机组合

csharp
// 主相机(Base)
Camera mainCam = Camera.main;
var mainCamData = mainCam.GetUniversalAdditionalCameraData();
mainCamData.renderType = CameraRenderType.Base;// 特效叠加相机(Overlay)
Camera effectCam = new GameObject("EffectCamera").AddComponent<Camera>();
effectCam.clearFlags = CameraClearFlags.Depth;
var effectCamData = effectCam.GetUniversalAdditionalCameraData();
effectCamData.renderType = CameraRenderType.Overlay;// 将特效相机添加到主相机的堆栈中
mainCamData.cameraStack.Add(effectCam);

多相机渲染顺序控制

csharp
// 主相机
Camera mainCamera = Camera.main;
mainCamera.depth = 0;// 后处理特效相机
Camera postEffectCamera = new GameObject("PostEffectCamera").AddComponent<Camera>();
postEffectCamera.depth = 1;
var postEffectData = postEffectCamera.GetUniversalAdditionalCameraData();
postEffectData.renderType = CameraRenderType.Overlay;// UI相机
Camera uiCamera = new GameObject("UICamera").AddComponent<Camera>();
uiCamera.depth = 2;
var uiCameraData = uiCamera.GetUniversalAdditionalCameraData();
uiCameraData.renderType = CameraRenderType.Overlay;// 添加到堆栈(顺序由depth决定)
mainCamera.GetUniversalAdditionalCameraData().cameraStack.Add(postEffectCamera);
mainCamera.GetUniversalAdditionalCameraData().cameraStack.Add(uiCamera);

注意事项

  • 性能考虑‌:每个Overlay相机都会增加额外的渲染开销,应尽量减少Overlay相机的数量。
  • 清除标志‌:Overlay相机通常应设置为CameraClearFlags.DepthCameraClearFlags.Nothing,以避免清除Base相机的内容。
  • 后期处理‌:Base相机和Overlay相机可以有不同的后期处理效果,但要注意性能影响。
  • 渲染纹理‌:Base相机可以渲染到纹理,Overlay相机也可以叠加到这些纹理上。
  • VR支持‌:在VR中,Overlay相机会为每只眼睛渲染一次,需要注意性能问题。

【从UnityURP开始探索游戏渲染】专栏-直达
(欢迎点赞留言探讨,更多人加入进来能更加完善这个探索的过程,🙏)

http://www.gsyq.cn/news/58659.html

相关文章:

  • 20251028在荣品RD-RK3588-MID开发板的Android13系统下解决关机的时候最近打开的应用不关的难题
  • 实验4 NoSQL和关系数据库的操作比较
  • 构建卓越开发者体验的核心原则
  • 上周热点回顾(11.17
  • 详细介绍:MySQL-8.0.43 免安装版保姆教程
  • 【GitHub每日速递 20251124】超神!verl助力大语言模型强化学习,多项特性引领行业新潮流
  • 【STM32工程开源】STM32单片机智能台灯系统
  • 2025年评价高的隧道炉工业级大功率厂家最新推荐权威榜
  • 2025年质量好的定制化鸡蛋液产品安全性权威榜
  • 2025年比较好的钢板预处理线优质厂家推荐榜单
  • 机器人领域Day One奖学金计划新增14位获得者
  • nats import export简单说明
  • 2025年知名的卡布广告灯箱厂家最新推荐排行榜
  • 2025年靠谱的压缩木浆棉用户口碑最好的厂家榜
  • 2025年靠谱的金蝶软件品牌好评榜
  • 2025年口碑好的杭州中小企业财务软件商用系统优选榜
  • 通过学习分位数函数改进预测技术
  • 从规则逻辑到价值协议:AI治理范式的演进、融合与前瞻
  • 使用Vue.js和Quasar框架重构职业中心求职体验
  • 对话式AI技术发展与研究进展
  • 凌晨两点,做实习未眠
  • KEYDIY KD NB11-3 3-Button Universal Remote Key - 5-Pack for European/American Vehicles
  • [数据存储] 浅析 Hive 数据存储格式
  • TypedSql:在 C# 类型系统上实现一个 SQL 查询引擎
  • KEYDIY MLB26 434 Mhz 3-Button Universal Smart Remote PCB Board - Non-OEM Solution
  • 102302133陈佳昕作业3
  • AI协助 一周打造「七巧板益智小游戏」:从零高效开发教学工具
  • VB6版MP3文件信息编辑器 - 开源研究系列文章 - 个人小作品
  • 手把手教你用 React + Zustand 打造 Windows 风格可拖拽,缩放,多窗口 Modal 组件
  • OI 笑传 #34