Overview
你可以在文件名参数中插入表达式,当输出或读取文件时,Houdini会计算它。最常用的是渲染输出文件名中的$F,即每帧的文件会被编号,且输出的文件不会相互覆盖。
例如,mine$F.pic会产生这些文件: mine1.pic, mine2.pic, mine3.pic等等。
记住,如果你需要在周围字母中“保护(就是指定哪个才是真正的变量)”一个变量,你可以使用${F}。例如,如果你想要F在帧标号后面,你就不能使用frame$FF.pic,因为$FF是一个变量名。在这种情况下,你可以使用 frame${F}F.pic,其会生成 frame1F.pic, frame2F.pic等这样的文件名。
有用的变量
$F | 当前帧标号 |
$FF | 当前小数帧标号。当Houdini计算用于运动模糊的子帧运动时,会使用它。 |
$N | 输出,输出的文件数量(相当于一个计数器)。此和帧标号无关。此是Houdini已经读取/渲染的帧数量(当处理多个文件时)。 例如,如果你渲染第10到第15帧。$N会变为 1, 2, 3, 4, 5(每渲染一帧,计数累加一次)。 |
$T | 当前时间。 |
$SF | 当前模拟的时间步幅数量。对于在动力学模拟中保存文件,如模拟状态,会使用$SF,而非$F。对于每个$F值,Houdini可能会计算多个子帧,所以如果你使用$F时,可能几个子步幅帧会覆盖同样的文件。$SF等同于$T(模拟时间)除以 $TIMESTEP (模拟时间步幅)。 |
$ST | 当前模拟时间。 |
$OS | 当前节点名。 |
当渲染场时,5.0和5.5的整型帧($F)会是5.因此,要产生唯一性的文件名,可使用$N或$FF。$FF的缺点是会出现 二十进制变换的数学错误,导致$FF 的值可能像 31.99999这样。使用 $N 的缺点是它和帧标号无关,它只会计数当前渲染的帧数量。所以如果你渲染1到10帧,然后再渲染11到20帧,第二次的批渲染会覆盖第一次的。
Leading zeros
要在帧标号前生成0,可以在$F后面放置一个非0的数字。此会生成一个带有很多数字的文件名,例如 mine$F3.pic 会生成像mine001.pic, mine002.pic, mine003.pic的文件名。
你也可以使用padzero表达式函数,查看下面的。
Advanced expressions
对于任何超出简单变量的效果,你可以使用一个重音符(Tab键上方的那个键)将一个完整的表达式封装。
例如,你可能想让文件名随着帧标号递增,但按特定数量偏移。你可以在重音符内使用一个嵌入的表达式,如:
MyImage`$F+12`.pic.
此会按当前帧标号+12来创建文件名。其会生成像这样的文件名: MyImage13.pic, MyImage14.pic, MyImage15.pic
你可以在一个反引号中使用表达式函数,如padzero(定义Padding效果===和Maya的padding参数一样)。
frame`padzero(5, $F)`.pic
会给你生成像这样的文件名: frame00001.pic, frame00002.pic, frame00003.pic。
Tips
要基于图像分辨率在一个目录中存储图像,使用像 Pics${W}x${H}/$F.pic这样的路径(目录名会包含分辨率数值)。
要在文件名中包含当前操作节点的名称,可以使用$OS(当前操作节点名),例如$OS_$F.pic ,会生成这样的文件名light1_1.pic, light1_2.pic, light1_3.pic。
不要使用连字符”-“将帧标号和文件名分离,例如 frame-$F.pic。Mplay会将这样的文件名(frame-1.pic, frame-2.pic, frame-3.pic)解释为包含负帧标号的文件。
避免在文件名中使用空格。尽管大多数操作系统支持它们,Houdini中很多软件包有时会认为文件名没有空格符,此可能会导致很多问题。可以使用下划线。