Houdini学习笔记014_兔子招谁惹谁了?

今天教大家切一只兔子,可以横着切,可以竖着切,也可以斜着切。选择最多的是横切,比如山体的等高线就是这种切法,纵向表示海拔高度。

我们要做的就是得到模型切片的轮廓线,而且层数和层间距要可控。最后按照海拔的不同给切片添加不同的颜色。
切片功能使用的是其貌不扬的“Boolean”(布尔)节点。首先,用“file”节点导入一只bunny.obj模型,由于Houdini默认单位是米,这尊兔子导进来有100多米高,为了让其看上去和其他模型大小差不多,用一个“transform”节点将尺寸(“Unifrom Scale”)设置为0.025。当然,你可以视自己导入的模型大小而定。

创建一个“grid”(平面)对象,用“boolean”节点进行布尔运算。平面要和兔子有交叉。

将布尔的操作模式“Operation”改为“Seam”(接缝的意思),并取消勾选后面的“Only Use Open Curves”选项,得到封闭的面。有些情况下,得到的面法线方向是有问题的,可以暂且不管。需要注意的是,兔子必须是封闭模型,否则切割得不到想要的结果。

一个平面切割只能得到一个切面,要想获得多层切面,只需要用多个平面切割就行了。所以在grid后面添加“copy and transform”节点对其进行复制,gird的“Rows”和“Columns”分段均可设为2。copy从地平面(P.y=0)开始,“Translate.y”设为0.05(即层间距),总共拷贝(“Total Number”)80层,涵盖整只兔子即可。

但现在切片的法线方向是有问题的,即使添加“normal”节点,可以看到法线的方向仍然不一致。有些朝上,有些朝下,所以显示的光影效果不同。

解决的办法很简单,只需要用“group”节点将法线朝上或者朝下的面选出来,然后翻转即可。在“group”节点中启用“Keep by Normals”,方向“Direction”设置为(0,1,0),即竖直向上。“Spread Angle”是指法线方向与设定方向成一定夹角范围内的面都可以被选中。由于这里的法线方向不是向上就是向下,所以“Spread Angle”小于180度即可。最终group1中只有法线朝上的面。

添加“reverse”节点,“Source Group”选择group1,可以看到所有面的法线方向已经一致。

用“resample”节点对切片的轮廓点进行重新采样分布,然后用“polyextrude”节点挤出。挤出时勾选“Output Back”,得到封闭的背面。

最后再整体添加“normal”节点,让法线一致。

剩下的就是根据切片的高度不同添加不同的颜色了,可以用“Attribute Create”节点给切片添加一个高度属性。属性的名称“Name”可输入“height”,“Class”选择Primitive,表示是添加给面(切片)的,“Type”为Float(浮点数据)。“Value”设为@P.y,即y轴坐标(高度)。设置完后可以在“Geometry Spreadsheet”窗口查看Primitive属性,是否多出height属性列表。

然后在最下方添加“color”节点,“Class”同样选择Primitive,“Color Type”选择“Ramp from Attribute”,即根据属性来着色。“Attribute”自然选择前面设置的height。

默认的Ramp范围是0~1,即在height为0~1的范围内按照黑白渐变着色。但现在的兔子高度不止为1,近似可以用切片的间距乘以层数来表示。参数关联可写作“ch("../copy1/ncy")*ch("../copy1/ty")”,渐变色可选择预设的Black Body,点右侧的齿轮可以选择。

今天的笔记到此结束,属性的创建和利用仍需时刻练习。另外,“group”节点中的按法线方向设置选集(“keep by normal”)的功能还是不错的。感谢各位的阅读,咱们下回见~