UnityShader基础
材质和UnityShader
UnityShader定义了渲染所需的各种代码、属性和指令,而材质则允许我们调节这些属性,并将其最终赋给相应的模型。
Unity中的材质需要结合一个GameObject的Mesh或者Partical Systems组件来工作。
Unity中的Shader
一个单独的Unity Shader 是无法发挥任何作用的,它必须和材质结合起来。
Standard Surface Shader会产生一个包含了标准光照模型的表面着色器模板
Unlit Shader 不包含光照的基本的顶点/片元着色器
Image Effect Shader 屏幕后处理效果
Comput Shader 利用GPU的并行性来进行一些与常规渲染流水线无关的计算。
导入面板
Default maps 默认纹理
Surface Shader 是否是一个表面着色器
Fixed Function Shader 是否是一个固定函数着色器
Case Shadows 是否投射阴影
Render queue 渲染队列
Disable batching 是否关闭批处理
Properties 属性列表
UnityShader的基础:ShaderLab
所有的Unity Shader都是使用ShaderLab来编写
是一种说明性语言。
它使用一些嵌套在花括号内部的语义来描述一个UnityShader的文件结构
包含了许多渲染所需要的数据。
UnityShader的结构
Shader名字
Shader "Custom/MyShader"{}
Properties
包含一系列属性
这些属性为了在材质面板中能够方便地调整各种材质属性。
属性类型 | 默认值地定义语法 | 例子 |
---|---|---|
Int | number | _Int("Int",Int) = 2 |
Float | number | _Float("Float",Float)=1.5 |
Range(min,max) | number | _Range("Range",Range(0,5))=3 |
Color | (1,1,1,1) | _Color("Color",Color) = (1,1,1,1) |
Vector | (1,1,1,1) | _Vector("Vector",Vector)=(2,3,4,1) |
2D | ""{} | _2D("2D",2D)=""{} |
Cube | ""{} | _Cube("Cube",Cube)=""{} |
3D | ""{} | _3D("3D",3D)="black"{} |
为了在Shader中访问到这些属性,我们需要在CG代码片中定义和这些属性类型相匹配地变量。
SubShader
SubShader{
[Tages]
[RenderSetup]
Pass{}
}
每个Pass定义了一次完整的渲染流程
状态和标签同样可以在Pass声明。
不同的是,SubShader中的一些标签设置是特定的。
如果在SubShader进行了这些设置,那么将会用于所有的Pass
状态设置
Cull 、ZTest、ZWrite、Blend
SubShader的标签
Queue 、
RenderType、
DisableBatching、
ForceNoShadowCasting(控制该SubShader的物体是否会投射阴影)、IgnoreProjector(被设置为True,物体将不会受Projector的影响)、CanUseSpriteAtlas、
PreviewType
上述标签仅可以在SubShader中声明,不可在Pass块中声明。
Pass语义块
Pass{
[Name]
[Tags]
[RenderSetup]
}
Name
UserPass “NAME”
在使用UsePass命令时必须使用大写形式的名字
渲染状态设置和SubShader一样
Pass的标签
LightMode
RequireOptions
Fallback
Fallback “name”
Fallback off
Fallback 还会影响阴影的投射。
其他pass
UserPass 使用该命令来复用其他UnityShader中的Pass
GrabPass 该pass负责抓取屏幕并将结构存储在一张纹理中,以用于后续的Pass处理
Unity Shader的形式
尽管UnityShader可以做的事情非常多,但其最重要的任务还是指定各种着色器所需的代码。
这些着色器代码可以写在SubShader语义块中,也可以写在Pass语义块中。
表面着色器(Surface Shader)
顶点片元着色器
固定函数着色器
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!