Unity 2018.1标志着全新发布周期的开始,最核心的二个创新功能:可编程渲染管线Scriptable Render Pipeline (SRP)和 着色器视图Shader Graph。它们为艺术家和开发者带来了更多强大的功能;C# Job System、Burst Compiler和ECS,则让用户不必为编程烦恼,合理利用多核处理器成为可能。Unity 2018.2以此为基础,增加一些新功能与新特性。本文我们将详细为大家介绍Unity 2018.2中的重要功能与更新。
Unity 2018.2版本新功能简介:
Unity 2018.2的目标之一是构建可编程渲染管线SRP,加强下一代渲染技术。它的另一个目标则是开发大量新功能和改进内容,帮助用户在移动领域开发取得成功。现在先简要介绍我们在这二方面所做的工作。
Unity 2018.2优化了轻量级渲染管线LWRP的性能,增强了高清晰渲染管线HDRP的效果,从而帮助开发者实现高端视觉效果,还为着色器视图Shader Graph的多项改进,使它能够支持上述二个管线。请注意,LWRP和HDRP目前仍处于预览版。
我们增加了对iOS、Android、Windows、MacOS、UWP和PS4的IL2CPP托管代码调试的支持,并且开始为轻量级渲染管线LWRP添加了针对移动端的优化。
对于Android项目,我们正式发布了对64位(ARM64)支持,现在我们允许开发者直接添加Java代码到Unity插件文件夹下,而不需提前创建Java库。
最后,新版本中还加入了一些新的2D功能,它们将作为预览版资源包发布,包括Vector Graphics(矢量图形)导入器和Pixel Perfect(完美像素)。矢量图形导入器能让你轻松处理SVG图形,Pixel Perfect使你可以更轻松地在各种设备上实现不同分辨率的完美复古外观。
细节功能及内容:
可编程渲染管线SRP
在Unity 2018.1中,我们引入了可编程渲染管线SRP(预览版),它让艺术家和开发者能够控制强大的新渲染管线。Unity 2018.2包含以下SRP更新:
1、SRP批处理器加速CPU渲染
SPR批处理器(SRP batcher)是一种Unity引擎的新型内循环代码,它可在不影响GPU性能的情况下加速CPU渲染速度,它替代了传统的SRP渲染代码。
使用基于物理渲染功能的游戏经常通常具有多个对象和网格,对象上不同的材质共享着相同的着色器和关键字。SRP批处理器为使用PBR的游戏提供了很大的CPU速度提升。
SRP批处理器能够与高清晰渲染管线HDRP和轻量级渲染管线LWRP结合使用,目前支持PC DirectX-11、Metal和PlayStation 4。
2、可编程着色器变体移除
由于项目中的着色器变体数量增多,安装包构建时间和数据大小会随着项目复杂度而提升。可编程着色器变体移除功能在Unity 2018.2引入,你可以使用它管理生成的着色器变体数量,大幅减少安装包构建时间和数据大小。
此功能允许你移除所有带有无效代码通道或无用功能的着色器变体,创建着色器构建配置,例如:标记为“调试”和“发布”的配置,而不会影响迭代时间和维护复杂度。可编程着色器变体移除功能将大幅提高团队效率。
在GraphicsSettings中的着色器变体移除选项
3、轻量级渲染管线(预览版)
轻量级渲染管线LWRP提供了高性能,它对于低端硬件、XR和移动端等性能消耗较大的应用和平台。
LWRP通过利用优化瓦片(Optimized Tile)功能进一步提升了性能和优化效果。LWRP会调整瓦片的载入和存储数量,从而优化移动端GPU的内存。它可分批对光照着色,减少重复绘制和绘图调用的次数。
目前,LWRP的基本功能目前支持所有VR平台,然而在Unity 2018.3发布前,它不会支持多重采样抗锯齿MSAA技术。
请注意:LWRP目前还不支持手持式AR开发工具,例如:ARCore、ARKit、HoloLens以及Magic Leap设备。新产品计划将在未来的计划中发布。
LWRP为低端硬件和XR等性能要求较高的应用提供了高性能效果
4、高清晰渲染管线(预览版)
高清晰渲染管线HDRP在Unity 2018.1首次作为预览版发布,它针对PC和主机等高端平台优先处理高端视觉效果。
在Unity 2018.2中,我们将进一步帮助开发者实现高端视觉效果。请注意:SRP目前仍处于预览阶段,所以我们不推荐将它们用于正式制作之中。这次更新的改进内容包括体积测算、光滑平面反射、几何镜面反射AA、代理屏幕空间反射及折射、网格贴花和阴影遮罩。
体积测算(Volumetrics):体积雾会从除了区域光外所有支持的光照类型获取光照。你也可以用密度体积来控制雾的密度。
光滑平面反射(Glossy planar reflection):平面反射功能现在已支持光滑的反射效果,这意味着它会考虑材质的光滑度。
几何镜面反射AA(Geometric specular AA): 三角形数量较为密集的网格会造成镜面锯齿现象。为了解决这个问题,我们新增了一个选项来降低并限制锯齿数量。
代理屏幕空间反射和折射(Proxy Screen Space Reflection & Refraction):此功能允许你使用代理体积即接近场景边界的体积,来执行屏幕空间的反射和折射。尽管它和使用深度缓冲得到的效果相比并没有那么准确,但它在运行时的性能消耗较低。
网格贴花(Mesh decals):这个功能可以在投影器贴花之外,让你使用网格来作为贴花之用。
阴影遮罩(Shadow mask):此前,HDRP中的这个功能使用距离阴影遮罩(Distance Shadowmask)模式(这个模式会使动态阴影渐变为最大阴影距离位置的阴影遮罩)。在Unity 2018.2中,如果动态阴影只渲染一个不受光照贴图影响的对象(对应内置渲染管线的阴影遮罩模式),你可以选取每个光照。所以,和内置渲染管线不同,HDRP还能同时启用阴影遮罩模式,这样便可为内置阴影遮罩模式控制每个光照。
除此之外,我们还添加了“部分”着色器视图Shader Graph对HDRP的支持,可通过可视化的方式创建着色器,我们还提升了总体的稳定性和性能。“部分”支持是指只有HDRP功能中的一个子集可以在着色器视图Shader Graph中使用。目前Shader Graph针对HDRP的支持还不包括高级材质功能,例如:SSS、清漆层等,也无法进行曲面细分。
请注意:HDRP目前不支持任何AR或VR平台。对这些平台的支持预计在2019年推出,新的产品计划将在之后通知。
在枫丹白露摄影制图演示中,带有来自阳光的体积光射线
渐进光照贴图
渐进光照贴图Progressive Lightmapper在Unity 2018.1版本脱离预览阶段,这次更新添加不少改进。
1、可配置烘焙光照衰减
在渐进光照贴图中的可配置光照衰减功能可以让你在烘焙光照时匹配符合物理特性的衰减曲线。此前,聚光灯和点光源的光强度会大幅受到光的范围值影响。这样的效果不符合物理规则,因为现实中光的衰减距离或衰减量是由光强度决定的。
此功能允许使用渐进光照贴图通过使距离衰减与世界空间距离相关联来解耦范围和强度。虽然Unity仍支持传统的衰减功能,但现在也新增了对线性衰减和距离平方衰减的支持,尤其是在范围限制中衰减为0的距离平方衰减。默认情况下,平方反比衰减会在HDRP中使用,用来匹配实时光照,并且为光强度启用物理单元。
2、用于预计算的实例化反照率和发射率
我们曾在所有光照贴图的特有光照贴图空间中分配发射和反照率。然而,由于实例通常分享反照率/发射特性,我们现在支持对每个特有实例生成这些映射。这样会减少渐进式光照贴图所使用的内存总量,进而能够烘焙更大的场景。
3、附加场景光照警告
出于性能原因,最好将大型场景分割为较小的子场景,这些子场景能够在运行时根据可见性来加载和卸载。我们称之为“附加性加载”或“多场景”设置。
带有全局光照的附加载入场景
当为多个场景配置生成GI光照时,Unity所提供的工作流会让用户载入所有需要的子场景,然后让子场景为这个完整的场景层级生成照明。这样会输出一个LightingData.asset文件,它会保存光照贴图、预计算实时GI和探针数据。这与第一个载入的场景相关联,该场景被称作“主”场景。
然后进行运行,加载/卸载的场景会从LightingData.asset导出它们的照明数据,这个文件与主场景相关联。在这种情况下,子场景的照明设置无关紧要。然而,场景会根据目的以不同的顺序单独烘焙或加载。这可能导致场景带有不兼容的照明设置和不匹配的照明数据。例如:天空盒效果可能会有所区别,光照贴图分辨率可能会有多种设置,不同的光照模式也有可能混在一起。
此前,Unity从未提醒用户这个问题,造成得到的结果与预期不一致。现在,Unity会生成一个警告,提醒用户存在的不兼容性。然后有关不兼容性的信息显示出来,以便调试和验证。
4、其它改进内容
我们还向剔除光照贴图阴影投射器函数(仅在脚本API中)显示出“per light”选项,让它能够被HDRP使用。
着色器视图Shader Graph(预览版)
在Unity 2018.1中,我们引入了Shader Graph,使开发者能够可视化的构建着色器。这个过程无需编写代码,便可在图形网络中直接创建并连接节点。视图中的每个节点都会按照改动提供即时反馈,其易用性使得新用户也可以参与着色器创建。在Unity 2018.2中,我们进行了一些改进,其中包括:
1、高清晰渲染管线HDRP支持
着色器视图Shader Graph现在支持带有PBR和Unlit Master节点的HDRP。用着色器视图Shader Grap构建的着色器在LWRP与HDRP中都可以使用。
2、顶点位置
现在你可以通过PBR和Unlit Master节点上的Position槽来修改顶点位置。默认情况下,会将对象空间位置输入到这个节点中。对这个属性槽的自定义输入应该指定特定顶点的绝对本地位置。在顶点着色器上,有一些特定节点,例如:程序化形状节点不会显示出来。因为这类节点不兼容这个属性槽。
3、Master节点设置
主节点的设置现在可以在一个小窗口访问,你可以随意开启或关闭这个窗口来修改着色器上的多个渲染设置。
4、属性引用名字和暴露状态
现在你可以编辑属性的引用名字,使它更快速地从脚本引用你的着色器属性。为此,首先选择所需属性,然后在引用旁边输入一个新名字。如果你想要重置默认名字,右键单击引用,然后选择重置引用(Reset reference)即可。
在展开的属性窗口中,你也可以点击勾选Exposed。
5、视图的可编辑路径
现在你可以修改Unity的着色器视图和子视图的路径。当你修改着色器视图路径时,将修改其在着色器选项列表中的位置。当你修改子视图的路径时,它会在节点创建菜单中得到一个不同的位置。
6、Is Front Face节点
使用此节点,你可以根据特定部分的面标识来改变视图的输出内容。如果当前片段是正面的一部分,节点会返回True。如果是背面,节点会返回False。
请注意:这个功能会要求你在主节点上使用二个面。
7、Gradient节点
此功能会通过二个新节点添加渐变功能。Sample Gradient节点会通过已有的Time参数采样渐变。你可以在控件视图上的Gradient槽定义这个渐变。Gradient Asset节点会定义一个渐变,这个渐变可以使用不同的Time参数来被多个Sample Gradient节点采样。
8、Texture3D和Texture2D数组
这个改动通过二个新的属性类型和四个新节点来拓展Unity对Texture类型的支持。这些新增内容将让你定义并采集着色器可视化编程工具中的Texture 3D和Texture 2D Array类型资源。
9、Texture 2D LOD节点
这个节点会为Texture 2D Sample 上的LOD功能添加新节点。Sample Texture 2D LOD使用的输入和输出槽和Sample Texture 2D相同,但它还包含一个通过Vector1槽调整细节等级的输入。
10、展示生成代码选项
你可以查看任意节点的生成代码。右键点击节点,点击Show Generated Code即可展示生成代码,代码段会在链接到Unity的代码编辑器中打开。