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

【URP】Unity[相机]自定义相机

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

Universal Additional Camera Data 组件概述

在 Unity Universal Render Pipeline (URP) 中,UniversalAdditionalCameraData 组件是扩展标准相机功能的核心组件,它提供了 URP 特有的相机配置选项。每个 URP 相机都会自动附加这个组件。

自定义相机的主要配置项

渲染类型 (Render Type)

  • Base‌: 主相机类型,可以独立渲染或作为其他叠加相机的基础
  • Overlay‌: 叠加相机,必须附加到 Base 相机上才能工作
  • ScreenSpaceOverlay‌: 屏幕空间叠加,用于UI等元素

堆栈相机系统 (Camera Stack)

  • 允许将多个 Overlay 相机叠加到 Base 相机上
  • 渲染顺序由相机的 Depth 值决定
  • 每个叠加相机可以有自己的清除标志和剔除遮罩

后期处理控制

  • 可以单独启用/禁用后期处理效果
  • 控制抗锯齿方式
  • 设置渲染比例(Render Scale)

高级渲染设置

  • 控制是否渲染阴影
  • 设置Opaque Texture和Depth Texture的生成
  • 配置运动矢量(Motion Vectors)

自定义相机原理

URP 的自定义相机系统基于以下核心原理:

  • 分层渲染架构‌:Base 相机负责基础场景渲染,Overlay 相机提供额外的渲染层
  • 渲染纹理复用‌:URP 会智能地复用中间渲染纹理,减少内存占用
  • 后期处理组合‌:每个相机可以有自己的后期处理效果,URP 会按顺序组合它们
  • 剔除优化‌:URP 会根据相机的视锥体和剔除遮罩优化渲染调用

具体使用示例

创建基础相机并添加叠加相机

// 获取或创建主相机Camera mainCamera = Camera.main;var mainCameraData = mainCamera.GetUniversalAdditionalCameraData();// 设置相机属性mainCameraData.renderType = CameraRenderType.Base;mainCameraData.requiresColorTexture = true;mainCameraData.requiresDepthTexture = true;// 创建叠加相机GameObject overlayCamObj = new GameObject("EffectCamera");Camera overlayCam = overlayCamObj.AddComponent<Camera>();var overlayCamData = overlayCam.GetUniversalAdditionalCameraData();// 配置叠加相机overlayCamData.renderType = CameraRenderType.Overlay;overlayCam.clearFlags = CameraClearFlags.Depth;overlayCam.cullingMask = LayerMask.GetMask("Effects");// 添加到主相机堆栈mainCameraData.cameraStack.Add(overlayCam);

高级自定义相机配置

// 创建特殊用途相机Camera specialCamera = new GameObject("SpecialCamera").AddComponent<Camera>();var specialCameraData = specialCamera.GetUniversalAdditionalCameraData();// 详细配置specialCameraData.renderType = CameraRenderType.Base;specialCameraData.renderPostProcessing = true;specialCameraData.antialiasing = AntialiasingMode.FastApproximateAntialiasing;specialCameraData.antialiasingQuality = AntialiasingQuality.Low;specialCameraData.requiresColorOption = CameraOverrideOption.On;specialCameraData.requiresDepthOption = CameraOverrideOption.On;specialCameraData.stopNaN = true;specialCameraData.dithering = true;// 设置目标纹理specialCamera.targetTexture = RenderTexture.GetTemporary(1024, 1024, 24);

动态修改相机堆栈

// 获取主相机数据var mainCamData = Camera.main.GetUniversalAdditionalCameraData();// 动态添加叠加相机Camera dynamicOverlay = new GameObject("DynamicOverlay").AddComponent<Camera>();dynamicOverlay.GetUniversalAdditionalCameraData().renderType = CameraRenderType.Overlay;mainCamData.cameraStack.Add(dynamicOverlay);// 动态移除叠加相机mainCamData.cameraStack.Remove(dynamicOverlay);

渲染纹理监控系统

  • 创建渲染纹理资源‌在Project窗口右键选择Assets > Create > Render Texture,命名为"SecurityFeed",分辨率设为1024x1024。

  • 配置渲染相机‌创建名为"SecurityCamera"的相机,将SecurityFeed拖入Output Texture属性,调整视角对准监控区域。

  • 显示监控画面‌创建Quad对象并附加材质,将SecurityFeed赋给材质的Base Map,通过主相机观察Quad。

    • 支持多路监控画面切换
    • 通过数组管理不同区域的渲染纹理
    • 可扩展为自动巡逻系统
  • SecurityCameraController.cs

    using UnityEngine;
    using UnityEngine.Rendering.Universal;public class SecurityCameraController : MonoBehaviour {public RenderTexture[] securityFeeds;private Camera securityCam;private int currentFeedIndex;void Start() {securityCam = GetComponent<Camera>();securityCam.targetTexture = securityFeeds[0];}public void SwitchFeed(int index) {securityCam.targetTexture = securityFeeds[index];}
    }
    
  • UICameraStack.cs

    void Start() {var uiCamera = GameObject.Find("UICamera").GetComponent<Camera>();var mainCameraData = Camera.main.GetUniversalAdditionalCameraData();mainCameraData.cameraStack.Add(uiCamera);
    }
    
  • ZoomBlurFeature.cs

    public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) {if (zoomMaterial == null) return;blurPass.Setup(renderer.cameraColorTarget, zoomMaterial);renderer.EnqueuePass(blurPass);
    }
    

实际应用场景

  • 分屏游戏‌:为每个玩家创建独立的Base相机
  • 画中画效果‌:使用额外的Base相机渲染到纹理
  • UI特效‌:通过Overlay相机添加屏幕空间特效
  • 后处理组合‌:不同相机应用不同的后期处理效果
  • 优化渲染‌:通过禁用不需要的功能提高性能

注意事项

  • 叠加相机的Depth值必须大于其Base相机的Depth值
  • 过多的叠加相机会影响性能,应合理使用
  • 自定义相机的清除标志需要仔细配置以避免意外清除
  • 在VR中,每个相机都会为每只眼睛渲染一次,需特别注意性能
  • 相机堆栈中的顺序会影响最终渲染结果

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

http://www.jsqmd.com/news/49941/

相关文章:

  • 2025年热门的钢板预处理线厂家最新TOP实力排行
  • 广西一对一辅导机构口碑之选:2025南宁、柳州、桂林备受好评的补习机构
  • 2025年优质实木定制橱柜本地优选榜
  • 常见配电方式
  • 小明的Spring Security入门到深入实战
  • 2025年靠谱的电缆厂家推荐及选购指南
  • UDP敲门与零信任机制之间的关系 - 指南
  • OpenHarmony后台服务开发指南:ServiceAbility与ServiceExtensionAbility全解析 - 指南
  • 2025年比较好的光伏线缆厂家实力及用户口碑排行榜
  • 完整教程:计算机3D视觉:Pytorch3d的环境配置与初步使用
  • .NET+AI | MEAI | ChatOptions 详解(5)
  • 2025年评价高的高弹硬质棉厂家推荐及选择指南
  • 2025年质量好的硬质棉厂家最新推荐排行榜
  • 25.11.22
  • CVE-2025-12870认证滥用漏洞分析:aEnrich eHRD系统高危安全风险
  • 安装Docker(win11)
  • 2025年热门的不锈钢自攻螺钉厂家最新推荐权威榜
  • 2025年靠谱的盘头十字自攻螺钉厂家推荐及选择指南
  • 比 MySQL 轻,比 SQLite 强:终于有人把 AI 数据库做对了
  • PTA算法每日三题 - 详解
  • 如何解除 iPad 和 iPhone 文本消息的关联? - 教程
  • 2025年比较好的闸阀门厂家最新推荐权威榜
  • Visual Studio 2026 现已正式发布,更快、更智能!
  • AI元人文与LLM:解构单一性霸权与构建价值共生的未来
  • 拒绝AI=拒绝饭碗?硅谷程序员的噩梦已经开始,我们的噩梦就在路上! - 详解
  • 实用指南:【详细教程】对拍 0 基础学习小课堂 [内附例题演示]
  • 深度学习模型预测手术风险的验证研究
  • 2025年知名的专业生产印染配件优质厂家推荐榜单
  • 2025年靠谱的拉幅定型机专用印染配件及改造用户口碑最好的厂家榜
  • 1.5纳米气体过滤器有哪些推荐?这些品牌值得关注