Unity Shader Graph Ase三者分别有什么不一样的地方?

news2024/11/19 15:31:46

什么是Shader?

着色器 (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 版本。

三、工作原理及优劣

Amplify Shader Editor

基于单个静态模板生成 .shader 文件,将节点信息以注释的形式存储于文件末尾

优势:

  • 官方模板可定制性强,可视化界面几乎可以覆盖 URP 的主要功能
  • 模板修改简单直观,可轻松实现诸如多 pass 功能
  • 生成明文代码易于调试
  • 最终文件不需要依赖插件本体
  • 支持管线差异化计算
  • 不依赖管线版本
  • 官方更新频率高

劣势:

  • 修改模板后需要重载节点编辑界面
  • 切换模板有可能需要重连节点
  • 原版模板生成的 shader 无法跨管线运行
  • HDRP 支持度严重不够
  • 官方模板对管线特性支持不够标准

模板位置:

AmplifyShaderEditor\Plugins\Editor\Templates

Shader Graph

基于 C#,但生成 .shadergraph 格式的中间文件用于存储节点信息,动态编译成 shader 使用

优势:

  • 原生支持跨管线
  • 基于 C# 的模板生成可以进行更高级的定制
  • 定制管线时需要针对模板的修改可以自动应用到所有 SG shader 中,可维护性非常高

劣势:

  • 跨管线时面板参数不统一,不支持管线差异化计算
  • 最终文件是黑盒,无法立即切换成代码,调试麻烦
  • 官方更新频率非常低,受引擎及管线版本限制且内容不痛不痒
  • 2021 以前不支持顶点计算
  • 自定义函数不支持 inout,变量名必须带精度后缀
  • 仅支持 4 套 UV
  • URP 不支持 Tessellation

模板位置:

HDRP

com.unity. render-pipelines.high-definition\Editor\Material\ShaderGraph

URP

com.unity.render-pipelines.universal\Editor\ShaderGraph

Shader Forge

优点:

  • 可视化做好了很多shader工具,只要图形化拖入过来就可以了
  • 可以快速看到shader效果

缺点:

  • 对于初学者而言,shade graph 此类图像化工具并不能降低shader的开发难度
  • Shader graph是自动生成shader代码,生成的shader代码可能性能并不好
  • 节点过多时可读性变差,项目使用中,多种效果共同部分无法复用
  • 由于是美术使用居多,通常易出现冗余指令和低效执行代码

四、总结与选择

  1. ASE 生成的是明文shader文件,可以自行修改调整部分不合理的生成。 Shader Graph也能看到他生成的shader,但是设计上unity尽量希望黑盒,不想让你看到。
  2. ASE 可以几条管线互相切,Shader Graph只能urp下使用。
  3. ASE兼容所有Shader Graph的节点和参数。

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可视化是开车,手写代码是走路,要说速度快肯定是开车;但说哪个起到运动作用还得是走路的方式。

无论选择哪一方,都务必掌握基本的代码能力,连连看只能提高效率,黑盒永远不可信。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/641286.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习:基于AdaBoost算法模型对信用卡是否违约进行识别

系列文章目录 作者:i阿极 作者简介:数据分析领域优质创作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒…

低代码开发重要工具:jvs-form(表单引擎)2.1.7功能清单及新增功能介绍

jvs-form 2.1.7 版本功能清单 在低代码开发平台中,表单是用于收集和编辑数据的页面。它通常用于创建、更新或查看单个记录的详细信息。 jvs-form是jvs快速开发平台的8大引擎的其中之一,它的特点: 与动态模型联动,支持动态的调整…

Python心经(6)

目录 callable super type()获取对应类型 isinstance判断对象是否是某个类或者子类的实例 issubclass,判断对象是不是类的子孙类 python3的异常处理 反射: 心经第三节和第五节都写了些面向对象的,这一节补充一…

黑苹果 或者 Mac 因 mds资源占用过高,导致频繁死机

开机后不久,风扇狂转,温度升高,然后死机,关机。 1. 使用 “Apple 诊断”测试 Mac 先看看硬件层面是否有问题。 使用“Apple 诊断”测试 Mac。 这款 Mac 的处理器是 Intel ,开启 Mac,然后在 Mac 启动时立…

java的File

一、File (一)新建File对象 File对象表示一个路径,可以是文件路径,也可以是文件夹路径;这个路径可以是存在的,也可以是不存在的。 File类常见的构造方法: 例如: 注意:因…

母线差动保护(一)

与其他的主设备保护相比,母线保护的要求更为苛刻。当变电站母线发生故障时,如不及时切除故障,将会损坏众多电力设备,破坏系统的稳定性,甚至导致电力系统瓦解。如果母线保护拒动,也会造成大面积的停电。因此…

微服务外网部署灵活配置方案(不改代码适配apm和日志中心)

1.综述 之前微服务在进行部署时,有关日志中心和apm相关的配置都是放在代码相应的配置文件中的。 日志中心: /src/main/resources/logback-spring.xml /PIPELINE/docker/flume/hosts apm: /PIPELINE/docker/apm/apm_agent_dev.config /PIPELINE/docker/apm/ap…

TensorFlowLite 声音识别

开发 添加tensorflow的核心依赖 implementation org.tensorflow:tensorflow-lite-task-audio:0.4.0将训练模型放到main/assets文件夹下 在build.gradle中配置 因为打包时tflite文件可能会被压缩,所以需要配置如下 buildFeatures {viewBinding true}androidResources {noComp…

2023 开放原子全球开源峰会高峰论坛成功举办

6 月 11 日,以 “开源赋能,普惠未来” 为主题的 2023 开放原子全球开源峰会高峰论坛在北京成功举办。工业和信息化部相关司局、北京市经济和信息化局、北京经济技术开发区管理委员会相关领导出席并致辞。 北京市经济和信息化局副局长王磊在致辞中表示&am…

4、5类LSA案例

拓扑 需求 实现PC1和PC3互联互通 配置步骤 1)配置接口信息 - 配置PC的IP地址 - 配置路由器的接口 2)配置OSPF单区域 - 创建ospf进程,定义router-id - 指定相应区域 - 宣告网段进入ospf 3)配置OSPF多区域 4) R6配置去往PC3的静…

Matlab论文插图绘制模板第103期—分组散点图

在之前的文章中,分享了Matlab散点图的绘制模板: 进一步,再来分享一下分组散点图的绘制模板。 先来看一下成品效果: 特别提示:本期内容『数据代码』已上传资源群中,加群的朋友请自行下载。有需要的朋友可以…

【裸机开发】按键输入实验

目录 一、硬件原理分析 二、寄存器分析 1、时钟源初始化 2、设置 IO 复用 3、初始化 IO 复用引脚(设置电气属性) 4、初始化GPIO 三、汇编代码(start.s) 四、公共头文件(imx6u.h) 四、C 代码编写 …

【6.13 代随_56day】 两个字符串的删除操作、编辑距离

两个字符串的删除操作、编辑距离 两个字符串的删除操作1.方法图解步骤代码 编辑距离1.方法图解步骤代码 两个字符串的删除操作 力扣连接:583. 两个字符串的删除操作(中等) 1.方法 确定递推公式 当word1[i - 1] 与 word2[j - 1]相同的时候 …

STL之list

目录 list模拟实现一. list的基本框架二. list_node类1.构造函数2.其他函数 三. 迭代器(iterator)1.结构2. 构造函数3. 运算符重载operator-> 四.反向迭代器1.结构2.构造函数3.运算符重载 五. list常用方法及实现1. 默认构造函数a.empty_init 2.迭代器…

8. WebGPU 平移变换

我们将开始编写与顶点缓冲区文章中的示例类似的代码,但这次将绘制单个 F 而不是一堆圆,并使用索引缓冲区来保持数据更小。 让我们在像素空间而不是裁剪空间中工作,就像 Canvas 2D API 我们将制作一个 F,将从 6 个三角形构建它 …

啥?PCB拼版对SMT组装有影响!

PCB为什么要拼版? 拼版主要是为了满足生产的需求,有些PCB板太小,不满足做夹具的要求,所以需要拼在一起进行生产。 拼版也可以提高SMT贴片的焊接效率,如只需要过一次SMT,即可完成多块PCB的焊接。 同时也可…

你知道ai绘画工具都有哪些吗?ai画图的软件分享给你

大家好!你有没有想过,如果我们能有一种神奇的工具,可以帮助我们实现想象中的绘画作品,该有多好呢?现在,随着人工智能的发展,我们可以借助ai绘画工具来探索艺术的奇妙世界了!不过你是…

又双叕搞事?我拿着这份“满级”的JVM笔记,拼进了阿里

JVM JVM,一个熟悉又陌生的名词,从认识Java的第一天起,我们就会听到这个名字,在参加工作的前一两年,面试的时候还会经常被问到JDK,JRE,JVM这三者的区别。 JVM(Java Virtual Machine…

汽车IVI中控开发中视频相关的一些知识点

前言: 视频最早的渊源来源于电视。做汽车仪表/IVI中控,尤其是IVI信息娱乐部分,都要涉及到视频这个知识点,各种概念很多,首先需要明确一条主线,那就是SDTV标清电视->HDTV高清电视->UHDTV超高清电视的一个发展脉络,BT601/656是SDTV标清电视接口,BT1120则对应HDTV高…

ShardingSphere

一、基本概念 1、什么是ShardingSphere 1、一套开源的分布式数据库中间件解决方案 2、有三个产品:Sharding-JDBC和Sharding-Proxy、Sharding-Sidecar 3、定位为关系型数据库中间件,合理在分布式环境下使用关系型数据库操作 2、分库分表 1什么是分库…