UNIGINE 2.19.1: VR 中的升级器、USD 导入、动画预览、稳定
关键变化
- 从 USD 数据格式导入
- VR 中的升级器(DLSS 和 FSR)支持
- 编辑器中的动画预览
- OpenXR 手动追踪和 Linux 支持
- WebStreaming 插件改进
- 性能优化:更快的哈希图
- ImGUI 集成和 UnigineEditor 的示例插件
- 新的 SpiderVision 样本
- SDK Browser中的账号注册
- Unigine C++ 学习课程
USD 导入
通用场景描述( *.usd格式) 是一种开源的分层场景描述格式,旨在成为 3D 内容创建工作流程的通用交换格式。它广泛应用于电影、动画和 VFX 行业,以简化制作流程并促进艺术家和工作室之间的协作。USD 支持允许在许多 3D 应用程序之间高效、准确地交换 3D 数据。
USD 厨房套装,由皮克斯动画工作室提供。
除了将场景数据导出为 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 中,我们就引入了WebStreaming插件,使您能够通过 WebRTC 广播由 UNIGINE 应用程序渲染的音频数据和视频帧。除了一些优化和改进之外,此版本还使您能够将图像从任何现有摄像头流式传输到单独的 Web 浏览器实例。这使您可以在场景中的不同摄像头之间切换,将不同的视图传输到不同的客户端设备(包括移动设备),甚至可以在单个客户端设备上的单独 Web 浏览器实例中拥有多个不同的视图。
SSRTGI 改进
我们继续改进屏幕空间光线追踪全局照明技术(即 SSRTGI),使其看起来更加逼真。整个效果的半球光线分布已重新设计。SSGI 的累积和应用也已修改。写入缓冲区时 SSAO 的伽玛校正已修复,渲染调试期间 SSAO 可视化也已修复。
此外,反射上的 SSAO 覆盖已被移除,以使其看起来更自然。
其他渲染改进
预计还将推出一系列不同的渲染改进,包括以下内容:
- 针对投影和全向光源(透明材料)优化表面剔除,为投影提供10倍增强,为全向灯提供2 倍增强。
- 增加了调整全光和投射光源的阴影距离和近剪裁衰减的功能。
- 修复了远处静态物体对速度缓冲区的影响的问题。
- 修复了相机移动影响动画材质的动画速度的问题。
- 修复了当叶子偏移参数大于 0时出现的植被视觉伪影。
- 贴花现在支持环境光遮蔽渲染。该功能可通过贴花 PBR材质的环境光遮蔽和不透明度环境光遮蔽输出在材质图表编辑器中使用。
- 修复了当启用动画和深度图选项并且茎噪声值大于 1 时草替代对象的闪烁问题。
- 修复了投影光源和 IES 配置文件导致着色器编译错误的问题。
- 修复了 FSR 升频器导致过大噪音的问题。
- 修复了在全球水体对象表面渲染世界光源的阴影和焦散的问题。
- 修复了渐变模式设置为短距离/长距离范围时不正确的雾霾渲染问题。
- 修复了更改全局纹理质量设置时散射 LUT 纹理、灯光和后期效果受到影响的问题。
- 修复了重新加载与太阳/月亮散射纹理流相关的世界后,世界光源产生的视觉伪影。
- 添加了启用/禁用次表面散射效果的时间过滤功能。您可以通过UnigineEditor 中的次表面散射设置(或通过控制台的render_sssss_taa)来控制它。
- 修复了景观地形对象细节纹理流不正确的问题。
- 修复了在 Vulkan 上清除 3D 纹理时导致将照明烘焙到Voxel Probes时出现伪影的问题。
- 修复了 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 微配置文件导致在禁用“快速关机”选项的情况下关闭引擎时挂起的问题。
- 光源的扩展分析器信息现在显示视口中看到的每种类型的源数量以及它们的反射。
- 修复了复制具有烘焙光照贴图的网格并通过“撤消”取消复制操作导致生成新光照贴图的问题。
- 修复了 AMD GPU 的总 GPU计数器的行为。
- 修复了包含多个表面(反弹次数 = 1 )的大型网格在烘焙光照贴图时发生崩溃的问题。
- 修复了打开没有预生成着色器缓存的项目时出现的“无法打开 .cache 文件”错误。
- 修复了当视口中存在具有不同照明模式的网格时,使用静态照明模式的网格的全向光和投影光渲染阴影的问题。
- 修复了向世界添加节点时有时发生的与 SpatialTreeNode::getIntersection() 相关的崩溃。
- 修复了在某些情况下导致 Vulkan 数据流延迟的问题。
- 修复了与多线程阴影渲染相关的“断言失败!”问题,该问题有时会导致引擎崩溃。
- 将深度重投影添加回渲染调试缓冲区。
- 修复了多线程模式下外部对象边界计算不正确导致阴影随机切换的问题。
- 添加了通过setCurrentTab()方法设置EngineWindowGroup当前选定选项卡的功能。
- 为ObjectParticles的线性阻尼参数添加了一个灵活的修改器(LinearDampingOverTimeModifier)。
- 修复了WindowManager 中窗口最大化或从隐藏状态恢复后窗口拉伸不正确的问题。
- 修复了在某些情况下使用具有富文本格式的文本对象时导致错误和崩溃的与纹理分配相关的问题。
- 修复了传输StructuredBuffer时发生崩溃的问题。
- 修复了Gui对象的Billboard模式。
- 修复了跟踪器工具中动画替换的问题。
- 修复动态安装和卸载附加数据文件夹时发生的崩溃和其他问题。
- 修复了启用gui_base材质的辅助选项时发生的“使用未声明的标识符”错误。
- 修复了启用分析器(DirectX 12) 时烘焙环境探测器和光源阴影时发生崩溃的问题。
- 添加了禁用致命对话框消息并改为记录错误的功能(例如,在运行RuntimesGenerator或BuildTool等控制台工具时)。您可以通过 API 或-dialog_fatal_enabled控制台命令控制此功能。
- 修复了删除位于物理触发器内的节点并触发离开事件后发生崩溃的问题。
- 修复了 Profiler 的RAM Meshes 静态计数器的读数,并在MeshRender信息 ( render_streaming_meshes_info )中显示了额外的已加载内存量。
- 修复了在改变状态时更新基于图形的材质参数和纹理有时会导致崩溃的问题。
- 添加了从预定义开始时间到预定义结束时间播放动画的功能。此功能可通过AnimationPlayback节点(通过 API 的AnimationPlayback类)的新“TimeFrom/TimeTo”参数使用。
- 添加了为所有与时间相关的Profiler参数计算的平均时间值。
- 修复了在启用盒子和球体投影以及实时更新的情况下环境探测器旋转不正确的问题。
- 修复了在改变状态时重新创建材质参数缓冲区有时会导致视觉伪影和某些材质特征渲染不正确的问题。
- 修复了重新挂载数据文件夹后缓存节点重新加载不正确导致流式传输问题的问题。
- 为方向盘控制器增加了力反馈支持,为用户提供触觉反馈,以创造更强的沉浸感(模拟碰撞损坏、“路感”)并增加驾驶的挑战性。
- 各种 UI 改进,例如正确的表格格式和文本换行、修复<br/>标签的问题、正确使用CDATA标签、图像定位、对图像应用 DPI 比例等等。
- 修复了重新加载世界时分配了 Fracture 体的动态网格的错误定位(位置重置为原点)问题。
- 修复了小部件的“已释放”事件 ( EventReleased ) 始终返回 0 而不是标识当前已释放鼠标按钮的掩码的问题。JoyPovMotion事件的签名也已修复。
- 通过新的Cast Baked Global Illumination选项添加了在烘焙全局照明(光照贴图和探测器)时忽略贴花的功能。
- 修复了Node.GetVariable()方法始终返回零值 int 变量而不是 C# API 中的实际变量的问题。
- 增加了对 C++ 和 C# ImGui 示例自定义纹理的支持。
- 修复了将不正确的数据写入蒙皮网格的信息丢失缓冲区的问题。
- 修复了不正确的零尺寸边界检查有时导致节点图标在视口中消失的问题。
- 修复了重新加载后将Lifetime = Engine的节点添加到世界时出现的问题。
- 修复了在更新分配给带有丢失网格的蒙皮网格对象的材质时出现越界访问的问题,有时会导致在移除蒙皮网格然后移除分配给它的材质时发生崩溃。
- 修复了在启用Terrain Lerp选项的情况下分配了mesh_base材质的网格物体流式传输不正确的问题。
- NodeReferences的重新加载变得更加稳定,以防止崩溃和意外行为。
- 修复了与水和表面的平面反射导致其消失的多线程相关问题。
- 修复了尝试启用任何全景视口模式(调试二进制文件)时发生的崩溃。
Unigine编辑器
编辑器 API 变更
我们对公共 UnigineEditor API 进行了许多更改,以扩展其功能,使其更清晰、更易于使用。
随着新ViewportWindow 类的创建,ViewportManager类已重构。所有相关方法已从ViewportManager移至ViewportWindow。
以下 2 个标题已添加到公共 UnigineEditor API:
- UnigineObjectMode.h - 为您提供一个方便的界面来控制在激活对象模式时工具栏中可用的 UnigineEditor 放置工具- 您可以通过ObjectMode::isEnabled()方法在代码中检查这一点。
- UnigineShortcutManager.h - 为您提供一个方便的界面来创建和管理所有快捷方式(热键和组合)以及您通常在Windows -> 设置 -> 热键中看到的快捷方式上下文。此标头包含以下新类:ShortcutManager、ShortcutContext和Shortcut。
有关新类的更多信息,请参阅UnigineEditor API 文档。
动画预览
动画预览现在可以在编辑器中使用,就像其他资产预览一样,可以更轻松地检查内容和选择所需的动画。
以前,要查看动画,您必须将其分配给场景中的蒙皮网格对象。现在,您只需在资源浏览器中选择*.anim资源,然后直接在“参数”选项卡中预览它即可。在这里,您可以查看骨骼层次结构、检查关节行为和轴,并概览角色可用的所有动画。您还可以将动画应用于另一个角色。此外,您可以通过选中“修复原点中的根骨骼”选项来防止网格移动。
ImGui 集成和示例插件
Dear ImGui是一个无臃肿的 C++ 图形用户界面库,可实现快速迭代,使程序员能够快速高效地开发内容创建工具和可视化/调试工具。我们的许多客户都使用过它,并且提出了很多问题并得到了解答。因此,对于此版本,我们决定实现并交付一个集成示例,展示基于Dear ImGui 的编辑器插件最常用和最常问的问题。
该示例在附加商店中以ImGuiSamplesPlugin的形式提供,涵盖了用户在制作自己的编辑器插件时遇到的多种基本情况。
该插件在 UnigineEditor 中创建自己的窗口,该窗口有三个选项卡,每个选项卡都有一个单独的示例:
- 样条线编辑器- 演示如何通过 API 使用编辑器的撤消/重做系统、使用可重新映射的热键(窗口 -> 设置 -> 热键)以及实现自定义可视化,以样条线编辑为例。
- 编辑器(即时模式) - 演示如何使用 EditorImmediate 类在即时模式下(类似 ImGui 的样式)使用编辑器和引擎的小部件。在此模式下编程很简单,但有许多限制。建议将此模式用于原型设计或简单插件。在场景的中心有 4 个连接点,它们形成一个多边形,每个点都可以使用操纵器移动。每个点(X、Y、Z)的当前位置在视口左上角的小部件中每帧更新一次。
- 组件- 演示如何在编辑器中使用 C++ 组件:在编辑器中生成 C++ 组件并将其分配给节点,从而可以立即执行组件的逻辑,并能够直接在编辑器中调整组件参数!
材质图编辑器更新
- 添加了通过按下鼠标右键进行拖动来平移图形工作区的功能。
- 修复了保存包含函数节点的材质图时发生崩溃的问题。
- 修复了保存材质图时切换图表节点选择的问题。
- Alpha Test Accounting现在也适用于基于图形的材料。
- 修复了将屏幕空间次表面散射节点添加到图表时控制台出现的错误。
- 双击图形工作区的空白区域将显示节点创建菜单。
- 添加了新的“屏幕坐标在放大之前”节点,以解决后期效果在屏幕上定位不正确的问题。使用此节点而不是“屏幕坐标”进行获取采样。
- 现在可以通过禁用编译设置中的Vulkan 顶点着色器优化选项来修复由 Vulkan 上的顶点偏移/位置改变而导致的伪影问题(看起来类似于 Z-fighting)。
- 选择门户输入或输出后,虚线将显示到其他门户节点的链接端口的轨迹。
- 添加了以下新节点:升级前的屏幕坐标升级因子
有关基于图形的材料变化的更多详细信息,请参阅内容迁移指南。
UnigineEditor 的其他改进
编辑器改进列表使其更加稳定和方便,包括:
- 如果发生崩溃,编辑器会自动将转储文件保存到 bin 文件夹,并提示您在文件浏览器中打开最后保存的崩溃转储文件(目前仅适用于 Windows)。附加的-editor_dump_full_process_memory标志可以转储整个进程内存。转储以循环模式写入,以避免过多的磁盘空间消耗(最多 5 个转储文件)。
- 修复了从 FBX 文件导入纹理的问题。
- 修复了更新NodeReferences内光源烘焙光照贴图的状态时出现的问题,导致在重新加载世界时丢失新烘焙的纹理而没有提示保存它们。
- 将鼠标光标悬停在“世界节点”窗口上的同时按下F热键(聚焦于选定节点)将焦点设置在层次结构中最后选定的节点上。
- 添加了将表面参数复制并粘贴到一次选定的多个类似网格(具有相同数量的表面)的功能。
- 修复了在 Web 浏览器中打开Microprofile性能数据时发生崩溃的问题。
- 修复了在启用世界阴影投射器可视化器的同时禁用世界光源时发生崩溃的问题。
- 修复了将节点资产从资产浏览器拖拽到编辑器视口中的任何位置时,节点在世界原点(零坐标)处放置不正确的问题。
- 修复了编辑器插件通过deleteLater()删除节点时发生崩溃的问题。
- 修复了视口中节点的矩形选择不正确的问题。
- 修复了重新加载已保存的世界后,NodeReferences内的光源烘焙阴影发生偏移的问题。
- 现在,只要您更改任何项目构建工具的参数,就会自动保存。
- 修复了项目构建工具无法在 Linux 上的控制台模式下生成最终项目构建的问题。
- 修复了当将坐标系设置为“世界”时,仅沿一个轴移动节点时,网格沿所有轴的捕捉不正确的问题。
- 修复了单击资产浏览器中尚未加载的缩略图时发生崩溃的问题。
- 修复了在资产浏览器中主动刷新参数和材质层次结构窗口时快速更改选择时发生崩溃的问题。
- 修复了通过“选择资产”对话窗口删除资产时发生崩溃的问题。
- 修复了恢复分配给节点的 C# 组件的内部属性 GUID 时出现的问题,该问题导致通过“播放”按钮启动项目并重新加载世界后,到 С# 组件的链接断开。
- 修复了子节点重复克隆的问题。
- 修复了在资产浏览器中选择了 FBX 容器的组件时无法锁定参数窗口的问题。
- 修复了在编辑器中运行物理预览后保存世界时身体绳索多边形数量增加的问题。
- 修复了尝试将WorldSplineGraph节点转换为*.mesh文件以及尝试将静态网格分配给WorldSplineGraph 时发生崩溃的问题。
- 纹理绘制模式中的调试材料现在可以正确应用于具有不同数量通道的纹理。
- 修复了由于不支持的通道/深度组合(仅会显示和使用支持的选项)导致在纹理绘制模式中创建新纹理的许多问题、纹理转换问题以及纹理预览中不正确的纹理格式检测。
- 修复了调整材质预览大小的问题。
IG 更新
- 修复了通过IG Host加载具有天气区域和云的状态的问题。
- 修复了在选择不存在的类型时选择其他类型的 CIGI 问题。现在可以使用 Entity ::setAutoTypeMatchEnabled()函数来控制此行为,该函数对 DIS 实体启用,对 CIGI 禁用。
- 修复了雨/雪 CPU 粒子( WeatherLayerPrecipitation )的错误风向。
- 添加了新的调试模式IG::Manager::DEBUG_MODE_INTERPOLATION_INFO,可在屏幕上显示插值定时器参数和状态。也可以通过控制台命令ig_debug_interpolation启用这些数据的显示。
- 修复了连接额外从属设备时插值失败的问题。
- 添加了IG::Manager::reloadGeodetics()方法,强制运行时更新地理参考,这对于动态投影更改很有用。
- 修复了在IG 编辑器插件中处理 meteo 回调相关的崩溃问题。
- 修复了Syncker中MeshSkinned节点的节点 ID 生成不正确的问题,该问题在某些情况下会导致崩溃。
SDK 浏览器中注册
新用户帐户注册变得更加简单,现在可以直接在 SDK 浏览器中完成(无需访问开发人员门户)。
演示和示例
机械臂样品
此示例演示了如何创建基于物理的机械臂,其运动链包括通过铰链关节 ( JointHinge ) 连接的 6 个链节(1 个固定链节和 5 个可移动链节)。每个关节都有一个电机,其旋转通过一对按键控制。末端执行器是一个磁性夹持器,可让您拾取、处理和放下机械臂周围的物体。您可以使用此示例作为模板来创建任何类型的机械臂,并根据任何用例创建所需的 DoF 数,然后连接控制系统(而不是键盘输入)来操纵机械臂。此示例已添加到C++ 示例和C# 示例套件中。
此外,我们还对这些示例套件进行了一些重新安排:
C# 组件示例
- 添加了一个新的复杂解决方案组,并将街机样本和机械臂样本移至其中。
- 将角色控制器示例移至相机组。
C++ 示例
- 履带车辆组已重命名为复杂解决方案,现在包含非物理履带、物理履带和机械臂样本。
- 网络组:增加了两个新的示例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:通过一个简单而又引人入胜的项目进入第一人称射击游戏的世界。
- 比赛:制作街机风格的越野赛车游戏,考验您的创造力。
- VR:通过专为 VR 耳机设计的项目进入虚拟现实领域。
无需注册!立即访问https://learn.unigine.com/,开始您的 UNIGINE 学习之旅!
文档
添加了一组新的超短英语、中文和俄语HowTo快速提示视频:
- 更新了有关SpiderVision插件的文章。
- 更新了UnigineEditor API 参考。
- 更新了MathLib 参考并添加了要在 IDE(IntelliSense)中显示的与数学相关的方法的就地注释。
- 在材质图节点参考中添加了更多描述和示例。
- 完整的 API 更改列表可在API 迁移指南中查看。
- 控制台命令更改的完整列表可在控制台迁移指南中找到。
感谢您的阅读,不要错过更新,因为我们一直在努力使UNIGINE更加伟大!
UNIGINE团队