着色器 (Shader) 应用于计算机图形学领域,指一组供计算机图形资源在执行渲染任务的时使用的指令,用于计算机图形的颜色或明暗。但近来,它也能用于处理一些特殊的效果,或者视频后处理。通俗的说,着色器告诉电脑如何用特有的一种方法去描绘物体。作为渲染器的一部分,负责计算目标的颜色,主要图形软件库有OpenGL和Direct3D。
Unity的shader,和我们熟悉的C、C++、C#、java等语言不同,C++等语言是属于CPU编程。Shader使用的是HLSL,GLSL或CG语言,这些shader语言属于GPU编程,很多语法结构并不符合我们传统的计算机语言的认知,初学者可能感觉很蹩脚。事实上,哪怕是很多中高级开发者,编写shader也不是很顺手,需要边写,边查阅资料。因此应运而生了shader的可视化编辑器,其实可视化编辑器最早在虚幻引擎unreal中就得到了应用,包括蓝图,材质编辑器,行为树编辑器等。而Unity引擎也出现了对应的shader编辑器: Shader Forge , Amplify Shader Editor 和 Shader Graph 。虽然功能各有优劣,但是节省了我们大量的手写shader的时间,很值得我们去学习。
Shader Graph :就是着色器图。在有这项技术之前,开发者只能通过一行行手动敲代码来实现着色器,而且 Shader 的语言与 C# 完全是不一样的,这在无形中提高了在 Unity 中构建着色器的门槛。在有了 Shader Graph 之后,开发者可以跳过代码进行可视化构建,还能通过节点实时调适图片效果,这为美术师和其他团队成员打开了使用着色器的大门。
获取途径:Amplify Shader Editor | 可视化脚本 | Unity Asset Store
Shader Forge :Shader Forge是适用于Unity基于节点的着色器编辑器,可以轻松创建自己的着色器,而不需要写代码!
官方:Shader Forge
官方文档:https://www.neatcorporation.com/Projects/ShaderForge/Media/ShaderForge_QuickStart-sc.pdf
其他介绍:ShaderForge介绍_哔哩哔哩_bilibili
Amplify Shader Editor :Unity 官方所推荐的可视化着色器编辑器,提供了一个对 Unity 开发者相当友善的开发环境,可以与 Unity 编辑器和著色器完美的融合。透过这个工具,开发者能够轻鬆实现 AAA 级质量的作品,并且能够相当灵活地应用在任何 Unity 开发专案中,进而缩短製作团队在美术呈现画面上的开发时间。
Shader Graph在 Github 上的最早开发日期可以追溯到 2013 年 4 月 30 日,官方论坛的发布日期是 2014 年 1 月 11 日,仅支持 Built-in 管线。第一个正式版为 2018 年 5 月 8 日(版本 1.1.5)。现已开源且基本停止开发。
Amplify Shader Editor在 Asset store 中显示第一个提交版本为 2016 年 9 月 12 日,2022 年 9 月 15 日作者 Diogo Teixeira 在官方 Discord 频道宣布,ASE 已从团队开发转为独立开发,并开始计划 2.0 版本。
基于单个静态模板生成 .shader 文件,将节点信息以注释的形式存储于文件末尾
优势:
劣势:
模板位置:
AmplifyShaderEditor\Plugins\Editor\Templates
基于 C#,但生成 .shadergraph 格式的中间文件用于存储节点信息,动态编译成 shader 使用
优势:
劣势:
模板位置:
HDRP
com.unity. render-pipelines.high-definition\Editor\Material\ShaderGraph
URP
com.unity.render-pipelines.universal\Editor\ShaderGraph
优点:
缺点:
Shader Graph属于unity内置的着色器可视化的工具,因此会更加的简便。并且有个说法叫既然官方有自己的shader可视化编辑器,那当然是用官方自己的了可视化编辑器了。
Shader Forge 和 Amplify Shader Editor都是从资源商店就能获取的unity 资源包,且不是免费的。这两者的功能都比Shader Graph多,体现在节点更多,因此可自定义的东西也会更加丰富。但目前Shader Forge已经停止更新包内容了。
如果目前要在两种中选一个的话,更加推荐使用Amplify Shader Editor。Shader Forge 和 ASE这两个都能通过节点连接的方式自定义光照模型,但Shader Graph就没有能自定义光照模型,因为Shader Graph中没有光照相关的节点,并且Shader Graph只有两种一种PBR和无光照两种shader模板。
unity shader可视化工具在实现效果的时候是更加的快捷方便,很容易出效果。但是节点过多也会导致项目的性能变差,因此使用unity shader可视化工具来快速实现效果还是可以的,在实际项目中更加推荐手写shader代码。如果不了解shader底层基础知识,即使有节点式的shader可视化工具也是不会进行shader开发的。这就好比有shader可视化是开车,手写代码是走路,要说速度快肯定是开车;但说哪个起到运动作用还得是走路的方式。
无论选择哪一方,都务必掌握基本的代码能力,连连看只能提高效率,黑盒永远不可信。