《Unity Shader入门精要》读书笔记第二章——shader调试
这一系列主要是基于对《Unity Shader入门精要》之后所记的一些感悟而产生的内容,为读者带来一些启发或启示。 联系方式:glasirius@gmail.com
在Unity环境中进行ShaderLab代码调试会遇到诸多不便,在集成开发环境时需要特别注意配置
编写ShaderLab代码时,在VS工具扩展中搜索到ShaderlabVSCode插件作为辅助工具。
通常情况下,在对法线纹理和光照模型进行处理时(尤其是渲染流程中),会经常涉及到计算切线空间的变换矩阵。
TNB模型包含三组坐标轴:切向量(T)、法向量(N)和副法线向量(B)。由于历史上的原因,在某些文献中将副法线向量称为bitangent。
当然有时候为了方便调试,会将数值通过颜色来反映。
其实也有一些CG的IDE可以用来做简单调试。
Shader "Unity Shaders Book/ Test / Chapter 5/False Color"
{
SubShader
{
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct v2f
{
float4 pos:SV_POSITION;
float4 color:COLOR;
};
//appdata_full是unity提供的数据结构
// struct appdata_full {
// float4 vertex : POSITION;
// float4 tangent : TANGENT;
// float3 normal : NORMAL;
// float4 texcoord : TEXCOORD0;
// float4 texcoord1 : TEXCOORD1;
// float4 texcoord2 : TEXCOORD2;
// float4 texcoord3 : TEXCOORD3;
// fixed4 color : COLOR;
// UNITY_VERTEX_INPUT_INSTANCE_ID
// };
v2f vert(appdata_full i)
{
v2f o;
o.pos = UnityObjectToClipPos(i.vertex);
o.color = i.tangent;
o.color = float4(i.normal,1);
o.color = i.texcoord;
// i.tangent.w的值在OpenGL中为+1,在DirectX中为-1
// 根本原因是两个库中的纹理坐标的v方向相反
float3 biNormal = cross(i.normal, i.tangent.xyz) * i.tangent.w;
o.color = float4(biNormal,1);
return o;
}
float4 frag(v2f i):SV_TARGET
{
float4 o;
o = i.color;
return o;
}
ENDCG
}
}
}
