前言
做Unity很久了也不会Shdaer,最近趁着略空闲了解了以下,这里做一个引导,想要更进一步的了解请移步冯乐乐的《UnityShader入门精要》,墙裂推荐!
使用步骤
Shader "Unlit/m_UnlitShader"//一个成功的shdaer必定需要一个名字,在这里我们将其命名为:m_UnlitShader。代表这是我们自己的shader!仪式感满满
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}//图片
}
SubShader//语义块,通俗一点的名字是:方法.. PS:unity能够直接运行的方法,这个方法可以定义很多个,unity会寻找可以支持的最牛X的方法来执行,当然。。如果你的显卡太菜,一个方法都执行不了..那就只能执行“ FallBack "Diffuse"”这句话了。
{
Tags { "RenderType"="Opaque" }//这玩意儿可有可无,但如果你想更好的装X...emm,更好的使用,那么你需要知道这个。 这个Tag包含了一个键值对..
//如果不好理解,你可以认为是一家有两口子,这家人的功能是告诉Unity:我们要什么时候,采用什么样式渲染这个对象
LOD 100 //Level of Detail (LOD) 。细节层次,远了用一般般的效果,近了用牛X的效果,每个SubShader都可以有的属性,通过修改脚本中的Shader.globalMaximumLOD赋值就可以改变Shader:不管你好使不好使,我都要让你好使
Pass //主角,类似于...Main方法运行
{
CGPROGRAM //cg处理器,醒醒,开始上班啦!!
#pragma vertex vert //指定哪段代码是顶点shader,把vert作为顶点shader的入口 通俗来讲: vert这个方法已经心里有人了!就是Vertex!,其他方法不要来骚扰了!
#pragma fragment frag 指定哪段代码是片元着色shader, 这个...同上
// make fog work
#pragma multi_compile_fog//雾。装X必备功能,飘飘欲仙必备
#include "UnityCG.cginc" //使用"UnityCG.cginc",调用插件,洒洒水啦
//定义顶点着色器输入结构体
struct appdata //
{
float4 vertex : POSITION;//获得顶点数据 float4是四维向量,这里相当于告诉渲染引擎,这个属性代表的含义
float2 uv : TEXCOORD0;//获得纹理坐标数据 简称:图!
//float4 normal: NORMAL;//获得法线数据
};
//与上边类似,这里使用一个结构体来定义顶点着色器的输出
struct v2f
{
float2 uv : TEXCOORD0;
UNITY_FOG_COORDS(1)
float4 vertex : SV_POSITION;
};
sampler2D _MainTex;
float4 _MainTex_ST;
//Vertex 顶点函数
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);//传递进来的顶点坐标是模型坐标系中的坐标值,需要经过矩阵转换成屏幕坐标
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
UNITY_TRANSFER_FOG(o,o.vertex);
return o;渲染引擎去工作!
}
//fragment 片元函数
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//cg处理器,去睡觉吧!!
}
}
}
总结
Shader使用还是比较简单的,难的只是算法。以上代码如有错误欢迎指正,愿与诸君共勉。
生命不息,coding不停!