「团结引擎 1.4.0」来啦!本次技术更新的内容,涵盖了小游戏、团结引擎车机版、OpenHarmony、Audio、Muse Chat、虚拟阴影贴图、Shader Graph、代码升级几大方向。本次更新进一步提升了引擎易用性,实现大幅性能优化,增强了团结引擎在图形、渲染、光照等方面的能力,将为开发者提供更有力的支持。

小游戏

团结引擎 1.4.0 进一步优化小游戏性能,并改进部分功能,带来更流畅的用户体验。

功能提升

○新增小游戏构建配置 Build Profile,支持按平台、release 和 development 保存多份构建配置,并一键打包多个配置,提升打包效率。

详细指南请参阅:团结引擎用户手册 | 小游戏构建配置:https://docs.unity.cn/cn/tuanjiemanual/Manual/BuildSettingsMiniGame.html

○新增动画压缩库 ACL 集成,提高 AnimationClip 压缩率,在小游戏上可以获得更小的包体和内存占用。

○完善 Wasm Analysis Tool 对 wasm 指令的支持,新增对微信分包后 wasm 的支持。

○新增 kCullFlagSkipCulling 选项,允许在 SRP 管线上跳过 scene culling 操作,优化 UI 相机的耗时。

○新增 SetActiveNonRecursive 接口, 允许 gameobject 上的 components 和子对象不重新初始化以获得更好的性能。

*Build Profiler 全新用户界面,助力个性化快速打包体验。

问题修复

○小游戏打开 mobileKeyboardSupport 后,点击屏幕会在触控开始和结束额外渲染一帧,影响性能,已修复。

○小游戏关闭 mobileKeyboardSupport 后,无法唤起虚拟键盘并且触控滑动可能丢失 touch began 事件,已修复。

○修复微信开发者工具和部分真机上渲染花屏的问题(报错"uint_ctor: ambiguous function call"的问题)。

○AutoStreaming 问题修复:

  • 修复 uGUI Image 使用图集时未能正确显示高清图的问题;

  • Texture Streaming 新增支持2D tilemap;

  • CustomSearch.txt 新增支持 UTF-8 BOM 编码;

  • 小游戏上使用 Scene streaming 功能后,同时加载多个场景可能导致游戏卡死,已修复。

○对于使用了不支持的压缩格式的纹理,警告日志中增加了纹理名称,方便开发者定位修复。

○全局纹理压缩格式切换为 ASTC 后,skybox cubemap 仍使用 DXT 压缩格式,已修复。

○Vertex Shader GPU Skinning

  • 修复 Graphics API 为 WebGL1 时无法开启的问题;

  • 修复在 Mali-G78 设备上无法开启的问题。

团结引擎车机版

Tuanjie 1.4.0 版本中,平台研发团队致力于为移动端开发者提供更好的引擎性能表现。因此,我们在引擎的核心渲染部分发布了 Variable Rate Shading(VRS),同时, Reflection Probe 也已支持 Layer 隔离采样。

Tuanjie 1.4.0 同样致力于对车机 HMI Android、QNX、Embedded Linux 三个平台的稳定性提升,并进行了多项改进。

渲染

Variable Rate Shading(VRS)

Tuanjie Variable Rate Shading (VRS),用于动态调整图像中每个像素的渲染细节或“着色”速率,通过降低采样点数目,将⼀定数量的采样点作为一个 Unit 进行渲染,以此控制 Shading Rates。开启后,可以在保证视觉表现的情况下,减少 GPU 的工作负担,从而提高渲染效率,特别是在资源有限的情况下。

团结引擎从 1.4.0 版本开始,全面支持 VRS。在 Tuanjie Editor 中,可以通过对不同 Renderer 设置不同的 Shading Rate,从而实现屏幕的不同位置有不同的渲染速率,以达到降低 GPU 开销的目标。

同时,除了支持自定义设置 Shading Rates 外,团结引擎提供了⼀种 Camera-Relative Shading 算法,开启后可以为未手动设置 Shading Rate 的 Renderer 自动计算近似 Shading Rate 值,以降低逐一手动修改 Renderer 的开发成本。

VRS 已支持所有打包平台,但对目标平台系统的图形 API 有一定要求,请确保⽬标设备/平台对于图形 API 充分支持。具体可参考下表:

可以通过 Project Settings >> Graphics >> Shading Settings,开启 VRS 并设置 Shading Rate。

○选择 Custom Shading,选择后可以开启并使用 VRS 功能,在 Renderer 的 Inspector 面板中设置 Shading Rate值,自定义每个 Renderer 的 Shading Rate。

○选择 Camera-Relative Shading,默认使用系统提供的 Camera-Relative Shading 算法,为未手动设置 Shading Rate 的 Renderer 自动计算近似 Shading Rate 值。

为了便于更直观地看到场景中每个 Renderer 的 Shading Rate 设置,并便于调试,1.4.0 版本的 Editor 中,为 VRS 新增了 Debug Tool,可以通过 Window >> Analysis >> Rendering Debugger >> Rendering 开启,Map Overlays 选择“Shading Rate Value Map”。

开启后,Scene 窗口中将通过颜色实时展示当前每个 Renderer 使用的 Shading Rate 值。

更多操作可查阅官方文档!https://docs.unity.cn/cn/tuanjiemanual/Manual/hmi-vrs.html

VRS 推荐场景及用法

VRS 可针对场景中任一 Renderer 进行自定义设置并生效。目标是降低 GPU 的 Fragment Instructions / Second 和 Fragments Shaded / Second。

Shading Rate 越高,则渲染结果画面越模糊,因此推荐在渲染内容较重的场景中,对于非视觉重心的 Renderer,设置较高(如 4x4)的 Shading Rate;对于视觉重心的 Renderer,设置较低的 Shading Rate(如 1x1),以保证视觉质量。

在移动设备运行效果对比

因平台图片压缩,建议下载安装 Tuanjie 1.4.0 实际体验!

原始画质(Shading Rate 1x1):画质清晰,运行卡顿

场景内物体全部开启 VRS,并设置最高程度(Shading Rate 4x4):背景建筑/树木模糊,运行流畅。

Reflection Probe 支持 Layer 隔离采样

此前版本的团结引擎中,Reflect Probe 无法用 layer 隔开,因此,导致在此前团结版本的 URAS 架构下,各个 3D 模块的 Reflection Probe 会出现冲突的情况。

Tuanjie 1.4.0 中,Reflection Probe 的 Cubemap Capture Settings 中新增了 Rendering Layer Mask 设置,用于控制 Reflection Probe 对特定 Renderer 产生印象。

HMI Android

1.4.0 版本中,HMI Android 平台对 Render As Service (URAS) 进行了进一步升级。

Tuanjie 1.4.0 版本中,URAS 已支持 Android 14,支持键盘事件,支持鼠标点击 UGUI 按钮,支持点击 InputField(包括 TextMeshPro 版本)弹出软键盘输入文本,支持 Render Scale 并提供能够针对每个 view 分别调整渲染分辨率的接口;工程隔离模式新增支持 Native plugin,支持 Addressable 数据加载,支持基于场景的物理碰撞隔离。

基于广大用户的反馈,1.4.0 版本的 HMI Android 也针对以下功能进行了优化:

○Release 版本支持在 Player Setting 中勾选"Log Startup Timings"后,输出引擎启动关键时间节点等信息

○新增设置 backgroundJobQueue 线程优先级的运行参数

○将 HMI Android 的特有的选项设置一个单独的分栏

○修复了在 Editor 中同时安装 Android 和 HMI Android 导致 Burst 报错问题

QNX & Embedded Linux

1.4.0 版本中,QNX 平台现已全面支持 QNX 8.0,也同样新增了设置 backgroundJobQueue 线程优先级的运行参数,提升了 QNX 平台的 EGL 优先级。也修复了如下问题:

○修复多屏触控失效的问题

○修复 QNX 平台渲染线程、Job 线程优先级设置错误的问题

1.4.0 版本中,Embedded Linux 平台现已支持 Systrace,同时也对 Asan 进行了支持。

OpenHarmony

OpenHarmony 支持 UAAL

"Used as a Library(UAAL)" 是指将渲染相关的功能或渲染管线代码封装为一个独立的库,使其可以在不同的项目中复用,而不依赖于具体的 Tuanjie 编辑器环境。这种做法主要便于移动平台跨项目使用,或在非 Tuanjie 编辑器环境下执行。此前,UAAL 仅支持 Android 和 HMI Android 平台。

1.4.0 版本中,OpenHarmony 平台已全面支持 UAAL。1.4.0 在 OpenHarmony 的导出项目功能中,新增了一个勾选框,勾选后可选择:Use As A Library(Recommended)。无需额外操作,勾选并导出后,导出项目的工程结构目录相较之前自动变化:

○工程项目中,entry 模块只有简单入口

○新增 tuanjieLib 模块,引擎相关的代码资源均位于该模块

详细操作可参考以下视频:

继续完善 OpenHarmony 各功能模块

1.4.0 版本进一步完善了对 OpenHarmony 的各功能模块支持,主要新增了以下支持和优化项:

○支持 WebCamTexture

○新增 .etslib 中通过调用 UI 线程上函数能力

○新增支持低时延模式音频

○在引擎 OpenHarmony 的 globalThis 中,添加了 UIContext 引用,该引用可以用于自定义 UI 的创建等功能

○新增 Player Setting 中勾选"Log Startup Timings"后,输出引擎启动关键时间节点等信息

修复问题

1.4.0 版本也修复了开发者反馈的一系列 bug,主要如下:

○修复 Ubuntu 上从 BuildSettings 面板下载 OpenHamorny Module 失败的问题

○修复 DevEco 创建的 keystore 无法在 editor 里面使用的问题

○修复最新系统上 Vulkan 横屏模式方向相反的问题

○修复横竖屏切换时的显示问题

○修复 js 调用 C# 接口没有返回值问题

○修复系统语言非简体中文时应用名称显示异常的问题

○修复 Vulkan 下 GPUSkinning 未生效问题

○修复使用 UTF 框架跑test签名失败问题

○修复 ts 调用 C# 函数返回 null 时异常的问题

○修复无法在 ts/ets 代码中设置屏幕常量的问题

○替换废弃失效的 OH 权限字段

○修复团结生成的 keystore 无法出包的问题

○修复 VideoPlayer 跳转到指定时间音视频不同步的问题

Audio

功能优化

针对微信小游戏,拓展了音频文件的的压缩下限,同时增强了平台间的兼容性:

○Window 上编码 aac 的最低码率为 96kbps,但小游戏上对包体和内存有更高的要求,因此当 Quality 设置为小于 25 时,将转用 MP3 编码,从而使用更低的码率得到更小的文件压缩体积;

○另外短于 0.3s 的音频在 Windows 上编码成 aac 格式会出现在 iOS 和 Mac 上播放不兼容的问题,以往版本中使用了 PCM 编码的音频作为兜底方案,现改为使用 MP3 编码,能显著降低这部分音频的文件大小。

性能提升

○优化了 AudioSource Component 每帧 Update 的性能,CPU 耗时减少了约 20%;

○Pitch Shifter 音效节点的 CPU 耗时也减少了约一半;

○优化了通过 Streaming 播放音频时的内存占用;

○同时播放多个 Load Type 为 Streaming 的 ADPCM 编码音频时解码过于慢的问题也已被修复。

客户反馈问题响应与解决

○近期我们收到了不少客户导入 MP3 音频文件失败的反馈,调查后我们发现这些.mp3 后缀的文件实际是 wav 格式。为了兼容这种情况,我们在文件后缀名的基础上增加了文件头的判断,从而更加精准的识别音频文件的格式。

○此外,以往版本的引擎在播放视频时,因为视频中音频采样率不是 48K,会导致声音断断续续。该问题已在 1.4.0 版本中修复。

Muse Chat

在1.4.0版本上,Tuanjie MuseChat 持续修复用户反馈问题的同时,并实现 Agent 模式下回答内容的流式输出,且对回答速度及回答准确度做了优化和提升,详情如下:

问题修复

○修复后端 Memory 异常的错误

○修复前端清除对话异常的问题

○修复后端用户登录和鉴权异常的错误

○修复后端部分 Agent 工具异常调用的错误

○修复前端文本内富文本链接过长导致的显示问题

○修复前端中止回答/连接中断时的消息显示异常的问题

性能优化

○Agent 工具 Prompt/速度优化

○更新引擎相关的 RAG 语料库

○接入 Tuanjie IssueReporter(https://issuereporter.unity.cn/)数据

Virtual Geometry

在团结引擎 1.4.0 版本中,我们发布了重磅功能:虚拟阴影贴图(Virtual Shadow Maps,VSM),为开发者提供更加逼真的光影效果;同时,Profiler 功能新增了更详细的渲染信息展示,帮助开发者深入洞察性能瓶颈。此外,1.4.0 版本还带来了多项性能优化和重要问题修复,为开发体验全面升级。

虚拟阴影贴图

常规的阴影渲染技术,如级联阴影贴图(CSM),已经不能满足高面数模型和复杂场景对于阴影质量的要求,而虚拟几何体(Virtual Geometry)功能的推出更是加剧了这一挑战。因此,团结引擎 1.4.0 推出了 GPU 驱动的实时阴影渲染技术,虚拟阴影贴图(Vritual Shadow Map)。

凭借其超高的分辨率(16k x 16k),虚拟阴影贴图能够在大型场景或高精度模型的阴影渲染中表现优异,相较于传统方法呈现更好的阴影效果和更平滑的阴影 LOD 层级过渡,同时保证运行效率。

若要开启虚拟阴影贴图,您只需打开工程的 Project Settings,在 Quality > HDRP 中找到 Virtual Shadow Map 模块,通过开关"Globally Enabled"即可一键开启 VSM。

开启后,虚拟阴影贴图将替代 HDRP 中原先所有的 Shadow Mapping 方案,如平行光所使用的级联阴影贴图。您几乎无需对现有的工程做任何调整,便可一键将场景中的所有阴影渲染方案切换为虚拟阴影贴图。

目前,若要开启虚拟阴影贴图,则需同时在 Project Settings 中开启虚拟几何体(Virtual Geometry)的全局开关。但虚拟阴影贴图并非只能作用于 VG 物体。即使未开启虚拟几何体,虚拟阴影贴图仍能够为这些Renderers生成高质量阴影。我们强烈推荐您同时开启虚拟几何体和虚拟阴影贴图功能,从而取得更好的模型和阴影渲染效果。

更多详情,欢迎访问以下链接:团结引擎用户手册 | 虚拟阴影贴图https://docs.unity.cn/cn/tuanjiemanual/Manual/VirtualShadowMap.html

Profiler

团结 1.4.0 支持在 Profiler 功能中查看虚拟几何体相关的渲染数据。

在 Game View 窗口的 Stats 面板中,新增了当前渲染中开启和关闭虚拟几何体功能的 Renderer 数量的数据。

在 Profiler 窗口的 Renderering 区域下,新增了虚拟几何体相关的渲染数据,包括 Pass 调用次数,Pass 绘制三角形的预估数量,Cluster 在剔除前收集的数量和剔除后实际绘制的数量,GPU 的显存占用大小以及传输数据的数量。

上述的部分虚拟几何体数据会以折线图的形式展现在 Profiler 中。

Shader Graph

Shader Graph 同步新增了对虚拟阴影贴图功能的支持,在项目中打开虚拟阴影贴图功能后,等待 Shader Graph 重新编译后,即可在所有使用 Shader Graph 并能产生阴影的物体上开启虚拟阴影贴图功能,无需额外操作。

优化

优化 render loop 的性能

团结引擎 1.4.0 中,重点优化了 render loop 的性能,使其在一个100万物体的场景中的性能大大提升。这不仅提升了 runtime 时的渲染性能,同时也大大提升了 Editor 能流畅编辑的物体数量,使开发者有更高的自由度来创建场景。

由上图可见,我们成功使 render loop 从优化前的 142+ms 降低到 13+ms,其中 CullScriptable 从 55+ms 降低到 6+ms。团结引擎后续版本会继续优化 render loop,使其性能不断提高。

此外,我们还对 VG 物体的 transform 更新以及 alpha clip 材质物体进行了性能优化。

重构、优化剔除流程

我们把 Frustum culling 由 world space 转为 clip space,优化其性能;改进了 occlusion culling 的剔除效率,使剔除更加高效、精确,降低了 overdraw。

优化 Mesh 导入时 cluster 的构建

我们对 Mesh 生成 cluster 的效率进行了优化,对比团结 1.2 版本,导入速度对比如下:

此外,我们还优化了 cluster 的内存排布,使其更加紧凑,更有利于 GPU 的访问。

优化 cluster streaming 的效率

在之前的版本中,cluster streaming 是执行在主线程上的,当场景较大且 cluster 众多时,streaming 的分析和上传会占用较多的主线程资源;因此团结引擎 1.4.0 中,把 cluster streaming 过程从主线程移出,以提供更好的性能。

优化显存用量和 GPU 性能

在团结引擎 1.4.0 中,我们优化了虚拟几何体对显存的用量,尽可能地压缩每个阶段的数据量,使其更加紧凑和 GPU 友好。这不仅降低了对设备的显存需求,也间接的提升了性能。

通过更加合理的 pass 分配,降低了 GPU 对 buffer 的读取带宽。

改进与 LOD Group 的兼容性并优化性能

虚拟几何体可以和 LOD Group 一起使用。所谓的一起使用是指 LOD Group 和虚拟几何体(VG)可以一同开启,但会优先使用 VG。所以您可以在 runtime 实时地控制 VG 的开关。这主要是为了使开发者使用同一套开发流水线,方便开发者的配置。

VG 物体使用摄像机相对渲染

在之前的版本中,VG 物体使用的是绝对世界空间坐标,而在团结引擎 1.4.0 中,VG 物体将使用相对于摄像机位置的坐标进行渲染,从而避免渲染远处的游戏对象时(具有较大的世界空间坐标),浮点数精度降低带来的一系列问题,例如坐标不精确和 Z 冲突。

Shader Graph

团结引擎 1.4.0 现已升级 Shader Graph,进一步提升功能易用性,并添加多个新节点和新 Shader,为开发者带来更高效、便捷的着色器编辑体验。

新增功能

新增 Local Variable,支持在 Shader Graph 中定义局部变量,模块化布局,简化节点网络,提升逻辑清晰度。

新增渲染优化工具包,提供 Keywords 与 Passes 自定义剔除功能,减少性能开销,提高渲染效率。

新增 Scalable Lit 与 Fabric 两种 Shader,支持灵活调整渲染质量与材质特性,平衡性能与视觉表现。

新增三十余个节点,包括 Procedural/Shape, Input/Lighting 等,覆盖常用动态模型,简化光照渲染开发。

操作优化

优化 LOD 预览,便于开发者进行整体调试。

优化颜色分类并新增热力图颜色模式(Heatmap),提升节点类型识别度,后者帮助快速识别图表中 GPU 占用量高的节点,进一步优化性能。

代码升级

我们集成了 Unity 2022.3.28f1 - 2022.3.48f1 之间所有版本的更新和修复(详情见: ReleaseNote),开发团队经过几个月的努力修复了超过千个 bug,提高了团结引擎的性能与稳定性。

ReleaseNote:https://alpha.release-notes.ds.unity3d.com/search?fromVersion=2022.3.28f1&toVersion=2022.3.48f1

以上就是此次团结引擎 1.4.0 版本的重大内容更新。

自 2024 年 1 月 1 日发布至今,团结引擎下载量已超过 22 万,基于团结引擎构建的项目数量超过 50 万。团结引擎一直关注本土开发者需求,建立起了小游戏、开源鸿蒙和车机(HMI)三个大的平台优势。踊跃的开发者给了我们非常好的反馈,让我们可以把团结引擎做得更好。未来,团结引擎将集成适配 Unity 6 新功能,持续优化三大平台能力,倾听国内开发者的声音,为大家带来更多大家想要的功能,并且始终保持引擎的高性能、高画质,以及稳定性。

非常期待得到你的反馈,与我们一起共建中国版的实时 3D 引擎。

[1] 团结引擎官网:

https://unity.cn/tuanjie/tuanjieyinqing

[2] 团结引擎问答专区:

https://developer.unity.cn/plate/tuanjie-engine?tab=ask

[3] 团结引擎用户手册:

https://docs.unity.cn/cn/tuanjiemanual/Manual/UnityManual.html

Logo

分享前沿Unity技术干货和开发经验,精彩的Unity活动和社区相关信息

更多推荐