在Unity5.2及以上版本中,Unity一共提供了4中UnityShader模板供咱们抉择,别离是:UnlitShader、SurfaceShader、ImageEffectShader、ComputeShader。
SurfaceShader:会产生一个蕴含了规范光照模型的外表着色器模板,代码如下:
Shader "Custom/SurfaceShader" {
Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} _Glossiness ("Smoothness", Range(0,1)) = 0.5 _Metallic ("Metallic", Range(0,1)) = 0.0}SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM // Physically based Standard lighting model, and enable shadows on all light types #pragma surface surf Standard fullforwardshadows // Use shader model 3.0 target, to get nicer looking lighting #pragma target 3.0 sampler2D _MainTex; struct Input { float2 uv_MainTex; }; half _Glossiness; half _Metallic; fixed4 _Color; void surf (Input IN, inout SurfaceOutputStandard o) { // Albedo comes from a texture tinted by color fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color; o.Albedo = c.rgb; // Metallic and smoothness come from slider variables o.Metallic = _Metallic; o.Smoothness = _Glossiness; o.Alpha = c.a; } ENDCG} FallBack "Diffuse"
}
Unlit Shader 会产生一个不蕴含光照(但蕴含雾效)的根本顶点/片元着色器,代码如下:
Shader "Unlit/UnlitShader"
{
Properties{ _MainTex ("Texture", 2D) = "white" {}}SubShader{ Tags { "RenderType"="Opaque" } LOD 100 Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag // make fog work #pragma multi_compile_fog #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; UNITY_FOG_COORDS(1) float4 vertex : SV_POSITION; }; sampler2D _MainTex; float4 _MainTex_ST; v2f vert (appdata v) { v2f o; o.vertex = mul(UNITY_MATRIX_MVP, v.vertex); o.uv = TRANSFORM_TEX(v.uv, _MainTex); UNITY_TRANSFER_FOG(o,o.vertex); return o; } fixed4 frag (v2f i) : SV_Target { // sample the texture fixed4 col = tex2D(_MainTex, i.uv); // apply fog UNITY_APPLY_FOG(i.fogCoord, col); return col; } ENDCG }}
}
Image Effect Shader 则为咱们实现各种屏幕后处理成果提供了一个模板,代码如下:
Shader "Hidden/ImageEffectShader"
{
Properties{ _MainTex ("Texture", 2D) = "white" {}}SubShader{ // No culling or depth Cull Off ZWrite Off ZTest Always Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; v2f vert (appdata v) { v2f o; o.vertex = mul(UNITY_MATRIX_MVP, v.vertex); o.uv = v.uv; return o; } sampler2D _MainTex; fixed4 frag (v2f i) : SV_Target { fixed4 col = tex2D(_MainTex, i.uv); // just invert the colors col = 1 - col; return col; } ENDCG }}
}
Compute Shader会产生一张非凡的Shader文件,这类Shader旨在利用GPU的并行性来进行一些与惯例渲染流水线无关的计算,
与失常着色器相似,Compute着色器是我的项目中的资源文件,具备* .compute文件扩展名。 它们是用DirectX 11格调的HLSL语言编写的,用最大量的#pragma编译指令来批示哪些函数要编译为计算着色器内核。