UntiyShader(七)Debug

目录

前言

一、利用假彩色图像

二、利用Visual Studio

三、帧调试器


前言

Debug(调试),是程序员检查问题的一种方法,对于一个Shader调试更是一种噩梦,这也是Shader难写的原因之一——如果效果不对,我们可能要花费很多时间去查找问题所在。

造成这种状况的原因便是Shader中可以选择的调试方法非常有限。

一、利用假彩色图像

假彩色图像(false-color image)指得是用假彩色技术生成一种图像,与假彩色图像对应的是照片这种真彩色图像(true-color image)

主要思想:

我们可以把需要调试的变量映射到[0,1]之间,把它们作为颜色输出到屏幕上,然后通过屏幕上显示的像素颜色来判断这个值是否是正确的。这种方法得到的调试信息很模糊,能够得到的信息很有限,但在很长一段时间内它的确是唯一的可选方法。

需要注意的是,由于颜色的分量范围为[0,1],因此我们需要小心处理需要调试的变量的范围。

如果我们已经知道了它的值域范围,可以先把它映射到[0,1]之间再进行输出。如果不知道,我们只能不停地实验。(一个提示是,颜色分量中任何大于1地数值会被设置为1,而任何小于0的数值会被设置为0,因此我们可以个尝试不同的映射,直到发现颜色发生了变化)

示例

Shader "Unity Shaders Book/FalseColor"
{SubShader{Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct v2f{float4 pos : SV_POSITION;fixed4 color : COLOR0;};
;v2f vert (appdata_full   v){v2f o;o.pos=UnityObjectToClipPos(v.vertex);//可视化法线方向o.color=fixed4(v.normal*0.5+fixed3(0.5,0.5,0.5),1.0);//可视化切线方向o.color=fixed4(v.tangent.xyz*0.5+fixed3(0.5,0.5,0.5),1.0);//可视化副切线方向fixed3 binormal=cross(v.normal,v.tangent.xyz)*v.tangent.w;o.color=fixed4(binormal*0.5+fixed3(0.5,0.5,0.5),1.0); //可视化第一组纹理坐标o.color=fixed4(v.texcoord.xy,0.0,1.0); //可视化第二组纹理坐标o.color=fixed4(v.texcoord1.xy,0.0,1.0); //可视化第一组纹理坐标的小数部分o.color=frac(v.texcoord);if(any(saturate(v.texcoord)-v.texcoord)){o.color.b=0.5;}o.color.a=1.0;//可视化第二组纹理坐标的小数部分o.color=frac(v.texcoord1);if(any(saturate(v.texcoord1)-v.texcoord1)){o.color.b=0.5;}o.color.a=1.0;//可视化顶点颜色//o.color=v.color;return o;}fixed4 frag (v2f i) : SV_Target{return i.color;}ENDCG}}
}

效果:

在上面的代码中,我们使用了Unity内置的一个结构体——appdata_full。我们可以在UnityCG.cginc中找到它的定义:

struct appdata_full{

        float4 vertex:POSITION;

        float4 tangent:TANGENT;

        float3 normal"NORMAL;

        float4 texcoord:TEXCOORD0;

        float4 texcoord1:TEXCOORD1;

        float4 texcoord2:TEXCOORD2;

        float4 texcoord3:TEXCOORD3;

#if defined(SHADER_API_XBOX360)

        half texcoord4:TEXCOORD4;

        half texcoord5:TEXCOORD5;

#endif

        fixed4 color:COLOR;

};

可以看出,appdata_full几乎包含了所有的模型数据。 我们可以通过注释上面的代码块来查看不同的调试效果。

二、利用Visual Studio

在Visual Studio2012版本中也提供了对Unity Shader的调试功能——Graphics Debugger

三、帧调试器

我的Unity版本为2021.3.12,帧调式器在Window->Analysis->Frame Debugger中。

帧调试器可以用于查看渲染该帧时进行的各种渲染事件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/232287.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

外包干了4个月,技术退步明显了...

先说一下自己的情况,大专生,18年通过校招进入武汉某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四…

SQL 在已有表中修改列名的方法

文章目录 1. MySQL2. SQL Server3. Oracle / PostgreSQL Question: 假设有一张表 StudentInfo,表中有一个列名是 Student_Name ,想要把这个列名改成 StudentName 应该如何操作? 建表语句如下: --建表 if object_id(S…

linux(centos)相关

文件架构: bin--binary--二进制命令,可直接执行 sbin systembin系统二进制命令,超级管理员 lib 库目录 类似dll文件 lib64 64位系统相关的库文件 usr 用户文件 boot 引导分区的文件,链接,系统启动等 dev device设备目录…

前端--基础 常用标签-超链接标签 外部链接( herf 和 target)

目录 超链接标签 &#xff1a; 超链接的语法格式 &#xff1a; 超链接的属性 &#xff1a; 超链接的分类 &#xff1a; 外部链接 &#xff1a; 超链接标签 &#xff1a; # 在 HTML 标签中&#xff0c;<a> 标签用于定义超链接&#xff0c;作用是从一个页面…

第13课 利用openCV检测物体是否运动了

FFmpeg与openCV绝对是绝配。前面我们已经基本熟悉了FFmpeg的工作流程&#xff0c;这一章我们重点来看看openCV。 在前面&#xff0c;我们已经使用openCV打开过摄像头并在MFC中显示图像&#xff0c;但openCV能做的要远超你的想像&#xff0c;比如可以用它来实现人脸检测、车牌识…

【Unity嵌入Android原生工程】

Unity嵌入Android原生工程 本章学习,Unity模块嵌入Android## 标题Unity导出Android工程创建Android Studio工程Unity嵌入到Andorid StudioAndroid原生代码跳转到Unity场景工作需要嵌入原生工程,并实现热更,记录一下 工具,Unity2023.3.14,Android Studio 2022.3.1 patch3 Un…

JVM知识总结(简单且高效)

1. JVM内存与本地内存 JVM内存&#xff1a;受虚拟机内存大小的参数控制&#xff0c;当大小超过参数设置的大小时会报OOM。本地内存&#xff1a;本地内存不受虚拟机内存参数的限制&#xff0c;只受物理内存容量的限制&#xff1b;虽然不受参数的限制&#xff0c;如果所占内存超过…

网络安全红队常用的攻击方法及路径

一、信息收集 收集的内容包括目标系统的组织架构、IT资产、敏感信息泄露、供应商信息等各个方面&#xff0c;通过对收集的信息进行梳理&#xff0c;定位到安全薄弱点&#xff0c;从而实施下一步的攻击行为。 域名收集 1.备案查询 天眼查爱企查官方ICP备案查询 通过以上三个…

抖店入驻条件是什么?需要多少费用?

我是电商珠珠 新手入驻抖店最关心的就是抖店的入驻条件&#xff0c;以及费用&#xff0c;今天我就来给大家详细的讲一下。 入驻条件 1、营业执照 入驻抖店新手需要准备一张个体工营业执照&#xff0c;在办理营业执照的时候要办理全类目的&#xff0c;我这里有份全类目营业执…

云服务器安装mysql全流程

一、下载安装包 官网链接&#xff1a;MySQL :: Download MySQL Community Server 选择适合自己版本和操作系统 二、安装包上传服务器 在本地终端执行scp命令 三、服务器上使用安装包 卸载旧版本 #检查是否之前安装过mysql服务 [lighthouseVM-24-3-opencloudos software]# r…

Pytest——Fixture夹具的使用

一、什么是Fixture 在测试开展的过程中&#xff0c;会需要考虑到测试前的准备工作&#xff0c;以及测试后的释放操作行为。这些在Pytest中&#xff0c;会通过Fixture的方式来实现。如果说在运行pytest的测试用例的时候&#xff0c;需要调用一些数据来实现测试行为&#xff0c;…

用友U8 Cloud smartweb2.RPC.d XML外部实体注入漏洞

产品介绍 用友U8cloud是用友推出的新一代云ERP&#xff0c;主要聚焦成长型、创新型、集团型企业&#xff0c;提供企业级云ERP整体解决方案。它包含ERP的各项应用&#xff0c;包括iUAP、财务会计、iUFO cloud、供应链与质量管理、人力资源、生产制造、管理会计、资产管理&#…

企业出海数据合规:GDPR中的个人数据与非个人数据之区分

GDPR仅适用于个人数据&#xff0c;这意味着非个人数据不在其适用范围内。因此&#xff0c;个人数据的定义是一个至关重要的因素&#xff0c;因为它决定了处理数据的实体是否要遵守该法规对数据控制者规定的各种义务。尽管如此&#xff0c;什么是个人数据仍然是当前数据保护制度…

万众期盼的剪辑新功能来了 会声会影2024旗舰版焕新登场

会声会影2024全新升级来袭&#xff0c;Corel公司这次为用户带来了多项功能更新&#xff0c;软件风格整体更偏向于“轻松剪辑&#xff0c;快速出片”。会声会影的本次更新还是很令人惊喜的&#xff0c;在各种人工智能算法的加持下&#xff0c;用户只需要进行几步简单地设置&…

微型导轨在设备中起什么作用

微型导轨精度高&#xff0c;摩擦系数小&#xff0c;自重轻&#xff0c;结构紧凑&#xff0c;可以用于电子制造设备、半导体制造设备、医疗设备、光学设备和机器人等各种工业机械设备中&#xff0c;那么微型导轨在设备中起什么作用呢&#xff1f; 1、导向与定位&#xff1a;为机…

使用mysql查询当天、近一周、近一个月及近一年的数据以及各种报表查询sql

1.mysql查询当天的数据 1 select * from table where to_days(时间字段) to_days(now()); 2.mysql查询昨天的数据 1 select * from table where to_days(now( ) ) - to_days( 时间字段名) < 1 3.mysql查询近一个月的数据 1 SELECT * FROM table WHERE date(时间字段) …

主流大语言模型从预训练到微调的技术原理

引言 本文设计的内容主要包含以下几个方面&#xff1a; 比较 LLaMA、ChatGLM、Falcon 等大语言模型的细节&#xff1a;tokenizer、位置编码、Layer Normalization、激活函数等。大语言模型的分布式训练技术&#xff1a;数据并行、张量模型并行、流水线并行、3D 并行、零冗余优…

网络实训模拟考察题目和答案(华为eNSP综合实验考试)

拓扑中四个交换机五个路由器&#xff0c;共九个设备 答案是对应的九个脚本&#xff08;从设备命名到保存&#xff09; 全部复制粘贴后&#xff0c;从PC1、PC2都是能Ping通服务器的&#xff08;保及格&#xff09;&#xff0c;其他要求没检查 题目 VLAN信息 设备名称端口链路…

编译原理笔记(三)

一、词法分析程序的设计 1、词法分析程序的输出 在识别出下一个单词同时验证其词法正确性之后&#xff0c;词法分析程序将结果以单词符号的形式发送至语法分析程序以回应其请求。 单词符号一般分下列5类&#xff1a; 关键字&#xff1a;如&#xff1a;begin、end、if、whil…

aspose通过开始和结束位置关键词截取word另存为新文件

关键词匹配实体类&#xff1a; Data EqualsAndHashCode(callSuper false) public class TextConfig implements Serializable {private static final long serialVersionUID 1L;/*** 开始关键词&#xff0c;多个逗号分隔*/private String textStart ;/*** 结束关键词&#x…