我正在制作一部短片,我们正在伪装粘土外观的粘土式动画。 我们有五个不同的凹凸贴图,设置为动画和循环。 这使得它看起来就像指纹在人物模型上移动而框架在播放时#34;好像有人进去并用手指移动粘土角色"但是,Maya会自动为每一帧切换凹凸贴图,我们希望将每个凹凸贴图保持至少10帧,然后maya应该转到下一个图像文件。
目前,我们已将此表达式传送到文件节点的动画中。它所做的只是循环我们拥有的五种不同的纹理,然而,它遍历五个帧中的所有五个。
sha1:file10.frameExtension=(frame%5);
我知道如何添加到表达式中,以便它为一定数量的帧保存纹理文件吗?
答案 0 :(得分:0)
尝试sha1:file10.frameExtension=(frame / holdframes % number_of_textures);
修改强>
在下面的进一步讨论中,似乎OP想要一个可变长度保持。问题在于表达没有记忆,它应该是时间独立的,所以它不能记住'在当前帧上已经有多长时间了。
我认为这里正确的答案实际上是使用步进整数关键帧在帧数上生成一个长时间动画来随机化帧数,然后使用后切线使该动画循环永久。
答案 1 :(得分:0)
我最终使用了这个表达式。 它生成随机数,但它们可以同时预测。 这意味着我可以生成7到16帧长度的动画曲线,然后在设置了键后删除表达式并将动画曲线插入图像编号。
int $init;
int $r;
int $t;
int $x;
// main loop
$time = `currentTime -query`;
seed(int($time));
// every time we go through '0'
if( $time == 1 ) {
print ("\n time == 1");
int $r = 7;
int $t =1 ;
int $x =1 ;
$r = int(rand(7,16));
$x = int(rand(0,5));
if( $x == 5 )
$x = 4;
}
// safety: '$r' can not be zero
if( $r == 0 )
$r = int(rand(7,16));
// get modulo per frame
$t = int($time % $r);
if( $r == ($t + 1) ) {
$r = int(rand(7,16));
$x = int(rand(0,5));
if( $x == 5 )
$x = 4;
print ("\n"+$time+" texture: "+$x+" - for: "+$r);
}
//print ("\n"+$time+" "+$r+" "+$t+" "+$x);
//zackBodyFingerprintsBmp_file.frameExtension=$x;
setAttr "zackBodyFingerprintsBmp_file.frameOffset" $x;
setKeyframe { "zackBodyFingerprintsBmp_file.frameOffset" };