Houdini教程笔记_Korea_WoodBoard

2020-07-09
1930
0

主要内容

 

教程通过控制撒点位置制作模板长条形的破碎形状,使用循环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属性。

 

 

(转载声明:本文转自网络,不作任何商业用途)

免责声明:本文内部分内容来自网络,所涉绘画作品及文字版权与著作权归原作者,若有侵权或异议请联系我们处理。
收藏

全部评论

您还没登录

暂无留言,赶紧抢占沙发
绘学霸是国内专业的CG数字艺术设计线上线下学习平台,在绘学霸有2D绘画、3D模型、影视后期、动画、特效等数字艺术培训课程,也有学习资源下载,还有行业社区交流。学习、交流,来绘学霸就对了。
绘学霸iOS端二维码

IOS下载

绘学霸安卓端二维码

安卓下载

绘学霸微信小程序二维码

小程序

版权声明
本网站所有产品设计、功能及展示形式,均已受版权或产权保护,任何公司及个人不得以任何方式复制部分或全部,违者将依法追究责任,特此声明。
热线电话
18026259035
咨询时间:9:00~21:00
在线客服
联系网站客服
客服微信:18026259035
公司地址
中国·广州
广州市海珠区晓港中马路130号之19
绘学霸客户端(权限暂无,用于CG资源与教程交流分享)
开发者:广州王氏软件科技有限公司 | 应用版本:Android:6.0,IOS:5.1 | App隐私政策> | 应用权限 | 更新时间:2020.1.6