mahao 发表于 2024-7-15 18:03

从FrameDebugger看Unity衬着

从FrameDebugger看Unity衬着(一)
Unity如何衬着一个3D+2D的游戏画面,今天通过FrameDebugger来看下Unity内置衬着管线的衬着策略, 后续再出一些URP衬着管线相关的文章。
对啦!这里有个游戏开发交流小组里面堆积了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬,欢迎你来交流学习。
Unity 衬着场景的几个主要部门
Unity内置衬着管线是基于摄像机来进行衬着的,每个摄像机按照摄像机的衬着挨次来依次衬着,衬着完一个摄像机,再衬着下一个摄像机。对于UI 2D而言,相当于也是一个独立的UI摄像机,还有一种特殊的OnGUI会绘制2D GUI物体,走的是GUI Paint。如图所示 FrameDegbuger 最外层的截图如下:






Unity 摄像机衬着措置哪些事情?




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


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




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


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与衬着的分享就到这里了,进入小组,获取更多的衬着优化相关的教程与常识。
页: [1]
查看完整版本: 从FrameDebugger看Unity衬着