Unity 2018.3 Shader Graph着色器视图新功能:Lit Master Node

随着Unity 2018.3正式版本的发布,Shader Graph着色器视图为高清晰渲染管线HDRP加入了一个全新的主节点Lit Master,它能够帮助开发者使用到HDRP中许多高级着色器功能。

Unity 2018.3正式版中更新了HD Lit高级功能(HD Lit Advanced Features),简称HD Lit AF,包括:涂层遮罩、晕彩、半透明、次表面散射和各向异性。本文将介绍其中的一些高级功能,并展示如何使用它们在使用Shader Graph着色器视图中的HDRP创作精美的资源。

请访问GitHub下载本文的示例项目,该示例项目包含一个盆景和蝴蝶,项目中大量使用了晕彩和半透明效果。

Shader Graph着色器视图示例项目下载:
https://github.com/natalieburke/ … eDemo_LitMasterNode

115747acg7mejnwgnicwmh

快速入门
在开始创作精美的场景前,我们需要注意二个重要事项:
1、Lit Master Node仅在高清晰渲染管线HDRP中运行。
2、轻量级渲染管线LWRP中没有用于此节点的高级着色选项。如果你只需要PBR表面的基本输入,建议继续使用PBR主节点。

创建HDRP场景的最快速方法是在Unity启动器或Unity Hub上选择High-Definition RP模板。蝴蝶示例项目也使用了HDRP。

115747z89j88k5mmzn98on.png.thumb.jpg

使用High-Definition RP模板创建新项目时,建议将项目中的HDRP版本由4.1.0-preview更新为4.6.0-preview。

更新HDRP版本时,请依次点击Window > Package Manager来启动资源包管理器。然后从资源包列表选择High Definition RP资源包,此时在窗口右上方会有Update to按钮。在该按钮右侧选择4.6.0版本,然后单击Update to按钮。

115747ifi1ii9foxi7g0d7.png.thumb.jpg

使用HDRP项目时,你可以点击菜单Create > Shader > Lit Graph创建全新的HD Lit着色器视图。成功创建后,你会看见一些新的输入选项。

如果你在HDRP中使用过HD Lit材质,这些选项大致上差不多。如果你没有使用过该材质,BentNormal和CoatMask对你来说或许是陌生的概念。

115747drw5rc5q9quqmsbz.png.thumb.jpg

如果将CoatMask值提高到0以上(最大值为1),会为表面添加清晰的“涂层”效果。这意味着对象表面上会有类似封蜡的半透明薄层。

你可以想象一下在网格上绘制环氧树脂涂层的效果,涂层遮罩的一个常见用途是创建材质来模拟汽车涂料外观。

下图的苹果上材质的CoatMask值由0~1逐渐变化效果。

115748rdmdsiuj9aixzxjo

虽然CoatMask是Lit Master Node的默认输入,但请确保仅在该功能对项目非常重要时使用它来实现效果,因为将CoatMask值增大到0以上会增加着色器的性能消耗。

BentNormal允许输入特殊类型的贴图,以改善资源的间接光照(GI)效果。在与AO贴图结合使用时,BentNormal 会提供镜面遮蔽效果,这意味着我们可以向网格上的反射添加遮蔽效果。你可以通过Substance Designer、XNormal或Knald等软件生成弯曲法线贴图。

为了对弯曲法线贴图进行镜面遮罩,必须将着色器设置中的Specular Occlusion Mode(镜面遮蔽模式)设为From AO And Bent Normal(来自AO和弯曲法线)。你可以单击Shader Graph着色器视图主节点右上角的齿轮图标,来访问这些设置。

115748at5ez4ex498hetc4.png.thumb.jpg

镜面遮蔽有四个模式选项:Off(关闭)、From AO only(仅来自AO)、From AO and Bent Normal(来自AO和弯曲法线)和Custom(自定义)。

115749k6ctdprjzpbvyfbz.jpg.thumb

选择Custom 会在主节点创建新输入,从而为用户提供对镜面遮蔽的完整控制。例如:对该输入插入0会禁用所有反射。

主节点的设置菜单和Lit AF选项一起加载。你可以在此选择准备在Shader Graph着色器视图利用的高级材质类型,并设置其它实用的表面信息,例如:表面是不透明还是半透明。

115749b8kn7kk1py8kijna.png.thumb.jpg

修改这些设置会向主节点添加额外输入选项,根据启用的设置组合,你最后可能会得到一个非常庞大的节点以及性能开销很大的着色器。

下图是Lit AF选项展示。

115750cze2g9z2kk9agk0z.png.thumb.jpg

示例项目的高级材质
蝴蝶示例项目大量使用了晕彩和半透明二个高级材质类型。我们首先看看蝴蝶的效果。

蝴蝶的翅膀由细小鳞片的多个图层组成的复杂表面,这些图层会使人眼感觉蝴蝶翅膀呈现粉尘状。鳞片拥有非常高的反射率,并位于几丁质层的表面。

几丁质是一种半透明蛋白质,它是昆虫外骨骼的主要组成部分。这些生物知识在应用于着色模型时,意味着蝴蝶翅膀是半透明的,并具有晕彩效果和金属质感。

晕彩是特定表面的颜色随着表面光照角度变化而逐渐改变的现象,它是仅在HDRP中可用的高级着色功能之一。

下图展示了晕彩的实际效果,我们利用晕彩效果来改变蝴蝶扇动翅膀时的颜色。

115750nd5d2r4gs7ser8de

在将材质类型(Material Type)切换为晕彩(Iridescence)时,会在材质节点出现二个新选项:IridescenceMask(晕影遮罩)和IridescenceThickness(晕影厚度)。

120116en1koqq0fs1tqqtn.png.thumb.jpg

你可以使用这个简单的视图来轻松查看二个新输入的效果。

120116lblmt4zofmmfq01t.png.thumb.jpg

下图是不同晕彩厚度(Iridescent Thickness)值的变化效果。你可以看到晕影遮罩值从0到1(黑色到白色)调节时,晕影效果强度的变化,以及晕影厚度如何改变由晕影效果创建的颜色渐变。

120116epjwczktkddcdemg.jpg.thumb

如果你想在使用晕影时,使效果准确符合物理规则,IridescenceThickness值的单位需要设置为纳米(nm),相关输入的0-1数值范围会重新映射为0-3000nm。

下图是一只大闪蝶,它的翅膀背面是完全不同的颜色和图案。为了实现这种效果,我们在二组翅膀使用了面朝相反方向的法线。

120117c6i6w64ppx56i63f.png.thumb.jpg

为了实现光线穿透翅膀的效果,翅膀底面使用了半透明材质类型进行着色。半透明材质会模拟光线穿过表面的效果,并通过使用厚度图和散射配置文件,改变光线的强度。

120117z8wn989x8axnqdzn.jpg.thumb
120117fpuicdi0s5ncuzn6.png.thumb.jpg

我们有三种材质类型使用散射配置文件:Subsurface Scattering(次表面散射材质)、Subsurface Scattering with Transmission(带有透光效果的次表面散射材质)和Translucent(半透明材质,它只有透光效果)。

120117gnurbq7pzr6pkrtb.jpg.thumb

透光(Transmission)指光线可以完全穿透对象并从另一侧射出。利用透光效果的材质提供了一个选项,通过添加厚度图来调节穿过表面的光线强度。

了解次表面散射的概念及其使用方法,有助于了解如何使用散射配置文件。

次表面散射(Subsurface Scattering)适用于半透明表面。这类表面类型包括:树叶、水果、蔬菜、宝石、布料、牙齿、眼睛和皮肤。当光线进入这些材质的表面时,它会在材质中散射,然后从表面的不同位置射出。

120118x8lgbljrrelrep9v.png.thumb.jpg

利用次表面散射的表面将呈现出整体光照效果的柔化,光线会渗透到附近区域,而且较小的表面细节会变得模糊。

光线在对象中渗透得越远,光照的衰减和散射效果越强。光线可以渗透的“距离”是由厚度图控制的数值,数值越小,次表面散射的效果越明显。

你可以手动绘制厚度图,也可以在Substance Designer或Maya等其它软件生成厚度图。生成厚度图时,需要反转网格表面法线,烘焙环境遮蔽,然后反转环境遮蔽贴图。

散射的总量、角度、产生的颜色以及由光线渗出的颜色都由散射配置文件控制。HDRP中,散射配置文件设置(Diffusion Profile Settings )是一种独特的资源,它保存着散射配置文件。

如果你正使用示例项目,或是通过项目模板创建HD项目,你就已经拥有了散射配置文件设置资源。如果你需要新建该资源,可点击Create > Rendering > Diffusion Profile Settings进行创建。

你需要将其指定到高清渲染管线资源(HD Render Pipeline Asset)。通过点击Project Settings > Graphics > Scriptable Render Pipeline Settings,你可以轻松找到自己的HD资源。

120118aj2nnujs52xbp0n5.png.thumb.jpg

如果设置资源存在,该资源会包含项目正在使用的散射配置文件设置的引用。

120118s969lkcks6ihhqkc.png.thumb.jpg

蝴蝶示例项目包含二个自定义散射配置文件:一个用于翅膀的背面,另一个用于树叶。散射配置文件包含大量自定义选项,可以控制光照如何在网格中散射。

120415w756j67n5o755kv8.png.thumb.jpg

散射距离(Scattering Distance )控制光线散射的强度和颜色。简而言之,这允许你根据对象的材质,控制每个颜色通道上光线的吸收量和反射量。例如:人类皮肤可以显示出红色,因为随着光线的散射,它会呈现皮肤下血液和组织的颜色。

折射率(Index of Refraction)与光进入表面时的弯曲角度相关。折射率是可测量数值,例如:人类皮肤的折射率为1.4,其它多数材质的折射率在1.3~1.5之间。

纹理模式(Texturing Mode)仅适用于使用次表面散射的对象。多数情况下,开发者会使用预散射和后期散射,因为它会使反照率模糊,从而柔化光照的效果。如果反照率由于已有的次表面散射而包含柔化效果,你可以只使用后期散射。

其余选项只会在使用透光材质类型,即Translucent 或Subsurface Scattering with Transmission时可用。修改透光模式(Transmission Mode )将改变阴影使用的逻辑。对于树叶等厚度较薄的物体,你应该仅使用Thin 选项,而对于其它情况,请使用Regular选项。

透光色调(Transmission Tint)是用于透出光线的附加颜色,它会与已有的散射颜色混合。厚度重映射可以让你将0到1的厚度图重新映射到资源适用的范围。

对于较薄的物体,例如:蝴蝶翅膀和树叶,使用Translucency (Transmission only)即可。对于较大或较厚的物体,模拟光线进行散射并从表面其它位置射出的效果也很重要。此时应该使用Subsurface Scattering 或Subsurface Scattering with Transmission。

120415c8ahv97r328p1va5.jpg.thumb

使用Shader Graph改善创作流程
使用Shader Graph着色器视图来实现这些高级着色功能可以大幅减少迭代时间。调整和改善视觉效果需要多次迭代,但是Shader Graph着色器视图的快捷工作流将使该过程更轻松。

120415q6ofoidw6fxndtto.png.thumb.jpg

Shader Graph着色器视图可以减轻特定纹理要求的大部分负担,所以我们只使用三个纹理就能实现理想的视觉效果:散射贴图,主体法线贴图和平铺细节法线贴图。

通过使用Shader Graph着色器视图并进行一些实验,我们发现可以重用散射贴图的通道,并重用法线数据来改变光滑度数值,不必制作额外的纹理。

不必编写代码给Shader Graph着色器视图,带来了快速迭代和实验的自由度。此外它能轻松调整属性和内部数值,实现了强大的迭代能力。例如:如果我们发现经常要修改某个数值,可以右键单击并选择Convert to Property(转换为属性)。现在,当保存着色器后,该属性会出现在通过该着色器创建的任意材质的检视窗口中。

在对蝴蝶的外表进行迭代时,我们最后将许多内部数值公开为属性。这让我们在游戏视图中通过使用准确的光照,后期处理效果和动画效果,来调整蝴蝶。

下面视频中,你可以看到通过公开参数调整蝴蝶视觉效果是多么简单。

观看演示Demo

最后,因为蝴蝶翅膀的二个面很相似,但需要使用不同材质类型和纹理,我们将翅膀逻辑转换为Subgraph(子视图),同时将可定义属性保留为输入。这让我们可以同时编辑翅膀的二个表面,即使它们是二个不同的高级材质类型。

Shader Graph着色器视图实现快速迭代的另一个案例是盆景的树叶。在为盆景树叶选择合适颜色时,我们改变了很多次想法。在构建该场景时,已经到了秋天,为场景营造秋天的氛围会很合适。在尝试许多颜色后,我们最后决定创建由绿色到橙色的过渡,就像树木正处于颜色变化的过程。

我们不想编辑树叶纹理,通过Shader Graph着色器视图,我们可以使用Gradient(渐变)节点来根据树木几何体的世界位置来改变颜色。不同高度的树叶会从Gradient节点接收不同的颜色。我们还添加噪声来破坏Gradient节点的一致性,使盆栽的外表看起来更自然有机。

120416x7u4mmacdvdn7rc7.png.thumb.jpg

所有这些改动都不需要使用纹理制作软件,这也意味着我们不需要烘焙颜色到纹理贴图中,我们可以重复使用贴图中的其它通道来满足灰度纹理的要求,例如:半透明厚度贴图。

如下图所示,通过用属性控制树叶的渐变效果,我们制作出了树叶在一段时间内改变颜色的动画。

120416n33i3ir7773jkigx

结语
HD Lit Shader Graph着色器视图的主节点将为创作利用HDRP高级着色器选项的表面提供更多可能性。我们非常期待看到开发者利用全新HD Lit高级功能选项来实现的场景效果,这些选项已经在Shader Graph着色器视图工作流程中公开。

使用FBX Exporter,进行Unity与3ds Max,Maya的交互

去年我们推出了FBX Exporter,帮助创作者将游戏场景在Unity与Autodesk的3ds Max,Maya之间实现交互工作。现在Unity与Autodesk进行深度合作,本文将介绍Unity如何与多款Autodesk工具Shotgun Software、Revit和VRED实现重要的互通性。

FBX Exporter解决了二个常见的游戏开发用例:
1、在Unity编辑器中对关卡进行建模,然后切换到Maya或3ds Max,使用成品资源来完成关卡制作。
2、在Unity编辑器中录制游戏过程,导出动画到Maya以便动画师进行加工处理,然后返回到Unity,将加工处理后的动画添加到Timeline。

下面,让我们来了解二个用例的详细过程。

导出静态场景
在游戏早期开发阶段,应该避免使用性能消耗昂贵的模型和纹理, 这样可以让游戏设计师专注于设计游戏机制,而不会被游戏最终外观效果分散注意力,所以我们会使用白色或灰色的方块来构建游戏关卡。

理想情况下,建模会在Unity编辑器中完成,从而让设计师能够完全利用Unity丰富的游戏组件。

ProBuilder是进行建模的热门工具,它为游戏设计师提供了实用功能,用来构建墙体、地板、楼梯等简单的几何体或者道具、车辆、角色等动态对象。

132159irzb6346z1yit7na

在绘制关卡时,设计师可以添加物理、导航、游戏脚本、摄像机、音频和输入控制,从而使关卡变得可玩。游戏设计师可以在此阶段快速迭代而无需等待其他部门提供开发资源。

当关卡达到预期的完成阶段时,就可以使用FBX Exporter以FBX格式导出场景或独立对象。

132159u24qalsb2lbuqqqj.png.thumb.jpg

我们将导出的FBX文件可以加载到Maya或3ds Max中,从而让艺术家通过纹理,材质和道具资源添加细节,甚至使用预先制作的模型来替换场景的主要部分。

132200k2a2ad3yeangp0fm.png.thumb.jpg

借助在Maya和3ds Max中使用Unity便捷的DCC集成工具,可以轻松读取或写入FBX文件,不必处理复杂的选项或目录。

集成工具还会进行跟踪,了解应该为每个文件导出哪些对象,并为艺术家提供了一种使用导出内容来更新信息的简单方法。

如下图所示,Unity的DCC集成工具可以在FBX Export Settings中安装。

132200cdgopki0iedd6yig.png.thumb.jpg

FBX Exporter还能实现无损工作流程,自动将改动合并到FBX文件并导入预制件,而且不会破坏关卡设计师添加的所有Unity特定组件,例如:物理设置,导航网格和音频来源。

通常在游戏进行3D处理之前,不会在游戏关卡中强制使用命名规范,这意味建模关卡中的对象名称往往不是最终名称。禁用自动更新程序后,在使用FBX Exporter处理改动的时候,需要将未知FBX对象匹配到对应的Unity游戏对象。

返回到Unity后,迭代过程将会继续,关卡设计师可以将新的FBX文件发送给3D处理部门,3D处理部门也可以继续提供更新后的FBX文件,这样的往返交互过程让艺术家能够使用正确工具进行迭代。

导出动画角色和道具
FBX导出的另一个用例是导出游戏动画,用于制作游戏内影视片段或过场动画。

过场动画通常使用游戏中的相同资源,但是会给动画加入额外的修饰效果。从头开始制作角色动画非常耗时,所以常见方法是在游戏中录制动画,然后在Maya中对动画进行加工处理。FBX Exporter还支持Unity的物理摄像机属性,为动画师提供了Maya中内部场景的精确取景参数。

我们还可以使用Unity Recorder的动画剪辑支持,将游戏过程录制为一个资源。

132200lpgw13rgpp2rizsy.png.thumb.jpg

添加该动画剪辑到Timeline后,可以将其导出为FBX剪辑。

132201fqixsoy7gereiyog

然后,我们可以将FBX剪辑导入Maya,动画师可以使用强大的Maya动画工具集来加工处理以及优化动画。

132201y7uscrrwrm8ex3rr

最后,我们可以将最终动画重新导出为FBX文件,并添加到过场动画的Timeline。

下面的动画往返交互演示视频,将帮助你更好地了解操作过程。

观看动画往返交互演示视频

小结
Unity和Autodesk的合作将迎来巨大机遇,从而对材质互通性带来更多改进,让Unity和Maya,3ds Max具有更紧密的衔接,并增强FBX文件格式的功能。

后续,我们将介绍Unity和Autodesk将如何改进游戏、电影、汽车和AEC(建筑、工程、施工)行业的工作流程。

使用Shader Graph着色器视图制作交互式顶点特效

Unity的开发团队使用Shader Graph着色器视图和轻量级渲染管线LWRP制作了一个交互式顶点替换特效的演示示例,以帮助开发者学习使用这些功能来设计效果。

我们将在本文中详细介绍特效的制作流程,并提供Shader Graph着色器的演示项目,请访问云盘下载演示项目。

链接: https://pan.baidu.com/s/1I37Ormz8UfOoL0CkzzIzcg
提取码: msrd
演示项目
下图是演示项目中的球体拥有基于着色器的替换特效,当我们按下空格键时会激活该效果,在游戏中我们通常会把这种效果指定到相关游戏事件。

本文,我们将介绍如何使用Shader Graph着色器视图制作该着色器,然后结合空格键按键触发器。我们的目标是帮助开发者了解如何在Shader Graph着色器视图中设计效果,并通过C#脚本进行交互。

演示项目包含:着色器、控制着色器的脚本、预配置轻量级渲染管线LWRP资源和一个示例场景,以便开发者进行使用。

015356noqjo5o33ox338qj

安装着色器视图和LWRP资源包
首先,我们来看看如何设置Shader Graph着色器视图和轻量级渲染管线LWRP。

我们打开Package Manager资源包管理器,分别选择Lightweight RP资源包和Shader Graph资源包,并单击Install按钮进行安装。

015356myn52r4l44oorqdq.png.thumb.jpg

安装好Lightweight RP后,我们需要在项目中创建新的管线资源。请依次选择Create->Rendering->Lightweight Render Pipeline Asset。

然后,我们启用管线资源,点击菜单Edit->Project Settings->Graphics,把LightweightRenderPipelineAsset拖动到Scriptable Render Pipeline Settings属性栏。

小提示:如果你使用了我们提供的下载资源,则该步骤已经完成。

015356hjhlnyiri41ah11a.png.thumb.jpg

现在安装好轻量级渲染管线后,我们可以创建新的Shader Graph着色器视图。在项目窗口中创建新视图,请点击Create->Shader->PBR Graph。

PBR Graph可以创建一个从Unity基于物理的渲染系统接收输入信息的新着色器,这样我们的着色器就可以使用阴影和反射等功能。

创建好着色器后,我们把它添加到新材质,并把该材质附加到示例场景中的球体,将材质拖到球体上即可。

实现顶点替换功能
为了实现顶点替换效果,我们会沿着法线替换网格的顶点,通过修改PBR Master输出节点的输出Position来完成。

我们会在每个顶点的基本对象位置上使用Add节点进行替换。通过使Normal Vector节点和基本对象位置相加,我们可以看到所有顶点都向外延伸,使球体看起来更大。

为了使替换效果更丰富,我们会使用Simple Noise节点,半随机地乘以法线向量的替换结果。

015356lvro214r1wce04re.png.thumb.jpg

当点击Save Asset时,我们可以在场景视图看到球体现在会基于Simple Noise来替换。

015356l0ssby50hk7wk7x0.png.thumb.jpg

因为Simple Noise会基于UV空间采样,所以替换结果中存在着缝隙。为了修复缝隙,我们只要给Simple Noise使用对象空间而不是UV空间,添加Space属性设为Object的Position节点即可。

015357rsd4nns4673a0379.png.thumb.jpg

为了制作出波动效果,我们会滚动调整Position输出,把它和Time节点相加,然后再发送到Simple Noise节点。我们也可以使用Multiply节点和Time节点来使滚动速度变化。

015357xcy9cl2ttzchltpa.png.thumb.jpg

使用C#代码控制着色器视图属性
为了控制替换特效,我们会在Shader Graph着色器视图中公开来一个新的着色器属性。着色器属性允许我们通过在检视窗口输入数值,或者通过使用C#脚本为着色器提供输入内容。

我们创建一个名称为Amount的新Vector1属性,并把Reference改为_Amount。Reference字段是我们将通过脚本访问和修改替换效果时所使用的字符串名称。

如果我们不修改Reference字段的内容,它会使用自动生成的值。如果Reference字段的字符串和脚本的字符串不完全匹配,我们将无法通过脚本处理属性,所以一定要仔细检查二者是否匹配,包括字符串的大小写。

015357cxetutxk77jtugol.png.thumb.jpg

我们会在Multiply节点使用Amount着色器属性,使Simple Noise节点输出和Amount属性相乘,然后再把结果和法线向量相乘。这样可以让我们调整噪声,然后把噪声应用到顶点位置。现在Amount变量控制我们在网格替换每个节点的程度。

015357g6k62zmpft9pf4w8.png.thumb.jpg

为了控制Amount变量,我们创建了一个C#脚本,命名为DisplacementControl,并把其附加到DisplacementSphere游戏对象。

该脚本会控制_Amount变量,并与MeshRenderer组件指定材质所创建的属性进行交互。我们在meshRender变量中保存了MeshRenderer组件的引用,并且声明新的浮点变量displacementAmount。

我们在Update函数使用Lerp函数来插补displacementAmount变量为数值0。然后设置着色器变量_Amount为displacementAmount变量保存的数值,这样将更新Shader Graph的_Amount变量,使其随时间平滑调整为0。

015357tmtvv3zvutb7vtc2.png.thumb.jpg

我们使用Unity的默认“Jump” 输入键,默认被指定到空格键,在按下空格键时,它会将displacementAmount数值设置为1。

015357g9b3bwd45vrtvdud.png.thumb.jpg

现在,当我们在场景中进入运行模式时,我们可以看到按下空格键后,displacementAmount被设为数值1,然后慢慢插值为0。

使用着色器视图制作Voronoi发光效果
我们使用Voronoi Noise节点,使该节点乘以Color节点,这样会对发光效果实现部分调整,在效果中加入黑点。

然后,我们使用Lerp节点接收另一个Color节点作为基本颜色,并在Lerp节点的T输入使用Amount变量,这将允许我们使用Amount变量在基本Color节点和Voronoi Noise颜色节点之间进行混合。

015419gok5r1k26s6fhass.png.thumb.jpg

然后,我们将使用前面类似的设置来滚动发光。我们使用Position节点,并设置为Object,将其与Time节点相加,然后连接输出到Voronoi Noise节点的UV槽。

015419m33wm3mc4qj4yi8w.png.thumb.jpg

为了添加额外的变化,我们也可以添加第二个发光层,使用由Time额外层滚动的Simple Noise节点,并使二个Noise输出相乘,这样会给我们第二个噪声层并添加视觉效果。

015419vbt0th6xow0hqfco.png.thumb.jpg

因为这个发光效果是通过Lerp节点中的Amount变量调整的,所以我们可以在运行模式看到,当按下空格键时,球体会激活顶点替换和发光效果,然后缓慢恢复正常状态。

015419t7w8ek71qn21gg2i.png.thumb.jpg

为了添加额外的修饰,我们还在DisplacementControl脚本链接了一个简单的粒子系统。

下图是最终的效果。

小结
如果你希望尝试这些功能,我们提供了完整项目,包含所有资源、网格、着色器和示例场景,请点击[阅读原文]进行下载,我们期待看到你使用它创作出的炫酷作品