要制作覆盖层摄像机,需在该空游戏对象上添加Camera组件,将Render Type选为Overlay,选择正确的剔除遮罩(Culling Mask),这里是Cockpit 这时看回Player的Camera组件,我们已经能在Stack中添加Cockpit覆盖层。在Game视图中即刻看到结果,多摄像机栈渲染还能将,带有不同 后期处理效果的摄像机堆叠起来。 在场景中,我们有一个后...
URP引入了Camera Stack的概念,它包含了一个Base Camera和一个或多个Overlay Camera。在URP测试中我们使用这种配置。 测试设置 我们使用Unity 2020.3.11f1 IL2CPP development build进行测试。在Built-in管线和URP上都进行测试。每种管线我们都测试低和高load factor,每个设备总共16个profiler capture。使用的5种设备是...
这里对列表里存在的每一个Camera都进行了处理。首先判断其是否为GameCamera,如果是就进行CameraStack的渲染,若不是(一般为EditorCamera,就是编辑器窗口那个Camera),就对该Camera进行单独的BeginCameraRendering() RenderSingleCamera() EndCameraRendering()三个主要的步骤处理。 其中BeginCameraRendering() EndCameraRenderin...
if(toBaseData.renderType != CameraRenderType.Base) toBaseData.renderType = CameraRenderType.Base; if(toOverlayData.renderType != CameraRenderType.Overlay) toOverlayData.renderType = CameraRenderType.Overlay; if(!toBaseData.cameraStack.Contains(toOverlayCamera)) toBaseData.cameraStack.Add(toOverlayCamera...
入口,RenderCameraStack。首先读取UniversalAdditionalCameraData数据,URP中有对VR的支持,手游用不上,先忽略不看。 单个game相机渲染的完整流程,由以下5个函数组成。 BeginCameraRendering:只是发个事件 UpdateVolumeFramework:对volume系统的支持,核心是调用VolumeManager的Update方法,暂时不细看。
多Camera共存机制: 取消了向前渲染管线中每个Camera完全一样,基于Depth来决定先后绘制的顺序,代替的是基于base-overlay模式的Camera共存机制。在URP中由一个base摄像机与N个overlay摄像机组成,overlay摄像机放到base 摄像机的Stack List中,按照List中的顺序来绘制overlay摄像机,让渲染性能更好。
(比如自定义RT) ConfigureClear:设置渲染目标的清除状态 OnCameraSetup:相机渲染前调用,可以用来创建RT,初始化渲染目标,清除状态 Configure:Pass执行前调用,可以用来创建RT,初始化渲染目标,清除状态 Execute:自定义渲染效果实现 OnCameraCleanup:相机渲染完成后调用,用来释放创建资源 OnFinishCameraStackRendering:相机栈渲染...
继承ScriptableRenderPass这个类,可以实现6个方法,它们的执行顺序:OnCameraSetup、 Configure、Execute、FrameCleanup、OnCameraCleanup、OnFinishCameraStackRendering 1.OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData) 第一个被执行,可以看到,在相机等数据刚准备好的时候调用,其意思很明显就是是不是有...
一、CameraData: 在前文提到RenderSingleCamera时,该函数有一个参数类型CameraData。这是在另一个文件UniversalRenderPipelineCore.cs的一个struct的值引用,其中包含了对Camera的一系列数据访问的接口,且使用UniversalRenderPipeline.cs中的InitializeCameraData()函数进行初始化。 那么CameraData包含了哪些数据呢?首先渲染一...
cameraStack : null; bool anyPostProcessingEnabled = baseCameraAdditionalData != null && baseCameraAdditionalData.renderPostProcessing; anyPostProcessingEnabled &= SystemInfo.graphicsDeviceType != GraphicsDeviceType.OpenGLES2; // We need to know the last active camera in the stack to be able to ...