大多数浏览器和
Developer App 均支持流媒体播放。
-
探索 Metal 3
利用 Metal 3,在您的 App 中挖掘出 Apple 芯片的全部潜能。我们将介绍最新的功能、改进和工具。我们还将探索如何借助高级功能和编译器工具更快速地加载资源,在构建时编译着色器二进制文件,使用网格着色器处理复杂的几何形状,在更短时间内渲染高分辨率图形,以及更快地训练机器学习网络,等等。
资源
相关视频
WWDC22
-
下载
♪ ♪
Tarun Belagodu: 大家好 欢迎来到 Metal 3 现场 我是 Tarun Belagodu 我将为大家分享 Metal 的 全新升级 首先 我们从基本信息开始 Metal 是 Apple 的 低开销图形和计算 API 其设计宗旨在于以最快 最高效的方式 驱动 Apple 产品背后 无比强大的 GPUs 它为发送至 GPU 的指令 提供多线程及直接控制 提供支持显式着色器编译的 丰富着色语言 以及提供深度整合的工具 帮助复杂 App 和游戏 完成调试和性能优化
Metal 自问世以来 就增加了许多先进的图形 和计算功能 专注于 GPU 驱动渲染 机器学习和光线追踪 Apple 芯片为每一台 全新的 Mac 设备 都提供无可比拟的图形性能和效率 而 Metal 解锁了这些功能 今年 Metal 全新升级 到 Metal 3
Metal 3 是一套强大的新功能 可以带来更高的性能 更好的渲染质量 从而帮助您的 App 和游戏运行更快 画面效果更震撼 首先 我们先来看看 fast resource loading (快速资源加载) 现代游戏和 App 都有 迫切的 asset 加载需求 从文件快速流式发起许多 小型 asset 请求加载到 Metal 资源中 通常是高质量视觉效果的关键 但当前的存储 API 的设计初衷 是处理大尺寸请求的
Metal 3 的 Fast Resource Loading 可使用同样直接的 多线程的 指令模式发出许多小型加载请求 和图形和计算指令模式一样 每个请求都是一个指令 许多指令都会进入队列 进行异步提交 它无需额外步骤 就能直接加载到 您的 Metal 缓存区和纹理中 为您节省开发精力和传输时间 Fast Resource Loading 使用 您已熟知的 Metal 同步原语 也让GPU 操作 和加载操作之间的协调更简单 纹理串流系统就可从 fast resource loading 中受益 我们来看一个例子
Metal Sparse Textures 可让 App 以 tile 粒度串流纹理 以 Metal sparse textures 为基础 搭建纹理串流系统 包含四个步骤 首先 根据前一帧的反馈 确定要加载的内容 第二 从文件存储中加载 tiles 第三 从暂存区域 复制到 sparse textures 最后 绘制帧
加载和复制的时间越长 意味着您的 App 需要更长时间来以低画质绘制
Fast Resource Loading 可将 加载开销最小化 确保硬件存储队列中 有足够的请求 以最大化吞吐量 这可以提供更快 更持续的性能 从而能用更多时间来绘制 高画质图形
Fast resource loading 可大大 简化您需要写的代码 从而实现高质量 asset 流 您可查看 “Load resources faster with Metal 3” 的部分内容 了解更多关于 Fast Resource Loading 的细节 接下来 我为大家演示全新的 离线编译工作流 如何帮助您减少 App 的 加载时间和掉帧 着色器二进制编码是 GPU-specific 机器代码 通常是在 App 运行期间 在 Metal 管线 创建过程中生成的 生成这些二进制编码 是一项成本很高的操作 通常在 App 启动期间 隐藏在加载屏幕之后 但是 有时它们也需要在帧内生成 导致帧率不稳 Metal 会缓存这些二进制编码 这样您无需总是承担相应的代价 但在 App 的初始启动 或二进制编码首次需求之时 该成本仍不可避免 使用离线编译 您可以完全消除 运行期间 着色器二进制编码的生成
通过将二进制编码生成 移动到项目构建时期 您可以极大地减少在加载过程中 创建 Metal 管线的时间 减少这些实时创建管线时 对 App 造成的掉帧 我们详细看看 什么情况可以减少掉帧
这是一个示例 这款游戏在编码时 需要创建 Metal 管线状态对象 这是 Metal 从未见过的管线 因此需要生成着色器二进制编码 这是一个很长的操作过程 会中断这一帧剩余的编码 导致 App 无法保持帧率目标 这种情况只出现一次 但已足以让您的用户 感到帧率不稳 相反 离线编译意味着着色器 二进制编码可以在创建时间生成 因此每个管线状态创建都很快 执行也很顺畅 离线编译对您 App 的 加载时间也有极佳的改善 我们来看一个例子
大部分 App 都在专门的加载阶段 创建大量的 Metal 管线状态对象 着色器二进制编码 在首次加载时生成 如果您的 App 要创建许多这样的 管线 则用户等待时间会很长 使用离线编译 着色器二进制编码的生成 同样可以转移到项目构建期间 从而减少加载时间 让用户能更快启动您的 App 离线编译对有许多复杂管线的 App 来说 改变了游戏规则 您可以查看 “Target and optimize GPU binaries with Metal 3” 部分内容 了解更多关于离线编译 和其它改进相关的细节
现在 我们接着了解为 Metal App 提供平台优化 图形效果的 MetalFX MetalFX Upscaling 通过 高性能放大和抗锯齿 可在较短的时间内 渲染更高画质的图形 您可以选择时间算法或空间算法 来帮助提高性能 其重要性如以下所示 当您想让 App 利用 视网膜分辨率提供锐化细节时 生成所有这些像素也会影响性能 使用 MetalFX Upscaling 您可以用低分辨率生成像素 然后让框架生成高画质 低成本的高分辨率画面 实现更高的帧率 MetalFX 是一个能让 高性能 高画质 Upscaling 成为现实的强大框架 您可查看 “Boost performance with MetalFX Upscaling” 部分内容 以了解更多关于 MetalFX Upscaling 的细节 接下来是 Metal 全新的 灵活的几何管线 网格着色器 传统可编程图形管线让您可以 在着色器中变换顶点 然后组装至图元中 通过固定功能硬件栅格化 这对大部分 App 来说已足够 但有些使用案例 如剔除 需要访问整个图元 每个顶点都独立读取 变化和输出 因此无法在绘制中途 增加顶点或图元 高级的几何处理 需要更高的灵活性 通常 这意味着要在 compute pass 中 预先处理几何形状 但这需要在设备内存中 存储大量的中间几何 很难对内存开销做预估 Metal 网格着色器推出了 不同的几何处理管线
用灵活的二阶段模型 代替传统的顶点阶段 开启几何分层处理能力 第一个阶段分析整个对象 确定是否需要对几何形体 进行扩展 缩减或修改 它通过在 render pass 中 提供计算能力来实现 而无需中间设备存储器 网格着色器对运行 GPU 驱动 剔除 LOD 选择 和程序几何生成的 App 来说 尤为适合 我们来详细看下 在这个例子中 compute pass 评估表面 然后生成几何 然后 该几何及其绘制指令 被写入设备内存 随后在 render pass 中使用 由于高扩张因子和间接绘制调用 会很难预测所需的内存大小
网格着色器将两个类计算阶段 内嵌在渲染管线中运行 从而提升效率
Object 阶段评估输入 确定需要生成 多少网格
然后 Mesh 阶段生成实际的几何 这些网格直接发送到光栅化程序 避免了在设备内存来回存取 和顶点处理需求
网格着色器可让您的 App 构建高效的程序几何 剔除 和 LODing 系统 您可查看“Transform your geometry with Metal mesh shaders”的部分内容 了解更多关于网格着色器的细节
Metal 3 还极大地加速了 光线追踪管道 优化了加速结构的构建 相交及着色的每个细节 Metal 对 GPU 驱动的 光线追踪管线也提供了支持 从而进一步优化您的 App 我们将 Metal 3 的光线追踪 与之前的版本进行对比
Metal 3 光线追踪大大节省了 CPU 和 GPU 时间 首先 减少加速结构构建的时间 可为您提供更多 GPU 时间 进行绘制和光线追踪 第二 由于新增了 Indirect Command Buffer 对光线追踪的支持 CPU 操作 如 剔除 可移动至 GPU 最后 Metal 3 光线追踪 支持直接访问原始数据 从而精简和优化相交及着色 Metal 3 光线追踪增强的脚步 从未停止 您可查看“Maximize your Metal ray tracing performance”部分内容 了解更多关于光线追踪的细节 现在 我为大家演示下 Metal 3 是如何加速机器学习和训练的 Metal 3 在加速机器学习方面 有了重大改进 进一步支持 Mac 的加速网络训练 对图形和媒体处理应用方面的 ML 推理 也有了重大优化 TensorFlow 是机器学习的 流行框架 在 Mac 支持 GPU 加速 近期推出的 Mac Studio 对不同网络 在 M1 Ultra 通过 GPU 训练时 相比比 CPU 提供了高达 16 倍加速 Metal 3 也加速了许多 全新的 TensorFlow 操作 意味着 CPU 需要的同步性更少 更高的可规模化性能 PyTorch 是网络训练中另一个 流行的 ML 框架 近期也使用 Metal 获得了 GPU 加速 在 M1 Ultra 的 Mac Studio 上 与使用 CPU 相比 您可以获得极大的训练速度提升 例如 BERT model 训练可 加快 6.5 倍 ResNet50 训练可加快 8.5 倍 Metal 在 Apple 芯片上 将 ML 推理 优化至最佳性能 在基于 Metal 的高性能视频 和图片处理 App 中 尤为有用 如 BlackMagic Design 的 DaVinci Resolve DaVinci Resolve 是一个专注 色彩分级的视频制作平台 它的工作流中大量使用 Metal 和机器学习 结果非常惊人 通过 Metal 支持的加速机器学习 BlackMagic Design 在剪辑 色彩分级工作流 和机器学习工具中 实现了重大性能提升 您可查看“Accelerate Machine Learning with Metal”部分内容 了解更多关于机器学习更新的细节 现在 我为大家分享什么硬件 支持刚刚所说的 Metal 3 功能 Metal 3 支持所有现代 iOS iPadOS 和 macOS 设备 包括 A13 仿生或 M1 芯片 以及更新版本的 iPhone 和 iPad 以及所有 Apple 芯片的 Mac 系统 搭配最新 AMD 及 Intel GPU 的 Mac 系统
您可使用 Metal 设备上的 supportsFamily 咨询 指定设备是否 支持 Metal 3
Metal 3 不仅仅是功能提升 还包括一套完整的高级开发工具 我现在给大家展示下 Xcode 14 中的 Metal Dependency Viewer 让您的 整个渲染器和放大至单通道的 可视化更简便 同时为了让诸如采纳 GPU 驱动管线 或与 Fast Resource Loading 同步的 操作更简单便捷 现在 Dependency Viewer 包含了 同步边缘 您可以分析及验证 您的依赖关系 Xcode 14 中 改进的 Acceleration Structure Viewer 帮助您充分利用 Metal 3 优化的光线追踪 首先 您现在可以在场景中 突出单独图元
在左边的大纲中 选择图元可显示 关联的图元数据
最后 如果您的场景有运动信息 Acceleration Structure Viewer 现在可以让不同的点及时可视化
这只是快速浏览了 Xcode 14 中 几个开发者工具的更新 还有许多其它新功能 如 dylib 支持 全新资源列表 着色器编辑器中的文件导航 自定义 Buffer Viewer 布局 等等许多功能 您可查看其它讲座的内容 了解更多关于工具以及如何 充分利用 Metal 3 升级的细节 这能帮助您构建高级图形 游戏和专业 App
今天 我为大家介绍了 Metal 3 升级性能和画质的 高级功能 Fast Resource Loading 提供更高品质的纹理串流 减少加载次数和掉帧的离线编译 使用更少时间渲染 高分辨率的 MetalFX Upscaling 高级几何处理的网格着色器 更快的加速结构构建 相交和光线追踪着色 加速的机器学习 最后 我为大家展示了一些 高级工具 帮助大家使用如 GPU 驱动管线 和光线追踪的高级功能
您可登陆 developer.apple.com/Metal 查看更多关于新代码示例 及文档的细节 感谢大家的观看
-
-
0:01 - Device Family
if device.supportsFamily(.metal3) { // My awesome Metal 3 renderer }
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。