RecursiveFrog 发表于 2022-5-11 08:25

2.ShaderLab语义(Unity的CG/HLSL语义)

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;
}
页: [1]
查看完整版本: 2.ShaderLab语义(Unity的CG/HLSL语义)