-
通过智能体编码加速你的游戏移植进程
借助游戏移植工具包 4 中全新的智能体功能,大幅加快你的游戏移植进程,从而快速开启游戏登陆 Apple 平台的旅程。探索如何与 AI 编码助手协同工作,以便采用 Metal 4、整合 MetalFX 并针对 Apple 硬件优化游戏。了解智能体如何利用 Metal 调试工具自动排查 GPU 渲染故障,助你专心处理最重要的事。
章节
- 0:00 - Introduction
- 1:06 - Porting assistant workflow
- 6:25 - Windowing and frame pacing
- 8:28 - Scene rendering with Metal 4
- 15:16 - Debugging with GPU command-line tools
- 19:09 - Game controllers and MetalFX
- 25:11 - Next steps
资源
相关视频
WWDC25
-
搜索此视频…
大家好,我是David Srour, Metal生态系统团队的工程师。
我们正处于编码智能体 从根本上改变 软件开发方式的时代。 游戏移植也不例外。 过去需要花费数月时间 进行手动平台适配的工作, 现在可以在更短的时间内完成, 只需借助合适的智能体工作流。 Apple平台上的游戏阵容 持续不断地增长, 这些游戏画面精美、体验出色, 这要归功于Apple Silicon、 精美的显示屏以及沉浸式音频。 许多游戏得以 更快速地进入平台, 这离不开Game Porting Toolkit的帮助。
而现在,Game Porting Toolkit 4 为您带来了全新的Agentic Skills , 为您的编码智能体提供 所需的专业知识, 帮助它将您的游戏 更快速地移植到Apple平台, 质量也前所未有地出色。 今天我将向您展示具体方法。 在典型的移植工作流中, 您需要评估工作范围, 建立构建流程 并转换着色器, 启动渲染器, 重新映射所有输入, 添加原生平台风格的打磨, 并优化性能。 这需要时间。 但有了Game Porting Toolkit 4, Agentic Skills 将大显身手。 能帮助您更快地达成目标, 通过弥合 平台移植中的 知识差距, 提升智能体工作的质量, 并减少您需要给予的 指导。 工具包包含: 提供技术指导的 专家技能, 以及提供结构化方法的 工作流技能。 将这一切整合在一起的 是移植助理智能体。 它统筹协调移植方法论, 让您能够专注于 重要的决策。
专家技能提高了 智能体输出最优代码的可能性。 它通过以下方式实现: 提供平台知识, 应用最佳实践, 并标记常见的移植反模式。 这意味着减少调试时间, 并奠定坚实的基础, 为后续一切工作做好铺垫。 移植助理确保 相关技能被使用 在恰当的时机。 在执行过程中,所有计划的里程碑 会自动加载 必要的专家技能, 而不依赖于 模型是否决定使用它们。 验证会检查每项技能的 反模式和最佳实践, 并与评估环境中的 真实参考截图进行比对。
智能体会在里程碑之间 存储所学到的内容, 确保会话间不遗漏任何信息。 为了展示这如何运作, 我将移植Microsoft的MiniEngine, 这是一个D3D12开源引擎, 从Windows移植到macOS。 以下是我的计划分解。 首先,我会展示 移植助理, 它如何规划和执行。 然后我将深入了解专家技能, 在实际移植过程中 观察它们的实际效果。 我今天使用Claude Code 完成所有工作。 让我们开始吧。 这些技能和助理 作为插件提供, 来自GitHub上的 Game Porting Toolkit市场。 您首先需要添加市场。 然后安装插件。 所有技能现已安装完毕, 可以使用。
您现在可以使用 移植助理了。 如果您不确定该做什么, 请直接询问助理。 它将能够引导您 完成其结构化工作流。
智能体要求的第一步 是运行发现流程。 让我们更详细地了解工作流。 从高层次来看,移植助理 工作流经历三个阶段。 发现工作流技能 会查看您的代码库, 从评估环境中 获取参考截图, 并向您询问 关于偏好的问题。 接下来,您与助理 共同规划里程碑目标, 因为移植整个项目 通常一次会话无法完成。
对于每个里程碑,智能体 执行必要的更改, 而您带来专业知识 在过程中引导它。
执行之后是验证—— 智能体使用的 多点检查清单, 用于检查会话中 所做的更改。
验证工作流有助于 保持移植工作持续推进。 它检查应用是否正常启动, 对API使用和着色器 运行Metal验证, 通过屏幕截图 确认视觉正确性,
与基准参考进行比较, 根据已使用技能中的已知 反模式审查代码, 检查内存问题等等。 这个阶段是与智能体合作 解决最终问题的好时机, 处理每个里程碑中 出现的问题。 这就是移植助理 及其工作流。 我经历了相同的过程, 为我们的MiniEngine项目 进行了发现和规划, 并获得了全面的移植计划。 目标和里程碑 都映射了相应的专家技能。 每个目标都分解为里程碑, 我可以逐一推进。 让我们回顾一些主要目标。 我需要一个窗口 才能开始绘制内容。 然后用Metal 4启动渲染器, 让场景显示在屏幕上。 添加游戏控制器支持, 这样我可以四处移动。 并集成MetalFX进行超分辨率处理。 让我们看看专家技能 如何引导智能体完成每个目标, 凭借领域专业知识和最佳实践。 目前应用已能构建和运行, 但屏幕上什么都没有。 我需要一个窗口来显示实际内容。 我告诉智能体设置窗口。 它加载所需的技能。 对于窗口化 和帧节奏里程碑, 智能体实际上需要多个技能 协同工作来创建窗口, 驱动渲染循环, 映射D3D12的交换链模型, 并调整好帧节奏。 窗口技能提供 窗口创建和生命周期方面的专业知识。 转换到Metal会映射 交换链概念。
呈现可绘制对象涵盖 帧节奏最佳实践。 而metal-cpp技能传授 正确的Metal对象生命周期模式。 这些技能覆盖了 此里程碑的大量内容。 通常难点在于确保 遵循所有最佳实践, 而不是仅遵循部分。 对于窗口本身, 技能为渲染循环设置 Metal显示链接, 处理焦点变更和全屏 等生命周期事件, 并以最优方式为游戏配置 图层分辨率和色彩空间。 对于呈现, 它们提供指导以利用 直接到显示的 呈现方式以降低延迟, 管理可绘制对象的 生命周期以避免卡顿,
并保持纹理驻留 以便GPU能够正确访问它们。
这将帮助您避免可能导致 窗口行为异常的常见陷阱, 丢帧或空白输出。 以下是与移植智能体 合作的成果。 流畅的颜色清除动画。 Metal HUD显示稳定的帧节奏, 我可以确信 呈现是可靠的, 然后再开始渲染工作。 里程碑完成。 是时候启动渲染器了。 我的目标是实现光照、阴影、SSAO 和色调映射,以达到首个可玩版本。 Metal 4将API提升到新的层次, 具备显式内存管理 和全新的命令结构。 这些技能弥合了 当前模型中的差距, 并承载了来自 真实世界经验的移植专业知识。
我与助理规划了三个目标。 场景渲染,包括 深度、阴影和颜色通道。 后处理管线的一个子集, 移植SSAO以获得更好的视觉质量, 以及色调映射使像素显示在屏幕上。 最后是动态光照 以完善场景。 我将演示技能如何 引导智能体完成每个目标, 从渲染场景开始。 场景渲染有三个里程碑: GPU资源、着色器管线 和命令编码。 资源技能涵盖GPU内存、 纹理和渲染目标。 着色器管线和转换器技能 负责将HLSL着色器 连接到Metal的绑定模型。 同步技能提供 通道间的同步模式。 要用Metal 4渲染场景, 智能体需要管理GPU资源, 方式特定于该API。 技能教导使用哪些 存储模式, 包括特定于 Apple Silicon瓦片架构的选项。
在Metal 4中, 常量通过缓冲区传递。 技能为此提供 推荐的分配模式。 并确保所有 资源都已注册 到驻留集中以供GPU访问。 我来演示一个示例。 技能教导智能体在使用前 将资源注册到驻留集中, 在应用程序中更早地进行。 这确保每个资源在 GPU需要时都可访问。
没有技能,智能体 不知道需要这个步骤, 只是完成了编译。 GPU无法按预期从纹理读取, 导致结果不正确。 要将现有着色器连接到Metal, 智能体需要着色器管线 和转换器技能。 技能引导智能体使用 Metal 4编译器创建管线状态。
它教导描述符表的 编码规则。 它处理D3D12根签名的转换, 通过Metal Shader Converter运行时。 并提供Metal 4的 参数缓冲区布局模型。 让我们看一个示例。 技能教导智能体 查询参数缓冲区偏移量, 来自Metal Shader Converter运行时。 这确保它们与 着色器期望的匹配。 没有技能,智能体 复制MiniEngine的模式, 用索引乘以大小 来计算偏移量。 但使用Metal Shader Converter时, 布局可能不同。 所以那些偏移量是错误的。 没有报错,只是渲染不正确。 要正确同步GPU工作, 智能体需要同步技能。 Metal 4使用 完全显式的同步, 让您对资源依赖关系 拥有精确控制。
命令缓冲区内的多个编码器 之间需要适当的屏障。 D3D12和Metal 4使用 不同的屏障模型, 技能在它们之间进行映射。 它还提供阶段映射表, 因为D3D12状态 无法直接转换。 我来演示。 技能教导智能体 映射D3D12状态 到Metal 4的生产者-消费者模型。 智能体从一开始就实现 正确的同步。 没有技能,智能体 会采用宽泛的全局屏障, 在编码器边界处。 这对简单情况可能有效, 但可能会悄然出错, 随着渲染管线 变得更加复杂。
我已经让第一个GPU工作负载运行起来了。 智能体根据评估环境 验证输出, 并确认所有三个 几何通道都匹配。 没有后处理还无法呈现, 但我知道方向是正确的。 是时候让像素显示在屏幕上了。 后处理管线引入了 计算调度, 用于SSAO和色调映射通道。 后处理分为两部分。 SSAO链, 一系列计算调度, 需要正确的资源设置 和同步。 以及色调映射,从计算 切换回渲染。 与之前相同的渲染技能 都被两者所利用。 这些相同的技能现在 也充当护栏。 同步技能 捕获屏障配置, 这些配置未考虑 Apple Silicon瓦片内存的工作方式。
资源技能 提供安全默认值 对于增量移植过程中 尚未绑定的资源。 着色器转换器技能 捕获数据对齐不匹配, 发生在引擎和其着色器之间。 我来演示。 技能教导智能体 利用Metal Shader Converter的反射, 从着色器查询 实际的参数数量。 布局匹配,一切对齐。
没有技能, 智能体沿用了 引擎原有的5个根参数。 但Metal Shader Converter 根据HLSL着色器确定布局, 而该着色器只声明了4个。 这种不匹配使采样器表 偏移到错误的位置。
我看到了第一束光! 这始终是一个令人振奋的里程碑。 但有些地方不对劲。 我清楚地看到SSAO在帘子上工作, 这很令人鼓舞。 但整体光照是错误的, 墙面上的纹理 明显被拉伸了。 让我们来调试这个问题! 通常我会在Xcode中 捕获一帧并诊断问题。 但直到现在, 智能体无法独自完成这件事。 但macOS 27引入了 新的命令行工具, 支持完全自主的 智能体工作流: gpucapture用于捕获GPU帧, gpudebug用于分析。 让我们看看智能体如何利用这些 新工具配合GPU调试技能。 我首先描述 我观察到的视觉症状。 智能体加载 调试渲染问题技能。 它提供了一种结构化方法, 从症状到根本原因。 在应用程序运行时, 智能体利用gpucapture工具 捕获GPU跟踪。
现在它正在利用gpudebug工具 检查捕获结果。 它可以检查您通常 在Xcode中检查的任何内容, 资源绑定, 常量、资源内容, 以及管线中的数据流。 它正在追踪与 评估环境的偏差。
智能体找到了问题所在, 并实施了修复。 结构化的调试方法意味着 它没有浪费时间猜测。 它系统地 缩小到问题所在。
这是智能体修复后 MiniEngine的修正版本。 光照和纹理贴图 现在与预期输出匹配。
在验证过程中, 智能体再次使用GPU工具 仔细检查帧捕获。 智能体对比 调度调用和管线, 与我在评估环境中 的原始跟踪进行比对。 它检查所有细节, 包括调度维度。
对每个里程碑手动进行 这样的验证通常很繁琐。 需要加载多个捕获文件, 并并排比较大量数据。 有了macOS 27提供的新工具, 智能体可以更快速地 独立处理这些工作。 最终目标是动态光照。 128个点光源和聚光灯, 通过光源剔除通道计算。 大部分计算基础设施 已经在运行, 但混合资源类型带来了 新的挑战, 以及新的同步模式。
动态光照需要 基于计算的光源剔除通道, 混合使用缓冲区和纹理, 以及用于光源数据的 新GPU资源。 着色器转换器和同步技能 处理剔除通道, 而资源技能 负责光源数据。
即使有了计算 基础设施, 技能仍会标记 此里程碑特有的问题。 之前的驻留模式 再次发挥作用, 新的光源资源自动获得 GPU访问权限。
同步技能捕获了 无效的渲染阶段标志, 这些是智能体在计算编码器上设置的。 着色器转换器技能确保 混合资源类型的正确绑定。
这就是我们的第一个可玩版本。 Sponza场景已正确设置 方向光和动态光照。 应用使用了所有通过Metal 4 移植的渲染功能。 第一个可玩版本完成了。 让我们继续, 为MiniEngine添加更多功能。 到目前为止键盘和鼠标一直工作正常, 但让我们添加手柄支持 以获得更好的摄像机控制。
我提示智能体 添加控制器支持, 它加载了游戏控制器技能。 控制器技能涵盖 GCController发现, 输入模型, 以及从Windows API的移植。 在Windows上,XInput提供 固定的控制器布局。 技能教导智能体检查 每个控制器实际支持什么。 输入也是同样的思路。 不是硬编码按键映射, 技能让智能体查询 实际可用的内容, 在连接的设备上。 控制器可以随时连接 或断开连接。 技能提供正确的发现 和断开连接模式, 使智能体能优雅地处理这些情况。 手柄正常工作了。 设备发现、摇杆映射、 连接/断开事件, 一切都得到了妥善处理。 这使场景导航 更加流畅。
让我们通过集成MetalFX功能 进一步提升。 我将添加MetalFX的 两个不同功能。 超分辨率以较低分辨率渲染, 并重建更高质量的图像。 做得好,可以匹配 甚至超越原生质量。
帧插值将有效帧率翻倍, 通过生成每隔一帧, 代价是一些输入延迟。 两者都是关于用更少资源获得更多。 要了解更多,请查看 《Go further with Metal 4 games》 我请求智能体添加 超分辨率和帧插值。 它加载了两个MetalFX专家技能。
MetalFX有两个里程碑: 时域超分辨率 和帧插值。 每个里程碑利用 一个针对该功能的独立技能。 超分辨率技能指导第一个。 帧插值技能 处理第二个。 超分辨率技能处理 它在像素空间中 正确配置抖动。 没有它,智能体可能会 使用归一化值, 这实际上会禁用 时域积累。 它以正确的缩放和约定 设置运动向量, 避免了朴素设置 可能产生的鬼影。 它为缩放因子提供了 良好的初始MIP偏差, 给您一个坚实的基础来调整。 并提供历史重投影设置, 使缩放器能够跨帧 积累细节。 帧插值技能 处理完整的集成。 它设置了一个专用的呈现线程, 将呈现与渲染 分开进行。 没有它,智能体可能会 从渲染线程进行呈现, 导致帧间距不均匀。 它配置精确的时序, 使插值帧 和渲染帧均匀分布。 并确保呈现顺序正确, 使插值帧 与合成帧 正确交错。 这是两个功能同时运行的效果, 超分辨率加帧插值。
Metal HUD显示 时域超分辨率缩放器 和插值器都在使用中。
macOS 27扩展了Metal HUD功能, 帮助调试 和验证集成。 使用Metal HUD,您现在可以确保 您的MetalFX集成 按预期工作。
超分辨率缩放器的曝光 参数被显示出来, 以便您确保它 被正确传递给API。
您还可以查看 抖动序列信息, 以确保它们设置正确。 超出范围的抖动以红色标记, 散点图帮助您 可视化它们的位置。
现在,让我们看看覆盖选项。 这些将帮助您 调试集成, 更好地了解 可能出了什么问题。
您现在可以可视化MetalFX 所观察到的场景曝光。 抖动图选项将在 HUD中显示散点图。
抖动倍增器 和运动向量缩放比例 都可以被覆盖。 这些覆盖在应用程序 运行时生效, 帮助您调整抖动倍增器 或运动向量缩放比例 来调试超分辨率问题。 查看一个不正确的集成, 我可以观察到摄像机移动时 出现的抖动伪影。 查看HUD中的 运动向量信息时, 我看到X轴缩放比例被取反了。 让我们在覆盖面板中 将其改为正值。
运动抖动现在已修复。
现在在渲染输出中, 纹理对象上 出现了一些模糊。 我将调整抖动倍增器 以提高视觉质量。
这是调整抖动倍增器 前后的对比。
如果HUD覆盖修复了输出, 那就告诉您问题在哪里。 追溯到计算抖动 或运动向量值的逻辑, 并修复源头。 总结一下,Game Porting Toolkit 4中 全新的Agentic Skills 加速了将您的游戏 带入Apple平台的过程。 移植助理提供了 一种结构化方法, 来使用专家技能和工作流技能。 这些技能结合了 知识和最佳实践, 让您游戏中的功能 运行起来。
助理还帮助创建 全面的移植计划, 并设有清晰的里程碑。
我通过以下方式演示了这些技能: 将Microsoft的MiniEngine 移植为原生Mac应用。
现在它使用Metal 4 渲染相同的功能, 与原始应用程序相同。
我还展示了新的gpudebug工具 如何使智能体能够分析帧跟踪。
这些技能在各种移植任务中 提供帮助, 从窗口化、游戏控制器 到MetalFX。 我能够使用Game Porting Toolkit 4中的 技能和工作流 来进行移植, 排查问题, 并将MiniEngine从PC调整到Mac, 用时仅为手动完成 这项工作的一小部分。 我让技能承担了繁重的工作, 而我专注于其他事情: 做出架构决策, 审查智能体的输出, 并提供关于游戏的 重要背景信息。 这些技能处理了所有 平台知识。 在我结束之前, 我将演示移植智能体 在最后一个代码库上的工作。 我将移植助理指向Godot, 一个已有Metal 3后端的 生产级引擎, 并要求它在旁边添加Metal 4。 遵循相同的工作流, 使用相同的技能, 并根据基准和最佳实践进行验证。 这仍然是一项协作努力, 但这些技能 显著加快了速度。 几天内就运行起来了。 这证明了这些技能 不仅限于小型引擎, 还能扩展到生产级项目。 要开始使用, 请下载并安装这些技能。 在您的游戏代码库上试用它们。 调用移植助理, 让它引导您 完成移植过程。 您可以找到这些技能, 在Game Porting Toolkit GitHub仓库中。
我迫不及待地想看到 这些技能如何帮助您将精彩的游戏 带入Apple生态系统。 感谢您的观看。
-
-
3:31 - Install Game Porting Toolkit skills
/plugin marketplace add apple/game-porting-toolkit /plugin install game-porting-skills@game-porting-toolkit -
10:24 - Register resources for residency
// With skill residencySet->addAllocation(texture); residencySet->commit(); // ... argumentTable->setAddress(texture->gpuAddress(), bindPoint); // Without skill argumentTable->setAddress(texture->gpuAddress(), bindPoint); -
11:25 - Query argument buffer offsets
// With skill IRRootSignatureGetResourceLocations(m_MtlCurIRRootSig, locations); size_t offset = locations[i].topLevelOffset; // Without skill size_t offset = paramIndex * descriptorSize; -
12:34 - Map D3D12 states to Metal 4 stages
// With skill m_MtlPendingProducerStages |= MtlProducerStageFromD3D12(OldState); m_MtlPendingConsumerStages |= MtlConsumerStageFromD3D12(NewState); // ... m_ComputeEncoder->barrierAfterStages( m_MtlPendingProducerStages, m_MtlPendingConsumerStages, MTL4::VisibilityOptionDevice); // Without skill m_ComputeEncoder->barrierAfterStages( MTL::StageDispatch, MTL::StageAll, MTL4::VisibilityOptionDevice); -
14:24 - Query shader reflection parameter count
// With skill IRShaderReflection* refl = IRShaderReflectionCreate(); IRObjectGetReflection(compiledObj, IRShaderStageCompute, refl); // ... s_RootSignature.Reset(4, 2); // Reflection reveals: 4 params // Without skill s_RootSignature.Reset(5, 2);
-
-
- 0:00 - Introduction
An overview of how Game Porting Toolkit 4 introduces agentic skills — expert skills and workflow skills — that give a coding agent the domain knowledge to accelerate porting a game to Apple platforms.
- 1:06 - Porting assistant workflow
How the porting assistant orchestrates the full porting process across three stages: Discover (scanning the codebase and capturing reference frames from the evaluation environment), Plan (defining milestone goals collaboratively), and Execute-and-Validate (running the agent with structured validation checklists that check app launch, Metal API correctness, screen captures, anti-pattern review, and memory issues).
- 6:25 - Windowing and frame pacing
How the window, Metal swap chain, presenting drawables, and metal-cpp expert skills guide the agent to implement a correct render loop using Metal Display Link, handle lifecycle events, configure the layer for games, leverage direct-to-display presentation for lower latency, and manage drawable lifetimes to avoid stuttering.
- 8:28 - Scene rendering with Metal 4
How the GPU resources, shader pipeline, Metal Shader Converter, and synchronization expert skills guide the agent through three milestones: GPU resource management (storage modes, residency sets, constant buffer allocation), shader pipeline setup (argument buffer offsets, descriptor table encoding, root signature translation), and command encoding with Metal 4's explicit barrier model mapping D3D12 states to producer-consumer synchronization.
- 15:16 - Debugging with GPU command-line tools
How the new gpucapture and gpudebug command-line tools on macOS 27 enable fully autonomous agent-driven GPU debugging. The agent captures a frame trace, inspects pipeline state, textures, and dispatch dimensions — all without requiring manual Xcode interaction — allowing it to identify and fix rendering issues autonomously.
- 19:09 - Game controllers and MetalFX
How the game controller expert skill ports from Windows XInput to GCController with correct discovery, dynamic button layout querying, and connect/disconnect handling. Then how the MetalFX upscaling and frame interpolation skills handle jitter configuration, motion vector conventions, mip bias, history reprojection, and the dedicated present thread — with new Metal HUD debugging overlays in macOS 27 to validate and tune the integration.
- 25:11 - Next steps
How to get started: download and install the Game Porting Toolkit 4 skills from the GitHub repository, invoke the porting assistant on your codebase, and let it guide you through a structured porting plan with clear milestones.