首页 > 其他分享 >从FrameDebugger看Unity渲染

从FrameDebugger看Unity渲染

时间:2023-11-09 09:34:21浏览次数:45  
标签:场景 渲染 物体 摄像机 Unity FrameDebugger

Unity如何渲染一个3D+2D的游戏画面,今天通过FrameDebugger来看下Unity内置渲染管线的渲染策略, 后续再出一些URP渲染管线相关的文章。

 

Unity 渲染场景的几个主要部分

 

Unity内置渲染管线是基于摄像机来进行渲染的,每个摄像机按照摄像机的渲染顺序来依次渲染,渲染完一个摄像机,再渲染下一个摄像机。对于UI 2D而言,相当于也是一个独立的UI摄像机,还有一种特殊的OnGUI会绘制2D GUI物体,走的是GUI Paint。如图所示 FrameDegbuger 最外层的截图如下:

1.png

FrameDebugger显示渲染有3个部分,第一个是Camera.Render, 表示的是基于场景中的摄像机引起的渲染。第二部分UGUI.Rendering.RenderOverlays,表示的UGUI中2DUI引起的渲染。第三部分GUI.Repaint, 表示的是OnGUI引发的2D UI物体渲染; 如果你的项目中没有OnGUI的渲染物体,FrameDebugger中就不会有相关的显示。第一部分Camera.Render里面有每个摄像机按照摄像机的渲染顺序依次次排列下来。如图所示,目前场景中有两个摄像机,FrameDebugger按照摄像机的渲染顺序一次排列下来。

2.png

Unity 摄像机渲染处理哪些事情?

 对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬,欢迎你来交流学习。

如上图所示,每个摄像机有3个部分,第1部分UpdateDepthTexture是处理阴影投影相关。如果整个场景中没有实时的阴影投影,就不会有这一部分。第2部分Drawing是具体的绘制物体相关, 第3部分Camera.ImageEffects相关是摄像机的后期处理相关。展开 UpdateDepthTexture, 分为了Clear与DepthPass.Job两个部分,如图所示:

3.png

Clear是清理, DepthPass.Job详细的记录里面哪些物体做了ShadowCaster Pass。展开Drawing部分, FrameDebugger根据场景中涉及到的渲染队列,一次进行渲染,如下图所示,首先是Render.Opaque渲染队列,随后是Render.Transparent渲染队列。

4.png

Unity 摄像机范围外的物体不会被渲染

 

FrameDebugger中详细的显示了在当前帧中Unity实际渲染了哪些物体。在摄像机范围内的物体会被Unity渲染,不在摄像机范围内的物体,是不会被摄像机渲染的。渲染物体时,还会做阴影计算,从阴影纹理里面获取阴影数据。

5.png

当前帧中在当前摄像机下渲染了哪些物体,都能通过FrameDebugger看清楚。点击FrameDebugger中的每个渲染物体,就能对应到场景中的具体的物体。

 

被渲染物体的详细信息

 

最后Unity渲染每个物体的时候,我们能够看到渲染时候的详细信息,如图所示:

6.png

Event #554: 第554次绘制事件;

Shader: 渲染这个物体采用的是哪个Shader的哪个SubShader;

Blend: 着色到目标的颜色混合规则;

ZClip: 开启片元深度检测模式,如果一个片元在near与far的外面就会被丢弃;

ZTest:深度测试的规则,根据通过深度测试的才会被渲染;

ZWrite: 是否将当前片元的深度信息写入深度缓存;

Cull: 裁剪剔除的模式,有back, front, none三种模式,分别是裁剪剔除掉背对摄像机的面,裁剪提出掉真对摄像机的面和不裁剪剔除。

Why Drawcall cannot be batched?:不能合批的原因描述;

ShaderProperties: CPU传递给GPU的数据的详细信息;

 

今天的FrameDebugger与渲染的分享就到这里了,关注我们,获取更多的渲染优化相关的教程与知识。

 

标签:场景,渲染,物体,摄像机,Unity,FrameDebugger
From: https://www.cnblogs.com/bycw/p/17818988.html

相关文章

  • Unity 自定义Postprocess Kawase Blur
    前言本篇将介绍如何通过添加RenderFeature实现自定义的postprocess——KawaseBlur关于RenderFeature的基础可以看这篇https://www.cnblogs.com/chenglixue/p/17816447.htmlKawaseBlur介绍因为毛神对于十大模糊算法的介绍已经整理得十分详细了,所以这里不会深入,但会大致讲讲它......
  • Unity 格子工具
     usingUnityEditor;usingUnityEngine;publicclassCustomGridWindow3:EditorWindow{privateTexture2DcustomBackgroundTexture;privateVector2gridSize=newVector2(10,10);privateColor[]cellColors;privateboolisSelecting=fal......
  • Eastwind Blogger Callout 渲染展示
    在EastwindBlogger的更新记录一文中我记录道:在v2.3.0版本引入了对Obsidian特殊的Callout语法的兼容,并且支持所有Obsidian内置的callout样式。这里稍作展示,完整信息请参阅Obsidian支持文档Callouts-ObsidianHelp。如果您对EastwindBlogger感兴趣,不妨看看这......
  • Unity 自定义Postprocess BSC明度饱和度对比度
    前言本篇将介绍如何通过添加RenderFeature实现自定义的postprocess——调整屏幕的明度、饱和度、对比度(以下统称BSC)关于RenderFeature的基础可以看这篇https://www.cnblogs.com/chenglixue/p/17816447.htmlShaderBrightness:很简单乘以rendertargettexture即可Saturatio......
  • Unity项目开发中如何做资源加密
    Unity的游戏很容易被人反编译出来,然后再重新打包发布,把自己辛辛苦苦开发的游戏,抄写的一丝不挂。很多项目要求要做好资源加密,Unity中如何做好资源加密呢?本文給大家分享加密算法+资源打包整合思路:(1) 游戏资源加密如何选择加密算法;(2) Assetsbundle资源包的加密与解密;  ......
  • Unity架构师必备的开源库,让你3天搭建商用游戏框架
    现在Unity的相关技术已经都非常常熟了,如果你的技术能力与阅历够,搭建一个商用的游戏框架,你只需要3天的时间。今天给大家分享一个Unity老鸟3天能搭建一个自己的商用框架的几个必备的开源库,方便大家学习与使用,同时学习这些有前途的开源库也能让你在公司里面游刃有余。 1:搭建商用......
  • Unity HybridCLR(wolong)/huatuo系列
    Lua,ILRuntime,HybridCLR(wolong),huatuo热更对比分析 这两年,各种Unity热更新方案如雨后春笋般出来了,今天来写篇文章来对比一下Unity各大热更新方案的优缺点。目前主流的Unity热更新的方案有:  Lua系解决方案:内置一个Lua虚拟机,做好UnityEngine与C#框架的Lua导出。典型的......
  • Unity性能调优技术集锦
    性能调优,一直是游戏上线之前的很重要的一个环节,游戏帧率过低,手机发烫,低端机上跑不起来等,这些都需要来做优化,今天我们来给大家分享Unity做性能调优的常用技术手段。 性能调优的指导思想 接触过很多刚做性能调优的小伙伴,他们做性能调优最大的问题就是缺乏一个做性能优化......
  • Unity 编辑器UI 杂记
     用 rootVisualElement方法绘制按钮和用 GUILayout.Button绘制按钮混用的案例usingSystem.Collections;usingSystem.Collections.Generic;usingNUnit.Framework;usingUnityEditor;usingUnityEngine;usingUnityEngine.UIElements;publicclassMyTestPanel:......
  • WPF 使用 CommunityToolkit.Mvvm
    参考文档: IntroductiontotheMVVMToolkit-CommunityToolkitsfor.NET|MicrosoftLearn它是一个现代化,快速和模块化的MVVM库,对应用程序的结构或编译规范没有严格的限制。NuGet安装包搜索:CommunityToolkit.Mvvm导入usingCommunityToolkit.Mvvm;使用ObservableObjectpubli......