Arnold 的原生场景描述文件格式(称为“.ass”文件)是一种易于读取的 ASCII 文本文件。.ass 文件通常包含作为一系列节点的摄影机、灯光、模型几何体和着色器及其连接和参数。
适用于 Maya、Houdini 等的 Arnold DCC 插件可以导出 ass 文件。Arnold 的命令行渲染器 kick 可以用于将这些 ass 文件渲染为图像文件。
下面是一个简单的 .ass 文件,其中包含选项块、过滤器节点、驱动程序、摄影机、灯光、多边形网格和着色器。
options
{
AA_samples 3
outputs "RGBA RGBA myfilter mydriver"
xres 720
yres 486
}
gaussian_filter
{
name myfilter
width 2.0
}
driver_tiff
{
name mydriver
filename "image.tif"
color_space auto
}
persp_camera
{
name mycamera
fov 53.638
matrix
1 0 -0 0
-0 0.995 -0.0995 0
0 0.0995 0.995 0
0 2 20 1
}
distant_light
{
name mylight
matrix
0.78867512 -0.21132487 -0.57735025 0
-0.21132487 0.78867512 -0.57735025 0
0.57735025 0.57735025 0.57735025 0
1 1 1 1
color 1 1 1
intensity 1
cast_shadows on
}
polymesh
{
name mysphere
nsides 6 1 BYTE 3 3 3 3 3 3
vidxs 18 1 UINT
3 2 0 2 3 1 4 3 0 3 4 1 2 4 0 4 2 1
nidxs 18 1 UINT
0 0 1 0 0 2 3 3 4 3 3 5 6 6 7 6 6 8
vlist 5 1 VECTOR 0 -4 0 0 4 0 -4 0 0 2 0 3.4641015
2 0 -3.4641015
nlist 9 1 VECTOR
-0.5 0 0.8660254 -0.44721359 -0.44721359 0.77459669
-0.44721359 0.44721359 0.77459669 1 0 0
0.89442718 -0.44721359 0 0.89442718 0.44721359 0
-0.5 0 -0.8660254 -0.44721359 -0.44721359 -0.77459669
-0.44721359 0.44721359 -0.77459669
smoothing on
matrix
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
shader myshader
}
standard_surface
{
name myshader
base 0.7
base_color 0 1 0
specular 0.05
specular_color 1 1 1
specular_roughness 0.3
} 与 Python 一样,单行注释以“#”字符开头。
Arnold 是基于不同类型的节点构建的。例如,目前有着色器节点、摄影机节点、灯光节点、过滤器节点、几何体(也称为“形状”)节点和输出驱动程序节点。每个节点都有多个参数。
每个类型的节点均通过唯一的名称(options、persp_camera、polymesh、lambert 等)进行标识。对于每个节点类型,可以包含任意数量的节点。每个节点由称为“name”的字符串参数来唯一标识。要创建节点,您可以写入节点类型,并将参数值定义括在花括号中。例如:
lambert
{
name my_white_shader
Kd 0.9
Kd_color 1 1 1
} 下面是 ass 文件中一些比较重要的节点。
options - 此节点是全局渲染选项的容器,例如:xres、yres:图像分辨率AA_samples:抗锯齿采样camera:活动摄影机。该选项必须指向场景中的有效摄影机节点outputs:此字符串数组定义 AOV 通道(或层)到输出驱动程序的映射。每个字符串的格式为:“gaussian_filter - 这是 kick 使用的默认过滤器类型。过滤器具有用户指定的宽度,默认设置为 2.0 像素。driver_tiff - 可以被 outputs 节点中的 options 参数引用的驱动程序节点。该节点包含一个 filename 参数,指定用于存储最终渲染图像的输出文件。persp_camera - 可以被 options 节点中的 camera 参数引用的摄影机节点。此节点具有视野和用来定义方向的摄影机到世界矩阵,以及其他一些参数。distant_light - 具有变换矩阵、颜色、强度等的远距离或带方向性的灯光节点。polymesh - 这是渲染器中最重要的几何基本体。它的部分参数如下:vidxs、nidxs、vlist、nlist:这些数组描述网格顶点、法线及其各自的拓扑(面索引)。如果网格具有 UV 坐标,则将存储在 uvidxs 和 uvlist 参数中。visibility、sidedness:这些是为每个光线类型(摄影机、阴影、反射等)定义可见性和片面性特性的位掩码。matrix:网格的对象到世界变换矩阵。shader:指向着色对象时将执行的着色器节点的指针。所有参数都有默认值,因此您不需要明确设置所有可用参数。默认参数值可以通过 Arnold 的命令行渲染器 kick 进行查询。例如,要在 Lambert 着色器中查找参数 Kd 的默认值,请键入以下内容:
% kick -info lambert.Kd
node: lambert
param: Kd
type: FLOAT
default: 0.7 最常见的类型包括 BOOL、INT、UINT、ENUM、FLOAT、MATRIX、VECTOR、NODE 和 STRING。
基本类型的数组(例如 VECTOR[ ] 或 FLOAT[ ])采用以下语法指定:
parameter_name <num_elements> <num_motionblur_keys> <data_type> <elem1> <elem2> <elem3> <elem4> ... 例如,polymesh 节点有一个称为 vlist 的参数,它是存储多边形顶点的点数组:
% kick -info polymesh.vlist
node: polymesh
param: vlist
type: VECTOR[]
default: (empty) 因此,通过一个包含三个向量的数组,可以指定一个具有单个三角形的多边形网格:
polymesh
{
...
vlist 3 1 VECTOR 0 0 0 1 0 0 0 0 1
...
} 对于支持运动模糊的参数,您可以为每个运动模糊时间采样(或“关键帧”)定义多个值。以下示例显示了具有两个运动关键帧的三角形的顶点列表,其中三角形已经沿 Y 方向移动了 5 个单位:
vlist 3 2 VECTOR 0 0 0 1 0 0 0 0 1 0 5 0 1 5 0 0 5 1 通过改为存储静态三角形顶点并提供多个变换矩阵,可以实现相同的垂直运动:
vlist 3 1 VECTOR 0 0 0 1 0 0 0 0 1
matrix 1 2 MATRIX
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
1 0 0 0
0 1 0 0
0 0 1 0
0 5 0 1 有关 .ass 文件示例,请单击此处。