渲染与应用

GPU 分形渲染

大多数分形像素均可独立计算,这使得逃逸时间渲染成为 Mac 和 Apple Silicon 上一种自然的 Metal GPU 工作负载。挑战在于,当轨道路径大相径庭时,如何确保数千个线程仍能发挥作用。

“燃烧之船”分形:绿松石色背景上点缀着红色岛屿
MandelKit 中的“燃烧之船”:迭代中的绝对值打破了经典曼德尔布罗特映射的对称性。图片: Björn Kindler / MandelKit · MandelKit · Eigene Darstellung · Own work

并行像素

计算内核将线程坐标映射到分形坐标,并在局部进行迭代。共享常量描述了视口、公式和视觉设置;输出纹理将由轨道衍生的场数据传递到后续的颜色和光照渲染阶段。

分形像素在很大程度上是相互独立的,且能很好地映射到 GPU 线程上。坐标、公式参数和颜色表是共享的;每个线程写入一个结果。这种独立性会因法线、环境光遮蔽或光晕等邻域效应而终止。这些应作为具有显式输入的独立渲染通道,这样修改渐变时,就不会不必要地重新运行耗时的轨道计算。

发散与工作负载不平衡

快速逃逸的像素会提前结束,而边界像素则可能耗尽全部迭代预算。分组执行的线程可能会因最慢路径而陷入等待。内部测试、自适应调度和渐进式分块可减少工作浪费,但也会增加复杂性。

在边界附近,某些像素会迭代数百次,而外部像素则几乎立即脱离。同一组中的线程会等待最慢的路径。瓦片分类、内部测试和压缩的活动像素可以减少发散,但会增加管理成本。对多个区域进行性能分析可判断这种复杂性是否值得;仅在空旷外部区域运行较快的内核会产生误导。

快速反馈,完整交付

在进行手势操作或滑块调整时,采用较低分辨率或较低采样率的渲染阶段可保持响应性。一旦输入稳定,必须通过精细化渲染将其替换为与显示效果匹配的输出。如果最终渲染阶段从未被安排执行或持续被无效化,则预览策略将变成缺陷。

在执行手势操作时,应用可在较低分辨率或迭代深度下立即响应。松开手势后,更精细的渲染过程将延续至原生显示分辨率——而非在非 Retina 设备上盲目启用 Retina 模式。质量状态必须与输入状态分离。否则,滑块的更新可能会导致最终渲染过程资源不足,使图像停留在比屏幕分辨率粗四倍的预览网格上。

Apple Silicon 和统一内存

在 Apple Silicon 版本中,Metal 通过统一内存模型与 Apple GPU 进行通信:CPU 和 GPU 共享系统内存,尽管访问规则仍取决于各资源的存储模式。这可以减少部分数据复制操作,但并不能使轨道迭代、高精度计算或大型纹理处理变得免费。 MandelKit 的 macOS 应用以 arm64 的形式原生运行,并采用此 Metal 路径;实际速度仍取决于公式、缩放深度、迭代次数、输出尺寸及启用的特效。

Apple Silicon 上的统一内存并不能使 CPU 和 GPU 的工作方式完全一致,也无法实现无同步运行。 Metal 的存储模式仍然决定了哪款处理器可以访问资源,以及如何针对 GPU 使用进行优化。因此,分形渲染器仍然需要有界工作集、合适的纹理格式以及在真实设备上的测试数据。原生 arm64 执行描述了该架构;它既不能保证固定的帧率,也不能保证在所有 M 系列芯片上运行时间完全一致。

来源与延伸阅读

本文以原文措辞总结了以下专业资料来源。访问并经编辑审核于 12 年 2026 月。

  1. Metal overviewApple Developer Documentation
  2. Choosing a resource storage mode for Apple GPUsApple Developer Documentation
  3. The Science of Fractal ImagesSpringer