Advertisement

《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
}
}
}

全部评论 (0)

还没有任何评论哟~