第064封“情书”:荆棘岭Kitbash Vein Growth Part 2<Entagma>Houdini 2018

█ 这就是我的人间。荆棘遍地!陷阱重重。

— 每天翻译一篇教程,这就是我写给houdini的情书。


Crown of Thorns

█世界荣誉的桂冠,都用荆棘编织而成。


前言不搭后语:   

      漫漫人生路永远充满挑战,棘手的问题层出不穷,

只有信念和坚忍才能逼退人生路上布满的荆棘,走出康庄大道。

今天这节内容:

    光秃秃的线上如何分叉,发芽长出荆棘。


这一节要实现的效果
.....

20180618 Kitbash Vein Growth Part 21.png


▉今天是42岁第038天周日

这是写给houdini的

第064封“情书”

我是geo流程图

image.png


我是poinvop流程图

设置分支由粗变细:   image.png为每个点建立随机值myrnd(后面根据这个值取值范围,创建“ 随机选择点”的组) image.png
我是vex代码

设置“主干”粗细:  
@pscale = 1; 
重映射“主干”的curveu

//----均匀的分布curveu----

//-- 1 所有点

int pntcnt = npoints(0);


//-- 2 因子

float frac = 1.0/float(pntcnt-1);


//-- 3 新curveu

@curveu = @ptnum*frac;

设置分叉生长参数

#include


//-- 1 growth:主干的生长,复制关联second U

float growth = ch("growth"); 


//-- 2 长度:主干


float masterlength = prim(1, "perimeter", 0);


//-- 3 百分比因子

float frac = 1.0/masterlength;


//-- 4 分叉的生长动画 ,通过映射主干的动画,通过frac把主干与分支联系起来

growth = fit(growth, @curveu, @curveu+(@perimeter*frac), 0.0, 1.0);  


// @curveu=分叉的,在它变化之前不生长;"@curveu+自身的长度=主干增长到分叉时,分叉开始生长,知道它的长度结束;

//乘百分比因子,同主干放在同一个范围;


//-- 5 调用函数 @primnum当前分支primid,当前的长度;把长度参数乘新计算的growth

adjustPrimLength(0, @primnum, @perimeter, @perimeter*growth); 


本节主要步骤:


创建枝杈生长


A  随机点生长&分配随机分支

    1)选择分支放置在prim的随机点上

       2)“选择点”随机分组&随机分叉。

B  样条几何体化

    1)放样所有线条

     2)让分支“由粗到细”

   3)主干与分支分支




接下来

开始正式制作

使用软件houdini16.5 


A 随机点生长&分配随机分叉


1 选择分支放置在prim的随机点

1) grouprange  // a)name:clone;b)group type:points,c)select:1 of 25;


2 )copytopoint  // Target Points:clone。  


3 ) sphere和transform  // 缩小一点;


4) blast5,6,7 // group分别输入:0,1,2   ;连接copytopoint  ;


--------选择点--------

1)在所有prim上隔25个选择1个点:通过这些点来分叉

    所有点都移入一个组:clone;选组类型:点。在使用“范围滤波器”25个点中选择1个

image.png

-------选择分支--------

2-3)接下来,以上面选出的点作为拷贝点,copytopoint指定目标点:clone。拷贝小球看一下效果; 

image.png


4)接下来。从orient之后的“曲线库”,使用blast分离线条库,用来作为分支,

    a)保留group:0的线条“线0”。b)group:1“线1”;c)group:2“线2”


    4a)线0连接到copy节点,

image.png

测试


接下来)随机的选择分支;

可以使用copy stamping,但是速度慢不推荐使用;


方案)使用3个group 和 三个copytopoints


选择点随机分组&随机 分叉


==随机分组==

5)pointvop命名create_myrnd// xx 。

    5-1)random  //5-2)bind export  //name:myrnd

6)groupexpression1 // Type:Points;group:a;@myrnd<0.333

<0.3

7)groupexpression2  // 命名b;@myrnd>=0.333 && @myrnd<0.666


8)groupexpression3  // 命名c;@myrnd>=0.666


9)groupcombine1  // A)group:a;  Equals:a B)与clone Intersect(And):


10)groupcombine2   // 同上,换乘b组

11)groupcombine3   //  同上,换乘c组

12)copytopoints_b;

13)copytopoints_c :

14)  merge4;合并11,12,13

15)  merge5 :合并repeat_end1和merge4


当前的group是:隔25个点选择1个点;

再把此组,随机分成3份!


5)首先,为每个点创建随机值;

    a)ptnum连接rand随机节点;输出一个新属性命名myrnd;

image.png

    b)每个id,对应0~1之间不同的myrnd数值;

image.png


------接下来,利用此属性数值将clone组分成3组------


6)a组;a)类型:点;b)命名a;c)选择@myrnd<0.333值的点; 

image.png

7)b组;命名:b;在0.333=

8)c组;命名:c;myrdn >0.666;

9)合并组1: a组与clone组交叉:

image.png

10)合并组2:b组与clone组交叉:同上,换成b组;

11)合并组3:c组与clone组交叉


==随机分支==

    

------选择的合并组的点分3份copytopoint------

12-13)复制两个copytopoints,

    a)三个节点命名_a;_b;_c;    

    b)分别改变Target Points目标点对饮的a,b,c:

    c)三个节点连接到groupcombin3之后

image.png

(注:现在拷贝的物体都是“线0”)

image.png

copytopoints_a                 copytopoints_b                 copytopoints_c


------3份copytopoint再次分配不同的prm------

14)合并:重新把copy节点 对应 或 随意 换成“线1”“线2”

image.png

15)最后把“总线”和“分支线”合并;现在就有了不同的prim分支;



接下来放样样条线

B 样条几何体化


1 放样所有线条

16)  sweep 

17)  circle 

18)  transform:缩小圆 0.02

19)  normal:


16)增加点大小pscale属性设置=1

17)放样节点sweep:选择“蒙皮”

image.png

18)放样横截面circle:polygon类型

19)缩小一些:

20)法线到顶点

image.png




问题)分支并未正确的放样

image.png

原因)“复制节点”继承了“接口2”的orient属性,并放在整个分支上

解决方案)去掉“继承点的orient”。

image.png


2: 分支“由粗到细”


解决方案)

1)在前面的resample创建curveu属性。

2)它定义了在曲线上从起点到终点在0~1之间。

3)利用这个属性,创建pscale随曲线变化。


20)   pointvop:// 。。。。此处省略。。。。


---在“orient的样条库”后设置pscale---

20)使用pointvop节点

    20-1)bind:引入curveu;

    20-2)ramp坡度;

    20-3)fit映射分为;外置“输出最小&最大值”

    20-4)输出pscale属性

image.png

20a)反向一下ramp。id=0处最粗!

image.png








20)   pointwrangle://   @pscale = 1;

问题1)如果没有出现“由粗到细的效果”

image.png

1)是因为curveu的变化范围,并没有在0~1之间。

2)因为在前面调节curve时,第一次采样是在0~1之间。第二次采样细分后,范围可能在0~0.2之间了。

image.png

解决方案)取消两个分支的第二次resample的curveu选项

image.png

问题2)主干消失

1)是因为线段没有pscale属性;默认值=0。

解决方案1)在merge前,在主干上加入pscale属性:

image.png

image.png

方案2)在分离三条线之前加入,三条线的粗细变化也消失。

在copy节点,取消pscale继承即可。



C条生长动画

接下来)制作生长效果!

使用carve节点:产生生长效果


1: 曲线的“生长效果”

21)  carve//


21)carve:调节First U 或者scecond U的值产生生长效果”

image.png



   

2:设置 分叉前准备工作


问题)分叉并没有生长动画。

原因)观察;合并节点,可以看到当分支附着点出现是,它们马上就被克隆出来。所以我们无法在“分叉”上使用carve节点。

方案)

    1。需要把单独的值放到carve节点的second U值上,为所有的分叉;这样就是从原点开始生长;分叉要滞后一点长出来;每个分叉需要一个second U的单独的数值。

    2.  Houdini的Include文件中,有一个函数adjustPrimLength 实现了生长的功能    

image.png

-----------准备工作-----------


22)pointwrangle命名grow_branches   

23)measure1节点 :

24)measure2节点 


    //--准备1测量参数perimeter(周长)

    //--准备2需要“主干”的长度;因为主干的生长速度,来决定分叉生长速度。

    //--准备3分叉的初始曲线。把这些信息编码在初始曲线的属性上;


22)  merge之后加入wrangle,

23)在wrangle之前加入measure测量参数;

24)  在carve之间加入measure节点,测量周长。


25)color节点 :attribute:curveu;

26)pointwrangle2命名cal_curveu :


准备2: 需要“主干”的长度

要获得主干长度,需要通过curveu参数:

25)color节点视觉化:属性curveu:变个渐变色。

image.png

image.png

2a)curveu问题

整条线段的curveu并没有起点到终点0~1,它只是被拷贝过来。


解决方案)

26)在measure之前pointwangle改变;

a)代码

//----均匀的分布curveu----

//-- 1 所有点

int pntcnt = npoints(0);


//-- 2 因子

float frac = 1.0/float(pntcnt-1);


//-- 3 新curveu

@curveu = @ptnum*frac;

b)连接color观察结果:

image.png

解决 

c)连接grow_branch的“槽2”-引入“主干”曲线   


准备3: 分叉的初始曲线

观察)color可视化一下branch;

image.png

分析)这些分叉继承了“主干”的属性。

方案)把这些信息转换成primitive类。




3:开始 分叉属性设置


27)attribpromote :

22)grow_branches   


27)放到grow_branches节点之前

image.png

22)接口连接“主干”线

#include


//-- 1 growth:主干的生长,复制关联second U

float growth = ch("growth"); 


//-- 2 长度:主干


float masterlength = prim(1, "perimeter", 0);


//-- 3 百分比因子

float frac = 1.0/masterlength;


//-- 4 分叉的生长动画 ,通过映射主干的动画,通过frac把主干与分支联系起来

growth = fit(growth, @curveu, @curveu+(@perimeter*frac), 0.0, 1.0);  


// @curveu=分叉的,在它变化之前不生长;"@curveu+自身的长度=主干增长到分叉时,分叉开始生长,知道它的长度结束;

//乘百分比因子,同主干放在同一个范围;


//-- 5 调用函数 @primnum当前分支primid,当前的长度;把长度参数乘新计算的growth

adjustPrimLength(0, @primnum, @perimeter, @perimeter*growth); 

 最后给second U:增加关键帧,制作一段生长动画。


今天就到这儿了,收功

教程翻译自entagma的网络教程

下一节:20180702A Tribute To Numberphile- Visualizing Recamán's Sequence in VEX

微信图片_20190607085947.jpg

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


▉ <引子:>。— 每天翻译一篇教程,这就是我写给houdini的情书。【首发于同名公众号:“致houdini的情书”】


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部