写给自己的技术文档:用Houdini玩MMD!
撒糖MOP四百万年
2021年10月23日 05:28

作为专业cg工作者,前特效师现程序媛,mmd已经满足不了我的渲染需求,于是自己研究了一套mmd to Houdini的流程,将mmd动画和相机烘焙成abc, 导入Maya再到Houdini,以及Houdini里的unpack做材质。其中踩了无数坑,试验了很多东西,总算摸清了流程,所以记下来留着以后查阅。标题里说写给自己是因为我觉得大家一般用c4d和blender,但是如果有特效师同好想导Houdini渲染,这个文章可以勉强参考下。

我主要玩TF系列——G1变形金刚的角色模型,都是硬表面,材质相对好做,我觉得二次元人类角色的模型也可以走这种流程,特别是可以在Houdini里毛发解算。不过这个可能要Maya里先用xgen把毛发刷好,导线再导入Houdini……

首先要使用mmd桥版本打开场景,这个不用多说了。


一、帧率的设置,有效降低渲染成本

第一个关键点在于帧率,MMD默认30fps,但是影视一般用的24fps,经过我的测试,实景类视频24fps完全足够,如果用30帧渲染,一秒就多渲6帧,一分钟的舞蹈多渲360帧……这个成本太高了。所以介绍一个mmd导出24帧abc的方法(试验了很久才做出来,自己甚至写了一个mmd桥代码)

首先mmdBridge设置中用c4d的这个脚本,我测试发现Houdini对它兼容的最好,默认Houdini的选项容易出bug;其次这里的帧率直接设置30帧,原因后面讲。

老威你别这么看着我,我好紧张

然后导出视频这里,如果你导出相机的话,分辨率最好设置成想要的分辨率,不然会影响abc相机的分辨率;如果你做实景合成,有跟踪相机的数据,不用导出mmd相机,那么分辨率设置成1*1即可。

这里帧率一定要调成24。简单的原理解释:MMD的全局帧率是按照录制导出视频的设置,也就是这里的变量,这样录视频的时候它随机删掉6帧,但是你烘焙的abc帧数编号会保持稳定每帧+1的速度增长,所以abc实际是按照24fps记录的;但是如果你在上一步就设置24fps,它记录的帧数会乱掉,导致不符合abc导出停止的条件,这个文件就会一直处于被写入状态。

大哥!你看得我都没心思做mmd了 > 3 <

二、Maya导入abc

如果你不需要mmd相机,可以跳过maya这个步骤直接把abc导入Houdini。使用maya是因为Houdini不好直接读取abc相机(这个有待实验,我简单试了下发现行不通)。

使用Maya的Import导入mmd输出的abc文件。注意帧率要设置成24fps。导入后Outliner发现有相机和一堆mesh,这里每个mesh都对应着mmd里的材质分组,应该是模型原作者做的拓补。

霸气的威总和他的两个老婆

方便起见把这些polygon都分组。

六亲不认的步伐

挨个导出abc, 顶部export -> export selection to alembic,常规Maya操作。

三、Houdini里的骚操作

1.导模型/材质分组:

Houdini新建geo节点,然后Alembic节点读取单个模型。

中键alembic节点,会发现点数和之前maya里的mesh数相等, 这里表示模型上都是packed geometry,每个点都是一个材质上的组,所以需要一个for each循环把每个组分别unpack。这里我加了一个attribute wrangle, 为了给每个组独立id,方便后面分组。

然后convert polygon,再加partition节点,这个节点是根据之前设置的id进行分组的。 然后把模型缩小为原先的0.1。

如果你想在原有材质分组基础上加新的组,选中需要分组的面,然后tab->group creat。

这里紫擎的肩灯要设置成绿色,所以单独分组

然后就是Redshift上材质了,这就不展开讲了,放一张viewport预览(胸口碎玻璃是布尔破碎+RBDFracture切割出来的,然后给了初速度做刚体解算,选一帧删出一个洞,位移到原点,然后point deform到他右胸车窗的位置)

擎帝实在是太帅了,让我一个特效师心甘情愿为你做材质!

渲染图:

塞博坦版魔力麦克秀??你们三个我全都要!

2.导入相机

还有一点小Bug正在修复中……

TBC.