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

news2024/11/26 10:49:59

一、前言

之前项目 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.coloradmin.cn/o/2237580.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端代码分析题(选择题、分析题)——JS事件循环分析、await和作用域分析

Promise其实也不难-CSDN博客 Promise 的执行顺序分析 Promise 对象的执行是异步的,但其执行器函数内部的代码是立即执行的,而 then方法注册的回调函数则是在 Promise 状态改变后执行的。 const myPromise new Promise((resolve, reject) > {conso…

DAY24|回溯算法Part03|LeetCode:93.复原IP地址、78.子集、90.子集II

目录 LeetCode:93.复原IP地址 基本思路 C代码 LeetCode:78.子集 基本思路 C代码 LeetCode:90.子集II 基本思路 C代码 通过used实现去重 通过set实现去重 不使用used和set版本 LeetCode:93.复原IP地址 力扣代码链接 文字讲解:LeetCode:93.复原IP地…

ts 将100个元素,每行显示9个元素,然后显示出所有行的元素,由此我们延伸出一个项目需求的简单算法实现。

1、先看一下baidu ai出的结果&#xff1a; 2、我们将上面的代码修改下&#xff0c;定义一个数组&#xff0c;然后记录每行的行号及相应的元素&#xff1a; <template><div>console</div> </template> <script setup lang"ts"> import …

17、论文阅读:VMamba:视觉状态空间模型

前言 设计计算效率高的网络架构在计算机视觉领域仍然是一个持续的需求。在本文中&#xff0c;我们将一种状态空间语言模型 Mamba 移植到 VMamba 中&#xff0c;构建出一个具有线性时间复杂度的视觉主干网络。VMamba 的核心是一组视觉状态空间 (VSS) 块&#xff0c;搭配 2D 选择…

用 Python 从零开始创建神经网络(三):添加层级(Adding Layers)

添加层级&#xff08;Adding Layers&#xff09; 引言1. Training Data2. Dense Layer Class 引言 我们构建的神经网络变得越来越受人尊敬&#xff0c;但目前我们只有一层。当神经网络具有两层或更多隐藏层时&#xff0c;它们变成了“深度”网络。目前我们只有一层&#xff0c…

推荐一款功能强大的视频修复软件:Apeaksoft Video Fixer

Apeaksoft Video Fixer是一款功能强大的视频修复软件&#xff0c;专门用于修复损坏、不可播放、卡顿、画面失真、黑屏等视频问题。只需提供一个准确且有效的样本视频作为参考&#xff0c;该软件就能将受损视频修复到与样本视频相同的质量。该软件目前支持MP4、MOV、3GP等格式的…

Web前端开发--HTML语言

文章目录 前言1.介绍2.组成3.基本框架4.常见标签4.1双标签4.1.1.标题标签4.2.2段落标签4.1.3文本格式化标签4.1.4超链接标签4.1.5视频标签4.1.6 音频标签 4.2单标签4.2.1换行标签和水平线标签4.2.2 图像标签 5.表单控件结语 前言 生活中处处都有网站&#xff0c;无论你是学习爬…

[ DOS 命令基础 2 ] DOS 命令详解-网络相关命令

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

gitlab无法创建合并请求是所有分支都不显示

点击Merge Requests ------> New merge request 创建新的合并请求时&#xff0c;在Source branch和Target branch中一个分支都不显示 排查思路&#xff1a; 1.怀疑是权限问题。 发现只有我的一个账号出现&#xff0c;检查了账号的权限&#xff0c;尝试了master、develop角色…

【温度表达转化】

【温度表达转化】 C语言代码C代码Java代码Python代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 利用公式 C5∗(F−32)/9 &#xff08;其中C表示摄氏温度&#xff0c;F表示华氏温度&#xff09; 进行计算转化。 输出 输出一行&#x…

「QT」几何数据类 之 QPoint 整型点类

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「QT」QT5程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…

[Linux]:高级IO

1. IO 理解 1.1 IO 的基本概念 I/O即输入/输出&#xff08;input/output&#xff09;&#xff0c;是计算机系统中极为关键的操作环节。 在经典的冯诺依曼体系结构框架下&#xff0c;其核心在于数据的传输流向界定了输入与输出的概念。具体而言&#xff0c;当把数据从诸如键盘…

【GeoJSON在线编辑平台】(2)吸附+删除+挖孔+扩展

前言 在上一篇的基础上继续开发&#xff0c;补充上吸附功能、删除矢量、挖孔功能。 实现 1. 吸附 参考官方案例&#xff1a;Snap Interaction 2. 删除 通过 removeFeature 直接移除选中的要素。 3. 挖孔 首先是引入 Turf.js &#xff0c;然后通过 mask 方法来实现挖孔的…

【ReactPress】React + antd + NestJS + NextJS + MySQL 的简洁兼时尚的博客网站

ReactPress 是使用React开发的开源发布平台&#xff0c;用户可以在支持React和MySQL数据库的服务器上架设属于自己的博客、网站。也可以把 ReactPress 当作一个内容管理系统&#xff08;CMS&#xff09;来使用。 前言 此项目是用于构建博客网站的&#xff0c;包含前台展示、管理…

ZISUOJ 2024算法基础公选课练习一(1)

前言、 又是一年算法公选课&#xff0c;与去年不同的是今年学了一些纯C&#xff08;而不是带类的C&#xff09; 一、我的C模板 1.1 模板1 #include <bits/stdc.h> using i64 long long;int main() {std::cin.tie(nullptr)->sync_with_stdio(false);return 0; } 1…

【1】虚拟机安装

1.安装VMware WorkStation Pro VMware下载地址&#xff1a; 密钥&#xff1a;YF390-0HF8P-M81RQ-2DXQE-M2UT6 2.新建虚拟机 centos7下载地址&#xff1a;centos-7.9.2009-isos-x86_64安装包下载_开源镜像站-阿里云

【SpringBoot】SpringBoot自带的Jackson入门使用

导入依赖 springboot自带的&#xff0c;挨个点进去&#xff0c;就能找到 自定义对象转换器 import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.module.SimpleModu…

软件工程概论项目(一),git环境的配置和平台代码的拉取

距离软工概论项目答辩还有五个周的时间&#xff0c;需要做一个项目&#xff0c;把心得体会都做一个记录。以便以后进行回顾和反思 这里写目录标题 一、环境的配置gitbash 一、环境的配置 gitbash 安装gitbash&#xff0c;简单说两句&#xff0c;git用于多人协作和代码托管&am…

分布式数据库中间件mycat

MyCat MyCat是一个开源的分布式数据库系统&#xff0c;它实现了MySQL协议&#xff0c;可以作为数据库代理使用。 MyCat(中间件)的核心功能是分库分表&#xff0c;即将一个大表水平分割为多个小表&#xff0c;存储在后端的MySQL服务器或其他数据库中。 它不仅支持MySQL&#xff…

万字长文解读深度学习——循环神经网络RNN、LSTM、GRU、Bi-RNN

&#x1f33a;历史文章列表&#x1f33a; 深度学习——优化算法、激活函数、归一化、正则化深度学习——权重初始化、评估指标、梯度消失和梯度爆炸深度学习——前向传播与反向传播、神经网络&#xff08;前馈神经网络与反馈神经网络&#xff09;、常见算法概要汇总万字长文解读…