.ass 文件结构
Arnold 的原生场景描述文件格式(称为“.ass”文件)是一种易于读取的 ASCII 文本文件。
.ass 文件通常包含作为一系列节点的摄影机、灯光、模型几何体和着色器及其连接和参数。
适用于 Maya、Houdini 等的 Arnold DCC 插件可以导出 ass 文件。
Arnold 的命令行渲染器 kick 可以用于将这些 ass 文件渲染为图像文件。
节点和参数
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 通道(或层)到输出驱动程序的映射。每个字符串的格式为:“<AOV_name> <data_type><filter> <driver>”
gaussian_filter - 这是 kick 使用的默认类型过滤器。过滤器具有用户指定的宽度,默认设置为 2.0 像素。
driver_tiff - 可以被 options 节点中的 outputs 参数引用的驱动程序节点。该节点包含一个 filename 参数,指定用于存储最终渲染图形的输出文件。
persp_camera - 可以被 options 节点中的 camera 参数引用的摄影机节点。此节点具有视野和用来定义方向的摄影机到世界矩阵,以及其他一些参数。
distant_light - 具有变换矩阵、颜色、密度等的远距离或带方向性的灯光节点。
polymesh - 这是渲染器中最重要的几何基本体。其部分参数如下:
vidxs、nidxs、vlist、nlist:这些数组描述网格顶点、法线及其各自的拓扑(面索引)。如果网格具有 UV 坐标,则将存储在 uvidxs 和 uvlist 参数中。
visibility、sidedness:这些是为每个光线类型(摄影机、阴影、反射等)定义可见性和片面性特性的位掩码。
matrix:网格的对象到世界变换矩阵。
shader:指向将在着色对象时执行的着色器节点的指针。
.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 }
参数
所有参数都有默认值,因此您不需要显式设置所有可用的参数。默认参数值可以通过 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 ...
例如,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