大家好,关于《Unity Shader入门精要》学习笔记:Unity Shader基础知识概述很多朋友都还不太明白,今天小编就来为大家分享关于的知识,希望对各位有所帮助!
在Unity中,需要使用Material和Unity Shader来达到想要的效果。
一个常见的流程是:
1)创建材质
2)创建一个shader并将其分配给上一步创建的材质
3)为游戏对象分配材质
4) 调整着色器
二、4种Unity Shader模板
选择在Unity 中创建着色器。 Unity一共提供了4个模板供我们选择。
在Unity2018中创建shader1)标准表面着色器
包含标准光照模型的表面着色器模板
2)无光照着色器
没有光照的基本顶点/片段着色器
3)图像效果着色器
提供了实现屏幕后处理效果的基础模板(我还不太懂)
4)计算着色器
与常规渲染管线无关的计算
5)光线追踪着色器(2019年新增)
光线追踪
三、ShaderLab是什么
ShaderLabs是专门为Unity Shader服务而设计的语言
Unity中的所有Unity Shader都是使用ShaderLab编写的,ShaderLab使用一些嵌套在大括号内的语义(语法)来描述Unity Shader文件的结构。例如,Properties语句块定义了着色器的各种属性。
《UnityShader入门精要》 图
四、UnityShader的结构
1)名字
创建新的无光照着色器
着色器“未点亮/001”
{
////
}"Unlit/001",当材质选择Shder 时,
着色器将出现在ShaderUnlit001
2)Properties
Properties包含一系列属性,这些属性会出现在材质面板上(这是它的主要功能,真正的属性是在SubShader中定义的)
特性
{
_MainTex("纹理", 2D)="白色"{}
_name("显示名称",属性类型)=DefaultValue
//一般来说,unity着色器中的属性以下划线开头,不使用分号,需要默认值
}属性中支持的类型
属性类型表Int、float、range、color都很容易理解
Vector一般用于矩阵,但也可以用于传递数字(更经济)
2d、3d 和立方体稍微复杂一些,需要添加花括号。大括号最初是用来指定一些纹理属性的,但在Unity 5.0之后被删除。
Cube常用于反射盒和天空盒(cubemap)
3d 较少使用
3)SubShader(最重要)
一个UnityShader文件中可以有多个SubShader语义块
Unity 将扫描所有可用的SubShaders 并选择第一个可以运行的子着色器。如果都不起作用,则会选择fallback语义指定的UnityShader(为了适应老机器)
其中Tags和render渲染设置也可以单独写在pass中。它们写在里面和外面。看看外面。
SubShader中包含的定义通常如下:
子着色器
{
标签{}//可选
[渲染设置]//可选
通过{}//必需
}1.标签标签是键值对
它们主要用于告诉渲染引擎何时以及如何渲染对象。
标签结构:
标签{
"标签名称1"="值1"
"标签名称2"="值2"
}! Pass中的标签与SubShader中的标签不同!
SubShader标签类型:
//常用标签
标签
{
"渲染类型"="不透明"
//类别着色器,常用于着色器替换功能
"队列"="透明"
//控制渲染顺序,保证透明物体在不透明物体之后渲染
"禁用批处理"="真"
//是否使用批处理
"ForceNoShadowCasting"="真"
//是否投射阴影
"忽略投影仪"="真"
//是否受投影仪影响
"CanUseSpriteAtlas"="False"
//是否用于精灵
"预览类型"="平面"
//设置预览界面材质的形状
}2.渲染设置ShaderLab提供了一系列用于设置渲染状态的指令,例如是否进行深度测试。
以下是常用的渲染设置代码(在SubShader下)
子着色器
{
//////渲染设置
Cull off|Back|front//设置剔除模式:off|Back|Front
ZTest Less Greater|LEqual|GEqual|Equal|NotEqual|Always//设置深度测试
ZWrite On|Off//打开或关闭深度写入
Blend SrcFactor DstFactor//开启并设置混合模式
LOD 100//影响性能的设置
//////
}同样的,Render设置也可以写在Pass中
3.Pass语义块Pass语义块包含的语义如下:
经过
{
[姓名]
[标签]
[渲染设置]
[CGPROGRAM]//用CG语言编写的顶点和片段着色器
//其他
}通过定义名称,您可以将其他Unity Shader Pass 与ShaderLab 中的某些命令一起使用
定义名称:
命名"PassName" 使用Pass 命令:
!请注意,unity 会将pass 名称转换为大写,因此PassName 需要大写。
UsePass "Myshader/MYPASSNAME"Pass 也可以使用标签
但Pass中的标签与SubShader中的标签不同。
标签
{
"LightMode"="ForwardBase"//设置pass在渲染管线中的角色
"RequireOptions"="SoftVegetation"//设置渲染条件
}
4)Fallback
当所有SubShader 都不可用时调用后备。
写法如下:
后备“名称”
//或者
【《Unity Shader入门精要》学习笔记:Unity Shader基础知识概述】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
想学习 Unity 做游戏特效的,这本书挺好入手的
有13位网友表示赞同!
一直想了解 Shader 的工作原理,这本笔记正好能让我快速入门
有13位网友表示赞同!
Unity Shader 真的是个很强大工具,希望能通过笔记深入理解它
有13位网友表示赞同!
看到"精要"就知道这笔记重点突出,应该可以直接上手学习
有11位网友表示赞同!
之前看了些 Unity Shader 教程,不过总觉有些不够系统,这本笔记看起来不错
有16位网友表示赞同!
打算做一些游戏视觉效果的尝试,这门基础知識很重要啊!
有8位网友表示赞同!
Unity 开发离不开 Shader ,看这个标题感觉很有价值
有12位网友表示赞同!
分享一下学习资源总是好的,期待这本书的详细内容
有13位网友表示赞同!
对于想要提升 Unity 游戏画面的人来说,Shader 是必不可少的技巧!
有17位网友表示赞同!
学习 Shader 的难度挺高的,如果笔记能简化一些概念就更好了!
有9位网友表示赞同!
看这个标题像是可以快速掌握 Unity Shader 的基本原理的
有10位网友表示赞同!
入门级笔记应该是比较容易理解的,适合初学者参考
有11位网友表示赞同!
Unity 游戏开发越来越专业了,学习Shader 才能跟上时代
有16位网友表示赞同!
想要做一些更精美的游戏画面,Shader 是必不可少的!
有10位网友表示赞同!
希望笔记能够包含 Shader 的实例和应用场景,这样更直观!
有18位网友表示赞同!
这个标题很吸引人,期待能从笔记中学到更多有关 Shader 的知识!
有12位网友表示赞同!
学习 Shader 能够提升游戏开发的能力,真是太实用了!
有18位网友表示赞同!
最近打算开始玩 Unity , shader 是必须要学的,希望能找到一份好的笔记参考学习!
有12位网友表示赞同!
看标题感觉这本笔记应该是讲解基础概念为主!
有7位网友表示赞同!
Unity Shader 的应用场景很多,期待笔记能够涵盖更广泛的知识点!
有16位网友表示赞同!