Shader学习10【shader如何进行Debug】
1:使用假彩色图像
假彩色图像(false- color image)指的是用假彩色技术生成的一种图像。与假彩色图像对应的是照片这种真彩色图像(true-color image)。一张假彩色图像可以用于可视化一些数据,那么如何用它来对Shader进行调试呢?
主要思想是:我们可以吧需要调试的变量映射到【0,1】之间,把它们作为颜色输出到屏幕上,然后通过屏幕上显示的像素颜色来判断这个值是否正确,需要注意的是,颜色的分量范围在【0,1】之间,因此我们需要小心处理需要调试的变量范围,如果我们已知它的值域范围,可以先把它映射到【0,1】之间再输出,如果你不知道一个变量的范围(这往往说明你对这个Shader中的运算还不了解,),我们就只能不停的实验,一个提示是:颜色分量中任何大于1的数值将会被设置为1,而任何小于0的数值会被设置为0.因此我们可以尝试使用不同的映射,直到颜色发生变化为止,
如果我们调试的是一个一维数据,那么可以选择一个单独的颜色分量(如R分量)进行输出,而把其他颜色分量置为0。如果是多维数据,可以选择对它的每一个分量单独调试,或者选择多个颜色分量进行输出。
作为实例,我们可以使用假彩色图像的方式来可视化一些模型数据,如法线,切线,纹理,坐标,顶点颜色,以及它们之间的运算结果等,我们使用的代码如下:
Pass
{
#pragma vertex vert
#pragma fragment frag
#include "unityCG,cginc"
Struct v2f
{
float4 pos:SV_POSITION;
fixed4 color:COLOR
};
v2f vert(appdata_full v)
{
v2f o;
o.pls=mul(UNITY_MATRIX_MVP,v.vertex);
//可视化发现方向
o.color = fixed(v.normal * 0.5+fixed3(0.5,0.5,0.5),1.0);
}
}