Unity可视化着色器编辑器 Amplify Shader Editor 入门篇


溶解效果(Dissolve Burn Fx)
三维映射(Triplanar Mapping)
半透明(Translucency)
视差映射(Parallax Mapping)
抖动(Dithering)
Fake Interior
当然,Amplify Shader Editor 还包含了更多效果等你挖掘。
下面就让我们依次介绍 Amplify Shader Editor 的使用过程与细节介绍,包含安装流程、基本操作、编辑器介面、材质模式与著色器模式、节点属性介面以及 ASE 著色器 Hello World。
安装流程
安装 Amplify Shader Editor 的步骤相当简单,只需要三个步骤就可以完成。
步骤 1
开启 Unity 专案,双击 Amplify Shader Editor.unitypackage 将工具汇入专案中。
或是透过点击 Assets > Import Package > Custom Package… ,并选择 Amplify Shader Editor.unitypackage 进行汇入。
步骤 2
汇入进度条完成后,在 Import Unity Package 画面中选择所有资源并点击 Import 按钮,将所有资源汇入专案。
步骤 3
最后为了更好地理解,说明一下 Amplify Shader Editor 目录结构:
从专案目录中可以发现,Amplify Shader Editor 事先提供了许多著色器范例,每个范例都包含了单独的场景(Scene)做效果展示,开发者可以根据需求来直接使用。
基本操作
开启 Amplify Shader Editor 编辑器介面
依次点选 Window > Amplify Shader Editor > Open Canvas,或是双击 Amplify Shader Editor(以下简称 ASE)材质或著色器自动打开编辑器介面。









发射器(Emission)的灰烬颜色(Ember Color Tint)节点的节点属性
另外,可以透过点击节点属性介面右上角的 “-” 按钮来将介面最小化,点击方块按钮将介面恢复。
编辑器顶端区域
保存按钮:保存/更新著色器数据。若是修改著色器名称,需要点击这个按钮后才会正式生效。
自动保存按钮:开启时自动保存著色器数据。
清除按钮:删除所有无效节点。
文字编辑按钮:使用文字编辑器开启著色器文件。
回归按钮:选中并定位主节点
定位按钮:定位选中的节点。如果没有选择节点,将会定位出节点集合。
也可以透过双击滑鼠左键或键盘 F 键,来进行编辑器介面的自动缩放。
节点选择介面
节点选择介面位于编辑器右侧,是一个可以搜寻节点类型的清单,可以找到所需要的节点类型,并直接拖放到编辑器中。和节点属性介面一样,可以透过点击 “-” 按钮来将介面最小化。
此外也可以在编辑器中点击滑鼠右键,开启节点选择介面。
使用快捷键建立节点
编辑器中还有一个相当重要的功能,就是可以透过按住快捷键后单击编辑器上的任意位置来建立新节点。在节点选择介面中,一般会在节点名称右边的 [] 中显示快捷键。例如:数字键 1 为浮点数(Float)节点,数字键 5 为颜色(Color)节点。
ASE 数据处理流程
在上图中我们可以发现,ASE 的数据处理流程是由左至右的,输入端口 > 数据处理 > 输出端口。只有直接或间接连接到主节点的节点才会运作,并用于生成著色器代码。若节点中包含了未连接的输入端口,ASE 会在处理流程中使用内部数据,而这些内部数据可以透过节点属性介面来进行编辑。
可视化编辑重点
- 选择节点:可以透过点击滑鼠左键或透过左键拖动范围来选取节点。此外,可以按住 Shift 键并点击节点来做複选节点的动作。也可以使用 CTRL/CMD + A 来进行全选功能。要取消选取内容时,则可以透过点击画面的空白处来进行取消。选取节点并按住左键拖移则可以移动所选节点。
- 删除节点:选取节点并点击 Delete 键则可以将节点删除。
- 建立连接:在端口点击滑鼠左键并进行拖曳就可以将输入端口与输出端口进行连接。也可以点击完整连接后拖曳到另一个端口形成新的连接。此外,将连接拖曳到画布空白处则会自动弹出节点选择介面,可以快速的选择并建立需要的节点。
- 删除连接:透过按住 Alt 键并点击节点端口,或是将端口连接拖动到画布空白处后点击滑鼠左键,就可以删除连接。连接高亮显示时,表示连接有由左至右的完整数据流。
- 端口:输出端口可以连接複数个输入端口,但是输入端口只能进行单一连接。此外,连接会自动与附近端口进行匹配,在操作上更为直觉。
- 可视范围:按住滑鼠右键或中键可以移动整个画布的可视范围。若是选中的节点离开了可视范围后,画布将会自动滚动。另外还可以透过滑鼠滚轮放大或缩小可视范围,会根据画布上的节点进行缩放。
- 两侧介面:当 ASE 编辑介面的宽度小于 750 px 时,节点属性介面和节点选择介面会自动最小化。
- 材质模式与著色器模式
ASE 编辑介面包含两种编辑模式,材质模式与著色器模式,主要取决于透过什麽方式读取著色器文件。另外可以藉由画布的外轮廓颜色来判断编辑模式,蓝色代表材质模式,绿色代表著色器模式。
在著色器中设置的数值通常称为预设值(Default Value)。对任何预设值所做的修改都会自动影响最后的结果。当同时编辑材质和著色器时,需要记得注意哪些属性有进行变动。
材质预设值与著色器预设值不同,可以将材质理解成著色器实例,每个著色器实例的数据都是唯一的,但使用相同的预设值进行建立。材质参数只有在材质模式时才会显示。在表示变量(颜色 Color、浮点数 Float、整数 Int、向量 Vector、矩阵 Matrix)的节点中有一个 Parameter Type 下拉选单,可以设置为 Property,以便在材质模式下组合出无限数量的变化。
如上图所示,可以在相同的 ASE 著色器之间进行参数的複製与覆盖。也可以透过 Open in Shader Editor 按钮快速打开 Amplify Shader Editor 来编辑著色器与材质。
除了使用 Open in Shader Editor 按钮以外,还可以选择 Open in Text Editor 按钮,使用文字编辑器来修改著色器。
节点属性介面
其中大部分内容参考 Unity 著色器官方文件:
https://docs.unity3d.com/Manual/SL-Reference.html
主属性(Main Properties)
- 著色器类型(Shader Type):显示当前所使用的著色器类型。
- 著色器名称(Shader Name):可编辑文字框,用来定义著色器的名称与路径,使用正斜线(/)来区分其类别与名称,例如 UserSamples/EnvironmentGradient。需要注意,著色器名称与档案名称不同,档案名称需要额外设定。
- 光照模型(Light Model):设定当前所使用的光照模型。ASE 提供了标准(Standard)、标准高光(Standard Specular)、Lambert 以及 Blinn Phong 光照模型。
- 著色器模型(Shader Model):在编写表面著色器或一般著色器时,HLSL 可以编译成不同的著色器模型。越高的著色器模型可以完成更多功能,但可能会使著色器在一些较老旧的 GPU 或平台上无法使用。
- 精度(Percision):定义著色器的计算精度,使用低精度类型可以获得额外的效能提升,预设为 Float 精度。
- 剔除模式(Cull Mode):定义著色器的剔除模式。提供了剔除正面(Front)、剔除背面(Back)以及剔除禁用(Off),预设为剔除背面模式。
- 渲染路径(Render Path):定义著色器所使用的渲染路径模式。包含正向渲染(Forward)、延迟渲染(Defferred)以及全部渲染(All),预设为全部渲染模式。
- 投射阴影(Cast Shadows):定义著色器是否支持投射阴影。
- 接收阴影(Receive Shadows):定义著色器是否支持接受阴影。
- 队列索引(Queue Index):渲染顺序偏移值。
- 自定义编辑器(Custom Editor):允许开发者使用自定义的 ASE 编辑器。
- 混合模式(Blend Mode)
- 混合模式(Blend Mode):自动调整混合模式参数,包含不透明(Opaque)、遮罩(Masked)、透明(Transparent)、Alpha Transparent 以及自定义(Custom)。
- 渲染类型(Render Type):定义著色器的渲染类型,包含不透明(Opaque)、透明(Transparent)、透明剪裁(Transparent Cutout)、背景(Background)、覆盖(Overlay)、不透明树(Tree Opaque)、透明剪裁树(Tree Transparent Cutout)、布告板树(Tree Billboard)、草(Grass) 以及布告板草(Grass Billboard)。
- 渲染顺序(Render Queue):调整渲染顺序,从数值越小的几何体开始进行渲染。选项包含背景(Background)、几何(Geometry)、Alpha 测试(Alpha Test)、透明(Trasparent)和覆盖(Overlay)。
- 遮罩剔除数值(Mask Clip Value):须与不透明度 alpha 比较,若不透明度小于遮罩剔除数值,则捨弃该像素。
- 混合 RGB 和混合 Alpha(Blend RGB、Blend Alpha):当像素被写入屏幕时,会透过何种方式混合。ASE 提供了自定义(Custom)、Alpha 混合(Alpha Blend)、预乘(Premultiplied)、加法(Additive)、Soft Additive、乘法(Multiplicative)和两倍乘法(2x Multiplicative)模式。
- 混合系数(Blend Factor)(Blend Src、Blend Dst):一般分为来源系数与目标系数,透过系数间的运算来得到最后结果,若是 BlendOp 使用逻辑运算,则会忽略混合系数。
- 混合操作 RGB 和混合操作 Alpha(Blend Op RGB、Blend Op Alpha):包含添加(Add)、子(Sub)、修改子(Rev Sub)、最小(Min)以及最大(Max)。
- 颜色遮罩(Color Mask):设置颜色通道。
- 模板缓冲(Stencil Buffer)
模板缓衝器可以用来作为模板测试使用,用于保存或是抛弃像素。通常每个像素有 8 个位元,进行绘製时会调用该数值来进行模板测试,已决定是否在进入著色器前将像素计算捨弃。
参考值(Reference):用来与模板缓衝区比较的数值,范围是 0 ~ 255 整数。
读取遮罩值(Read Mask):读取模板缓衝区时使用,默认值为 255,范围是 0 ~ 255 整数。
写入遮罩值(Write Mask):写入模板缓衝区时使用,默认值为 255,范围是 0 ~ 255 整数。
比较方法(Comparison):将参考值与模板缓衝区的当前内容进行比较的方法,包含大于(Greater)、大于等于(Greater or Equal)、小于(Less)、小于等于(Less or Equal)、等于(Equal)、不等于(Not Equal)、总是(Always)及从不(Never),预设为 Always。
测试通过(Pass):当模板测试通过时所进行的处理,默认值为 keep。
测试失败(Fail):当模板测试失败时所进行的处理,默认值为 keep。
ZFail:当模板测试通过但深度测试失败时所进行的处理,默认为 keep。
曲面细分(Tessellation)
- 冯式曲面细分模式(Phong):修改曲面细分位置,使曲面细分稍微跟随法线做网格生成,预设为 Off。
- 类型(Type):曲面细分类型,包含基于位置(Distance-based)、固定(Fixed)、边长(Edge Length)和 Edge Length Cull。
- 曲面细分系数(Tess):范围是 1 ~ 32。
- 最小值(Min):最小细分距离。
- 最大值(Max):最大细分距离。
- 深度(Depth)
- ZWrite 模式(ZWrite Mode):是否将此像素写入深度缓衝区,预设为 On。若是绘製对象为不透明物件,则开启此模式。若是绘製对象为透明物件,则关闭此模式。
- ZTest 模式(ZTest Mode):如何进行深度测试,包含小于(Less)、等于(Equal)、大于(Greater)、小于等于(LEqual)、大于等于(GEqual)、不等于(NotEqual)和随时(Always),预设值为 LEqual。
- 偏移(Offset):允许使用两个参数来指定深度偏移,系数与单位。
- 系数(Factor):相对于多边形的 X 或 Y,缩放最大 Z 斜率。
- 单位(Units):单位缩放最小可分辨深度缓衝区值。
- 渲染平台(Rendering Platforms)
- 定义支持平台,预设勾选全部平台。
可用变量(Available Properties)
显示在节点属性介面中设置为属性(Property)的变量,可以透过拖动来调整它们的位置。
ASE 著色器 Hello World
1. 建立 ASE 著色器
依次点选 Create > Shader > Amplify Surface Shader 建立 ASE 著色器,重新命名为 MyShader。
2. 建立 ASE 材质
依次点选 Create > Material 建立 ASE 材质,重新命名为 MyMaterial。
3. 开启 ASE 著色器编辑模式
点选 MyShader 后,在 Inspector 面板中点选 Open in Shader Editor 开启 ASE 编辑器。将著色器名称修改为 MyCollection/Shader1 并保存,最后将 MyShader 著色器与 MyMaterial 材质建立关联。
4. 修改光照模型
将光照模型修改为 Standard Specular。
5. 新增 Lerp(线性插值)节点
在画布中点选滑鼠右键开启节点选单,搜寻 Lerp 并点选新增 Lerp 节点,将 Lerp 输出节点连接到主节点的 Albedo 输入节点。
6. 新增 Color(颜色)节点
搜寻并新增两个 Color 节点。
7. 设定 Color 节点
将两个 Color 节点连接到 Lerp 节点输入端口。并将 A 节点颜色设为灰色,B 节点颜色设为橘色。
8. 建立不透明度 Float(浮点数)节点
搜寻并建立 Float 节点,并命名为 Color Mix。将其连接到 Lerp 节点的 Alpha 输入端口,最小值设定为 0,最大值设定为 1,并将参数类型设定为 Property。
9. 建立平滑、高光 Float 节点
建立 Float 节点并重新命名为 Smoothness Level。将其连接到主节点的 Smoothnes(平滑)输入端口,最小值设为 0,最大值设为 1,并将参数类型设定为 Property。
建立另一个 Float 节点并重新命名为 Specular Level。将其连接到主节点的 Speculer(高光)输入端口,最小值设为 0,最大值设为 1,并将参数类型设定为 Property。
10. 设定法线贴图
最后我们需要找一张法线贴图,将贴图直接拖曳到画布中并连接到主节点的 Normal(法线)输入端口。因为这边使用的法线贴图具有金属拉丝质感,所以可以看到著色器会呈现出金属质感。
到这边,我们成功的完成了第一个 ASE 著色器,不要忘记点击更新按钮来定期保存著色器数据,确保你的工作不会遗失。