|
1.Properties语义块
Properties
{
_Int ("Int", Int) = 1 //int类型
_Float ("Float", Float) = 1.5 //float类型
_Range ("Range", Range(0.0, 5.0)) = 3.0 //区间值
_Color ("Color", Color) = (1, 1, 1, 1)// 颜色四维向量
_Vector ("Vector", Vector) = (1, 2, 3, 4)// 四维向量
_2D ("2D", 2D) = "" {} //2的阶数大小的贴图
_Rect ("2D", Rect) = "" {} //非2的阶数大小的贴图
_Cube ("Cube", Cube) = "white" {} //是6张有联系的2D贴图的组合主要用来做反射效果
_3D ("3D", 3D) = "black" {}
}2.vert着色器输入语义
fixed:精度11位 -2.0~+2.0
half:精度16位 -60000~+6000
float :精度32位
POSITION,NORMAL,TEXCOORD0 等语义填充的数据由Unity的MeshRender组件提供,每帧调用DrawCall的时候,MeshReder组件会把它负责渲染的模型数据(顶点坐标、法线、切线、纹理坐标、顶点颜色等)发送给UnityShader
struct VertexInput// 应用阶段传递到顶点着色器语义
{
float4 vertex : POSITION; //POSITION语义 告诉Unity将模型空间 模型的顶点坐标,传入pos参数内,通常是float4类型
float3 normal : NORMAL; //NORMAL语义 告诉Unity模型空间的法线向量,填充进normal变量,通常是float3类型
float3 tangent: TANGENT; //TANGENT语义 告诉Unity模型空间的切线量,填充进tangent变量,通常是float3类型
float4 texcoord : TEXCOORDn; // TEXCOORD0语义 告诉Unity用模型的第一套纹理坐标,填充texcoord变量
//TEXCOORD0表示第一组坐标的纹理,通常是float2,float4类型
Color color: COLOR; //COLOR语义 告诉Unity的顶点颜色,通常是fixed4或float4类型
};3.vert着色器输出(fragment着色器输入)语义
struct VertexOutput //顶点着色器传递到片元着色器语义
{
//物体裁剪空间坐标
float4 positionCS : SV_POSITION; //SV_POSITION语义 告诉Unity 顶点着色器vert的输出为裁剪空间中的顶点坐标
//UV坐标
fixed3 color : COLOR; //COLOR语义可用于存储颜色信息
float4 texcoord : TEXCOORDn; // TEXCOORD0语义 告诉Unity用模型的第n套纹理坐标,填充texcoord变量
float2 uv : TEXCOORD0;
};
//顶点着色器入口
VertexOutput vertex(VertexInput v)
{
VertexOutput o;
return o;
}4.fragment着色器输出语义
//片元着色器入口 SV_Target 片元着色器输出到Unity的语义
fixed4 frag (VertexOutput i) : SV_Target //SV_Target 输出值将储存到渲染目标(render target)
{
fixed4 color;
rteurn color;
} |
|