UUG杭州站 | 团结引擎Shader Graph新特性介绍

在2025年4月12日的Unity User Group杭州站活动中,Unity中国资深技术美术张秋林带来演讲《团结引擎Shader Graph新特性介绍》。

大家好,我给大家介绍一下Shader Graph一些新的feature。

为什么持续更新Shader Graph

我们为什么要不断地更新Shader Graph,以及鼓励大家在项目中使用Shader Graph?

首先是因为Shader Graph可以大大降低着色器的开发门槛,让美术师、UI设计师等非编程人员参与着色器的开发;其次,它可以帮助开发者减掉多平台适配成本,提高整个项目开发效率,缩短整个项目的开发周期。而且因为它是可视化的操作界面,可以让使用者更方便地进行调试和修改。

所以在这次更新中,我们主要针对Shader Graph的易用性、可伸缩性进行了更新和迭代,让我们的Shader Graph对于用户来说,使用起来会变得更加直观和友好。同时我们也针对不同项目,让使用者可以有更高的自由度进行优化,以及更加便捷地创作一些复杂的材质效果。

我们这次基于新的团结引擎版本,在URP中做了汽车模型的DEMO,里面大量使用了新的Shader Graph功能。

这个demo已经随团结引擎的新版本开源发布,感兴趣的朋友可以到GitHub上下载体验。

https://github.com/Tuanjie-Technologies/shadergraph-sample-project-2025

Shader Graph的更新功能

这次Shader Graph的更新,我们首先对节点进行了颜色分类,提升所有节点的辨识度,方便使用者在一些比较复杂的Shader文件中更加快捷地找到相应的节点。同时我们增加了一个预览界面的LOD,在窗口拉得比较远的时候,可以自动收起这个节点的预览视图,让使用者进行全局浏览的时候减少不必要的干扰信息。

我们还增加了Portal Nodes。因为通常在我们的项目制作过程中总是避免不了一些复杂效果的需求,大量的连线会让界面看起来很杂乱,整个Shader Graph文件的可读性会变得非常差。

所以为了让整个界面看起来更加干净、整洁,方便日后对文件的维护和管理,我们增加了Portal Nodes,方便开发者在Shader Graph中进行模块化开发和梳理,提高Shader Graph文件的可读性,降低之后的维护成本。

Portal Nodes首先支持快速创建,只需要在希望断开的线上右键,选择Add Portal Nodes,就可以自动生成一个注册节点和获取参数的节点。

同时,我们增加了智能关联功能,当用户把鼠标放在注册节点上后,它可以自动高亮所有使用了这个注册节点参数的Get Variable Nodes,让用户在复杂的Shader中快速检索参数的使用情况。

当用户双击Get这个节点时,会自动跳转到注册节点,方便用户随时查找参数的功能。

Portal Nodes还增加了搜索功能,用户可以直接在搜索框中搜索我们注册好并且已经命名好的参数。

比如这边,我把一个注册好的参数命名为“UV”,直接在搜索框中搜索“UV”,就可以获取到这个参数。这次demo中,我们也大量使用了Portal Nodes,来保证复杂Shader Graph开发和维护的高效。

对于比较大型的Shader Graph文件,为了方便开发者更快速地了解到资源使用情况,我们新增了Shader Stats的功能,便于开发者及时判断Shader文件是否需要进行优化的操作。

目前它是一个实验性的功能,后续可能会对信息名称进行更详细的更改,以及增加更多Shader编译后的信息。

除此之外,我们还增加了30多个新的节点,其中包括大量程序化的纹理和光照相关节点,方便开发者在Shader Graph中有更大的发挥空间。

比如其中的Custom Diffuse Term和Custom Specular Term节点,可以支持开发者更方便快捷地在Shader Graph中根据美术表现的需求,更加自由地选择自己想要的Shader Model,或者进行自由的搭配。

为了能够支持开发者更便捷的在Shader Graph中开发更复杂的材质效果,我们还推出了Loop相关节点,包括Additional Lights Loop和For Loop两种类型的循环节点。它可以帮助开发者更快速地在Shader Graph中进行自定义的光照,或者开发一些屏幕空间遮蔽、体积效果这种需要进行复杂迭代计算的特殊效果。

在For Loop Start节点上,用户可以获得上一次迭代的历史数据,以及当前迭代的index,同时也可以输入自己需要的迭代次数。

在End的节点上,使用者可以输入本次迭代的结果,以及是否需要跳过本次迭代或者是结束循环。

同时,使用者可以自由选择想要输出的数据类型,也可以在Output Mode选择是需要把迭代的结果累积起来,还是直接覆盖掉。例如场景中的屏幕空间反射效果可以方便地用Loop Node在Shader Graph中实现,不用再写复杂的代码文件。

同时为了支持更多的美术表现和自定义需求,我们新增了Fabric和Scalable Lit两种材质类型,方便大家更快速地开发比较特殊的材质效果。这次车模demo中也大量使用了这两种材质类型。

对于布料材质,主要有两种类型可供使用者选择:

第一种是棉毛类,主要用于模拟棉制品和毛制品这种布料类型;另一种是丝绸类,用于模拟丝绸类带有高光的辅料材质。

这次demo中的地毯和汽车内饰中的布料,就大量使用了CottonWool的材质。

Scalable Lit主要面向有更高自由度开发需求的使用者。

开发者可以自由根据目标平台,选择合适的渲染质量或者自定义的光照。针对Scalable Lit和fabric节点,开发者都可以非常方便地添加一些Shading Features,来实现不同的效果。

对于有额外优化需求的开发者,可以自由地在Shader Graph文件中选择移除掉一些Passes或者Keywords,让开发者在性能上能够有更大程度的把控。

像这次车模demo中的车漆和整个场景的材质,都使用了Scalable Lit。

同时为了尽可能降低一些不必要的消耗,能够在移动端跑起来,这次的车机和场景漫反射和高光反射都选择了最低的质量。为了能够接入SSR和SSAO,来丰富整个场景光照的层次感,我们在Shading Features中也额外添加了自定义间接高光的Shading Features。为了增加整个车漆的光泽感,在车漆中额外添加了Clear Coat的Shading Features。

以上就是这次新Feature的全部介绍了,欢迎大家多多体验,并且给予一些反馈。之后我们也会基于大家的反馈继续迭代新Feature,让Shader Graph越来越好用。谢谢大家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值