▉ 今天有个小男孩生日,他就是我的儿子— 每天翻译一篇教程,这就是我写给houdini的情书。【首发于同名公众号:“致houdini的情书”】
█火山爆发之前总是很平静很祥和!
前言不搭后语:
你最爱看神奇宝贝,在你生日这天,放一首你最爱听的歌。
这首歌,开始听,很吵,听久了,很燃!
记录你的成长,就好像看到小时候的我一样。希望你像健康的果实,在晨露的沐浴中茁壮成长,平安,正直的过一生!
(日记一则:想象力方面,孩子总能教你很多东西。
2018年4月24,18:49洗完澡的小泽问我:你知道灵感大王是什么吗?我:不知道。小泽言之凿凿的说:灵感大王是通天河里的一条鲸鱼。)
为了防止世界太乏味,为了守护世界的活力,可爱又迷人的淘气男孩,你是穿梭在银河里的少年,希望,美好的明天在等着你。
喵!就是这样,小泽,祝你9岁生日快乐。
其实,
你也是我的-神奇宝贝!
今天这节的内容:
如何制作水果表面的雨露。
这一节要实现的效果
.....
▉今天是42岁第029天周五
这是写给houdini的
第055封“情书”
我是geo流程图
我是solver流程图
<08 move_along_surface>1)向上矢量;2)向上移动位移.3)缩小粒子.4)根据pscale驱动位移
<10flatten> 压扁
<17 水滴向附着表面缩进>
本节需要注意的知识点:
水滴形成步骤
01粒子部分
1
细分模型,增加法线
1) object_merge合并进物体
2) normal1增加法线
3) subdivide1细分模型
2
撒点-设置粒子随机尺寸
1) scatter随意撒点
2) pointvop设置粒子pscale
a) aanoise1增加尺寸的随机性。外置参数
b)fit映射范围-0.5~0.5
c)ramp坡度
d)第二个fit外置Destination min&max,为下一步,根据粒子大小驱动粒子位移做准备。
3
沿表面向上位移缩小的粒子
1) pointvop制作向上的矢量,在根据矢量产生位移
a)首先:通过两次“积乘”获得沿表面向上的矢量。
b)然后:成一个0.8常量缩小粒子。
c)最后:外置fit的源min&max,使用设置粒子pscale的参数复制关联。最后接displacement的amount驱动移动的距离,粒子小的移动少。
4
压扁点
1)constant矢量,缩小z轴
2) bind export输出scale属性
02 水珠部分
1
copytopoint
1) sphere拷贝到点
2
转vdb,布尔掉果实内部露珠
1) vdbfrompolygons:转VDB
2) vdbcombine:布尔掉果实内部的水珠
3) vdbreshapesdf:扩展体积
4) vdbsmoothsdf:平滑
5) convertvdb:转polygon
3
沿表面法线向果实内部嵌入一点
1) pointvop:接口2接入果实
a)xyzdist:返回几何体果实对应点的primid和primuv信息。
b)primitive attribute:对应的水滴primid和uv,然后指定采样信息:N接入displacenml节点。
c)displacenml节点:输入P,输出P,调节amount将水滴向表面内收缩。
接下来
理论部分
问题1:关于向量积的原理
01)与向量打交道时,可以对它们做不同的数学运算,
02)它的运算结果:产生一个向量,并且垂直于两个向量构成的平面
03)G与N积乘,得到B;A再与N积乘,得到dbug;
接下来
开始正式制作
使用软件houdini16.5
1:粒子部分
1 细分模型,增加法线
1)Object_merge
// 必须把它转化成this object否则不匹配
2)Normal //
3)subdivide1 //
2 撒点-设置粒子随机尺寸
4)scatter1 // 1200个点
5)pointvop命名set_pscale // 粒子尺寸
a) aanoise1增加尺寸的随机性。外置参数
b)fit映射范围-0.5~0.5
c)ramp坡度
d)第二个fit外置Destination min&max,为下一步,根据粒子大小驱动粒子位移做准备。
3 拷贝到点
6)copytopoint // 去掉继承法线
7)sphere //
4 求得细长的流水模型
方案)
1 转成volume,放多个依次缩小的sphere,然后merge。
2 复制sphere沿着表面上移。
2a 这时需要沿着表面向上的矢量,用double cross product双交叉乘积(向量积)
2b //求沿表面的的矢量dbug)
1 建立一个向上的global vector全局向量{0,1,0},它与点的法线的积乘,产生的向量
8)Pointvop命名create_vector_along_surface
<问题1>然后获得向上矢量
8-1)constant // 矢量{0,1,0}
可视化dbug这个矢量
8-2,3) 两个Cross Product积乘
8-4) bindexport // 输出dbug矢量
<问题2>如何让点向上移动
8-5)displacenormal //
a)连接P,和第二个积乘的输出,
b)输出连接P
c)amount=0.01,点沿表面就向上移动
9) merge // <5>和<8>合并
<问题3>如何让上面的点缩小
8-6)bind2 // Name:pscale
8-7)mulconst1 // Multiplier:0.8
8-8)bind3 // Name:pscale
<问题4>解决pscale不同但位移却都相同
关联 pscle<05>的值fit到<08>节点里fit
8-9)fit1 // val连接bind;外置最小最大源min和max
8-10)parameter // Name:displacement_amount 作为外置参数;
1)连接fit输出到<08-5>displacenml节点
2)在外面面板调节
>
8-11)multiply 1) ;
<问题5>太小的粒子没有移动。
8-9) fit1 // Destination Min=0.2
5压扁点
使用scale属性的z轴
10) Pointvop命名flatten //
10-1) constant1
10-2) Bind export1
2:水珠部分
1:转VDB
11)vdbfrompolygons1
12)vdbsmoothsdf1
13)vdbreshapesdf1
2:布尔掉果实内部的水滴
14) vdbfrompolygons2
15)vdbcombine1
16) convertvdb1
3:水滴贴着表面渲染费时,移入表面一点
17) Pointvop命名move_inwards
17-1)xyzdist // 它是引入几何体中心的坐标,返回的primid(点所在表面对应的最近的那个prim),primuv返回“所在的那个prim上的”点一个二维vector第三个维度坐标=0;我们需要表面法线,我们有了两个采样,
17-2)Primitive attribute //
然后告primuv相同曲面的 primitiveid和对应的UV坐标,
然后我们可以指定要采样的属性。
在本例,我们知道在表面上水滴的每个点的法线,通过normal进行displace
a)opinput2连接file;
B)prim和uv连接<16-1>的对应接口
17-3) displacenml
外置参数:Displacement amount=0.04,//水滴就被沿着表面法线方向推离表面。
a) 外置参数:Displacement amount=-0.003
今天就到这儿了,收功,
明天开始entagma教程的2018年
教程翻译自entagma的网络教程
下一节:20180101 Fakebroidery- Needlework in Houdini
本文图片全部原创,版权归原作者所有