前言

这几天偶尔补了补轻音,看到第二季的OP2的时候,觉得K-ON的音乐可视化超棒,于是就决定实现一下。

音乐可视化话实现起来也没有多难,基本思路就是将音频波形采样,映射到多边形的挤出高度。

不过houdini刚刚入门,对我来说实现起来还是有点麻烦的( ̄▽ ̄)”。

不过还是花了一天磕磕绊绊的做出来了,效果如下:

(手绘风格目前触及了知识盲区,就暂时跳过实现了( ̄▽ ̄)”)


大概过程

模型

首先要解决的是要面片的制作,我用了Ps,配合Ai,导出SVG,用Maya的SVG生成面片。

为什么不直接用Ai,因为我Ps更熟悉点(~ ̄▽ ̄)~。

另外其实可以导出Ai格式的Illustrator 8的旧版本,直接导入houdini的file节点里面,就可以用了。

Ps-Ai-Maya

Houdini可视化

节点如图:
Houdini节点
attribwrangle1中计算了挤出的顶点,并等距增加顶点。

之后用polyextrude挤出。

注释部分原本是计算挤出的顶点,不过polyextrude更好用(~ ̄▽ ̄)~,就去掉了。

int pts[] = primpoints(0, @primnum);
float dist = f@dist;
float disttt = dist* 10;

float basehigh = 0.5;   //high=0.25, space=0.08
//float high = 0.25;
float basehigh1 = 0;
int top;

int k = (int)(disttt / basehigh);
//if(k % 2 == 0){
//    k = k - 1;
//}

int newpts[] = {};

for(int i=0; i<len(pts); i++){
    int pt = pts[i];    
    vector normal = @N;   
    vector pos = point(0, "P", pt);
    for(int j = 1; j <= k; j++){
        basehigh1 = basehigh * j;

        /*if(j == 1){
            vector newpos_2_1 = pos + normal * high;
            int newpt1 = addpoint(0, newpos_2_1);
            append(newpts, newpt1);
        }*/

        vector newpos_1 = pos + normal * basehigh1;    
        int newpt2 = addpoint(0, newpos_1);
        append(newpts, newpt2);

        /*vector newpos_2_2 = pos + normal * (basehigh1+high);    
        int newpt3 = addpoint(0, newpos_2_2);
        append(newpts, newpt3);*/
    }     
}

for(int i=0; i<len(newpts)/4; i++){
    //int k1 =2 * k + 1;
    int k1 =k;
    top = addprim(0, "poly", newpts[i], newpts[i + k1], newpts[i + 2 * k1], newpts[i + 3 * k1]);
}

颜色的话,判断Y轴高度更改Cd.rgb值就可以了。

float Y = @P.y;
if(Y < 6.48){
    @Cd.r = 0;
    @Cd.g = 0.991393;
    @Cd.b = 0.991393;
}
else if(Y >= 6.48 && Y < 8.95){
    @Cd.r = 0.368591;
    @Cd.g = 0.875138;
    @Cd.b = 0;
}
else if(Y >= 8.95){
    @Cd.r = 0.982826;
    @Cd.g = 0.436813;
    @Cd.b = 0.579547;
}

效果:
http://wx2.sinaimg.cn/large/0065YB6Nly1g3rzik8x4ij31770u0k5b.jpg

结束

果然还是原版好看呀!

参考:

在houdini中导入导出点信息 以及创建等高线
【Houdini教程】频谱可视化器

源文件:

百度云
提取码: tuuq


仅此而已的地方