Unity之ASE 简介

Posted PassionY

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity之ASE 简介相关的知识,希望对你有一定的参考价值。

一.前言

说到Unity的shader,和我们熟悉的C,C++,C#,java等语言不同,C++等语言是属于CPU编程,语法几乎和我们的英语语法很接近了,理解和学习起来很方便。但是Shader使用的是HLSL,GLSL或者CG语言,他们是属于GPU编程的,很多语法结构并不符合我们传统的计算机语言的认知,初学者可能感觉很蹩脚。事实上,哪怕是很多中高级开发者,编写shader也不是很顺手,需要边写,边查阅资料。

因此应运而生了shader的可视化编辑器,其实可视化编辑器最早在虚幻引擎unreal中就得到了应用,包括蓝图,材质编辑器,行为树编辑器等。而Unity引擎这边,也出现了对应的shader编辑器:ShaderForge,AmplifyShaderEditor和ShaderGraph。虽然功能各有优劣,但是节省了我们大量的手写shader的时间,很值得我们去学习。

接下来,我们就开始untiy-shader编辑器的学习。

二.工作原理及优劣

1.Amplify Shader Editor

简称ASE,和shaderforge原理和操作基本一致,都是根据unreal的材质编辑器的原理开发的。但是因为出现稍晚一些,大概到2017年,所以用户解除较晚,一致等到shaderforge停止更新,才开始真正普及。好在原理和shaderforge一样,所以熟悉起来并不麻烦。

原理:基于单个静态模板生成的.shader文件,将节点信息以

Unity插件ASE的之Template

为什么需要ASE模板

以开发一套角色Shader的过程为例:

  1. 开发基础版本, 满足基本功能
  2. 开发角色溶解, 褪色等基于基础版本Shader
  3. 基础版本迭代改代码
  4. 基于基础版本的Shader跟着迭代改代码
  5. 基础版本再次迭代改代码
  6. 基于基础版本的Shader再次跟着迭代改代码
    .......

以上过程可见维护成本之高, 为了降低维护难度, Unity Standard Shader的办法是把代码 "共用" 的部分拆分到 ".cginc"文件中, 也就是的Shaderlab的头文件.然而这么干的话会导致代码可读性很差, 手工维护代码也难免出错.

ASE则提供了模板功能来实现方便维护的需求.ASE允许用户从已存在的Shader用作基础或模板创建新的Shader. 模板是常规Unity Shader,只是在关键点上放置了特殊的ASE标记,这些标记写为注释,因此它们不会影响着色器编译及其默认行为。

同样已开发一套角色Shader的过程为例, ASE工作流是这样的:

  1. 开发基础版本, 满足基本功能
  2. 基础版本转换为ASE模板
  3. 使用模板在ASE中制作角色溶解,褪色等版本的Shader
  4. 模板迭代改代码
  5. 溶解,褪色等版本的Shader重新编译
    ......

上下对比,ASE主要有以下优势:

  • ASE是可视化编程,自动编译成Shader代码,开发效率高
  • 复杂代码确实手写代码更有优势, 如角色光照部分的代码可以的作为的模板中不对外暴露修改的部分, 所以在ASE中制作溶解褪色效果时,节点连接变得极为简洁
  • 修改模板后,基于模板的shader只要重新编译即可

以上可知, ASE可极大减少 "整套的Shader" 的开发维护成本.

最后附上 Amplify Shader Editor Template文档



以上是关于Unity之ASE 简介的主要内容,如果未能解决你的问题,请参考以下文章

Unity插件ASE的之Template

记一次Amplify Shader Editor入门_Unity官方Shader基础属性说明之不得不说ZWrite,Ztest

Unity Shaders学习笔记之表面着色器

Unity之ASE 编辑器详解

Unity Shaders学习笔记之法线贴图

Unity Shaders学习笔记之为创建自定义慢反射光照模型