▉ 在神面前,我是一个污秽的人,不配的人。— 每天翻译一篇教程,这就是我写给houdini的情书。【首发于同名公众号:“致houdini的情书”】
█海明威说过“世界很美好,我们要为之奋斗”,我同意后半句
前言不搭后语:
神啊,我有罪。
请宽恕我。
请宽恕我的懒惰,宽恕我的贪婪,宽恕我的意志薄弱。宽恕我的偏执;宽恕我的冲动,宽恕我的暴躁。宽恕我的狂妄。宽恕我的懦弱。宽恕我曾对别人造成的伤害。宽恕我曾经的背叛。宽恕我的的不忠不孝不仁不义。宽恕我辜负的时光。
而今,
我已知悔改,请求你的原谅。
今天这节内容:
如何实现高多边形网格与其低多边形表示之间平滑混合
这一节要实现的效果
.....
今天是42岁
第040天周二
66
这是写给Houdini的第066封“情书”
我是geo流程图
我是pointvop
低模点投射到sdf
创建低模和sphere之间的衰减
创建prim和sourceprimuv
融合“低模”和“平滑低模”
混合法线
首先
制作步骤
○
小节提要
在高多边形网格与其低多边形表示之间平滑混合是一种微妙但有用的效果,
本节将学习:
01)如何使用完全相同的拓扑创建同一对象的高低模两个版本。
02)使用衰减值在两者之间混合。
03)使用重心坐标来插补低多边形衰减值。
04)将其转移到高多边形网格。
05)然后将位置和法线与VOP混合。
模型网站:
1)https://www.myminifactory.com/
接下来
正式制作
使用软件:houdini16.5
01完全相同的拓扑创建同一对象的高低模两个版本
1 准备“高模”&“低模”
○ 节点 ○
1file;transform1;transform2;
2null命名highpoly。
3paint。
4pointwrangle:
5polyreduce1
6null命名lowpoly:
○ 具体操作 ○
1)导入模型;缩小。旋转位移;
2)null输出高模。
3)模型脸上涂上红色。
4)设置保留属性=这个颜色的绿色通道的倒数:
@retention= 1-@Cd.y
5)调用retention;减少很多多边形只是红色部分稍微多一些:
6)null输出低模;
接下来:
1)将“低模”的顶点复制到“高模”得到一个完美的适配。
2)
减少面时,很多顶点产生了位移,移回正确位置
2 偏移“低模”点到对应的“高模”上
使用原模型的sdf volume;
○ 节点 ○
7 vdbfrompolygons1 //
8 null输出,命名sdf
9
pointvop重命名reproject_volumetric
//“槽1”连接“低模”b)“槽2”连接“sdf”内部调用sdf
9-1)volumegradientfile1
9-2)volumesamplefile1
9-3)negate1
9-4)multiply1
9-5)add
○ 具体操作 ○
7)需要外部的bandbox,因为我们需要使用SDF的梯度来复制这些顶点。 输出null“SDF”
a)vdb在“物体表面”默认定义了三个“体像素”
b)这些顶点有可能偏离,所以是体像素数量不够的提高为30个。
c)内部全部填满。这些设置确保低模在一个大的sdf里面。
d)我们要保证无论哪个“低模的点”都有sdf值,
9)voppoint//
sdf两个部分:
❖1)sdf的梯度=靠近表面的点矢量方向
❖2)sdf的采样数值=到表面的距离
9-1,2)建立“梯度”“采样”与P和“槽2”的连接
9-3)接下来需要对梯度取逆向:
问题)梯度从表面指向错误的方向
解决方案)需要“指向曲面的向量”对当前梯度取负值
9-4)再将“梯度”乘“采样”
❖1)当前得到了指向“高模”的矢量线。
❖2)multiply=移动到表面的“偏移”强度 。
9-5)将点位置+这个“偏移”输出P
对齐点的位置后,
a)再保持外形的情况下。
b)细化这个“低模”。
3 细分“低模”顶点
1) 需要更多的点;
○ 节点 ○
10 subdivide1。
11 pointwrangle命名set_creaseweight
12 normal:
13 pointwrangle命名store_vertex_normal
10)subdives细分最好的方案=Opensubdiv Loop; 低模是三角形网格。
问题)当前产生了平滑变形,没有保持“低模”原型
方案)细分前设置所有皱褶权重creaseweight
11) pointwrangle设置“creaseweight”
a)设置“皱褶权重=20”;b)选择运行在“顶点”上.
@creaseweight = 20;
12)锐化一下法线;
需求)存储这些法线,形成与“高模”不同的法线,最后混合这些法线
13)pointwrangle存储法线;还是运行在vertex顶点上:
执行)v@mynormal = @N;
4 将细分后的“低模”点投射“高模”
○ 节点 ○
14 reproject_volumetric1project_volumetric1
a)复制<9>节点
b)“槽1”连接<13>节点。
15 normal :
14 复制<9>改变“槽1”为“细分后的低模”这样就把点投射到了“高模”上,在改变一下法线,-----
问题)“细分低模”应该投射成功却没效果
原因)法线方向还没有改变,增加normal
15 增加法线
问题)多边形在光滑高模上分布不漂亮
原因)我们投射fact面,多边形大小分布不均
解决方案)foreach交互式表面平滑,再复制
5平滑细化投射的低模表面
○ 节点 ○
16)foreach with feedback
17)attribblur1
18)reproject_volumetric2 // 复制<14>
16)feedback的循环节点
需求1)点在表面的移动
解决方案)循环中使用模糊表面,然后再投射
17)属性模糊:它会平滑模糊多边形分布
18)复制投射节点:放入for循环;迭代了10次
模糊迭代=1;沿表面平滑点
循环迭代=20,模糊迭代=5模糊迭代=1(边缘好许多)
此时)有了低模的两个版本:
一个平滑投射后。一个保持低模外形。
相同的点,prim,只是外形不同
02使用衰减值在模型间混合
1低模创建顶点法线&衰减过渡
19)store_vertex_normal1
20)sphere;21)transform:
22)primitivevop命名falloff:
22-1)importpoint1; 22-2)const13;
22-3)distance1; 22-4)fit;
23)attribdelete1:
24)bindexport:
需求)混合两个模型
步骤1)循环后低模“创建顶点法线”
19)给模糊投射低模,增加顶点法线:因为不但要混合模型,也还有法线
需求) 创建球和低模的混合衰减值
20)使用球;21)移动到模型中央,
22)primvop的“槽2”接球;“槽1”接<06>
22-1,22-2)首先找出球的中心点;使用importpointattribute;一个=0的整数常数,连接ptnum;Opinput2连接file
22-3)dist距离节点=所有点和中心点的距离,
22-4)fit反向创建衰减值1~0。
d)输出Cd观察效果
观察效果
23)使用“属性删除”,去掉之前Cd移动球便于观察
24)bind export输出falloff
需求)降低过渡的范围;
方案)提高原始渐变范围最小值=0.9
03使用barycentrics坐标来插补"低模"衰减值
1 转换prim为point类
在将衰减值应用到“细化低模”前,还需两件事
1)转换:将falloff值从prim转成point,因为最终我们需要对“细分版本”的每个单独点的所有点进行价值衰减,然后必须以某种方式将这些值转移到高聚合版本,
2)实现方法:primuv使用参数坐标来进行插值;此法更精确
2barycentric坐标系插值低模
24)attribpromote1:
25) attribinterpolate1 :
26)pointvop命名findbarycentrics
26-1)xyzdist1 26-2)bind1输出sourceprim 26-3)bind2输出sourceprimuv。
27)color:
24)转换“衰减”从prim到point
插值方案)使用attribinterpolate插值
25) attribinterpolate1在几何体上使用两个属性:sourceprim和 sourceprimuv 可以在每个prim的坐标看到点的坐标。
需求)首先创建 sourceprim和 sourceprimuv
解决方案)pointvop创建属性
26)“槽1”连细化版本<13>store_vertex_normal;
"槽2"连接低模版本投射<9>reproject_volumetric;
现在这两个属性是 attribinterpolate1的内部标准属性。
操作)<25>“槽1”连<26>"槽2“连<24>”
问题)颜色没有衰减。attribinterpolate只对点插值
解决方案)加入color节点
使用rampfrom属性
27)color改变颜色便于观察!
04将其转移到高多边形网格
1 混合两多边形点位置
28)pointvop命名blendP
28)pointvop“槽1”连看上去的“低模”<27>“槽2”连高模<19>
12)
05将位置和法线与VOP混合
1 混合两模型点位置
28)Pointvop
28-1)importpoint1 28-2)mix1;28-3)bind1
28)pointvop
28-1) importpoint1输入“平滑低模”与P位置mix,bind引入falloff进行融合输出P
importpoint1
2 混合法线
29)attribpromote2
30)pointvop命名blend_normals
30-1)importvertex1
29)衰减从point转“顶点”
30)“槽2”接<19>
30-1)输入第二几何流顶点属性
今天就到这里,收功
教程翻译自entagma的网络教程
下一节::20180730 Importing & Exporting Vectors to_from Houdini + Creating Isocontours
电子邮箱:oneinchtime@126.com
公众号:
微信号