Houdini教程笔记_Korea_WoodBoard
主要内容
教程通过控制撒点位置制作模板长条形的破碎形状,使用循环For_Each节点和VOP节点制作破碎处的细节,通过属性控制木板的结算开始时间,以及使用低模结算,高模替换的方法制作碰撞效果。(教程中没有用到约束。)
整体思路
1.制作基本的木板。
2.使用For_Each提取一块木板。
3.在木板中创建点。
4.通过Voronoi Fracture节点进行单片木板破碎。
5.调节点的位置实现长条碎片。
6.使用For_Each中的属性实现木板碎裂的随机性。
7.制作破碎边缘细节。
8.将低模碎片进行动力学结算。
9.替换高模碎片。
10.调节材质,渲染输出。(作者推荐了一个能下贴图的网站www.textures.com)
重要知识点
1.单片木板破碎
2.木板破碎形态随机
3.破碎细节制作
4.低模破碎结算
5.破碎结算控制
6.高模碎片替代与调整
知识点分析
1.单片木板破碎
(1)创建For-Each Primitive节点,选择Block End(foreach_end)节点,开启Piece Attribute属性(通过属性选择循环单元),并在属性栏填入class属性(连接性属性),完成单片木板的提取。
(2)创建Point Generate节点,创建点。(点的数量取决于需要的碎片数量)
(3)创建Transform节点,将点的位置移动至木板质心。这里通过表达式提取木板质心位置。
质心:是点的边界框的中心位置,而不是点的平均位置。
centroid("../foreach_begin1",0)
centroid("../foreach_begin1",1)
centroid("../foreach_begin1",2)
提取质心(“节点路径”,X 0/Y 1/Z 2轴)
(4)创建Point Jitter节点,分散点,并控制木板碎片形状。
Scale 缩放:0.1(因为木板的高度是0.1)。
Axis Scales 轴心缩放:Voronoi Fracture节点是基于点的位置分配碎片体积,因为制作的木板是沿x轴横向的木板,所以压缩点之间x轴的距离,就能得到长条状的碎片。
(5)创建Voronoi Fracture节点,制作木板破碎。
Voronoi Fracture节点:输入端1-连接破碎模型。
输入端2-破碎细胞点。
输入端3-深度采样SDF(可选连接)。
2.木板破碎形态随机
因为For-Each循环,所以木板碎片的碎裂方式也是相同的。
(1)选择Block Begin(foreach_begin)节点,点击Creat Meta Import Node创建循环属性节点。
这个节点能生成“iteration”属性(迭代次数属性),使用这个属性做随机就能使每次循环产生不同结果。
(2)选择Point Jitter节点,在Seed属性栏调用Block Begin(foreach begin1_metadata1)中的“iteration”属性创建随机值,实现碎片随机化。
rand(detail("../foreach_begin1_metadata1" ,"iteration" , 0) 325456)
随机(调用(“当前层级下/foreach begin1_metadata1节点”,“iteration”属性,默认值0) 任意数)
(3)选择Transform节点,将Translate属性中的x轴属性也加入随机值,使木板破碎中心在x轴向上随机偏移。
fit01(rand(detail("../foreach_begin1_metadata1" ,"iteration" , 0) 4523456),-1,1)
fit01 将随机值为0至1的区间缩放为-1至1。(因为木板宽度为2。)
(4)选择Voronoi Fracture节点,在Attribute属性栏中关闭Creat Name Attribute属性。(因为使用For-Each制作破碎,每片木板的碎块名字都会从0开始,所以在这环节无法创建name属性。)
3.破碎细节制作
(1)创建Subdivide节点,细分破碎inside部分的面。
Algorithm 算法 :Houdini Catmull-Clark(保持细分 inside 的面与碎块其余面的连接性。)
开启 Override Crease Weight Attribute 覆盖折痕权重属性(保证边缘还不会因细分变形。)
Crease Weight 折痕权重值:保持边缘形态即可。
(2)创建Group Promote节点,将inside面组转换为点组,并保留inside面组。
Keep Original Group 保持原有组。
(3)创建Group Expression节点,去除木板两边被选中的点。(因为木板边缘不需要变形。)
VEXpression通过VEX选择。
@P.x == -3 || @P.x == 3
x轴为-3的点 或者 x轴为3的点
Merge Op 合并方式:Subtract form Existing 现有点减去所选点。
(4)创建Attribute VOP(make_sharp)节点,并进入,制作破碎细节。
(5)创建Get Vector Component节点,连接至P。
Vector Component 向量组成:Component1 (X轴)(因为木板是沿x轴横向拉伸,所以破碎木纹也是沿x轴拉伸的。)
(6)创建Turbnoise节点,输入端pos连接至P,将输出的值与Get Vector Component节点的输出值使用Add节点相加。
(7)创建Clamp节点,将Add节点的输出值域区间限定在-3至3。(因为木板宽度为6。)
(8)创建Set Vector Component节点,将vec(向量)连接至P,将fval(数值)连接至Clamp节点。将newvec(输出值)连接至输出端的P属性。
Vector Component 向量组成:Component1 (X轴)
即保持原有Y轴与Z轴的数值,将新的X轴数值输出。
完成破碎细节制作。
4.低模破碎结算
为了使之后的低高模碎片替换不出现问题,必须使用Subdivide节点之后的节点流进行结算。(不然创建的name属性会不同)
(1)使用Assemble节点为碎片创建name属性。
开启Create Name Attribute属性为碎片创建name属性。
开启Create Packed Geometry将碎片转为Pack物体。
(2)创建Attribute Randomize节点,创建随机速度属性。用于制作木板的爆裂效果。
(3)创建Attribute Wrangle(v_amplitude)节点,给予速度一个倍增值。
(4)创建DOP Network节点,并进入。
(5)创建RBD Packed Object(wood)节点,导入外部木板碎片。
Geometry Source物体源:First Contest Geometry 第一个输入端的物体
开启Inherit Velocity from Point Velocity 继承点速度。
Collision Padding可以控制碰撞精度,越小精度越高。
(6)创建Rigid Body Solver节点。
Solver Engine结算引擎:Bullet
碰撞结算效果。
5.破碎结算控制
(1)在SOP层级下,DOP Network节点上游创建Point VOP节点,并进入。(用于创建active属性。)
active属性可以控制是否开启结算,值为1是开启,值为0是关闭。
(2)创建Relative to Bounding Box节点,将P属性连接至P,将file连接至OpInput1,读取木板Pack点的bounding box。
(3)创建Get Vector Component节点,提取z轴。(因为木板是沿z轴方向排列)(输出的值为0-1之间)
Vector Component 向量组成:Component3 (Z轴)
(4)创建Fit Range节点,将val连接至Frame属性(帧数)。
将Source Min/Max分别设为1和120。(将1-120的区间缩放为0-1。)
(5)创建Compare节点(比较节点),input1连接至Fit Range节点,input2连接至Get Vector Component节点。(Compare节点会按选择方式比较两个输入值,正确输出1,错误输出0。)
Test 测试:Greater Than > 大于。(即随时间增长,Fit Range节点输出的数会不断变大,输出值会沿Z轴不断变为1。)
将输出值连至Cd查看效果。
(6)创建Bind Export节点,连至Compare节点的bool输出端,将属性值导出。
Name 属性名:active
Type 类型:Integer(int)整形
(7)回到DOP Network节点内,创建POP Wrangle节点,连接至Rigid Body Solver节点的第三个输入端。(用于导入active属性。)
选择Inputs属性栏
input1 输入端1:First Context Geometry 读取DOP Network节点第一个输入端的属性。
选择Code属性栏
i@active = point(0 ,"active" ,@ptnum);
整数 active 属性 = 点属性(0号输入端, active属性, 范围为点序号);
(8)选择RBD Packed Object(wood)节点。
将Initial Object Type 初始物体类型 改为 Create Animated Static Objects 创建动画静态物体。(这个类型会不断刷新输入数据,使active属性正常运行。)
6.高模碎片替代与调整
(1)高模碎片替代需要高模与低模有同样的name属性,所以创建Assemble节点。
开启Create Name Attribute属性为碎片创建name属性。
开启Create Packed Geometry将碎片转为Pack物体。
(2)创建Attribute Wrangle(set_pivot)节点,计算每片木板的中心点。(用于木板缩放,制作木板间的空隙。)
v@pivot = @P;
向量 pivot属性 = 位置 P 属性;(pivot中心点属性。)
(3)创建Unpack节点,只有解压后才能对木板进行缩放。
Transfer Attributes 传递属性:v 速度属性 pivot 中心点属性
(4)创建Attribute VOP(make_gap)节点,并进入,制作木板间隙。
(5)创建 Bind 节点,导入外部 pivot 属性。
Name 属性名:pivot
Type 类型 :3Floats(vector)
(6)创建 Transform Matrix 节点(变换矩阵节点),将 pivot 输入端连接至 Bind 节点导入的 pivot 属性,将 pos 位置属性连接至 P。将输出端xformpos 连接至输出 P 属性上。
木板沿 Z 轴缩小,产生间隙。
(7)创建 Pack 节点,将木板重新转换为 pack 物体。
(8)创建 Transform Pieces 节点,用来高低模替换。
输入端0:连接替换的高模。
输入端1:连接结算的低模。
Attribute替换依据的属性:name属性。
(转载声明:本文转自网络,不作任何商业用途)

全部评论


暂无留言,赶紧抢占沙发
热门资讯

基础绘画—动漫人物臀部画法教程

【绘画教程】动漫女生的腹肌怎么画?

动漫女生胸部怎么画?动漫女生怎么画的性感?...

成长帖∣兴趣跟职业,我两个都要了!!biu~...

你心中的打虎英雄是怎样的?第十三届王座杯现面向全国征稿~...

来自韩国画师Jettafield的禁欲系男士,太赞了!...

maya中锁定并解锁物体教程

3dmax布尔运算差集后图形消失怎么办?

ZBrush中的怎样删除或隐藏遮罩区域?
