简介
炎炎夏日,烤机必备!,之前就了解过 Arnold 分形渲染,今天终于给撸出来了,不过人家大佬 7 年前就撸过了,不得不佩服 Arnold 的强大,分形上站酷的亲,记得帮推一下哦!
知识背景
本简短教程介绍如何通过 .ass 文件渲染 Mandelbulb。我们将生成 Mandelbrot 和 Julia 集的“Mandelbulb”3D 版本。有关如何生成 Mandelbulb 的详细信息。
大型程序数据集
本教程介绍了如何通过有限的 RAM 在程序中创建尽可能多的几何体。
用于在 Arnold 中渲染的、以程序方式生成的几何体在 3 个阶段使用 RAM。第一个阶段是生成数据,第二个阶段是填充 Arnold 的数据结构,最后一个阶段是创建光线加速数据结构(边界体积层次(BVH)通常是最大的)。所有这些阶段完成后,将开始实际渲染,这时不会使用更多内存。在 Arnold 的数据结构内直接构建数据数组是最高效的方法(如果可能)。用户无法控制 BVH 的 RAM 使用量。
Mandelbulb
在我们的示例中,将生成 Mandelbrot 和 Julia 集的“Mandelbulb”3D 版本。此算法涉及对函数 (Z^n+C) 进行迭代,并查看它是否离开半径为 2 的球体;如果在内部停留设定的步数,则将它视为“拘留点”,并在那里放置一个小球体。对于显示 Mandelbulb 来说,将此数学实体渲染为密集的球体栅格既不是最巧妙的方式,也不是最高效的方式;我们只是以此为方法来创建本教程所需的大量数据。
将生成分解为区块
我们无法得知渲染完成后会有多少个球体,因此无法直接填充 Arnold 的数组;因此我们改为填充链接列表,然后使用它在第二次处理时填充数组。如果我们使用所有球体的巨大链接列表来填充 RAM,则需要为 Arnold 分配一个数组以将数据复制到其中;使用此方法,我们只能利用系统中 RAM 的一半。在示例中,我们将任务分解为较小的区块,每个区块填充一个链接列表,分配一个数组,然后删除链接列表。这样,就可以将全部的 RAM 用于可渲染的几何体。在我们的示例中,我们只是将 Mandelbulb 分解为 X 轴上的板。
多线程
运行生成点的数学计算会占用 CPU 功率,许多现代系统都可以访问单个系统上的多个 CPU。为了尽可能高效地填充 RAM,我们提取每个区块,再将其分解为子区块,让单个 CPU 使用 Arnold 的 AiThreadCreate() 并行填充每个子区块。可以在此方法中并入许多其他加速方法(如 SIMD sin/cos 函数、将计算转移到 GPU 或其他方法),但是这些类型的优化未包括在示例中。
Julia 集是复平面上一些点的集合,当这些点进行平方并与某个常数 (C) 迭代相加后,“束缚点”没有逃出半径为 2 的圆形区域时,我们称这些点的集合为 Julia 集。对于常数 C 所有可能的值,存在一个完整的 Julia 集;C 是复平面上的一个二维值。
Julia 集有 2 种不同的类型:
1. 完全连通。
2. 由点组成的分散的 Cantor 尘(有关 Cantor 尘的详细信息,请参见 http://en.wikipedia.org/wiki/Cantor_set)
如果 Julia 集的中心点 (0,0) 是束缚点,则 Julia 集是完全连通的;如果它不是束缚点,则 Julia 集是 Cantor 尘。
Mandelbrot 集是所有完全连通的 Julia 集的集合。它是通过对所有可能的 Julia 集的中心点进行采样而生成的。这意味着,对应 Mandelbrot 集中的每个点,可以生成一个 Julia 集。虽然这两个集合在复平面中都是连续函数,但我们通常通过抽样一个均匀栅格(像素)来渲染它们,如果点是束缚点,将被渲染为黑色。
Mandelbulb 将这个数学计算延伸到三个维度。此生成器的工作原理是:对一个常规栅格中的所有点进行采样,如果点是束缚点,便将其添加到一个 Points 几何体节点中进行渲染。
;
渲染步骤
1、创建一个 Arnold 程序对象。
2、为 Arnold 程序添加材质,创建场景照明等。
3、在 Arnold 程序--重写--用户选项,填入以下代码:
declare gridsize constant INT
gridsize 1200
declare max_iter constant INT
max_iter 9
declare power constant FLOAT
power 8
declare spheremult constant FLOAT
spheremult 1
declare orbitthresh constant FLOAT
orbitthresh 0.05
declare chunks constant INT
chunks 25
declare threads constant INT
threads 50
declare julia constant BOOL
julia off
declare Cval constant POINT
Cval -0 1 0
Arnold 渲染 Mandelbulb 分形大法代码参数解释参考
4、开启 IPR,再在 Arnold 程序--Main--类型--切换为 Mandelbulb,即可开启。
接下来感受一下真香警告吧,炎炎夏日,CPU 非常嗨~上图:
配置 2700X、32G,C4DtoA 2.5.2,C4D R19,采样 AA5~8,漫射 6,渲染 21 分钟,CPU 温度飙到 75°左右,大致如此,玩的开心哈!
群佬测试,2990WX 开景深,渲染 3 分钟不到,尼玛,这差距也太大~~
其他说明:
7 年前 Arnold 玩家就渲染了,由约 2.5 亿个球体构成的 Mandelbulb 上的球体大小,你们猜猜他当时用的啥配置?
6666