unity之shader
渲染流程分为三个阶段:应用阶段,几何阶段,光栅化阶段。
Unity Shader的分类:
使用的是ShaderLab编写unity中的的shader
1 表面着色器 Surface Shader
2 顶点/片元着色器 Vertex/Fragment Shader
3 固定函数着色器 Fixed Function ShaderShader "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" }
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" }