初识 Shader
本篇介绍了在Unity中创建Shader的基本步骤,以及Shader的结构分析。
上篇连接(Shader基础篇)
0x00 概述
- 启动Unity并创建一个新项目: File>New Project
- 创建Shader:Project(也就是Asset栏中)>右键>creat>Shader>UnlitShader((顶点片元着色器),SurfaceShader(表面着色器)) >根据自己的需求编辑内容>保存。
- 创建材质并添加Shader:
- Project>右键>creat>Material
- 选中刚创建的Material在Inspector里选着对应的shader
将材质附加到游戏对象:
物体要带有三角网格
- 创建游戏物体:在Hierarchy>右键>GameObject>3D Object>任意选择。
- 将材质附加到物体上有一下几种方式:
- 1、在Hierarchy中选中物体,在Project中拖动material到Inspector面板中。
- 2、在Project中拖动material到Scene中的物体上(如果找不到物体,在Hierarchy中选中,然后在Scene中移动鼠标(不要单击)后按“F”键)。
整体步骤图(从左到右):
0x01 结构分析
一个Unity Shader的基本结构如下所示:
`
Shader "Unlit/MyShader"
{
Properties
{
//属性
_Name("Display Name",PropertyType)=DefaultValue
}
SubShader//子着色器
{
Tags { "RenderType"="Opaque" }
LOD 100
Pass
{
CGPROGRAM
....
ENDCG
}
}
}`
接下来逐个介绍一下。
Shader "Unlit/MyShader"{}
MyShader是创建时候自己起的名字。 Unlit是Inspector选择shader类型时候当前shader所在的文件夹(可以自行修改),如图:
Tags标签,是一个键值对它的键和值都是字符串类型,Tags{“TagName”=”Valuel”“TagName2”=”Value2”}如下表:
| 标签类型 |
说明 |
例子 |
| Queue |
控制渲染顺序,指定该物体属于哪一个渲染队列 |
Tags{“Queue”=”Transparent”} |
| RanderType |
对着色器进行分类 |
Tags=”RanderType=”Opaque” |
| DisableBatching |
通过该标签来直接证明是否对该SubShader使用批量处理 |
Tags=”DisableBatching”=”True” |
| ForceNoShadowCasting |
控制使用该SubShader的物体是否会投影 |
Tags=”ForceNoShadowCasting”=”True” |
| IgnoreProjector |
通常用于半透明物体 |
Tags=”IgnoreProjector”=”True” |
| CanUseSpriteAtlas |
当该SubShader是用于Sprites时,将该标签设为“false” |
Tags=”CanUseSpriteAtlas”=”True” |
| PreviewType |
指明材质面板将如何预览该材质,默认情况下,材质将显示为一个球体。但我们可以自行设置 |
Tags=”PreviewType”=”Plane” |
LOD: 这个数值决定了我们能用什么样的Shader
Pass:Cg的代码片段都写在里面。
整体如下所示:

0x02 摘要
本篇为Unity Shader篇的最基础篇。主要讲述如何去创建Shader,如何创建材质球并附加Shader到材质,如何创建游戏对象并将材质附加到游戏对象。Shader的结构分析,会持续更新,欢迎一起学习。随时欢迎各位大佬前来指教,提出意见!!!
|