Version:

O3DE 25.05.0 发行说明

Open 3D Engine (O3DE) 继续其前进势头,推出了一系列专注于稳定性、性能和整体用户体验的新更新。作为这些改进的一部分,由于 Tech-Round 的贡献,Trackview 已经进行了全面改革,现在在 O3DE 生态系统中全面运行。此外,Atom 渲染器的性能和可用性增强已在 AWS 和华为的领导下提供。 对于模拟,O3DE 现在为 ROS 2\ 实施了新的标准化模拟接口。该接口标准是 Open Robotics、Nvidia 和 Open 3D Foundation 通过 Robotec.ai 共同努力的结果,将在即将发布的 Open 3D Engine、Isaac Sim 和 Gazebo 版本中实施。 (规格: https://github.com/ros-simulation/simulation_interfaces )。Meta 还简化了 O3DE 中 Meta Quest Mobile SDK 的设置过程。由于软件包管理现在由第三方打包系统自动处理,因此无需手动安装步骤,从而改善了开发人员的工作流程。此版本解决了 250 多个错误。

Sig-Content

  • TrackView 稳定性和生活质量改进
    • 修复了 TrackView 示例 Python 脚本
  • Script Canvas:
    • 修复 Script Canvas 编辑器关闭时崩溃的问题
    • 如果引用的变量已重命名,则更新槽名称
    • 修复保存新Canvas时的默认文件路径
    • 在重命名时更新变量的属性树
    • 修复了从节点槽提升变量的问题
    • 如果引用的变量已重命名,则更新槽名称
    • 修复了已删除或更改的变量留在图形的变量映射中,这会导致许多不确定的行为
    • 修复了打开无效 ScriptCanvas 文件时的崩溃问题
    • 修复了图表停用错误“无法从图表中获取用户数据。使用无效值构造”
  • 重构 MovieSystem,以便将其移动到 Gem 中
  • Asset Processor 分析有多少资产是新文件、过时、更改了依赖项或具有新的生成器。
  • 添加了过滤器以防止在项目名称中使用保留字(例如 “project”、“name”、“o3de”)
  • 修复了在加载关卡后未恢复的网格可见性标志

Sig-Simulation

  • SimulationInterfaces Gem:实现标准 ROS 2 模拟接口的新 Gem
  • ROS2 Gem:为 LiDAR 传感器添加了分割功能
  • ROS2 Gem:为生成器添加了通知总线
  • ROS2 Gem:重新实现的 PID 控制器
  • ROS2 Gem:修复了 ROS2Clock 和关节纵器中的多个 bug;删除了无法正常工作的 Python 测试
  • WarehouseAssets 仅限资产的 Gem:网格和预制件已优化
  • LevelGeoreferencing Gem:根据 ROS 2 Gem 的功能创建新 Gem
  • 仅限 ProteusRobot 资产的 Gem:Gem 已删除,内容已移至 ROS2RobotSamples Gem
  • 仅限 RosRobotSample 资产的 Gem:已删除 Gem,内容已移至 ROS2RobotSamples Gem
  • WarehouseSample 仅限资产的 Gem:已删除 Gem
  • Ros2FleetRobotTemplate:模板已简化(删除了渲染通道,删除了一个级别)
  • Ros2ProjectTemplate:模板已重新生成(基于 WarehouseAssets 而不是 WarehouseSample 的新关卡)
  • Ros2RoboticManipulationTemplate:简化了模板(删除了一个关卡、渲染通道和许多资源)
  • Ros2RoboticManipulationTemplate:Panda Franka 机器人的资产已移至 ROS2RobotSamples Gem

Sig-Core

  • 通过删除旧资产表来减少 RAM
  • 解决了 CMake 最新稳定版本的问题
  • 添加了针对引擎的 SDK 版本运行自动测试的选项

Sig-Networking

  • 修复了在服务器级别加载期间客户端连接到服务器时玩家生成的问题
  • AWS 云服务 Gem 已移至单独的存储库,以保持与引擎无关。见 aws/o3de-repo
  • 支持非整体式发布模式服务器
  • 修复了包含多个实体的生成网络预制件的问题
  • 如果意外创建了同名的多人游戏组件,多人游戏组件 autogen 会引发编译时错误
  • 添加了游戏会话“level”属性,以便在多人游戏会话开始时自动加载关卡
  • 更好地检查和警告无效 IP 地址

Sig-Platform

  • 解决了 Linux 上的 Python 共享库冲突,该冲突在将 ROS2 环境和 Ros2 GEM 与 O3DE 一起使用时导致分段错误。
  • 禁用了 Android 的 APK 压缩,允许 PAK 文件加载而不会出现明显的延迟或软锁。
  • 修复了 Linux 上着色器管理控制台中的 Python 脚本执行错误,从而允许成功创建着色器变体。
  • 解决了 AWSNativeSDK 版本 1.11.288 中缺少符号导致的整体式 Android 构建的构建失败问题。
  • 弃用了旧版 Android 生成、部署和单元测试脚本,取而代之的是支持最新 Android SDK 和 Gradle 版本的更新o3de.bat命令。
  • 解决了 AWS Core Gem 中的非公有 API 使用问题,允许 iOS 游戏通过 Apple 验证。
  • 解决了 PAL_PLATFORM_NAME 和 PAL_HOST_PLATFORM_NAME 不匹配的问题,该问题导致在 Linux 上生成 Android 项目时出现 CMake 错误。
  • 解决了 UI Editor 元素的可见性问题,并确保在场景中正确渲染。
  • 解决了在 O3DE 编辑器中打开关卡时 Linux 上系统挂起的问题。

Sig-Graphics-audio

主要特点

  • 成熟的 MGPU 支持
    • RHI MultiDeviceObject 的重大重构
    • 图像和缓冲区的多设备掩码
    • MGPU 的 CopyPass 支持
    • 修复在不同设备上运行的 Scope 的 Scope 关联
    • 隐式多设备 RayTracingAccelerationStructurePass
    • 支持从 parent pass 继承设备索引
    • 改进使用多设备功能时的帧图
    • BRDF 纹理生成的多设备支持
    • 在 ImGui 时间戳视图中处理多 GPU 传递
    • 改进 CopyPass 以支持用于查询的设备索引
    • 校准时间戳,实现多设备时间戳可比性
  • SubPass 支持(带宽优化 40%)
  • 重构 Vulkan RenderPassBuilder 以使用 RenderAttachmentLayout
    • 为所有平台上的所有 RHI 启用专用化常量
    • 为 Vulkan 和 Metal 添加对子通道的支持
  • 函数/专用化着色器常量 - 添加了对着色器选项专用化常量的支持。使用专用化常量时,无需创建着色器变体,着色器选项的值在运行时烘焙。此外,还添加了着色器变体的批处理,作为使用专用化常量工作的一部分。在 DX12、Vulkan 和 Metal 上受支持。
  • GeometryView - 引入了一个名为 GeometryView 的新类,该类有助于在 drawItems 和 drawPackets 之间删除重复数据,因为它们现在包含指向相应 GeometryView 的指针,从而使 DrawPackets 和 DrawItem 的大小更小,因此对缓存更友好。最重要的是,它允许在运行时修改索引和流缓冲区以及缓冲区视图,而无需重新生成 DrawPackets/DrawItems。
  • 顶点颜色支持 - 为 BasePBR、StandardPBR 和 EnhancedPBR 材质添加了顶点颜色支持。可以使用可在材质中配置的因子和混合方法将顶点颜色与基础颜色组合在一起。可以从材质中启用/禁用顶点颜色

次要功能

光线追踪

  • 实现了 “Debug Ray Tracing” 组件 - 添加了关卡组件 “Debug Ray Tracing” ,可用于调试光线追踪场景的各种属性
  • 添加了用于光线跟踪的 Blas 压缩
  • 添加了对每个设备一个 RayTracingAccelerationStructurePass 的支持
  • 为 RPI::ComputePass 和 RPI::RayTracingPass 添加了间接调度并更新了全屏调度

Pass

  • 添加了一个新方法:Pass::ChangeConnection,用于更改 Input 或 InputOutput 插槽从不同通道连接到另一个插槽的方式。
  • 向 CopyPass 添加了 ScopeQueries
  • 扩展的 Pass 功能,以改进插入 Pass。

Vulkan

  • 改进的 Vulkan 屏障
  • 将 Vulkan 内存分配器更新到 3.1.0 版本

渲染和性能

  • 实现了渲染后端和其他 API 之间的互作性
  • 从 Atom_RPI 中删除了静态库目标
  • 在 * 中添加了计算着色器支持。MaterialPipeline 材质管道
  • 将 worker 线程数限制为 m_workerThreads
  • 添加了用于跟踪 Atom 资产的内存堆
  • 引入了 scene/viewsrg_all.srgi 作为 scene/viewsrg.srgi 的包装器
  • 添加了对非合成通用场景描述 (USD) 几何体和动画的支持
  • AR/VR/XR 改进 - 所需的 OpenXR 库现在由第三方打包系统自动处理,无需手动安装 Meta Quest Mobile SDK 等。

各种其他修复

渲染管道

  • 允许在刀路树视图中折叠所有刀路
  • 向 ImGui PassTree 视图添加了搜索栏
  • 修复了 BufferAssets 的 Json 解序/序列化
  • OcclusionBus 改进了对按实体 ID 剔除的支持
  • 修复了在上传过程中销毁 RPI::Buffer 时可能发生的崩溃问题
  • 修复了除第一个被忽略之外的所有范围附件清除作
  • 修复了重新创建临时附件的问题
  • 修复了一些与通道附件绑定相关的函数未更新为新的基于 deque 的存储方法
  • 修复了 AttachmentReadback 的虚假崩溃
  • 修复了某些 Atom 样本查看器 (ASV) 测试中发生的死锁

照明与环境

  • 改进了 Disk 和 Spot Light 的光剔除
  • 修复了在切换关卡后不渲染阴影的问题
  • 修复了 Orthographic 相机的 Light Culling
  • 修复了多个管道的天空大气
  • 修复了使用某些 AMD GPU 时地形上可能出现的伪影
  • 修复了使用四灯时屏幕上可能出现的伪影

管道状态管理

  • 修复了 PipelineStateCache 中 PipelineStates 的多线程创建
  • 添加了对多个设备的 RTACPasses 支持
  • 修复了 DiffuseProbeGrid 通道的启用

特定于硬件的修复和 RHI 修复

  • 向 RHIRequirmentRequest Ebus 添加互斥锁
  • Vulkan 特定修复:
    • 修复了 3D 纹理的 SparseBinding memoryBindings
    • 修复了为 Transient Attachments 生成缓冲区屏障的问题
    • 修复了 Vulkan 版本处理
    • 修复了不支持 subpassMergeFeedback 时的验证错误
    • 添加了 RHI HDR 支持(通过 CVAR 激活)
  • 特定于 DX12 的修复:
    • 修复了无绑定描述符
    • 修复了与 DX12::StreamingImagePool 相关的死锁

性能、调试和资源管理

  • 在访问之前检查间接绘制参数的 count 缓冲区
  • 在绑定类型化缓冲区时跳过步长大小断言
  • ImGuiGpuProfiler 支持忽略空闲管道
  • 修复了时间戳的重置和记录

着色器和材质

  • 修复了材质预览不显示实际材质的问题
  • 修复了着色器重新加载错误
  • 修复了与 Material::m_shaderVariantReadyEvent 相关的竞争条件
  • ShaderResourceGroupData:修复了多个设备的无绑定索引
  • 为 Matrix3x3 添加了函数 StoreToRow/ColumnMajorFloat11,用于 GPU 常量缓冲区打包
  • 在控制台模式下运行 BRDF 管道的引导组件
  • 修复了 RayTracing 功能遮罩的用法

资产系统

  • 修复了在导入仅具有混合变形但没有蒙皮权重的角色时编辑器崩溃的问题
  • 修复了导入角色资源的几个问题

验证和错误处理

  • 修复了多个验证层错误
  • 修复了 GetInverseTransform 函数的 epsilon 过大的问题
  • 修复了由于 DiffuseProbeGrid 和 AABB BLAS 描述符的 AZ_Assert 中的重叠附件而导致的验证警告
  • 修复了仍在使用的光线跟踪管道的验证错误
  • 将 GpuCrashTracker 适配到aftermath版本 2024.2.0

特定于平台和编译器

  • 修复了 Mac 和 iOS 上的编译错误
  • Clang 19 修复

用户界面和界面

  • 添加了禁用为游戏启动器创建本机窗口的选项
  • 修复了 LyShine Atlas 支持

AR/VR/XR 技术

  • OpenXRVk Gem:OpenXR 依赖项已更新(1.0.22 -> 1.1.41)
  • 改进了适用于 O3DE 的 Meta Quest Mobile SDK 的安装过程。现在,安装是自动的。

Sig-docs-community

  • Docs 现在将 Hugo 的模块系统用于 API 文档,作为使文档更易于贡献的计划的一部分。在 o3de.org 存储库中使用大型 PR 来更新 API 文档的日子已经一去不复返了。
  • 为此,对 API 文档生成过程进行了一些更改。核心贡献者请注意 sig-docs 仓库中新流程的文档。
  • SIG-Simulation 的新工作包括其文档更新。 🥳

25.05 中的已知问题

  • 已报告与 Clang 19(或更高版本)不兼容。建议最多使用 Clang 18\。如果您的发行版提供了更高的版本,您始终可以通过以下步骤安装其他建议的版本:解决方法是在安装引擎时降级编译器:
  1. 安装最新的 Clang 兼容版本(例如 apt install clang-18)。
  2. 生成引擎解决方案后(参见 官方文档页面 步骤 3),附加所需的编译器版本:
    cmake -B build/linux -S . -G "Ninja Multi-Config" \
    -DCMAKE_C_COMPILER=clang-18 -DCMAKE_CXX_COMPILER=clang++-18  
    

即将到来的有影响力的变化

材质着色器更改(计划于 2025 年 10 月发布 25.10.0 版本)

我们将在 25.10.0 版本中引入几项重大更改,预计将于 10 月发布,这些更改将对材质着色器产生相当大的影响。第一个更改 PR 18392 将材质着色器参数封装到结构体 MaterialParameters 中。

内置材质类型(StandardPBR、BasePBR 等)使用的函数将获得一个额外的参数,例如: VsOutput EvaluateVertexGeometry(VsInput IN, VsSystemValues SV);

变成 VsOutput EvaluateVertexGeometry(VsInput IN, VsSystemValues SV, const MaterialParameters params)

以及几个后续功能。

材质参数访问现在与该结构体一起进行,例如 float2 baseColorUv \= uvs\[MaterialSrg::m\_baseColorMapUvIndex\];

变成 float2 baseColorUv \= uvs\[params.m\_baseColorMapUvIndex\];

该结构无法保存纹理或采样器,因此我们必须用索引替换它们并提供函数来获取它们(如果支持,则从无绑定 SRG 中,或从 MaterialSrg 中的固定大小数组中获取),例如:

real3 sampledColor \= GetBaseColorInput(MaterialSrg::m\_baseColorMap, MaterialSrg::m\_sampler, baseColorUv, real3(MaterialSrg::m\_baseColor.rgb), o\_baseColor\_useTexture, uvDxDy, customDerivatives);

变成
real3 sampledColor \= GetBaseColorInput(GetMaterialTexture(params.m\_baseColorMap), GetMaterialTextureSampler(), baseColorUv, real3(params.m\_baseColor.rgb), o\_baseColor\_useTexture, uvDxDy, customDerivatives);

如果您使用的是提供的材质类型,则除了资产重新处理之外,这应该不会产生任何影响。
MaterialCanvas - 材质着色器需要重新生成,当您使用 MaterialCanvas 编辑器打开这些材质时,会发生这种情况。

将光线追踪 RHI 描述符更改为声明式(计划于 2025 年 10 月发布 25.10.0)

PR18913 更改了以下光线追踪相关类(以及单设备对应类)的声明: AZ::RHI::RayTracingBlasDescriptor, AZ::RHI::RayTracingTlasDescriptor, AZ::RHI::RayTracingPipelineStateDescriptor, AZ::RHI::RayTracingShaderTableDescriptor, 从 builder 模式到 declarative 模式。

需要直接使用这些光线追踪 RHI 函数的代码进行更新,才能使用新的结构。

潜在的变化可能如下所示(例如。DiffuseProbeGridRayTracingPass,一个自定义光线追踪通道,与 AZ::Render::RayTracingPass 分开),旧版本:

RHI::RayTracingPipelineStateDescriptor descriptor;
descriptor.Build()
    ->PipelineState(m_globalPipelineState.get())
    ->MaxPayloadSize(96)
    ->MaxAttributeSize(32)
    ->MaxRecursionDepth(MaxRecursionDepth)
    ->ShaderLibrary(rayGenerationShaderDescriptor)
        ->RayGenerationShaderName(AZ::Name("RayGen"))
    ->ShaderLibrary(missShaderDescriptor)
        ->MissShaderName(AZ::Name("Miss"))
    ->ShaderLibrary(closestHitShaderDescriptor)
        ->ClosestHitShaderName(AZ::Name("ClosestHit"))
    ->HitGroup(AZ::Name("HitGroup"))
        ->ClosestHitShaderName(AZ::Name("ClosestHit"))
;

新版本

RHI::RayTracingPipelineStateDescriptor descriptor;
descriptor.m_pipelineState = m_globalPipelineState.get();
descriptor.m_configuration.m_maxPayloadSize = 96;
descriptor.m_configuration.m_maxAttributeSize = 32;
descriptor.m_configuration.m_maxRecursionDepth = MaxRecursionDepth;

descriptor.AddRayGenerationShaderLibrary(rayGenerationShaderDescriptor, Name("RayGen"));
descriptor.AddMissShaderLibrary(missShaderDescriptor, Name("Miss"));
descriptor.AddClosestHitShaderLibrary(closestHitShaderDescriptor, Name("ClosestHit"));

descriptor.AddHitGroup(Name("HitGroup"), Name("ClosestHit"));