渲染与应用

渲染大于一张纹理的图像

如果一张图像从未被分配为单一纹理,其尺寸可能会远超 GPU 的最大纹理尺寸。分块渲染会计算可处理的区域,并将完成的像素流式传输到输出表示中。

带可见平铺网格的曼德尔布罗特渲染,用于大规模导出
超大尺寸的图像会被分割成易于处理的图块,随后无缝拼接而成。图片: Björn Kindler / MandelKit · MandelKit Wissensgrafik · Eigene Darstellung · Own work

全局视图、局部图块

每个图块的坐标均由完整的输出尺寸和可见宽高比推导而来。切勿独立调整分形图像的适配或居中,否则拼接后的图像将包含重复的裁剪片段,而非一个连续的视图。

大型输出图像采用单一全局坐标系。每个图块均从该坐标系中精确裁切,而非通过单独调整摄像机视角。像素中心必须跨越图块边界,否则会出现接缝。纵横比和可见分形区域在整个图像中仅需定义一次,从而确保导出为 100,000 像素大小时,能完整保留屏幕视图的构图。

效果需要邻域

抗锯齿、法线贴图和屏幕空间滤波器可能会采样到瓦片边缘之外。渲染保护带并在拼接过程中对其进行裁剪,可避免接缝。诸如直方图均衡化等全局方法需要单独的统计处理步骤,或者被有意禁用。

带有半径参数的滤镜需要延伸至瓦片边缘之外的像素。应先为每块瓦片渲染光晕,应用效果,然后裁剪至核心区域。多阶段效果可能需要更大的累积光晕范围。如果没有重叠,即使每块瓦片单独看起来正确,接缝仍会显现。所需半径属于效果定义的一部分,导出规划人员必须知晓该参数。

“磁盘”取代“峰值内存”

基于磁盘的编码器或中间存储区会在行或图块渲染完成后立即接收它们。这在限制 RAM 和 GPU 内存使用量的同时,将压力转移到了存储空间、编码限制和任务持续时间上。进度跟踪、取消操作和原子化最终处理是确保长时间导出任务正确性的关键环节。

当完整图像无法完全装入内存或无法容纳于一个 Metal 纹理中时,已渲染完成的条带将直接写入增量编码器或临时文件。进度描述应包含渲染和编码过程,而取消操作应干净地关闭临时数据。绝不能要求生成单一的最终 CGImage——正是这一最终合成步骤,否则会导致导出结果为空白或产生无法编码的巨型文件。

来源与延伸阅读

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

  1. Metal overviewApple Developer Documentation
  2. The Science of Fractal ImagesSpringer