
▉ 今天有个小男孩生日,他就是我的儿子— 每天翻译一篇教程,这就是我写给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

本文图片全部原创,版权归原作者所有