闲鱼技术01 发表于 2022-1-10 13:10

《Unity Shader入门精要》学习关键词

第2章 渲染流水线


[*]渲染流水线的过程
[*]应用,几何,光栅化各自干的事情,和每阶段的输入输出
[*]前者具体到CPU和GPU上是干什么的
[*]顶点着色器,片元着色器
[*]模板测试,深度测试,混合
第3章 Unity Shader 基础


[*]Shader和材质的关系
[*]Shader结构->Shader,Properties,SubShader,Tags,RenderStep,Pass,FallBack
[*]Vertex shader和Fragment shader
[*]CG/HLSL加ShaderLab怎么写Shader
[*]表面着色器,顶点/片元着色器,固定函数着色器
[*]随意写的简单Unity Shader代码模板,如下
Shdaer "shader类别/shader名字" {
Properties {
    _name1 ("dispaly name", PropertyType) = DfaultValue
    _name2 ("dispaly name", PropertyType) = DfaultValue
    //假设有纹理
    _MainTex ("Texture", 2D) = "white" {}
}
//显示器会选择可以运行的SubShader
SubShader {
   
        //常见LOD 200
    Pass {
      CGPROGRAM
      //表示顶点着色器程序为vert,片元着色器程序为frag
      //包含的"UnityCG.cginc"文件提供appdata结构以及一些常用函数
      #pragma vertex vert
      #pragma fragment frag
      #inlcude "UnityCG.cginc"
      
      //要在程序里调用Properties,要映射到同名变量
      PropertyType _name1;
      PropertyType _name2;
      //假设有纹理,采样需要加下面这句
      float4 _MainTex_ST
      
      //这是一个在顶点着色器和片元着色器间传递数据的结构
      struct v2f{
      float4 pos:SV_POSITION;//表示这是MVP矩阵后输出的顶点坐标
      float2 uv:TEXCOORD0;//表示这是顶点的纹理坐标
      fixed3 color:COLOR0;//表示这是顶点的颜色,0表示第0组
      }
      
      v2f vert(appdata_full v) //或appdata_base等
      {
      v2f o;
      o.pos = UnityObjectToClipPos(v.vertex);//模型转世界转观察转裁剪/视口(坐标系)
      o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);//加上材质球的tiling和offset
      o.color = (1, 0.5, 0.5);//随意定一个颜色
      return o;//顶点着色器核心任务,输出经过MVP矩阵后的顶点
      }
      
      fixed4 frag(v2f i):SV_Target//输出要渲染的目标颜色
      {
      fixed4 texcol = tex2D(_MainTex, i.uv);//用纹理坐标从纹理上取纹素
      //中间有一些改变颜色的操作,如texcol.rgb= fixed3(0.5, 0.5, 1);
      //或者不取纹理的颜色,return fixed4(i.color, 1)
      return texcol;//片元着色器核心任务,返回渲染的颜色
      }
      ENDCG
    {
    Pass {
      //其他Pass
    }
}
SubShader{
    //其他SubShader
}
FallBack "Diffuse"//或FallBack "VertexLit"或FallBack Off
}
第4章 学习Shader所需的数学基础


[*]模型空间,世界空间->左手坐标系,观察空间->右手坐标系
页: [1]
查看完整版本: 《Unity Shader入门精要》学习关键词