URP渲染管线里面的摄像机用法

news2024/11/28 6:37:04

大家好,我是阿赵,这里继续讲一下URP渲染管线。
这次要讲的是URP渲染管线里面的摄像机用法
之前介绍过,URP摄像机和普通摄像机的属性显示上有比较大的变化:
在这里插入图片描述

接下来从用法上来说明一下:

1、多个摄像机的处理变化

在这里插入图片描述

多个URP摄像机同时存在时,不再是通过depth来给摄像机渲染排序
从摄像机的设置里面可以看到RenderType分成了2种类型:
1.Base
2.OverLay
在这里插入图片描述

如果创建一个摄像机并且把RenderType设置成Overlay,会发现摄像机的选项里面会少了很多东西。
调几个主要的说一下:
1.Overlay类型的摄像机不能设置抗锯齿
2.Overlay类型的摄像机多了一个ClearDepth的选项,但没有了OpaqueTexture和DepthTexture的选项
3.Base类型的摄像机可以指定BackgroundType,也就是背景类型,比如天空盒或者纯色之类的,Overlay类型的摄像机是不可以指定背景类型的
4.Base类型的摄像机可以指定OutputTexture,也就是输出的RenderTexture,Overlay类型的摄像机是不可单独指定输出RenderTexture

接下来我们保持主摄像机MainCamera为Base类型,然后再创建了cam1和cam2作为Overlay类型的摄像机
在这里插入图片描述
在这里插入图片描述

虽然有3个摄像机,但从Game视图只看到一个摄像机。
这是因为,一组摄像机里面,只能有一个Base类型,然后多个Overlay类型的摄像机要在Base摄像机的Stack里面添加并指定顺序,才能渲染出来
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

从上面的情况可以看出,Base类型的摄像机是最先渲染的,所以在最下层,然后再到Stack里面的Overlay摄像机,然后Stack里面的顺序,会影响到Overlay摄像机的渲染先后顺序。

2、用脚本控制URP的摄像机

1.修改摄像机属性

在使用URP的摄像机时,原来Unity的Camera里面的对应API有些还能运作,比如clearFlags、backgroundColor、orthographic、fieldOfView这些,但很多API和URP摄像机的熟悉已经对不上了。要用脚本去控制URP的摄像机,需要:
using UnityEngine.Rendering.Universal;
然后获取camera身上的UniversalAdditionalCameraData数据
UniversalAdditionalCameraData urpData = cam.GetUniversalAdditionalCameraData();
UniversalAdditionalCameraData具体的API说明:
https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@10.2/api/UnityEngine.Rendering.Universal.UniversalAdditionalCameraData.html
比如要在运行时给Base摄像机添加一个Overlay摄像机,可以这样:
UniversalAdditionalCameraData urpData = cam.GetUniversalAdditionalCameraData();
urpData.cameraStack.Add(subCam);

2.多个base摄像机同时渲染

假设场景里面有多个Base摄像机,它们之间的渲染顺序怎样确定呢?
在这里插入图片描述

其实Base摄像机的Priority属性,就是非URP摄像机的depth属性,可以通过这个属性给多个Base摄像机排序,而API还是camera.depth

3.渲染到RenderTexture

在这里插入图片描述

如果需要通过Base摄像机渲染到RenderTexture,可以把RenderTexture设置到Output Texture上。
如果用代码来设置,和普通摄像机一样,还是camera.targetTexture = rt;
不过值得注意的是,只有Base摄像机能指定输出,如果在Overlay摄像机上面指定targetTexture,会导致渲染出错。

3、关于抗锯齿

在这里插入图片描述

在Base摄像机上有Anti-aliasing抗锯齿选项,但如果单纯设置里面的值,是不会有抗锯齿效果的,必须把上面的PostProcessing后处理选项勾上,才会有抗锯齿的效果。如果是一个Base和多个Overlay摄像机在一起渲染,那么只有在Base或者Overlay摄像机里面其中有一个摄像机勾选了PostProcessing,那么Base摄像机里面选择的抗锯齿效果也会生效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/524521.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

unity UGUI系统梳理 -交互组件

概述 unity 中的交互组件可用于处理交互,例如鼠标或触摸事件以及使用键盘或控制器进行的交互 1、按钮 (Button) Button详解 2、开关 (Toggle) Background:背景图片,控制toggle组件的背景颜色改变,从而展示此物体是否被选中的…

5.View的事件分发机制/事件处理机制原理分析

事件MotionEvent包含了哪几个? ACTION_DOWN 手指触碰到屏幕时触发,只会执行一次ACTION_MOVE 手指在屏幕上滑动出发,会执行多次ACTION_UP 手指抬起离开屏幕出发,只会执行一次ACTION_CANCEL 事件被上层拦截时会触发 父容器ViewGroup需要从子View手中抢夺分发的事件进行处理时,会…

【SCI】综合能源系统中热电联产、电制气和碳捕集系统的建模与优化(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Java 网络编程 —— 非阻塞式编程

线程阻塞概述 在生活中,最常见的阻塞现象是公路上汽车的堵塞。汽车在公路上快速行驶,如果前方交通受阻,就只好停下来等待,等到公路顺畅,才能恢复行驶。 线程在运行中也会因为某些原因而阻塞。所有处于阻塞状态的线程…

C++数据结构:哈希 -- unordered系列容器、哈希表的结构以及如何通过闭散列的方法解决哈希冲突

目录 一. unordered系列关联式容器 1.1 unrodered_map和unordered_set 综述 1.2 常见的接口函数(以unordered_map为例) 1.3 unordered系列与map和set的效率对比 二. 哈希表的底层结构 2.1 什么是哈希 2.2 哈希函数 2.3 哈希冲突 三. 通过闭散列的…

JavaEE(系列2) -- 多线程(创建多线程)

讲述下面的内容之前,先来回顾一下一个重要的知识点 进程和线程之间的区别 1.进程包括线程。 2.进程有自己独立的内存空间和文件描述符表。同一个进程中的多个线程之间,共享同一份地址空间和文件描述符表。 3.进程是操作系统资源分配的基本单位,线程是操作…

5.14学习周报

文章目录 前言文献阅读摘要介绍方法模型框架评价指标结果结论 时间序列预测总结 前言 本周阅读文献《A Hybrid Model for Water Quality Prediction Based on an Artificial Neural Network, Wavelet Transform, and Long Short-Term Memory》,文献主要提出了基于人…

iconfont-extract: 一个将iconfont图标转化为React组件的工具

iconfont 提供了海量的图标,同时也方便了前端开发者使用这些图标,只需要添加对应的js、css或者字体文件即可。在我们的项目中使用添加js文件的方式,js文件中都包含了所有的图标,一个项目中通常只会使用其中的一部分,所…

【架构设计】DDD 到底解决了什么问题

文章目录 前言一、架构设计是为了解决系统复杂度1.1 架构设计的误区1.1.1 每个系统都要做架构设计/公司流程要求有架构设计1.1.2 架构设计是为了追求高性能、高可用、可扩展性等单一目标 1.2 架构设计的真正目的1.3 系统复杂度的六个来源及通用解法1.3.1 高性能1.3.1.1 单机复杂…

JavaWeb-一篇文章带你入门CSS(笔记+案列)

目录 CSS是什么基本语法 CSS的引入方式内部样式表行内样式表外部样式表 选择器基础选择器标签选择器类选择器id选择器通配符选择器 复合选择器后代选择器子选择器 常用元素属性字体属性文本属性背景属性圆角矩形 元素的显示模式块级元素行内元素 我们可以使用display属性来修改…

对称加密/非对称加密

古典密码学 起源于古代战争:在战争中,为了防止书信被截获后重要信息泄露,人们开始对书信进行加密。 移位式加密 如密码棒,使用布条缠绕在木棒上的方式来对书信进行加密。 加密算法:缠绕后书写 密钥: 木棒的尺寸 替…

[笔记]深入解析Windows操作系统《四》管理机制

文章目录 前言4.1注册表查看和修改注册表注册表用法注册表数据类型注册表逻辑结构HKEY_CURRENT_USERHKEY_USERS 实验:观察轮廓加载和卸载HKEY_CLASSES_ROOTHKEY_LOCAL_MACHINE 实验:离线方式或远程编辑BCDHKEY_CURRENT_CONFIGHKEY_PERFORMANCE_DATA 前言 本章讲述了…

day3_垃圾回收器

文章目录 Serial回收器ParNew回收器Parallel Scavenge回收器Serial Old回收器Parallel Old回收器CMS(Concurrent Mark Sweeping)回收器G1 主要有7种垃圾回收器,如下所示: 其中有直线关联的表示,这2种垃圾回收器可以配合使用的。 S…

大模型之PaLM2简介

1 缘起 大模型时代。 时刻关注大模型相关的研究与进展, 以及科技巨头的商业化大模型产品。 作为产品&技术普及类文章,本文将围绕PaLM2是什么、特点、如何使用展开。 想要了解更多信息的可以移步官方网站提供的参考文档,后文会给出相关链…

Oracle11g服务说明

一、服务说明 1.OracleDBConsoleorcl:非必须启动 Oracle数据库控制台服务,orcl是Oracle的实例标识,默认的实例为orcl。在运行Enterprise Manager(企业管理器OEM)的时候,需要启动这个服务。 2.OracleJobS…

一文了解异步编程

promise 什么是promise promise是异步编程的一种解决方案,从语法上来说,Promise是一个对象,从它可以获取异步操作的消息 ES6规定,Promise对象是一个构造函数,接受一个函数作为参数,这个函数会立即执行&a…

Long类型返回前端精度丢失

【1】给前端返回Long会出现精度丢失问题 在《阿里巴巴Java开发手册》中,有一条关于前后端超大整数返回的规约,具体内容如下: 【2】问题复现 后端直接用postman测试接口,返回数据没有问题。但是前端访问接口的时候,发…

系统化了解Micrometer

本文从官方文档整理出一篇系统化全面了解的文章, 后续可能会慢慢补上源码层面的解析: https://micrometer.io/docs 学习本文的目的在于深入了解中间件的监控模块的设计, 先看看主流的做法于核心思想 本文的引用来的笔者的理解于备注 需要做的是: 先理解功能存在的理由设计模式…

kibana 代码执行 (CVE-2019-7609)

漏洞原理 “原型污染”是一种针对JS语言开发的攻击方法。JS语言中,每一个对象都是有其原型(proto)的,而该原型又有其自己的原型对象,直到某个对象的原型为null。而如果JS对其中定义的对象原型的属性读写缺乏控制&…

进程程序替换+简易版shell实现

索引 进程程序替换如何进行程序替换不同程序替换函数之间的区别系统接口调用其他语言的函数替换函数execle 简易版shell实现 进程程序替换 什么是进程程序替换? 指在一个正在运行的进程中,将原来的程序替换成新的程序的过程。 eg:如果我们想…