欢迎光临散文网 会员登陆 & 注册

Houdini中快速对克隆物体(abc文件)动画进行随机时间偏移

2022-06-10 02:52 作者:-Tohi-  | 我要投稿

之前突然想研究一下houdini怎么给克隆的abc动画进行随机时间偏移,然后看到entagma的那个花瓣无限生长教程的时候来了灵感。

这里有一段C4D里面随手k的一段动画:

导出abc文件后导入houdini进行了用scatter撒点的克隆:

现在每个克隆物体的动画一致,首先需要在copytopoint节点克隆目标参考点的一侧(右侧)添加一个attribute wrangle节点,模式改成point,输入vex代码:

float randFrame = rand(ch('seed'));     //创建randFrame变量赋予随机种子

addpointattrib(0,"randFrame",randFrame);    //把randFrame作为属性创建给每个点

观察geometry spreadsheet面板可以看到我们通过vex给scatter的每个点创建了自定义的randFrame属性,但是现在每个点的随机数都相同:

现在不想写代码了(主要对vex不是很熟),这时候可以用一个attribute randomize节点进行随机化,但这里我就直接用一个attribute adjust float节点了,Pattern Type改成random:

这时候看geometry spreadsheet面板上就显示出每个点都有不同的随机数了,但是这时候我们的随机数还是0-1的数值,所以需要手动映射一下。我们可以用vex写fit01,但我这里就直接用一个attribute remap节点来映射(主要是可以手动拉ramp来限定映射的区间):

在attribute remap节点上我设置的输出最小最大值分别为-50和50,所以它会给我每个点都映射出-50到50的随机数(后续作为随机偏移帧)。接下来我们要对每个克隆物体的动画进行随机偏移,需要用到foreach节点进行循环计算,在这之前先给abc文件添加一个timeshift节点:

然后添加一个foreach point节点组,把copytopoint节点接到这两个(begin和end)中间,attribute remap接到foreach begin节点:

接下来我们对timeshift节点的frame写一个表达式来进行帧数的随机偏移:

$F + int(point(-1,0,'randFrame',0))


// $F:当前帧

    point(对象路径名,点序号,属性,索引)

    int:数据类型转成整型

上面的point函数第一个值我写了-1,所以需要手动指定一个对象的地址,点击add spare input创建一个地址栏,把foreach的begin拖进去:

这样通过对每个点进行循环实现了对每个点上的克隆物体动画进行随机帧数偏移的计算:


但是这个方法好像有个bug,就是视图在smooth shaded模式下有些abc文件物体的显示会出问题,但是测试渲染的时候又没问题,暂时不知道原因,先不管了。

Houdini中快速对克隆物体(abc文件)动画进行随机时间偏移的评论 (共 条)

分享到微博请遵守国家法律