This page has been translated automatically.
Recent news:
Table of contents:

UNIGINE 2.19: 主要优化, OpenXR, 通过WebRTC进行视频流, 支持 USD, 动画升级

关键变化

  • 多线程的渲染,显着地增强了CPU端性能
  • 引擎启动加载优化
  • 主要的优化,以减少内存使用情况
  • 改善流媒体系统,包括异步节载
  • 支持OpenXR
  • 角色动画系统升级(实验)
  • 支持 USD 格式的导出
  • 与 .NET 8 集成
  • SpiderVision 插件用于多输出多个监视器和曲面屏幕图像
  • 通过WebRTC进行视频流(实验)

引擎启动加载优化

网格和属性现在在单独的线程中异步加载,与材质并行,对启动加载时间几乎没有影响,因为这个时间主要取决于材质和文件系统初始化。

纹理的加载也被优化了,加入了更多的多线程。

对于包含大量内容的大型项目,这些优化将平均启动加载速度提高到1.41.9倍。

默认情况下,该模式是启用的 (async_init=1),但如果需要,可以将其关闭。

包流

我们改进了存档数据流的性能(UNG和ZIP存档的内容),使其更快、更节省内存,能够部分读取存档文件(部分映射),在启动时提供高达1.2倍的加载提升,这是由于更快的头处理和更少的RAM消耗。此功能仅支持无密码保护的非压缩包,其他包与以前一样管理。

UNG文件格式已经更改,以支持新的功能,同时删除了存档内文件的2Gb大小限制(也删除了非UNG包的大小限制)。总体启动初始化性能有所提高。

带有自动迁移工具的2.19+项目不支持旧式UNG存档。但是,自动迁移不支持密码保护的UNG存档,因此您必须使用用于打包的SDK版本中的ung_x64工具手动解包它们,然后使用UNIGINE 2.19 SDK中的ung_x64工具以新格式重新打包它们。

NodeReference的异步加载

实现了在加载世界时延迟异步加载 NodeReference,提供了1.3倍世界加载加速并解决了重新生成节点ID的问题。

默认情况下,该模式是启用的 (world_async_load_node_references=1),但如果需要,可以将其关闭。

CPU 优化

实现了一个多线程DX12渲染器,通过有效地利用其所有内核的功率,显着提高了CPU性能,提供了2倍CPU性能增益。多线程渲染模式对可以在运行时执行的操作施加了一些限制:例如,在渲染阶段,您不能更改对表面渲染有影响的设置(如render_distance_scale等),分配给表面的材质参数,以及对渲染有影响的对象参数。

如果需要,您可以通过 render_multithreaded = 0 控制台命令切换回单线程模式。

VRAM和RAM使用优化

增强了UNIGINE分配器,以改进应用程序的RAM和VRAM分配的管理,从而实现更快、更有效的分配过程。更新后的分配器提供静态和动态内存池,用于优化分配,并收集小分配的统计信息,以防止内存泄漏。分配数量平均减少了15倍,为大型项目节省了数百兆字节的RAM。

主要的流系统更新改进了内存管理,降低了总体内存消耗并减少了峰值。新的流设置已经取代了旧的,这意味着您将不得不重新调整流配置。

Mipmap流已经为纹理实现,所以纹理缓存变得不必要,并将在2.19中删除。纹理流系统现在将自动管理一切,不需要额外的用户操作。

Skinned Meshes 的流也得到了改进。API已经改变,所有与网格动画相关的函数都从 Mesh 类移动到一个新的 MeshAnimation 类。在这方面需要一些手动代码迁移(有关详细信息,请参阅 API迁移指南).

大量的小优化将会带来更多的内存节省。

优化内存消耗,减少长时间运行应用程序的内存消耗增加。

UGUID 变化

还对UGUID进行了优化,以减少内存消耗:现在一个UGUID不存储字符串,这使得它作为一个键更轻量,将其大小从72字节减少到20字节。这种优化可以节省大约5%的RAM消耗,对于一个拥有大量资源的大型项目来说,这可能包括几十到几百兆字节(参见下面我们的一个大型项目的内存分析器截图)。

如果您的项目包含通过API管理的UGUID,则需要一些手动代码迁移(参见API迁移指南中的更多细节)。

材质质量

新的 Materials Quality 特性让您在保持项目质量和性能平衡方面更加灵活。您可以设置几个不同的纹理分辨率,甚至在基于图形的材质中实现不同的特征集,结果将根据全局选择的质量水平值(低、中、高)来渲染。只需在构建图形时添加 Material Quality Switch 节点,并将不同的实现选项连接到相应的端口。不同版本的材质将自动生成,并用于相应选择的质量水平。

Node Reference 的唯一的光贴图和阴影贴图

直到 2.18.1,所有由 Node Reference 创建的几何体实例都为每个特定的表面共享一个公共光贴图,限制了场景中实例对象的光贴图使用。 UNIGINE 2.19 为您带来了烘烤单个光贴图以及存储在 Node Reference 的单独实例中的几何形状的阴影贴图的能力,消除了这些限制,释放了光贴图的力量。

动态 Environment Probe 的多次光反射

所有的动态反射现在都支持多次光反射,所以Probe将在反射中看到并渲染自己。Planar Reflection Probe 和动态 Environment Probe 可实现多次光反射。

天空,云,和雾的先进颜色控制

我们增加了对天空、云和雾的颜色通过LUT的扩展控制。

其他渲染改进

各种渲染改进包也有望包括以下内容:

  • 增加了后期效果传感器的时间滤波器,以减少噪音从SSRTGI的影响。
  • 优化去噪器,在使用 Color Clamping Blur 缓冲的一半和四分之一分辨率的情况下去除伪影。
  • 一组DLSS和FSR升级PC和控制台的改进。
  • 我们已经显著提高了Local Tonemapper的性能,提高了1.5-3倍,并提供了额外的选项,可以在一半和四分之一分辨率下渲染它。
  • 更新了Local Tonemapper,增加了新的Effect On Dark Areas Gamma参数。
  • 修正了Environment Probe产生的反射中SSHGI的问题。
  • 修正了Global Water对象曲面的视觉伪影,如果它是Geodetic Pivot节点的子节点。
  • 颜色抑制控制已被添加到间接交错缓冲。
  • 修正了一个夜晚云层颜色不正确的问题(World Light的散射设置为Moon)。
  • 解决了ProjectedOmni光源在基于物理的雾霾中依赖光源旋转的镜头耀斑问题。

与 .NET 8 集成

添加了 .NET 8 集成,具有更高的性能,C#12,更好的垃圾收集器,改进的序列化/反序列化,以及更多(请参阅完整列表)。

如果您使用 Microsoft Visual Studio 进行开发,您应该将其升级到 2022版本。您可以通过这个链接下载必要的.NET 8文件。

对OpenXR的支持

增加了对OpenXR的支持,这是一个开放标准,旨在统一AR/VR/MR软件开发,以实现更广泛的硬件覆盖,减少移植或重写代码的工作量,提供跨不同平台和设备的无缝集成。这种转变不需要用户进行任何重要的代码迁移,因为更改主要是在底层进行的。

目前的实现是通过OpenXR API支持VR的基线,我们将在未来添加更多关于OpenXR扩展的功能。

2.19的基线实现具有基本功能,如不同的头戴式显示器、控制器和运行时支持,包括对Stereo Hidden Area的支持。

眼动追踪、手动追踪、Vive追踪器支持以及其他类型的输入设备正在开发中,并有望在未来的更新中推出。

SpiderVision 插件

我们将所有与显示器、拼接屏和投影仪相关的主要渲染输出功能,以及边缘混合扭曲和其他早期在一组不同插件(Wall, Projections, EasyBlend等)中实现的功能整合到一个名为 SpiderVision 的插件中,并从2.19开始替换它们。这使得此功能的使用更清晰,更方便,并减少了开销(多个类,插件,启动参数等)。

Syncker内部实现的屏幕和投影配置功能也转移到了 SpiderVision 插件中。配置文件的格式已经改变,但是迁移工具可以将旧式配置转换为新的格式。如果您的应用程序通过API (Syncker::Projections 类)管理投影,则需要进行一些代码迁移。

Quadro Sync 支持

对于使用专业 NVIDIA Quadro Sync 图形卡的系统,已经添加了对跨多个显示器的帧渲染同步的支持,确保在DirectX 12和Vulkan上实现稳健和准确的帧到帧同步。此功能在Sim SDK版本中可用。要启用同步,只需使用 render_quadro_sync 1 控制台命令,或通过API调用 Render::setQuadroSync(1)

通过WebRTC进行视频流(实验)

广播音频数据和视频帧由UNIGINE应用程序呈现到无限数量的设备通过WebRTC(网络实时通信)已经成为可能。

您可以在远程计算机、组织内某处的桌面或云托管服务提供的虚拟机上运行UNIGINE应用程序。UNIGINE使用该计算机可用的资源(如CPU, GPU,内存等)来运行应用程序逻辑和渲染帧。呈现的输出被连续编码为媒体流,并通过轻量级Web服务堆栈传递。然后,用户可以在其他计算机和移动设备上运行的标准Web浏览器中查看此流,并从浏览器控制体验,将键盘、鼠标和触摸事件以及从客户端Web页面发出的自定义事件发送回UNIGINE。

新功能可通过实验性的WebStream插件UNIGINE 2 Sim SDK 版本中使用

其他引擎改进

  • 修复了即使未启用 Unpack NodeReferences 选项, World::getNodeByName() 方法也会返回 Node Reference 内容的问题。
  • 由于许多内存优化删除了节点名称映射,因此按名称搜索节点变得较慢。建议通过属性/组件参数访问节点,而不是尝试使用World类(getNodeByName)和Node类(findNode, FindNodes)的方法通过名称查找节点。
  • 修复了在Vulkan上加载带有 Landscape Terrain 对象的世界时与结构初始化相关的崩溃。
  • 修正了当使用 Visualizer by Mask 可视帮助器时,与 Landscape Terrain 参数相关的崩溃问题。
  • 当从Vulkan交换链复制数据时,通道现在会自动正确交换(不再需要调用 Image::swapChannels())。这消除了用错误的颜色通道渲染最终图像的问题,在某些情况下出现在Vulkan上。
  • 现在,即使启用了fast_shutdown选项,插件也会执行关机,因为它们可能在关机时执行关键逻辑(保存配置,关闭/销毁套接字等)。新的Engine::isFastShutdown()方法被添加到公共API中。
  • 从API中删除了已弃用的 StructuredBuffer::getData() 方法,改为使用 Render::transferStructuredBuffer()/asyncTransferStructuredBuffer()
  • 修正了在 GeodeticTransformer 插件中将C++结构复制到C#的问题。

UnigineEditor

USD 格式的导出

通用场景描述(*.usd 格式)是一个开源的、分层的场景描述格式,旨在成为3D内容创建工作流程的通用交换格式。USD 支持允许在许多3D应用程序之间高效和准确地交换3D数据。USD 格式广泛用于电影、动画和视觉特效行业,以简化制作流程并促进艺术家和工作室之间的协作。

在2.19中,我们增加了将场景内容(包括模型,光源等)导出到USD文件的功能。此功能可通过UnigineEditor的 USD Exporter 商插件用于SIMEngineering版本。 有关使用该插件的更多信息,请参阅本文

多资源浏览器窗口

为了方便您,现在可以同时打开资源浏览器窗口的多个实例,每个实例都有自己的过滤器,使您能够在它们之间拖动资源,以便在多个文件夹/挂载点之间重新组织它们时方便资源管理。

打包发布构建内容

在创建应用程序的最终 Release 版本构建时,Project Build工具现在可以将项目数据文件夹的内容打包到UNG存档文件中。您还可以指定例外情况-不应该打包的文件、文件扩展名和文件夹。

版本控制集成更新

对版本控制系统的支持现在包括 Subversion (SVN)Git,并且已经合并到一个 VCSIntegration 插件中。有关使用该插件的更多信息,请参阅本文

材质图形编辑器更新

更方便和更快的组装

在这个版本中,我们增加了一组生活质量的改进,通过删除重复的操作和优化工作流程,使创建材质图的过程更简单,更直观,更快。

为材质图形编辑器添加了一组热键,以快速创建最常用的图形节点(如Add, Multiply, Clamp, Sample Texture等)。您可以简单地从任何插座上拖动边缘并按下热键。

您可以找到热键的完整列表,并根据需要在Settings窗口中进行调整。

用于算术运算(Add, Subtract, Divide等)的节点现在被添加到具有默认输入常量的 Material Graph 中,以加快图形组装的过程,删除频繁重复的操作。

还有其他一些改进:

  • 增加了通过 Ctrl + S 热键保存当前图形状态的功能。
  • 为了确保在您的后期效果中使用的所有纹理在您需要它们的时候都在那里:您现在可以定义是否在强制模式下加载每个纹理,或者您可以设置每个效果的流模式(适用于它使用的所有纹理)。

  • 修复了材质图编辑器中文本选择高亮显示。
  • 如果在材质图中使用了不正确/缺失的子图,则会出现一条错误消息,指出该子图的名称。

其他UnigineEditor改进

  • 增加了只选择当前在视口中可见的表面的能力(通过 Viewport Mask)。只需在 Selection Filter 中选择 Use Viewport Mask For Selection

  • 修正了 Make Parent 操作 (Ctrl + P) 在某些情况下导致的问题:当前选择的错误元素被制作为其他元素的父元素。
  • 属性的 Make Parent 操作现在也可以通过热键(Ctrl + P)来完成。
  • 修正了在更改父材质名称(在参数窗口中)后更新父材质名称的问题,除非材质被修改并保存。
  • 颜色选择器对话框现在总是保持在所有其他窗口之上,不阻止输入。
  • 修复了重新启动编辑器后重置 Grass 对象 Mask Terrain 设置的问题。
  • 修复了移动或克隆带有丢失GUID的 Node Reference 时的崩溃。
  • 在编辑时,为了方便起见,Node ReferenceWorld Nodes 层次结构中有一个不同的图标。

  • 修复了在 World Nodes 层级中点击 Node Name 以外的其他列时重命名节点的问题。
  • 修正了 Randomizer 工具在 Node Reference 有非零偏移的情况下节点放置的问题。
  • 修复了在材质和属性层次中重命名子元素时 Batch Rename 中的不正确索引,以及其他批量 Batch Rename 相关的修复。
  • 修复了由NodeGeoWidget导致的选择大量 Node Reference 时编辑器冻结的问题。数据库起源现在只显示 ObjectLandscapeTerrainObjectTerrainGlobal 节点,并作为只读参数显示。
  • 修复了同时调整材质编辑器和视窗大小的崩溃(DX12 + AMD)。
  • 修正了在导入有几个LOD的FBX模型并选择了 Combined By Postfixes 选项时的崩溃。
  • 修复了关于节点可见性的单击和框架选择的不同行为的问题。
  • 修复了在 Global Water 对象的负z位置时抓取 FieldShoreline 纹理的问题。
  • 如果在项目二进制文件旁边没有找到迁移脚本,现在会相对于 data_path 进行检查。
  • *.dds资源的默认 Unchanged 选项已被禁用,因为UNIGINE中纹理的运行时格式是*.texture
  • 修复了在 FinalSimplified 渲染模式切换时出现的 Error Can't find variable 错误。
  • 扩展 AssetManager API

Sandworm 工具改进

  • 修正了投影32237中 ObjectLandscapeTerrain 生成时间和文件大小过大的问题。
  • 到贴图增加了一个选项来控制添加最小地形高度值。将这些数据添加到贴图中会减慢地形的生成速度,但在生成从水中升起的尖峰的罕见情况下会有所帮助。
  • 修复了 Mask + Vegetation 生成完成高度生成后卡住的问题。
  • 修正了一个不理想的贴花沿着大的样条段拉伸的问题。
  • 修复了使用低 TMS Zoom 级别值时获得 Landscape Layer Map 大小不正确的问题。
  • 修复了区域受 Boundaries 限制时 Landscape Layer Map 尺寸不一致的问题。
  • 修正了基于矢量数据源的数据在转弯和曲线处不正确生成栅栏的问题。

IG的更新

  • KDIS支持已更新到2.10版本。
  • 修正了CIGI SymbolTextDefinition 的文本方向错误。
  • 一些变化,以支持更新的 Syncker 随着新的 SpiderVision 插件。

实验动画系统更新

到目前为止,我们的动画系统继续发展,增加了以下改进:

  • 实现 ObjectMeshSkinned 的LookAt链。
  • ObjectMeshSkinned 的骨骼旋转约束。
  • 改变了 ObjectMeshSkinned 的变形目标管理。
  • ObjectMeshSkinned 的骨旋转添加了几个插值模式。
  • ObjectMeshSkinned 不再支持网格几何修改,因为有一个特殊的过程模式,其中可以设置自定义用户网格。
  • ObjectMeshSkinned 的动画重定向现在可以使用一对(anim_path, mesh_path)进行注册。

这个版本带来了一系列API更新(详细信息请参见 API迁移指南)和一组展示新特性的С++示例。

我们把更多的努力投入到新的多功能 Sequencer 工具的积极发展,以取代旧的 Tracker 系统,以及添加更多的功能,以动画系统,所以您可以期待更多在我们未来的更新。请继续关注。

新的动画示例

C++ API Samples 示例套件中添加了一组展示新功能的新Animation示例,包括以下内容:

  • Bones Constraints Sample 演示了如何使用骨旋转约束。
  • Bones IK Sample 演示了如何使用逆运动学来控制骨骼。用极点向量作为约束,确定关节的弯曲平面。
  • Bones Look At Sample 演示如何使用 LookAt 链瞄准目标。
  • Bones Masks Sample 演示如何使用骨蒙版。
  • Bones Retargeting Sample 演示如何使用相同的动画骨骼有不同的比例。
  • Bones Root Motion 演示如何提取运动的根骨,并将其应用到对象。
  • Bones Sandbox Sample 一个沙盒,使您能够检查IK链,LookAt 链,骨旋转约束的所有可用设置。
  • Bones Simple Foot Placement Sample 使用IK链将脚放在表面上的简化变体。
  • Bones State Machine Sample 演示了如何制作一个基于 ObjectMeshSkinned 的动画状态机,在角色的状态(动画)之间动态切换,实现支持根运动,平滑过渡和脚运动匹配。

最低规格更新

随着技术的不断进步,系统需求往往会随着时间的推移而增加。我们在UNIGINE 2.19中调整了最小规格,使它们能够提供最新的特性和功能。

Debian 10 (Buster)支持将于2024年6月30日结束,因此我们将其作为最低要求,并相应地更新内核和GCC版本。

我们的内部构建切换到v143工具集,这至少需要CMake 3.21。总而言之2.19带来了以下更新:

  • CMake 3.21+
  • gcc 8.3.0
  • Python 3.7+
  • Linux (kernel 4.19+) x64

演示和示例

新的API示例

一个新的 GUI To Texture 示例已经添加到 C++ Samples中 (C++ Samples -> Render to Texture -> Gui to Texture),演示了如何使用Gui::render()方法将GUI渲染成纹理,并在应用于网格的材质中使用此纹理(如反照率,发射等),例如,在屏幕上实现带有UI元素的游戏内屏幕)。

CUDA 在 Engineering SDK

在2.18.1中仅为Sim SDK版本添加了CUDA集成示例,并展示了与外部图形API的交互,现在也可以在Engineering版中使用。您也可以使用它们作为整合引擎图形API (Vulkan, DX11, DX12)和其他图形API (OpenGL, DX, CUDA等)的基础。

文档

增加了一组新的超短的HowTo快速提示中文视频:

感谢您的阅读,不要错过更新,因为我们一直在努力使UNIGINE更加伟大!

UNIGINE团队

Build: ()