UNIGINE 2.19.1: VR 中的超分辨率、USD 导入、动画预览、稳定
关键变化
- 从 USD 数据格式导入
- VR 中支持超分辨率技术 (DLSS 和 FSR)
- 编辑器中的动画预览
- 支持 OpenXR 手部追踪以及 Linux 上的支持
- WebStream 插件改进
- 性能优化:更快的哈希图
- ImGUI 集成和 UnigineEditor 的示例插件
- 新的 SpiderVision 示例
- SDK Browser中的账号注册
- Unigine C++ 学习课程
USD 导入与导出
Universal Scene Description(通用场景描述)(*.usd格式)是一种开源的分层场景描述格式,旨在成为 3D 内容创建工作流程的通用交换格式。它广泛应用于电影、动画和 VFX 行业,以简化制作流程并促进艺术家和工作室之间的协作。USD 支持允许在许多 3D 应用程序之间高效、准确地交换 3D 数据。
USD Kitchen Set,来自 Pixar Animation Studios 的资源
除了在 2.19 版本中引入的将场景数据导出为 USD 格式,本次更新还带来了 USD 导入功能(usda、usdc和usdz文件扩展名),目前支持以下场景组件:
- 纹理(具有自动 UNIGINE 阴影纹理转换)
- 材质
- 网格和基本体(球体、立方体等)
- 蒙皮几何体、骨架和动画
- 混合形状(变形目标)
- 光源
- 摄像头
UnigineEditor 的 USD Export插件已重命名为USD Exchanger,从现在起适用于所有 SDK 版本。有关使用该插件的更多信息,请参阅本文。
Hashmap 优化
Hash Map是一种功能强大的数据结构,应用范围广泛,尤其是在需要快速查找时间的情况下。然而,如果我们不注意细节,它可能会变得不理想。我们在此版本中对Hash Map和Hash Set进行了一些重构和优化。它们现在都以类似于向量的方式线性存储数据,从而提高了性能并减少了内存消耗。
为了向后兼容和某些特殊情况,我们还保留了以前的哈希图实现,它被称为BucketHashMap。有关更多详细信息,请参阅API 迁移指南。
视频流改进
早在 2.19 中,我们就引入了WebStream插件,使您能够通过 WebRTC 广播由 UNIGINE 应用程序渲染的音频数据和视频帧。除了一些优化和改进之外,此版本还使您能够将图像从任何现有摄像头流式传输到单独的 Web 浏览器实例。这使您可以在场景中的不同摄像头之间切换,将不同的视图传输到不同的客户端设备(包括移动设备),甚至可以在单个客户端设备上的单独 Web 浏览器实例中拥有多个不同的视图。
SSRTGI 改进
我们继续改进屏幕空间光线追踪全局照明技术(即 SSRTGI),使其看起来更加逼真。整个效果的半球光线分布已重新设计。SSGI 的累积和应用也已修改。写入缓冲区时 SSAO 的伽玛校正已修复,渲染调试期间 SSAO 可视化也已修复。
此外,反射上的 SSAO 覆盖已被移除,以使其看起来更自然。
其他渲染改进
预计还将推出一系列不同的渲染改进,包括以下内容:
- Projected和Omni光源(透明材质)优化表面剔除,为Projected10倍增强,为Omni光源提供2 倍增强。
- 增加了调整Omni和Projected光源的阴影距离和近剪裁衰减的功能。
- 修复了远处静态物体对速度缓冲区的影响的问题。
- 修复了摄像头移动影响动画材质的动画速度的问题。
- 修复了当Leaves Offset参数大于0时出现的植被视觉伪影。
- 贴花现在支持环境光遮蔽渲染。该功能可通过 Decal PBR 材质的Ambient Occlusion和Opacity Ambient Occlusion输出在材质图表编辑器中使用。
- 修复了当启用Animation和Depth Map选项并且Stem Noise值大于 1 时草模型替代者对象的闪烁问题。
- 修复了Projected光源和 IES 配置导致着色器编译错误的问题。
- 修复了 FSR 超分辨率器导致过大噪音的问题。
- 修复了在Global Water对象表面渲染World光源的阴影和焦散的问题。
- 修复了Gradient Mode设置为Short/Long Distance Range时不正确的雾霾渲染问题。
- 修复了更改全局Textures Quality设置时 Scattering LUT 纹理、照明和后期效果受到影响的问题。
- 修复了与太阳/月亮散射纹理流式传输相关的 World 光源在重新加载世界后引起的视觉伪影问题。
- 添加了启用/禁用次表面散射效果的时间过滤功能。您可以通过UnigineEditor 中的Subsurface Scattering设置(或通过控制台的render_sssss_taa)来控制它。
- 修复了Landscape Terrain对象细节纹理流不正确的问题。
- 修复了在 Vulkan 上清除 3D 纹理时导致将照明烘焙到Voxel Probe时出现伪影的问题。
- 修复了 GPU 内存 (Vulkan GAPI) 不足时的视觉伪影。
- GUI 渲染优化使其速度提高约2倍。
- 修复了屏幕底部的 FSR 撕裂伪影。
- 修复了 FFP 渲染导致 AMD 和 Intel GPU 上出现视觉伪影的问题。
- 为立方体贴图添加了双三次过滤和 sRGB 校正,消除了反射中的视觉伪影。
OpenXR支持进度
我们将继续推进 OpenXR 集成过程,并在此版本中添加了手势追踪支持 ( XR_EXT_hand_tracking )。此外,现在我们的 Linux 用户也可以使用 OpenXR 支持。当前支持的版本是 OpenXR 1.1。
OpenXR 对眼动追踪、混合现实以及注视点渲染的支持正在开发中,预计将在未来的版本中实现。
当前支持的扩展列表包括:
XR_OCULUS_audio_device_guid XR_FB_color_space XR_FB_display_refresh_rate XR_KHR_visibility_mask XR_KHR_binding_modification |
XR_EXT_dpad_binding XR_EXT_local_floor XR_EXT_palm_pose XR_EXT_hand_tracking |
XR_EXT_hand_interaction XR_EXT_hand_joints_motion_range XR_EXT_hand_tracking_data_source XR_EXT_debug_utils |
VR 中的超分辨率技术
我们在 2.18.1 中添加的 NVIDIA DLSS 3(深度学习超级采样)和 AMD FSR 2.2(Fidelity FX 超级分辨率)等升频器通过减少更高分辨率的像素负载、释放资源并保持可接受的性能发挥着至关重要的作用。
此版本使其可以在 VR 中使用,并且性能也得到了显著提升。
SpiderVision 插件更新
我们不断改进SpiderVision插件,扩展其功能并提高整体稳定性。此版本包含以下更新:
- 添加了撤消/重做功能
- 改进了投影设置小部件(混合区域、蒙版和扭曲设置)中的多选功能
- 增加了将窗口设置为主窗口的可能性
- 为 UI 添加了工具提示
- 向 API 添加了缺失的无边框窗口类型
DirectX 11 支持即将终止
此版本是支持 DirectX 11 的最后一个版本。从 2.18 开始,DirectX 12 被视为 Windows 上的主要渲染 API。在 OpenGL 支持结束后,我们将在 UNIGINE 2.20 中逐步淘汰引擎中的旧版 DirectX 11 渲染器,以便更快地过渡到新功能,例如硬件光线追踪、无绑定纹理等等。
其他引擎改进
- 修复了将纹理流密度乘数应用于继承材质时出现的问题。
- 修复了 DX12 Microprofile 导致在禁用Fast Shutdown选项的情况下关闭引擎时挂起的问题。
- 光源的扩展分析器信息现在显示视口中看到的每种类型的源数量以及它们的反射。
- 修复了复制具有烘焙光照贴图的网格并通过Undo取消复制操作导致生成新光照贴图的问题。
- 修复了 AMD GPU 的 Total GPU 计数器的行为。
- 修复了包含多个表面(反弹次数 = 1 )的大型网格在烘焙光照贴图时发生崩溃的问题。
- 修复了打开没有预生成着色器缓存的项目时出现的“Can`t open .cache file”错误。
- 修复了当视口中存在具有不同照明模式的网格时,使用静态照明模式的网格的Omni光和Projected光渲染阴影的问题。
- 修复了向世界添加节点时有时发生的与 SpatialTreeNode::getIntersection() 相关的崩溃。
- 修复了在某些情况下导致 Vulkan 数据流延迟的问题。
- 修复了与多线程阴影渲染相关的“Assertion failed!”问题,该问题有时会导致引擎崩溃。
- 添加了 Depth Reprojection Back 到渲染调试缓冲区。
- 修复了多线程模式下Extern对象边界计算不正确导致阴影随机切换的问题。
- 添加了通过setCurrentTab()方法设置EngineWindowGroup当前选定选项卡的功能。
- 为 ObjectParticles 的 Linear Damping 参数添加了一个灵活的修改器(LinearDampingOverTimeModifier)。
- 修复了WindowManager中窗口最大化或从隐藏状态恢复后窗口拉伸不正确的问题。
- 修复了在某些情况下使用具有富文本格式的文本对象时导致错误和崩溃的与纹理分配相关的问题。
- 修复了传输StructuredBuffer时发生崩溃的问题。
- 修复了Gui对象的Billboard模式。
- 修复了Tracker工具中动画替换的问题。
- 修复动态安装和卸载附加数据文件夹时发生的崩溃和其他问题。
- 修复了启用gui_base材质的Auxiliary选项时发生的“Use of undeclared identifier”错误。
- 修复了启用分析器时烘焙环境探测和光源阴影时发生崩溃的问题(DirectX 12)。
- 添加了禁用Fatal对话框消息并改为记录错误的功能(例如,在运行RuntimesGenerator或BuildTool等控制台工具时)。您可以通过 API 或 -dialog_fatal_enabled 控制台命令控制此功能。
- 修复了删除位于Physical Trigger内的节点并触发离开事件后发生崩溃的问题。
- 修复了分析器的RAM Meshes Static计数器的读数,并在MeshRender信息(render_streaming_meshes_info)中显示了额外的已加载内存量。
- 修复了在改变状态时更新基于图形的材质参数和纹理有时会导致崩溃的问题。
- 添加了从预定义开始时间到预定义结束时间播放动画的功能。此功能可通过AnimationPlayback节点(通过 API 的AnimationPlayback类)的新“TimeFrom/TimeTo”参数使用。
- 添加了为所有与时间相关的分析器参数计算的平均时间值。
- 修复了在启用立方体和球体投影以及实时更新的情况下环境探测旋转不正确的问题。
- 修复了在改变状态时重新创建材质参数缓冲区有时会导致视觉伪影和某些材质特征渲染不正确的问题。
- 修复了重新挂载数据文件夹后缓存节点重新加载不正确导致流式传输问题。
- 为方向盘控制器增加了力反馈支持,为用户提供触觉反馈,以创造更强的沉浸感(模拟碰撞损坏、路感)并增加驾驶的挑战性。
- 各种 UI 改进,例如正确的表格格式和文本换行、修复<br/>标签的问题、正确使用CDATA标签、图像定位、对图像应用 DPI 比例等等。
- 修复了重新加载世界时分配了 Fracture 体的动态网格的错误定位(位置重置为原点)问题。
- 修复了小部件的“已释放”事件(EventReleased)始终返回 0 而不是标识当前已释放鼠标按钮的掩码的问题。JoyPovMotion事件的签名也已修复。
- 通过新的Cast Baked Global Illumination选项添加了在烘焙全局照明(光照贴图和探测)时忽略贴花的功能。
- 修复了Node.GetVariable()方法始终返回零值 int 变量而不是 C# API 中的实际变量的问题。
- 增加了对 C++ 和 C# ImGui 示例自定义纹理的支持。
- 修复了将不正确的数据写入蒙皮网格的 Information Lost 缓冲区的问题。
- 修复了不正确的零尺寸边界检查有时导致节点图标在视口中消失的问题。
- 修复了重新加载后将 Lifetime = Engine 的节点添加到世界时出现的问题。
- 修复了更新分配给蒙皮网格对象的材质时发生的越界访问问题,该问题在移除蒙皮网格后再移除其材质时,有时会导致崩溃。
- 修复了当启用Terrain Lerp选项时,分配了mesh_base材质的网格流式传输不正确的问题。
- NodeReference的重新加载变得更加稳定,以防止崩溃和意外行为。
- 修复了与水和表面上的平面反射导致其消失的多线程相关问题。
- 修复了尝试启用任何 Panorama 视口模式(调试二进制文件)时发生的崩溃。
Unigine编辑器
编辑器 API 变更
我们对公共 UnigineEditor API 进行了许多更改,以扩展其功能,使其更清晰、更易于使用。
ViewportManager 类已重构,新增了 ViewportWindow 类。 所有相关方法已从 ViewportManager 移至 ViewportWindow。
以下两个头文件已添加到公共 UnigineEditor API 中:
- UnigineObjectMode.h:提供了一个便捷接口,用于控制 UnigineEditor 工具栏中 Object Mode (对象模式)激活时可用的放置工具。您可以通过代码中的 ObjectMode::isEnabled() 方法来检查此模式是否启用。
- UnigineShortcutManager.h: 提供了一个便捷接口,用于创建和管理所有快捷键(包括热键和组合键)以及快捷键上下文,您通常可以在 Windows -> Settings -> Hotkeys 中看到。此头文件包含以下新类:ShortcutManager、ShortcutContext和Shortcut。
有关新类的更多信息,请参阅 UnigineEditor API 文档。
动画预览
动画预览现已集成到编辑器中,与其他资源预览一样,使您可以更轻松地查看内容并选择所需的动画。
以前,要查看动画,您必须将其分配给场景中的蒙皮网格对象。现在,您只需在资源浏览器中选择*.anim 资源,然后直接在Parameters选项卡中预览它即可。在这里,您可以查看骨骼层级结构,检查关节行为和轴向,并概览角色可用的所有动画。您还可以将动画应用到另一个角色上。此外,通过启用 Fix Root Bone in Origin 选项,您可以防止网格发生偏移。
ImGui 集成和示例插件
Dear ImGui是一个无臃肿的 C++ 图形用户界面库,可实现快速迭代,使程序员能够快速高效地开发内容创建工具和可视化/调试工具。我们的许多客户都使用过它,并且提出了很多问题并得到了解答。因此,对于此版本,我们决定实现并交付一个集成示例,展示基于Dear ImGui 的编辑器插件最常用和最常问的问题。
这个示例在 Add-On Store 中作为 ImGuiSamplesPlugin提供,涵盖了用户在制作自己编辑器插件时遇到的多个基本案例。
该插件在 UnigineEditor 中添加了一个专用窗口,包含三个标签页,每个标签页展示一个独特的示例:
- Spline Editor:演示如何通过 API 使用撤销/重做系统、可重新映射的热键(Windows -> Settings -> Hotkeys)和自定义可视化,以样条编辑为例。
- Editor (Immediate Mode):演示如何使用 EditorImmediate 类以即时模式(类似 ImGui 风格)操作编辑器和引擎的小部件。在这种模式下进行编程非常简单,但存在一些限制。该模式推荐用于原型设计或简单插件开发。
在场景中心,有4个相连的点形成一个多边形,每个点都可以通过操作器进行移动。每帧都会在视口左上角的小部件中更新每个点的当前位置 (X, Y, Z)。
- 组件:演示如何直接在编辑器中使用 C++ 组件--在编辑器内生成并将 C++ 组件分配到节点,实现组件逻辑的即时执行,并能够直接在编辑器中调整组件参数!
材质图编辑器更新
- 添加了通过按下鼠标右键进行拖动来平移图形工作区的功能。
- 修复了保存包含 Function 节点的材质图时发生崩溃的问题。
- 修复了保存材质图时切换图表节点选择的问题。
- Alpha Test Accounting 现在也适用于基于图形的材质。
- 修复了将Screen Space Subsurface Scattering节点添加到图表时控制台出现的错误。
- 双击图形工作区的空白区域将显示节点创建菜单。
- 新增了一个 Screen Coord Before Upscale 节点,用于解决后处理效果在屏幕上定位不正确的问题。请使用该节点进行采样,而不是使用 Screen Coord 节点。
- 在 Vulkan 中由于顶点偏移/位置变化引起的伪影问题(类似于 Z-fighting)现在可以通过在 Compilation Settings 中禁用 Vulkan Vertex Shader Optimizations 选项来解决。
- 当选择一个门户输入或输出时,现在会显示一条虚线,指向与其他门户节点相连的端口。
- 添加了以下新节点:
Screen Coord Before Upscale
Upscale Factor
有关基于图形的材质变化的更多详细信息,请参阅Content Migration Guide。
UnigineEditor 的其他改进
编辑器改进列表使其更加稳定和方便,包括:
- 如果发生崩溃,编辑器会自动将转储文件保存到 bin 文件夹,并提示您在文件浏览器中打开最后保存的崩溃转储文件(目前仅适用于 Windows)。附加的 -editor_dump_full_process_memory标志可以转储整个进程内存。转储以循环模式写入,以避免过多的磁盘空间消耗(最多 5 个转储文件)。
- 修复了从 FBX 文件导入纹理的问题。
- 修复了更新NodeReference内光源烘焙光照贴图的状态时出现的问题,该问题导致在重新加载世界时丢失新烘焙的纹理,并且未提示保存它们。
- 将鼠标光标悬停在 World Nodes 窗口上的同时按下F热键(聚焦于选定节点)将焦点设置在层次结构中最后选定的节点上。
- 添加了将表面参数复制并粘贴到一次选定的多个类似网格(具有相同数量的表面)的功能。
- 修复了在 Web 浏览器中打开Microprofile性能数据时发生崩溃的问题。
- 修复了在启用 World Shadow Casters 可视化器的同时禁用World光源时发生崩溃的问题。
- 修复了从资源浏览器将节点资源拖动到编辑器视口的任意位置时,节点错误地被放置在世界原点(零坐标)的问题。
- 修复了编辑器插件通过deleteLater()删除节点时发生崩溃的问题。
- 修复了视口中节点的矩形选择不正确的问题。
- 修复了重新加载已保存的世界后,NodeReference内的光源烘焙阴影发生偏移的问题。
- 现在,只要您更改任何 Project Build Tool 的参数,就会自动保存。
- 修复了 Project Build Tool 无法在 Linux 上的控制台模式下生成最终项目构建的问题。
- 修复了当将坐标系设置为World时,仅沿一个轴移动节点时,网格沿所有轴的捕捉不正确的问题。
- 修复了单击资源浏览器中尚未加载的缩略图时发生崩溃的问题。
- 修复了在资源浏览器中主动刷新参数和材质层次结构窗口时快速更改选择时发生崩溃的问题。
- 修复了通过"Select Asset"对话窗口删除资源时发生崩溃的问题。
- 修复了恢复分配给节点的 C# 组件的内部属性 GUID 时出现的问题,该问题导致通过Play按钮启动项目并重新加载世界后,到 С# 组件的链接断开。
- 修复了子节点重复克隆的问题。
- 修复了在资源浏览器中选择了 FBX 容器的组件时无法锁定Parameters窗口的问题。
- 修复了在编辑器中运行物理预览后保存世界时绳索物体多边形数量增加的问题。
- 修复了尝试将WorldSplineGraph节点转换为 *.mesh 文件以及尝试将静态网格分配给 WorldSplineGraph 时发生崩溃的问题。
- Texture Paint 模式中的调试材质现在可以正确应用于具有不同数量通道的纹理。
- 修复了在 Texture Paint 模式中创建新纹理时出现的多个问题、纹理转换问题,以及由于不支持的通道/深度组合导致的纹理预览中纹理格式检测不正确的问题(仅会显示和使用支持的选项)。
- 修复了调整材质预览大小的问题。
IG 更新
- 修复了通过 IG Host加载具有天气区域和云的状态的问题。
- 修复了在选择不存在的类型时选择其他类型的 CIGI 问题。现在可以使用 Entity::setAutoTypeMatchEnabled()函数来控制此行为,该函数对 DIS 实体启用,对 CIGI 禁用。
- 修复了雨/雪 CPU 粒子(WeatherLayerPrecipitation )的错误风向。
- 添加了新的调试模式IG::Manager::DEBUG_MODE_INTERPOLATION_INFO,可在屏幕上显示插值定时器参数和状态。也可以通过控制台命令 ig_debug_interpolation 启用这些数据的显示。
- 修复了连接额外从属设备时插值失败的问题。
- 添加了 IG::Manager::reloadGeodetics() 方法,用于强制运行时更新地理参考,这对于动态投影更改很有用。
- 修复了在 IG Editor Plugin 中处理气象回调相关的崩溃问题。
- 修复了Syncker中MeshSkinned节点的节点 ID 生成不正确的问题,该问题在某些情况下会导致崩溃。
SDK 浏览器中注册
新用户帐户注册变得更加简单,现在可以直接在 SDK 浏览器中完成(无需访问开发人员门户)。
演示和示例
Robot Arm Sample
此示例演示了如何创建基于物理的机械臂,其运动链包括通过铰链关节(JointHinge)连接的 6 个链节(1 个固定链节和 5 个可移动链节)。每个关节都有一个电机,其旋转通过一对按键控制。末端执行器是一个磁性夹持器,可让您拾取、处理和放下机械臂周围的物体。您可以将此示例用作模板,根据任何使用案例创建具有所需自由度(DoF)数量的任何类型的机器人臂,并将控制系统连接到该臂,而不是使用键盘输入来操作它。此示例已添加到 C++ Samples 和 C# Samples 套件中。
此外,我们还对这些示例套件进行了一些重新安排:
C# Component Samples
- 添加了一个新的 Complex Solutions 组,并将 Arcade Sample 和 Robot Arm 样本移至其中。
- 将 Character Controller 示例移至 Cameras 组。
C++ Samples
- Tracked Vehicle 组已重命名为 Complex Solutions,现在包含 Non-physical Tracks, Physical Tracks 和 Robot Arm 示例。
- Network 组:增加了两个新的示例 Simple Http Response 和 Image Http Response,用于演示相应的服务器;将 Image Http 示例重命名为 Image Http Request,将 Simple Http 示例重命名为 Simple Http Request。
UNIGINE C++ 学习课程
我们最初用 C# 制作的免费在线 UNIGINE 学习课程现在也可供 C++ 开发人员使用。课程结构与 C# 相同,涵盖基本方面以及许多其他高级且非常有趣的主题,包括动画和物理、照明、材质创建、添加声音和音乐、GUI 创建、优化基础、视频录制等等。
完成课程后,您不仅可以获得实践经验,还可以通过四个令人兴奋的项目丰富您的项目集:
- ArchViz:通过交互式对象创建身临其境的室内场景
- FPS:通过一个简单而又引人入胜的项目进入第一人称射击游戏的世界
- Race:制作街机风格的越野赛车游戏,考验您的创造力
- VR:通过专为VR头盔设计的项目进入虚拟现实领域
无需注册!立即访问https://learn.unigine.com/,开始您的 UNIGINE 学习之旅!
文档
添加了一组新的超短英语、中文和俄语HowTo快速提示视频:
- 更新了有关SpiderVision插件的文章。
- 更新了 UnigineEditor API 参考。
- 更新了 MathLib 参考并添加了要在 IDE(IntelliSense)中显示的与数学相关的方法的就地注释。
- 在材质图节点参考中添加了更多描述和示例。
- 完整的 API 更改列表可在API Migration Guide 中查看。
- 控制台命令更改的完整列表可在Console Migration Guide 中找到。
感谢您的阅读,不要错过更新,因为我们一直在努力使UNIGINE更加伟大!
UNIGINE团队