当前位置: 首页 > article >正文

【unity】unity2021 URP管线下 SceneView没有MipMaps选项了怎么办?扩展Rendering Debugger工具

一、前言

之前项目 Unity打开后 Scene窗口 有一个MipMaps选项模式, 可以查看哪些贴图正常距离下发红 ,说明用不到那么大,可以缩一下尺寸。

但 新的项目在Unity2021上,用了URP, 就没见过这个选项。
查了一篇介绍详细的资料,学习了不少知识,【Unity URP】Rendering Debugger和可视化MipMap方案-CSDN博客

但当时漏看了 这个插件 Scene View Debug Modes in the Unity URP — John Austin   所以没看明白 Scene窗口怎么在Debug里加选项的。导致后面试验都走不下去。
 

不过正好让我研究了一下Rendering Debugger工具实现,发现URP其实本身自带渲染mipaps的功能,(只不过 ShaderGraph做的shader 和 完全自己写的shader 会不起作用,所以估计没开放出来。)。 Debug.hlsl里有一些 GetDebugMipColor 这样的接口了

【注:如果纯手工写的shader比较多, 建议还是用前面一篇文章里介绍的方法试试,若用URP自带的这个方案需要改造、改造起来不太方便。 本人试验了,上面这个插件不错 结合源博主的方案,且自己写的Shader 主帖图统一命名成_BaseMap就行。 附带 插件方案的 shader:DebugMipmaps.shader

二、Rendering Debugger 扩展方案

Tools->Analysis->Rendering Debugger, 可以打开这个工具,

Material Override 里加一个 Mipmaps选项

要修改 URP渲染管线里的代码,所以首先要把 项目Library\PackageCache下com.unity.render-pipelines.universal@xx.x.xx 复制到,项目的 Packages目录下,否则修改都会被还原。

  1. DebugViewEnums.cs 里DebugMaterialMode枚举最末尾加一个  Mipmaps
  2. DebugViewEnums.cs.hlsl 里 加一个 #define DEBUGMATERIALMODE_MIPMAPS (12)
  3. Debugging3D.hlsl 里 参考 DEBUGMATERIALMODE_METALLIC枚举,加一个

            case DEBUGMATERIALMODE_MIPMAPS:
                debugColor = half4(GetDebugMipColor(surfaceData.albedo, inputData.texelSize, inputData.uv),1);  
                return true;

这样就加好了,选择这个模式可以看到  URP自带的 Lit等shader 渲染的物体已经能看到效果了。 其他用 Shader Graph做的shader渲染的都是 蓝色的……

三、让自定义Shader或Shader Graph做的shader也支持 mipmaps 调试模式 

(一)原因

先说结论:不生效的shader没调用 SETUP_DEBUG_TEXTURE_DATA ,导致没填充对应数据

研究发现 不生效的shader, 获取inputData.texelSize出来的值都是0

看了一下 Lit.shader的源码,调用了 LitForwardPass.hlsl

里面有一句:
SETUP_DEBUG_TEXTURE_DATA(inputData, input.uv, _BaseMap);
看相关定义 就知道要提供什么了。

 搜索整个项目 SETUP_DEBUG_TEXTURE_DATA,还发现URP自带几个头文件 注释掉了 它的调用,看说明就是针对 Shader Graph的,  应该是没有通用性,需要自己定好参数:

(二)Shader Graph的做的Shader的解决方案

  把 PBRForwardPass.hlsl里的 SETUP_DEBUG_TEXTURE_DATA(inputData, unpacked.texCoord1.xy, _MainTex); 语句打开  ,然后开启Mipmaps模式

这边项目有shader代码报错:
Shader error in 'Shader Graphs/PbrModelSample2': invalid subscript 'texCoord1' at /work/atm2_D241023/Packages/com.unity.render-pipelines.universal@12.1.11/Editor/ShaderGraph/Includes/PBRForwardPass.hlsl(85) (on d3d11)

原因是  这边只用到了uv0, 所以 texCoord1 要改成 texCoord0

接着 这边项目还是有一个报错:说 undeclared identifier '_MainTex_MipInfo' at ……

原因是 shader里没定义一个 _MainTex_MipInfo, 那就把我们自己做的shader报错的都加一个Vector4变量 _MainTex_MipInfo:

 

保存没报错后,能看到成果:

总结方案就是:
1.把shader graph用到到的 PBRForwardPass.hlsl里的 打开注释,改成: SETUP_DEBUG_TEXTURE_DATA(inputData, unpacked.texCoord0.xy, _MainTex);
2.自己做的shadergraph 如果报错,看一下是否主贴图命名为_MainTex 是否定义了 Vector4 的_MainTex_MipInfo

(三)自定义shader的解决方案

可以自行参考 LitForwardPass.hlsl的片元着色器代码实现, 具体没试验,不能做定论。大致是:

  1. 组织一个 InputData inputData;结构,
  2. 调用 SETUP_DEBUG_TEXTURE_DATA(inputData, input.uv, _BaseMap(主贴图的名字));

    (注:shader里 要声明  float4 主贴图名字_TexelSize; float4 主贴图名字_MipInfo; )

  3. 后面调用 UniversalFragmentPBR ,如果全部自己写的 则要自行加一下类似的调用:

    反正就是要类似调用到 CanDebugOverrideOutputColor 如果返回true 则直接绘制 debugColor:
        #if defined(DEBUG_DISPLAY)
        half4 debugColor;
    
        if (CanDebugOverrideOutputColor(inputData, surfaceData, brdfData, debugColor))
        {
            return debugColor;
        }
        #endif

  4. 对了shader里应该也要加一下 
                #pragma multi_compile_fragment _ DEBUG_DISPLAY

  5. 这边尝试改造了一个 遇到了贴图相关的不少报错, 它还是调用 UniversalFragmentPBR本身的……




     

四、附带一个Rendering Debugger的知识点, 真机上可能用(可能要打成dev模式)  


Unity_URP_Rendering Debugger 调试入门之(一)-CSDN博客 查看里面介绍:

在手机上  三指同时双击屏幕(3指间距要大一些),就会出现如下的菜单:

项目优化掉了 Debug变体,则会出现这样的提示,需要改一下URP设置:


http://www.kler.cn/a/389951.html

相关文章:

  • Ue5 umg学习(一)
  • kettle开发-Day43-数据对比
  • NCC前端调用查询弹框
  • AcWing 300 任务安排1
  • Apache ECharts
  • CSS 自定义滚动条样式
  • 单位正交矢量的参数化,用于特征矢量对厄尔米特矩阵对角化使用
  • PyQt5实战——翻译的实现,成功爬取微软翻译(可长期使用)经验总结(九)
  • R 语言数据分析常用操作指令
  • vue中调用全屏方法、 elementUI弹框在全屏模式下不出现问题、多级嵌套弹框蒙层遮挡问题等处理与实现方案
  • Elasticsearch实战应用:从入门到精通
  • C++ | Leetcode C++题解之第560题和为K的子数组
  • C++常见概念问题(3)
  • JVM双亲委派与自定义类加载器
  • MyBatis操作--进阶
  • JAVA完成猜数字小游戏
  • JavaScript Cookie 与 服务器生成的 Cookie 的区别与应用
  • vue的原理
  • Docker 的常用命令有哪些?
  • Python实现SPFA算法
  • 浏览器交互事件汇总
  • 97_api_intro_imagerecognition_pdf2word
  • GEE ui界面实现:用户自画多边形, 按面积比例在多边形中自动生成样点,导出多边形和样点shp,以及删除上一组多边形和样点(有视频效果展示)
  • 数据库设计——E-R 图,学习笔记
  • 探索Copier:Python项目模板的革命者
  • 【软考系统架构设计师论文】论面向服务的架构设计