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

回到目录

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

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

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

URP渲染管线里面的摄像机用法_第2张图片

多个URP摄像机同时存在时,不再是通过depth来给摄像机渲染排序
从摄像机的设置里面可以看到RenderType分成了2种类型:
1.Base
2.OverLay
URP渲染管线里面的摄像机用法_第3张图片

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

接下来我们保持主摄像机MainCamera为Base类型,然后再创建了cam1和cam2作为Overlay类型的摄像机
URP渲染管线里面的摄像机用法_第4张图片
URP渲染管线里面的摄像机用法_第5张图片

虽然有3个摄像机,但从Game视图只看到一个摄像机。
这是因为,一组摄像机里面,只能有一个Base类型,然后多个Overlay类型的摄像机要在Base摄像机的Stack里面添加并指定顺序,才能渲染出来
URP渲染管线里面的摄像机用法_第6张图片
URP渲染管线里面的摄像机用法_第7张图片
URP渲染管线里面的摄像机用法_第8张图片

从上面的情况可以看出,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/[email protected]/api/UnityEngine.Rendering.Universal.UniversalAdditionalCameraData.html
比如要在运行时给Base摄像机添加一个Overlay摄像机,可以这样:
UniversalAdditionalCameraData urpData = cam.GetUniversalAdditionalCameraData();
urpData.cameraStack.Add(subCam);

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

假设场景里面有多个Base摄像机,它们之间的渲染顺序怎样确定呢?
URP渲染管线里面的摄像机用法_第9张图片

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

3.渲染到RenderTexture

URP渲染管线里面的摄像机用法_第10张图片

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

3、关于抗锯齿

URP渲染管线里面的摄像机用法_第11张图片

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

你可能感兴趣的:(Unity引擎Shader效果,人工智能,前端,javascript,URP,摄像机)