unity之shader

渲染流程分为三个阶段:应用阶段,几何阶段,光栅化阶段。

Unity Shader的分类:

使用的是ShaderLab编写unity中的的shader

1 表面着色器 Surface Shader

2 顶点/片元着色器 Vertex/Fragment Shader

3 固定函数着色器 Fixed Function Shader
 
 
Shader "Custom/DiffuseShader" {
    Properties {
        _Color ("Color", Color) = (1,1,1,1)       
        。。。
        。。。
    }
    SubShader {
        Tags { "RenderType"="Opaque"}
        CGPROGRAM
        #pragma surface surf Standard fullforwardshadows
        #pragma target 3.0

        fixed4 _Color;
        sampler2D _MainTex;
        half _Glossiness;
        half _Metallic;

        ENDCG
    }
    FallBack "Diffuse"
}
View Code

Tags 常用两种标签

”Opaque”:绝大部分不透明的物体都使用这个; 
”Transparent”:绝大部分透明的物体、包括粒子特效都使用这个;
Properties {
        _MyTexture("Texture (RGB)",2D) = "white"{}
        _MyColor("Color of object",Color) =(1,1,1,1)
    SubShader {
        Tags{"Queue"="Geometry""RenderType"="Opaque""IgnoreProjector"="True"}
        Pass {
        CGPROGRAM
        #pragma Vertex vert
        #pragma fragment frag
        #include "UnityCG.cginc"
        sampler2D _MyColor;

        struct v2f{
            float4 pos::SV_POSITION;
        };

        v2f vert(appdata_full v)
        {
            v2f o;
            o.pos = mul(UNITY_MATRIX_MVP,v.Vertex);
            return o;
        }
        float4 frag(v2f i)
        {
            return float4(i);
        }
        ENDCG
            }
        }
        FallBack "Diffuse"
片元着色器
Shader "Custom/NewShader" {
    Properties {
        _MainTex ("Base (RGB)", 2D) = "white" {}
    }

    SubShader {
        Tags { "RenderType"="Opaque" }
        LOD 200

        CGPROGRAM
        #pragma surface surf Lambert

        sampler2D _MainTex;

        struct Input {
            float2 uv_MainTex;
        };

        void surf (Input IN, inout SurfaceOutput o) {
            half4 c = tex2D (_MainTex, IN.uv_MainTex);
            o.Albedo = c.rgb;
            o.Alpha = c.a;
        }
        ENDCG
    } 
    FallBack "Diffuse"
}
顶点着色器
 
原文地址:https://www.cnblogs.com/shirln/p/8603886.html