使用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脚本链接了一个简单的粒子系统。

下图是最终的效果。

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

至Unity中国官方论坛开发者的一封信

亲爱的Unity开发者们,

 

Unity中文官方论坛运行至今,已发布论坛帖共计80000余条, 累积用户65594名,为了便于用户可以在统一的平台上交流,以及Unity官方可以在统一的平台上发布信息和技术问答,打造更加流畅和高效的技术交流体验,Unity论坛将在2019年月3日18日正式停止运营,平台交流及运营将迁移至Unity Connect,变更为Unity Connect的小组功能区(https://connect.unity.com/groups/discover),主要的技术交流区域将会集中在“Unity技术交流“板块(https://connect.unity.com/g/discussion)。请尽快在论坛中整理自己发布或收藏的精华内容,并发布至”Unity Connect小组-技术交流“新板块。给您带来的不便和困扰深表歉意,感谢大家一直以来对Unity中文官方论坛的热爱与支持!我们将以全新面貌继续为大家带来优质的服务!

 

Unity中文官方论坛
2019年2月27日

 

5款提升游戏图形效果的资源包

拥有引人瞩目的画面效果极为重要,它能够让你的游戏脱颖而出。Unity技术经理Sam Dogantimur将为你推荐5款提升游戏图形效果的精品资源,包括:Mesh Effects、Surforge、SE Screen-Space Shadows、Stylizer – Extended、CTS – Complete Terrain Shader。

观看介绍视频

Mesh Effects
Mesh Effects是一款包含21个不同网格效果的资源包,它支持PC、主机、移动端和VR等平台,其中丰富的网格效果可用于任何网格,包括:角色、道具、武器和Boss等。
150056cb7pbttw0j2zwzt4.jpg.thumb

Mesh Effects的网格效果提供不同材质,我们可以轻松地把网格效果指定到想要使用的任何网格上。所有效果都可以直接使用,只需把效果拖到场景中使用即可。

为了实现自定义效果,我们也可以快速调整特定属性。此外各个网格效果也提供相应的预制件,以满足用户的使用需求。
150057lkh32dzgpkj9pi3i.jpg.thumb
Mesh Effects支持LWRP和HDRP,其效果会根据网格实际大小而自动调整。Mesh Effects针对移动平台进行了特别优化,优化了影视泛光效果,加入了快速扭曲效果。 
150057pudrdl36dgrblic3.jpg.thumb
下载地址:
https://assetstore.unity.com/pac … /mesh-effects-67803

Surforge
Surforge是一款编辑器扩展插件,它能够让你在Unity中使用非常高效而直观的工作流程,轻松地制作高质量3D渲染PBR纹理。

150057hxxkp6wxwd6xpggv.jpg.thumb



Surforge可作为建模工具集、Kitbash库、贴图渲染器和材质组合器来使用。Surforge提供的Poly Lasso工具可使用预设高度、配置文件和边缘近似功能,通过鼠标创建3D形状。它也提供丰富而精细的模型部分,供开发者直接使用。Surforge也特别适用于不擅长使用外部编辑软件设计和制作纹理的开发者。

Surforge可以选择镜面工作流程和金属工作流程,提供合适的预览效果、编辑内容和导出结果,并且支持GPU渲染,只需几秒就能烘焙出高质量的环境遮蔽、污迹、磨损边缘等效果。
150057zxrvfuu1quy3afhz.jpg.thumbSurforge提供了丰富的材质库,我们可以通过向模型拖拽材质来应用材质效果,也可以在检视窗口轻松调整镜面度和光泽度等属性等属性,从而制作出想要的材质效果。Surforge上所有对材质的改动都会进行实时反馈。


Surforge对系统有一定要求,需要Unity 5.4及更高版本,Shader Model 3.5和Directx 11的GPU,需要至少8GB内存才可以渲染4096分辨率贴图。Surforge经过优它基于GPU,因此最好使用强力GPU来运行。其导出纹理贴图兼容Unity标准着色器,可以用于各种平台。
150057r70rrr6x78rrbvzt.jpg.thumb下载地址:
https://assetstore.unity.com/pac … sign/surforge-79171

SE Screen-Space Shadows
SE Screen-Space Shadows提供屏幕空间的光线跟踪阴影,为定向光制作清晰而细致的接触阴影。它可以捕捉阴影中的细节,这些细节往往是传统阴影贴图所遗漏的细节。
150058cxm8b9hz7vaxq6lz.jpg.thumb
SE Screen-Space Shadows可以提供更好的接触阴影和自阴影,它还能高效处理草地或岩石等小型精细物体的阴影,这类物体通常在渲染到阴影贴图时会很消耗性能,使用SE Screen-Space Shadows能以极低的性能消耗,使这些物体投射逼真的阴影。 
150132fclhm8188xmvcx2l.jpg.thumb
SE Screen-Space Shadows曾被用于《ADAM》项目的制作,并在与Cascade Shadow Map (CSM)结合使用后,获得了完美的接触阴影,极大的提升了画面的阴影质量。

SE Screen-Space Shadows的阴影效果需要使用DX11或OpenGL 4.1,它不兼容OpenGL ES,不适用于WebGL和移动平台,SE Screen-Space Shadows需要使用延时渲染路径。
150103abii6npss4ns3qps.jpg.thumb

下载地址:
https://assetstore.unity.com/pac … space-shadows-77836

Stylizer – Extended
Stylizer: Extended是一款简单易用的Unity拓展工具包,开发者只需通过拖拽相关功能即可在短短几秒内改变整个游戏的风格和色彩,给游戏加上像素风的滤镜。Stylizer曾荣获Unity Awards 2017最佳插件提名。
150133emnludmgpnqpnmud.jpg.thumb

下载地址:
https://assetstore.unity.com/pac … izer-extended-92269

CTS – Complete Terrain Shader
CTS是一款AAA级PBR地形着色器,它由Procedural Worlds和NatureManufacture合作开发,为你提供专业的PBR纹理库,只需鼠标点击就能立即改变场景的外观和感觉。CTS也曾荣获Unity Awards 2017最佳插件提名。
150134kllwp4hcw13cjg3h.jpg.thumb

CTS基于配置文件使用,类似Unity Post FX后期处理特效包的使用方法,你可以在运行时调整配置文件,获得正确的环境纹理。创建配置文件后,可以随时把它应用任何环境,快速实现配置文件中定义的环境特性和纹理。

CTS提高环境颜色和变化,并提供高度混合、曲面细分、程序化雪效果、地质条带、细节和全局法线、剪裁和颜色贴图支持,使你的地形有更好的效果。
150134p8x3zf8mme68fe3m.jpg.thumb

CTS一次能处理16个PBR纹理集,高效而快捷。它提供天气和季节的设置,可以用滑块控制动态的积雪覆盖,雪花效果和积水覆盖效果,模拟出湿度感和雪天效果,而且能通过季节来为地形着色。

CTS在Unity 2018.3版本中支持Substance、MegaScans纹理支持和网格支持。CTS可以和很多包括Gaia、Gena 2、Pegasus和R.A.M – River Auto Material等资源结合使用,从而打造出精美AAA级场景效果。
150134ji398rze2bxw1j4m.jpg.thumb



下载地址:
https://assetstore.unity.com/pac … errain-shader-91938

小结
本文介绍的5款资源,可以有效的提升游戏的图形效果,帮你打造出令人惊艳的游戏效果。我们会陆续推荐不同主题适应不同类型开发者的精品资源插件,敬请关注!