// Shader Lab 语言
/*
一个Unity Shader 的基本结构格式
Shader "Custom/Name" //Shader 根命令(每一个着色器都需要定义一个唯一的Shader根命令)
{
//着色器属性列表,里面是用来定义着色器属性的语句,比如,颜色,纹理,透明度,反射率等等都用作参数。
Properties{
// 着色器属性
_Name("Display Name", type) = default Value[{options}]
//_Name : 变量名, Shader脚本文件内部使用的名称。
//Display Name: 显示名,就是在材质面板上出现的名称。
//type: 属性值的类型。
Color :表示颜色的属性
2D: 表示2的幂尺寸的贴图属性。
Rect: 表示非2的幂尺寸的贴图属性。
Cube: 表示CubeMap 立方体贴图的属性
Range(min, max): 表示在min, max之间的一个数值。
Float : 表示浮点数属性
Vector: 表示四维向量属性
//default Value : 定义此属性的默认值。
//options:一些纹理的参数选项,只对2D、Rect或者Cube贴图有关,包括两种选项:Tex Gen纹理生成模式和Lightmap Mode光照贴图模式。
_MainColor("Main Color", color) = (1,0,0,0.5)
//表示定义一个默认值为半透明红色的颜色Main Color
_MainTex ("Main Texture", 2D) = "Black" {}
//表示定义一个默认值为黑色的纹理Main Texture
_Range Value ("Float Value", Float) = 1.5
//表示一个浮点数的属性, 默认值为1.5
}
//渲染时候从上到下遍历子着色器列表,每个Pass都会渲染一次对象
Subshader { [Tags标签] [Common State通用状态] Pass[] }
SubShader{
//子着色器1
//Tags标签,Common State通用状态, Pass通道列表组成。
Tags:标签名称,控制渲染引擎“何时”“如何”将子着色器进行呈现出来。设定Tags索引值可以有任意多个,是“键-值”对的形式,语法格式如下:
Tags{“标签1”=“值1”“标签2”=“值2”}
例如:
Tags{“Render Type”=“Transparent”}
表示设置渲染方式为透明。
Tags{“Render Type”=“Opaque”}
表示设置渲染方式为不透明。
Tags{“Force No Shadow Casting”=“True”}
表示设置渲染方式为不产生阴影。
Tags{“Queue”=“XXX”}
表示物体按照索引值从小到大依次渲染到屏幕上,预定义的标签索引值Queue
LOD:细节层次,全名是Level of Detail,Unity内置Shader定义的一组LOD数值,决定了我们能用什么样的着色器。数值越大,细节越高,消耗越大。
Vertex Lit及其系列= 100
Decal,Reflective Vertex Lit = 150
Diffuse = 200
Diffuse Detail, Reflective Bumped Unlit, Reflective Bumped VertexLit = 250
Bumped, Specular = 300
Bumped Specular = 400
Parallax = 500
Parallax Specular = 600
Pass:通道,可以设置图形显示卡的各种状态,一般命名都是大写开头
Pass { [Name and Tags] [RenderSetup] [SetTexture]}
}
SubShader{
//子着色器2
}
FallBack "Diffuse" //备用着色器名称
Fallback 备用着色器,就是说如果当前硬件不支持任何子着色器运行,那么就用Fallback备用着色器来渲染,一般位于所有子着色器之后。Fallback语句的用法有两种:
Fallback“备用着色器名称”:使用给定名称的着色器。
Fallback Off:显式声明不使用备用着色器,当没有子着色器能够运行的时候也不会有任何警告。
Category分类,用来提供让子着色器继承的命令,例如关闭雾效、设置混合模式。
例如:
Category
{
Fog {Mode off} //关闭雾效
Blend One One //设置混合模式
SubShader { ...}
SubShader { ...}
}
}
*/
网友评论