Unity_URP_Rendering Debugger 调试入门之
Posted avi9111
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity_URP_Rendering Debugger 调试入门之相关的知识,希望对你有一定的参考价值。
Rendering Debuuger概要
- 感觉用URP的团队不多,因为网上资料明细不多
- 而用Debuuger的同学少之又少,例如:
- 确实按照Unity一贯的思路,Debugger只是作为辅助的(单点)调试工具
- Unity一般并不提供监控和优化功能(多点,时段性),功能也是能省即省(内部代码还是很多的);估计这个Rendering Debugger也不例外
真机*手机上如何调出Rendering Debugger
个人也是偶尔发现这个Rendering Debugger,如remote inspector, shader inspector,view-logger等插件,居然可以在手机上弹出调试界面,
github显示资料:
This section contains the following topics:
-
How to access the Rendering Debugger window.
Information on how to access the Rendering Debugger window in the Editor, in the Play mode, and at runtime in Development builds.
资料显示结果是:
平台 | 操作 |
In Editor | Select Window > Analysis > Rendering Debugger. 或 &*% @……*%¥!()&@)(没有快捷键。。什么都没有,URP最好你们不要用,也不开源的,看上去Unity官方有点这些意思) |
In Runtime (Development build) | On a mobile device, use a three-finger double tap. On a desktop or laptop computer, press LeftCtrl+Backspace |
各参数实战
Material Override
先从第一个参数,Mat Override 开始测试:当选择了不同选项,例如 Albedo|Sepcular|Color,整体(真机,Runtime) 材质马上会更替,这是怎么用代码实现的呢?
代码跳转到最后,会发现,还是调用了 CommonBuffer(cmd).SetGlobalFloat();
// Material settings...
cmd.SetGlobalFloat(k_DebugMaterialModeId, (int)MaterialSettings.DebugMaterialModeData);
cmd.SetGlobalFloat(k_DebugVertexAttributeModeId, (int)MaterialSettings.DebugVertexAttributeIndexData);
查了一下,发现 URP 有自己的 Debug.hlsl 体系
对于一般地我们,不想仔细阅读 URP 内部D源码(主要还是性价比不高;大多数人也是没有这个意愿,目前2021年末。网上也是没有 Urp 分析地,Standard Built-in 却还是不少,还真是奇了怪了);我们能怎么办呢
没法阅读全部的我们,确实很难把每个Rendering Debug的参数都说清楚讲明白
------------------------ 分界线------------------------------------
第二天
一天不看代码,浑身不舒服的我们,还是得从头看下 _DebugMaterialMode 代码怎么写得
(一个正常人是不会关注Fog,有没开的,以下 _DebugMaterialMode 代码可以掠过)
bool IsFogEnabled()
#if defined(DEBUG_DISPLAY)
return (_DebugMaterialMode == DEBUGMATERIALMODE_NONE) &&
(_DebugVertexAttributeMode == DEBUGVERTEXATTRIBUTEMODE_NONE) &&
(_DebugMaterialValidationMode == DEBUGMATERIALVALIDATIONMODE_NONE) &&
(代码其实只有2个引用,排除fog后,最终会在 Debugging3D.hlsl 找到以下代码)
这下其实真相了,呼应了我一开始说的几点
确实按照Unity一贯的思路,Debugger只是作为辅助的(单点)调试工具
debug仅仅作为debug的工具,可不管优化,不管架构,不管分层的
Rendering debug 仅在最后输出时换成debugColor,一大堆shader脚本,该计算的计算,该跳转的跳转
这也正常的很
Unity内部肯定是一拨人管 URPshader开发,一拨人管EDITOR 扩展,一拨人管Debugger,一拨人管跨 Graphic API;人很多的,并不是一个肝完所有事情,当然也很像是一个人肝完,迭代很慢.
来来去去,无非就是debugColor那一套,Unity内部人员真的没有借鉴 Amplify Shader Editor?
Material Overrid 的各个选项其实就是 debugColor
一般TA,或想成为TA的,以下代码会有用吧,不知道,
暂时目测URP还是一个TA比较好用的工具
-
debugColor = half4(surfaceData.albedo, 1);
-
debugColor = half4(surfaceData.alpha.rrr, 1);
-
debugColor = surfaceData.mask;
-
debugColor = half4(surfaceData.normalTS, 1);
扩展阅读:
(1条消息) Unity 的CommandBuffer基础_u012740992的专栏-CSDN博客_commandbuffer
以上是关于Unity_URP_Rendering Debugger 调试入门之的主要内容,如果未能解决你的问题,请参考以下文章