大多数浏览器和
Developer App 均支持流媒体播放。
-
将高端游戏移植到 Apple 平台
探索在 Apple 平台上吸引全球玩家的关注有多么简单。我们将介绍如何评估 Windows 内容在 Apple 芯片上的可执行情况、通过探索代码示例开启游戏移植过程、将着色器代码转换为 Metal 代码,以及将你的游戏移植到 Mac、iPhone 和 iPad。探索能够解析 HLSL 着色器的增强型 Metal 工具,以便在 Metal 上验证、调试和分析移植的着色器。
章节
- 0:00 - Intro
- 2:06 - Evaluate your game
- 2:07 - Port your game
- 6:22 - Configuration
- 9:29 - Shaders
- 11:36 - Graphics
- 16:06 - Input and rumble
- 17:56 - Audio
- 18:53 - Cloud saves
- 21:28 - Debug and profile with Metal tools
- 28:39 - Wrap-up
资源
- Download the Game Porting Toolkit 2
- Forum: Graphics & Games
- Get started with Metal shader converter
- Getting started with Metal-cpp
- Metal
- Metal Developer Resources
- Rendering reflections in real time using ray tracing
- Simplifying GPU Resource Management with Residency Sets
- Validating your app’s Metal API usage
- Validating your app’s Metal shader usage
相关视频
WWDC24
Tech Talks
WWDC23
WWDC22
WWDC21
WWDC20
WWDC19
-
下载
大家好!我叫 Jacek Ratajewski 是 Apple GPU、图形 和显示软件团队的工程经理 今天 我将和 Alè 一起 为大家介绍 如何将高端游戏移植到 Mac、iPad 和 iPhone 上
去年 Metal 推出了 游戏移植工具包 借助这个工具包 开发者可以 更轻松地将高端游戏 从其他平台移植到 Mac 上 《死亡搁浅:导演剪辑版》等游戏 还成功移植到了 搭载 M 系列芯片的 iPad 以及 iPhone 15 Pro 上 新的游戏移植工具包 2 带来了一整套新版工具 帮你加快高端游戏移植过程 同时确保高端游戏可以在 Mac、 iPad 和 iPhone 上顺利启动并运行 首先 如果你的游戏 已在 Windows 平台上线 则可以使用随附的 适用于 Windows 游戏的评估环境 开启移植之旅 以便更好地了解你的游戏 在 Apple 芯片上的运行情况 接下来 你可以利用 《人机界面指南》 应用特定于 Apple 设备的 设计惯例 在你完成规划阶段后 游戏移植示例代码 提供了一个很好的起点 帮你顺利开始设置项目 以及了解移植游戏的最佳实践 如果你习惯于使用 C++ 编程 Metal-cpp 可以在你选择 偏好的编程语言时提供更多选择空间 如果你的游戏目前使用的是 通过 HLSL 实现的着色器 Metal 着色器转换器可帮你 将这种着色器转换为 Metal 最后 如果你使用的是 现有资源构建管道 适用于 Windows 的 Metal 开发者工具可帮助你将它用于 在 Apple 设备上发布你的游戏 在本次讲座中 我们将带你体验 游戏移植过程 首先是对你的游戏进行评估 接下来 我们将演示 新的游戏移植工具包 如何帮助你移植 游戏的代码和资源... 最后 我们会介绍 如何在移植过程的每一步 利用 Metal 工具 调试和分析你的代码 在移植过程的第一步中 如果你的游戏已在其他平台上线 借助适用于 Windows 游戏的 评估环境 在开始移植过程之前 就可以查看游戏 在 Apple 芯片上的运行情况 这样你就可以 更好地了解基准性能 并确认着色器 已成功转换为 Metal 这是 505 Games 发行的《控制》 通过评估环境 在 MacBook Pro 上的运行情况 今年推出的新版工具 支持更多游戏技术 现在 如果你的 Windows 游戏 使用的是 AVX 指令 在将它移植到 Apple 设备上之前 就可以对它进行评估 目前 评估环境 还支持光线追踪 且优化了图形和 计算兼容性 性能也得到了提升 因此 你可以更好地了解 你的游戏 在 Apple 设备上的运行效果 借助 Xcode 中 针对 Metal 工具的新改进 现在 你可以在移植过程的 任何阶段 对原始 HLSL 着色器的源代码 进行调试和分析 无论是评估原始的 Windows 二进制文件 还是调试游戏的 Metal 版本 同样令人兴奋的是 开发者社区欣然采纳了这个工具 并通过 Whisky 和 Homebrew 等项目 或 CrossOver 等产品提供了 更多评估现有游戏的方法
现在 当玩家在 Mac、iPad 或 iPhone 上玩你的游戏时 他们可能会期望获得自己熟悉、 符合 Apple 平台惯例的一些体验 要了解在移植游戏时需要注意 哪些方面的用户体验 请观看视频 “为 Apple 平台设计高端游戏” 游戏移植工具包还新增了一个部分 即专门针对游戏的《人机界面指南》 其中提供了有关不同主题的建议 比如 如何优化首次启动体验 或如何确保你的字体在各种尺寸的 Apple 显示屏上均清晰易读 现在 你已经随时可以开始移植游戏 好的项目配置有助于 轻松适配 Mac、iPad 和 iPhone 游戏移植工具包 2 提供的 出色的新示例代码 可帮助你实现这个目标 示例代码由交互式教程组成 这个教程对移植过程的 几大要素进行了分步介绍 从项目布局来看 所有的参考文档 都分类汇集在不同的文件夹中 每个文件夹详细介绍了 如何移植特定的游戏子系统 如图形、着色器、音频、 游戏控制器等等 每个文件夹均包含一节课程 以及相关的所有代码 例如 如果我打开 “GameInput”这个文件夹 Xcode 将显示这个项目中有关 处理游戏控制器输入的所有文件 其中 README 文件 介绍了为你的游戏 提供游戏输入支持 所需掌握的所有信息
这种方式可以让你 专注于你所需要的内容 而且代码示例触手可及 方便你在学习时进行理解 最重要的是 这是一个完整的 Xcode 项目 你可以通过构建和运行这个项目 来了解各个方面如何合而为一! 这款简单的 2D 游戏包含 这个项目所有章节中的 所有代码 且展示了将这些技术 融合在一起的效果 你可以对它进行修改、试验 甚至将其中一部分 用于你自己的项目!
其中已包含适用于 macOS 和 iOS 的所有配置 因此可轻松构建并在 iPhone 或 iPad 上运行这款游戏 使用这个示例代码 是将游戏移植到 Apple 设备的一个良好开端
接下来请 Alè 为大家详细介绍 如何移植你的游戏 谢谢 Jacek 我叫 Alè 是来自 Apple Metal Games Ecosystem 团队的 一名工程师 今天 我将为大家讲解 游戏移植代码示例项目的 一些重要方面 首先 我会演示如何将你的项目 配置为同时适配 macOS 和 iOS 接下来是如何将着色器 和图形移植到 Metal 然后 我会介绍输入支持 包括震动 还会谈到音频 最后 我将分享一些建议 帮助你通过云存档功能 为玩家提供可随时随地畅玩的 丝滑的多设备游戏体验
正确配置你的 Xcode 项目有助于 成功将你的游戏移植到 macOS 上 只需一步即可 完成构建并使它在 iOS 中运行 借助 Xcode 你可以轻松地 统一适配各种 Apple 设备 同时还可以根据需要进行自定 这种方式非常适合游戏 因为游戏通常使用通用代码库 且所有目标平台 共用大部分项目设置
这个游戏移植示例演示了 如何设置多设备项目 这个示例同时以 macOS 和 iOS 设备为目标平台 可在“Supported Destinations”下 找到这个项目设置 这项设置可确保 macOS 和 iOS 都能充分利用相应的 SDK
必要时 你可以借助 Xcode 基于目标平台 轻松区分某些元素 比如 库、框架和代码段 针对 iOS 和 macOS 的 目标平台条件可帮助你 为其中一种操作系统 编译部分文件 进一步而言 你的项目可能还包含 专为其中一种目标平台 定制的整个文件 例如 针对 macOS 和 iOS 的 App 生命周期文件可能有所不同 在这种情况下 你可以在 Xcode 中通过过滤条件 基于 SDK 为特定目标平台指定文件 不过 对于众多共用文件 只需使用“Always Used”过滤条件 即可将它们用于各种平台
用于游戏开发的 大多数 Apple 框架 都同时支持 macOS 和 iOS 这使得针对这两个平台的 开发体验变得非常简单 今年全新推出的增强功能 使这一过程变得更加轻松 得益于统一的 Metal 着色器 现在 编译一次着色器即可 将它们部署到 macOS 和 iOS 平台 Metal 设备初始化也实现了统一 因此 你可为这两个平台 使用相同的创建 API 且可以利用设备认证 API 通过查询设备的 性能配置文件来扩展或缩减 游戏配置 今年推出的另一项增强功能是 游戏模式即将登陆 iOS 平台! 在游戏模式下 iOS 会减少后台活动 和蓝牙延迟 从而提升输入 和耳机响应速度
iOS 18 可能会自动 为你的游戏启用游戏模式 不过 如果你想确保启用 这个功能 只需 将“GCSupportsGameMode”键添加到 iOS info.plist 中 并设为“true” 这个游戏移植示例代码 演示了其中的几个关键配置步骤 请查看示例代码了解更多信息 关于项目配置还有一个细节 C++ 是开发游戏时使用的 一种热门编程语言 你可能已在游戏中使用这个语言 为演示如何利用 你在 C++ 方面的专业知识 游戏移植示例代码 预先配置了 Metal-cpp 这是适用于 Metal 的官方 C++ 绑定 今年 Metal-cpp 已成为 游戏移植工具包 2 的一部分 如果你已经可以 熟练使用 C++ 语法 便可以轻松开始使用 Metal 最重要的是 与调用 Metal Objective-C 头文件相比 开销并未显著增加 如需了解更多信息 请查看 developer.apple.com 上的文档 并观看 2022 年的视频 项目设置完毕后 接下来就是着色器 游戏移植工具包 2 包含 Metal 着色器转换器 它可以让你轻松 将着色器移植到 Metal 它支持所有着色器阶段 包括光线追踪 和网格着色器等前沿技术 以及几何和曲面细分着色器 等传统技术 Metal 着色器转换器 可真正加快移植速度 通过使用游戏移植工具包中的 Metal 着色器转换器 将《刺客信条:幻景》的着色器 移植到 Metal Ubisoft 节省了数月的开发时间 除了移植着色器之外 Metal 着色器转换器还可帮助你 将资源布局移植到 Metal 它还包含运行时头文件专用库 可帮助你将资源绑定到 管道并完成常见任务 如需进一步了解 Metal 着色器转换器 请查看 developer.apple.com 上的文档 并观看去年的视频: “将游戏移植到 Mac, 第 2 部分:编译你的着色器”
今年 Metal 推出了 全局一致纹理访问功能 且更新后的 Metal 着色器转换器 已全面支持这项功能 这样 你就可以开发需要使纹理操作 在所有线程组中均可见的高级算法 此外 Metal 着色器转换器 现在可以理解并携带 来自源 HLSL 的调试信息 因此 你可以充分利用 Metal 工具的各种功能 来调试和分析转换后的着色器 最后 从今年开始 只需将着色器 转换为 MetalIR 一次 便可在所有 Apple 设备上进行部署
这个游戏移植示例项目 演示了如何利用 Metal 着色器转换器 以及如何在编译一次后 在 macOS 和 iOS 上 部署统一的着色器 要调用 Metal 着色器转换器 你可以使用命令行工具 也可以链接到它的动态库 在 Windows 和 macOS 上均适用
为简单起见 这个游戏示例 使用的是命令行工具 即:直接传递输入文件并指定输出 如需进一步了解有关 着色器转换的丰富选项 请运行 metal-shaderconverter --help 将着色器移植到平台上之后 便可以开始渲染图形! 为此 Metal 提供了 专为 Apple 设备设计和优化的 现代图形和计算 API 这个 API 具有各种高级功能 请查看 Metal 文稿中的 相关内容 今年 Metal 专门针对游戏 进行了优化 首先是资源的驻留 在其他平台上 GPU 可以拥有 独立的内存 但容量有限 游戏会将资源拷贝到内存中 只要资源的大小 不超出内存的限制 游戏就可以高效访问这些资源 在 Apple 平台上 统一的内存模型允许 GPU 访问大量内存 但需要在 Metal 中注明 哪些资源需要驻留 以便访问 为简化这一流程 并让习惯使用其他平台的 用户感到更加熟悉 我们于今年推出了 Metal 驻留资源集
你的游戏将资源加载到 CPU 和 GPU 共用的 统一内存中 你可以使用驻留资源集 定义资源组 然后一次性使它们全部驻留在内存中
借助驻留资源集 你无需再单独跟踪每项资源 这有助于简化你的代码 并减少 CPU 开销 驻留资源集的使用方法非常简单 首先 从 Metal 设备创建一个新的 Metal 驻留资源集实例 然后 将这个驻留资源集 添加到命令队列中 向队列提交工作后 会自动将资源集内的所有内容 标记为驻留状态 你还可以将驻留资源集 与单个命令缓冲区相关联 接下来 添加游戏所需的分配 如纹理、缓冲区甚至整个资源堆
完成后 提交 你对驻留资源集所做的更改 你只需在创建或移除资源时 执行一次设置步骤 绘图时 你可以 像往常一样将工作编码到 驻留资源集所关联的 队列中的命令缓冲区 提交命令缓冲区后 它将继承驻留资源集 使内存分配可供 GPU 使用 如需了解更多信息 请查看文档、 新版“使用光线追踪 实时渲染反射”代码示例 以及游戏移植示例代码 驻留资源集大大简化了 采用 Metal 光线追踪的过程 因为你可以将所有光线追踪场景资源 标记为驻留状态 并将它们归入一个资源集内 今年 Metal 还进行了其他优化 以便移植来自其他平台的光线追踪 现在 你可以按行主序 指定加速架构中的变换矩阵 这样 你就可以省去在运行时 将它们转移所产生的开销 你还可以直接访问 片上相交结果存储 从而提升性能 因为这可避免在光线追踪 着色器函数之间传递参数时的 数据拷贝及潜在的 GPU 内存溢出 使用渲染器制作出精美的画面后 接下来便可以通过 MetalFX 显著提升游戏的性能 MetalFX 的工作原理是 将分辨率较低的图像 缩放至目标输出分辨率 所需时间比直接以输出分辨率 渲染所需的时间短 MetalFX 的使用方法非常简单 在渲染循环中 创建时间缩放对象后 只需指定颜色、 深度、动作和升频输出的纹理 并提供抖动偏移量 今年 我们新增了响应式蒙版 这项可选功能可帮助你 在包含快速移动对象 且运动信息不准确的场景中 实现更高的升频保真度 使用 Alpha 混合时 可能会出现这种情况
最后 将升频通道编码到命令缓冲区 这样就完成了 你的时间 MetalFX 升频器已准备就绪
Metal 提供的高级图形和计算功能 比我在本视频中介绍的要多得多 如需通过实际示例来了解 如何使用 Metal 移植高级渲染器 请查看游戏移植示例项目 并观看去年的视频 “将游戏移植到 Mac, 第 3 部分:使用 Metal 进行渲染” 为 GPU 编程固然有趣 但要让玩家看到 你所创造的美妙世界 还需要在屏幕上显示出来
这个游戏移植示例项目 演示了如何使用 Apple 框架 高效地为你的游戏实现 适应目标设备几何形状的 全屏模式和窗口模式 另外 推荐大家观看视频 “为 Apple 平台设计高端游戏” 其中为如何在 Apple 设备上 向玩家展示你的游戏 提供了很好的指导 画面只是游戏的其中一个方面 移植其他游戏子系统 就像渲染一样简单 首先是输入和震动 输入的形式有多种 在 macOS 和 iOS 设备上 你的游戏通常可以感知并响应 玩家在游戏控制器、鼠标 和键盘上的操作 此外 iOS 设备可同时识别 多达 10 个手指的触控 从而提供更加个性化的体验 游戏控制器框架是一种 统一解决方案 借助它现代且灵活的设计 你既可以注册事件回调 又可以按需轮询玩家的操作 这是在各种设备上 获取玩家输入信息的首选方式
这个游戏移植示例项目展示了 移植输入代码有多么简单 例如 如果你当前的代码 直接轮询游戏控制器的状态 你同样可以选择使用 游戏控制器框架来完成这一任务 游戏控制器框架 可使代码更短、更简洁 即使玩家并未连接游戏控制器 你也可以安全调用这些代码...
但是 就感知而言 输入仅仅是其中的一部分 要让玩家沉浸其中 很重要的一点 是通过震动效果来传达 对于游戏内事件的反馈
你可以通过将游戏控制器框架 与 Core Haptics 相结合 来实现震动效果 Core Haptics 也是用于在配备 触感引擎的 iOS 设备上 提供触觉事件的框架 如果游戏控制器支持触觉反馈 你可以直接通过它的触觉属性 创建一个触觉引擎实例 这个单一实例可以消除 不同供应商的游戏控制器之间的 任何差异 如需深入了解触觉反馈 请观看“游戏控制器的进展” 和“Core Haptics 简介” 在音频方面 Apple SDK 提供了一套 全面的音频框架和技术 这些框架和技术对于打造 丰富的 App 体验至关重要 尤其是 PHASE 框架 它是游戏的绝佳选择 PHASE 的全称为 物理音频空间化引擎 它可以帮助你为耳机 或扬声器等不同类型的输出设备 创造丰富、动态的音频体验 更棒的是 它还能理解你的游戏场景 帮助你模拟几何声音遮挡等 复杂的音效 如需了解更多信息 请观看介绍 PHASE 的视频
游戏的逻辑还可能需要 与中间件 SDK 集成 才能播放音乐和音效 在这种情况下 你可以使用 Audiokinetic Wwise 和 FMOD 等 热门中间件 它们都适配 Apple 设备 请查看游戏移植示例项目 这个项目通过 PHASE 在游戏中出现玩家射击 或发生物体碰撞时 播放立体声 在 Apple 设备上 构建游戏的独特优势在于 除了轻松适配 macOS 和 iOS 你还能够让玩家的游戏进度 跨设备保持同步 例如 你的玩家最初是 在家里的设备上玩游戏 如果玩家在达到某个里程碑后 保存了游戏进度 你的游戏便可以将存档数据 上传到 iCloud 之后 假设玩家在乘坐公交车 毫无疑问 玩家可以 在 iPhone 上打开游戏 从 iCloud 加载游戏存档数据 从上次的游戏进度继续玩 并在游戏过程中使存档数据保持同步 最后 如果玩家去了一家咖啡馆 决定使用屏幕更大的 iPad 玩游戏 游戏还可以从 iCloud 加载进度
随时随地在不同设备上继续 游戏进度的关键在于“云存档” CloudKit 可帮助你实现 不同设备之间的无缝切换 确保游戏进度始终有效 游戏移植项目演示了如何通过 iCloud 将一台设备上的高分等游戏存档数据 传输到另一台设备上
本例通过“CloudSaveManager”类 来处理同步工作 如需进行试用 请确保使用 iCloud 标识符对它进行设置 并指定一个包含游戏存档数据的 现有文件夹 游戏启动后 示例会调用“sync” 并传入一个完成处理程序块 这个代码块非常适合处理 本地数据和云数据之间的 各种合并冲突 最后 为了将游戏进度保存到云端 示例每次将数据写入存档文件时 都会调用“upload” 这是另一个通过传递完成处理程序块 解决各种冲突的时机 在不同的设备上畅玩游戏的体验很棒 但是 如果你的游戏进度 不包含可向朋友炫耀的游戏内成就 游戏体验就会大打折扣 借助 Game Center 你可以轻松添加这类社交功能 你可以通过 App Store Connect 创建成就 并将它们与你的游戏相关联 每项成就都有一个用于在游戏中 报告玩家进度的唯一标识符 完成对玩家的身份验证后 你可以使用 GKAchievement 类中的 “reportAchievements”函数 来报告新的进度百分比
在 Game Center 中显示成就 可以让玩家 在无缝切换设备时 继续为取得成就而努力
你可以通过游戏移植示例代码详细了解如何使用 App Store Connect 配置成就 以及如何将成就 报告给 Game Center 不过 要将精彩的游戏 移植到 Apple 设备上 仅仅是编写代码还不够 接下来请 Jacek 继续 为大家介绍 Metal 工具 谢谢 Alè! Metal 提供了一套出色的开发者工具 可帮助你调试和分析移植的游戏 确保它可在 Apple 设备上 发挥最大潜力... 首先是运行时验证 它可帮助你捕捉 API 的使用 及着色器代码中的常见问题 Metal 性能 HUD 可为你的游戏 提供实时性能叠加 Xcode 中的 Metal 调试器提供了 高级调试和分析工作流程 例如分析依赖关系、 调查视觉构件、分析着色器等等! 最后 Instruments 中的 Metal 系统追踪有助于衡量和分析 你的游戏对系统的整体影响 今年推出的一项新功能是 你可以将这些 调试和分析工具 与通过 Metal 着色器转换器 移植到 Metal 的 HLSL 着色器 结合使用 我重点介绍一下可与转换后的着色器 结合使用的 3 种工具: 运行时验证、着色器调试器 以及着色器分析器 不过 在此之前 我先介绍一下如何准备项目 以便为这些工具提供有关着色器的 充足调试信息 只需一步即可准备着色器 以便在 Xcode 中进行调试和分析 将 -Zi 和 -Qembed_debug 添加为 DXC 命令的参数 接下来 Metal 着色器转换器 会将调试信息传播至 Metal 库
根据调试信息重新构建着色器后 便可以开始进行调试和分析 Metal 提供的第一个运行时 验证层是 API 验证 API 验证可通过检查 资源初始化程序、 函数参数或不支持的功能 来防止对 Metal API 的无效使用 它非常轻量 因此 可在整个开发过程中 使它始终处于启用状态 今年 Metal 着色器转换器工作流程的 验证功能得到了优化 特别是在验证参数缓冲区中 编码的采样器状态方面 Metal 运行时验证 还提供了第二层验证: 着色器验证 你可以使用它来捕获着色器中的错误 尤其是可能导致未定义的行为的错误 着色器验证提供了 一个 Address Sanitizer 可检查无效的资源使用或驻留问题 检测潜在的堆栈溢出 现在还可以检测 对错误类型纹理的访问 将纹理绑定到转换后的着色器时 经常会出现这种错误 在这种情况下 请注意着色器验证 及新的验证检查功能 如何协助发现 CPU 上的 API 端 与 GPU 上的着色器端 存在纹理类型不匹配的问题 并直接在原始着色器代码中 显示这个问题 高端游戏可能包含数千个着色器 因此 着色器验证在今年 增加了对需要验证的着色器代码区域的 控制力度 你对自己的游戏最了解 因此 现在你可以根据 自己要关注的重点 为所选管道启用或停用着色器验证 这有助于减少当前的 无关问题所产生的噪声 或者在启用着色器验证后 提升游戏性能 如需了解如何使用 API 和着色器验证层 包括对每个管道的验证 请查看 Metal 文档中的相关文章 将问题范围缩小至特定管道后 便可以使用着色器调试器 提供的用于调试代码的 一套独特而强大的功能 着色器调试器的特别之处在于 它可以同时显示每行代码的 所有变量信息 左侧的调试导航器 显示的是着色器的所有执行历史记录 在导航器中选择任何一行 相应代码行都会 在源代码编辑器中高亮显示
源代码编辑器的右侧 显示的是变量值预览 点按预览按钮将调出特定变量的 更详细的视图 其中显示所有相邻像素的变量值 右侧的蒙版则显示 哪些像素执行了这个行代码
以上内容均有助于深入了解 着色器的执行情况 且可以帮助你 调试最复杂的着色器问题 最后要介绍的是着色器分析器 它同样为转换后的着色器 提供了新的支持 寻找游戏瓶颈的其中一种方法是 识别开销最高的着色器 并了解开销最高的函数和代码行 为此 着色器分析器 提供了着色器开销图 这个开销图按开销从高到低 显示着色器函数调用 并在下方提供对应的 着色器源代码 左侧的边栏中标注了 源代码的性能统计信息 注明每行代码的 开销有多大 将鼠标悬停在饼图上 可调出一个性能弹出窗口 其中包含相应代码行的详细信息 例如在 GPU 上执行的 指令数量以及 不同指令类别的开销 你可以通过这些信息 快速找出着色器中开销最高的部分 然而 着色器在屏幕上不同像素处的 性能表现可能会有所不同 原因可能是着色器执行的是 不同的代码路径 或根据像素位置使用了不同的资源 在这种情况下 性能热图可帮助你 将开销最高的像素可视化 你可以放大 以进一步查看这些像素 以及像素所属 SIMD 组的 更多信息
选择某个像素将显示 SIMD 组的 执行历史记录 其中直观呈现了所有线程的调用栈 包括哪些线程何时 处于活动状态的信息
执行历史记录下方 是针对着色器源代码的 性能注释 如每行代码执行的指令数量
无论是直接用 Metal 着色器转换器 还是使用 Metal 着色语言 原生实现着色器 这些性能分析工作流程 以及针对 Metal 着色器工具的 其他优化 均可在你移植游戏的过程中 提供最佳的工具使用体验 你可以将所有 Metal 工具 用于移植过程的每一步 从评估原始的 Windows 二进制文件 到移植、调试和优化 游戏的 Metal 版本 大家可在 Apple Developer 网站上 了解整套 Metal 工具 并查找相关文档 另外 别忘了观看以前的视频 了解可用于调试并进一步优化 你的游戏的出色技术
我和 Alè 今天讲了很多内容 演示了可帮助你轻松 移植到 Mac、iPad 和 iPhone 的 许多工具和平台增强功能 这些工具目前均已可用 在 developer.apple.com 上 我们还为游戏移植工具包 2 推出了全新的主题页面 你可以分别访问这些工具 也可以下载 包含移植游戏所需的 所有内容的统一软件包 将游戏移植到 Mac、iPad 和 iPhone 上的操作过程从未如此简单 游戏移植工具包 2 中的 所有新增工具和增强版工具 均可在整个过程的 每一步为你提供支持 包括进行评估、 移植游戏代码和资源 以及调整游戏体验 以适配 Apple 设备 新的游戏移植示例代码 则是帮助你移植游戏的最佳指南 最后 通过使用已优化的 Metal 工具 游戏的调试和分析过程变得更加简单 欢迎下载游戏移植工具包 2 并进行试用! 别忘了观看今年的视频 “为 Apple 平台设计高端游戏” 我们非常期待看到你将新一代游戏 移植到各种 Apple 设备上! 谢谢观看!
-
-
12:51 - Build a residency set
// Build a residency set. // Create a new residency set. MTL::ResidencySet* residencySet; residencySet = device->newResidencySet(residencySetDescriptor, &error); // Add to main command queue. commandQueue->addResidencySet(residencySet); // Add allocations and commit changes. residencySet->addAllocation(texture); residencySet->addAllocation(buffer); residencySet->addAllocation(heap); residencySet->commit(); // Use residency sets. // Allocate and encode a command buffer. MTL::CommandBuffer* commandBuffer = commandQueue->commandBuffer(); // ... // The command queue marks residency for the set for this command buffer. commandBuffer->commit();
-
14:46 - Upscale image with MetalFX
// Upscale image with MetalFX. mfxTemporalScaler->setColorTexture(currentFrameColor); mfxTemporalScaler->setDepthTexture(currentFrameDepth); mfxTemporalScaler->setMotionTexture(currentFrameMotion); mfxTemporalScaler->setOutputTexture(currentFrameUpscaledColor); mfxTemporalScaler->setJitterOffsetX(currentFrameJitter.x); mfxTemporalScaler->setJitterOffsetY(currentFrameJitter.y); mfxTemporalScaler->setReactiveMaskTexture(currentFrameReactiveMask); mfxTemporalScaler->encodeToCommandBuffer(commandBuffer);
-
19:53 - Use the cloud save manager
// Use the cloud save manager. CloudSaveManager* cloudSaveManager = [[CloudSaveManager alloc] initWithCloudIdentifier:@"iCloud.com.mycompany.mygame" saveDirectoryURL:[NSURL fileURLWithPath:@"/path/to/saves"]]; [cloudSaveManager syncWithCompletionHandler:^(BOOL conflictDetected, NSError *error) { // Handle conflicts or errors, for example, by presenting a choice. }]; // Access and write saves [cloudSaveManager uploadWithCompletionHandler:^(BOOL conflictDetected, NSError *error) { // Handle errors and conflicts or delay until the next sync. }];
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。