Houdini 学习笔记(二)

chramp(),ch()

通过自定义的参数和noise随机控制挤出的效果:通过RampChannel控制挤出的高度和挤出的顶部的缩放
步骤和细节:
(以下操作均在Geometry节点下)

  • 创建一个grid平面,给定一定的细分(Row & Columns)。连一张AttribNoise,保持Cd的Vector属性,以便接下来用不同的颜色通道控制不同的PolyExtrude参数。同时,修改Noise Pattern 的 Offset Channel为 @Time,每一帧改变一次Noise的offset。
  • 创建一个AttribWrangle,f@dist : @Cd.r; f@in : @Cd.g;
  • 接着创建一个PolyExtrude节点,将其中的LocalControl中的Distance和Insert打开,并分别修改为上面写好的distin变量。
  • 此时发现随时间变化的Cd两个通道并不能影响挤出效果,原因是:由AttribNoise传给AttribWrangle的Cd此时的Attribute为“Point”(

),而要影响Extrude的结果需要其属性为“Primitive”

  • 于是我们通过AttribPromote,将Cd由Point转换Primitive,同时将AttribWrangle的Run Over 改为 Primitive

-此时我们的挤出的distance和insert已经可以随时间由Noise控制进行变化了,但还是可以继续提高可控性,在AttribWrangle中,将代码修改如下:

houdini 调用python脚本 houdini compile_自定义


其中chramp(“name”, return value)将生成一个名称为name的ramp调节器,他控制的值就是name之后的return value; ch(“name”)可以生成一个名为name的可拖动的调节器。当然,这需要我们点一下这个按钮:

houdini 调用python脚本 houdini compile_缩放_02


然后拖动你的下拉条,boom!

houdini 调用python脚本 houdini compile_Time_03

ps:

houdini 调用python脚本 houdini compile_自定义_04


houdini 调用python脚本 houdini compile_缩放_05

  • FINISH

resample

老熟人了,对Polygon, NURBS , Bezier类型的曲线重采样,给曲线重新细分,如果对非曲线的Geometry使用Resample,会在采样前,自动把几何体转为Polygon类型的曲线。

houdini 调用python脚本 houdini compile_自定义_06

  • 给一条line,同时bend一下,对y轴弯曲,capture direction一栏除了y给1,其余都为0。
  • 连接 Resample ,调整两个参数Maximum Segment LengthMaximum Segments
    1.Maximum Segment Length,给定目标线段的最大长度
    2.Maximum Segments,给定线段的细分
    同时打开
  • houdini 调用python脚本 houdini compile_缩放_07

  • 连接AttribWrangle,输入 @pscale = chramp("s", @curveu) * ch("m");,生成两个控制器
  • 生成一个box,连接copytopoint左,右边attribWrangle连接orientationalongcurve(使几何体的朝向沿线段方向),再连入copytopoint右侧。
  • houdini 调用python脚本 houdini compile_houdini 调用python脚本_08


  • houdini 调用python脚本 houdini compile_houdini 调用python脚本_09

  • 如果想要连续的几何体,AttribWrangle可以连接polywires,并将Wire Radius改为由@pscale控制
  • houdini 调用python脚本 houdini compile_houdini 调用python脚本_10


  • houdini 调用python脚本 houdini compile_Time_11

  • Finish

rand(); fit01()

houdini 调用python脚本 houdini compile_缩放_12


fit01()用于将primitive重新映射到输入的范围内(nmin,nmax)

rand()用于随机一个变量