您的位置:首页 > 其它

Houdini学习 —— 使用音频驱动几何体变换之信号处理

2017-06-14 21:12 381 查看
这篇博客介绍了如何在Houdini中使用音频来驱动几何体的变换。

背景

Houdini是我个人非常喜欢的DCC工具,节点式的操作与过程化的思想简直是天生一对。这篇博客介绍了如何以.wav音频文件作为输入,从而根据音频中的鼓点来驱动几何体进行规律性的变换的方法。

整个过程大致可以分成三大部分 —— 第一部分是针对于音频进行处理,从而将连续的杂乱无章的信号转化为规律的值为0或1的Trigger鼓点信号;第二部分是将0/1的Trigger信号转化为驱动的连续信号,最后一部分则是针对于鼓点信号的输入来驱动几何体。

音频处理

音频导入及预处理

首先是进行音频的导入,这个应该不用细说,使用
File
节点即可,在Channel File中选择对应的.wav文件即可,输入的波形如下:



可以看到波形中有绿色和黄色两个声道,实际上我们只需要针对一个声道的鼓点进行处理即可,因此选择删掉左声道:

实现方法也很简单,使用
Delete
节点即可,将
Select Channels
设定为
By Channel Name
,并且将
Channel Names
设定为
chan1
,输出波形如下:



音频滤波

首先是进行简单的滤波,毕竟原来的波形中的噪声实在太多,因此使用
Parametric EQ
节点进行一次滤波,使用默认设置即可,输出波形如下:



通过试听能够得到比较清晰的鼓点,但是发现查看波形属性后发现整个波形的信息还是太多,而且采样频率是44100HZ,有点太高了,因此使用envelop节点来进行一次处理并且重新采样一下,从而得到一个比较……额……清爽的波形:

这里我将
Envelop Width
设定为2,并且采样频率设为96,启用重采样,得到的波形如下:



然后就是针对于输入的波形来产生Trigger信号了,简单的使用
Trigger
节点,并且设定好对应的
Trigger Threshold
值,我这里设定为0.042,输出波形如下:



可以看到这样以来就产生了纯净的0/1的Trigger信号。

随机Trigger

然而如果需要针对Trigger信号来驱动几何体集群,那么我们需要产生随机的多重Trigger信号,因此这里对其做一些额外处理:

首先添加噪声信号,使用noise节点,并且将
type
设定为
Random
,随后调用hold节点,输入Trigger信号,从而产生随Trigger信号触发的随机值,如下图:



我们将其作为一个与原信号值相乘的数值,因此我们需要0/1值,因此使用logic节点,
Convert Input
节点设定为
Off When Zero Or Less
,接着使用Math节点将其做一个乘法,从而得到一个具有随机性的0/1信号:



信号集群

有的时候可能需要产生多个随机信号来驱动多个几何体信息(或者几何体的多个信息),因此有必要使用
copy
节点来产生信号集群。

需要针对信号产生多个集群,则需要使用一个
constant
节点作为template,这里设定为
chan[0-9]
,并且去掉Single Frame,将End frame设定为1000,这样一来就产生了10个对应的信号。

另外,每个信号的噪声Seed需要针对每个信号而不同,所以在
copy
节点的
variable
中,添加对应的seed值,让其使用
rand()
函数而生成(我这里使用了
rand($C + 23)
作为seed的variable值),勾选
Cook Each Copy


此后,将
noise
节点的
Seed
值改为表达式
stamp("../copy1", seed, 0)
后,便已经产生了不同的信号:



由于我预备使用这些信号来驱动几何体的旋转,因此需要使用
count
节点来获得其旋转的角度,可以看到得到了一个比较不错的信号集群:



之后就是解决尖锐的跳跃了,这个简单,使用
filter
节点即可,我将
Filter Width
节点设定为0.6,最后再将值乘以90即可,得到的信号如下:





暂时先写到这里,几何体变换应该是很简单的处理了,篇幅所限,下篇博客再讲吧……

<全文完>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Houdini 信号处理