[转]Houdini常用函数的介绍

本文详细介绍了Houdini中的多种数学函数,包括取整函数、周期函数、适配函数、距离函数、长度函数及标准化函数等,并通过具体案例演示了各函数的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、取整函数:

ceil()  floor() int() rint() trunc()  round()


ceil()取整函数,将小数部分省略,取整数值大一的值。   eg:ceil(6.1)=7;
floor()取整函数,将小数部分省略,只取整数部分。   eg:floor(6.1)=6 or floor(6.9)=6;
int()取整函数,将小数部分省略,只取整数部分。   eg:int(6.5)=6;
trunc()取整函数,将小数部分省略,只取整数部分。   eg:trunc(6.5)=6;
rint()取整函数,遵循四舍五入的取值原则。 rint(6.5)=7 or rint(6.1)=6;
round()取整函数,遵循四舍五入的取值原则。 round(6.5)=7 or round(6.1)=6;

取整函数大致分为这三种类型:  1)、ceil()将小数部分省略,取整数值大一的值。 
                           
2)、floor()、int()、trunc()取整函数,将小数部分省略,只取整数部分。
 3)、rint()、round()取整函数,遵循四舍五入的取值原则。

 

取整函数还有一种是sign()函数
    sign()函数是但参数变量为0时,取值为0,当参数变量取值为负数时,则取值-1,当参数
变量取值为正数时,则取值为1。她的取值空间就是-1,0,1。这个函数只能取三个状态值。

 

 

 

2、wrap()周期函数:

wrap()函数:可以做一个周期效果,产生周期性的分布效果,与求余有一样的效果。

   wrap()函数的基本使用:wrap(变量,周期最小取值,周期最大取值)
                               eg:wrap($F,0,20)
它的取值空间在1-20之间,当变量值大于20时,进入下一个周期,从1开始继续取值。

注意下wrap()函数和clamp()函数的函数曲线。唯一的区别在于wrap()函数拥有周期性的特点。

 

 

 

[转载]8月26日(houdini学习笔记)

3、fit()函数,适配函数:


   fit()函数拥有三种不同的适配方式

1)、fit01()函数

        fit01(变量,新的范围最小值,新的范围最大值)
案例说明下
    创建line节点,为line添加属性,这里创建一个attribcreate节点,添加一个以aaa命名的点属性,class:point(点属 性),value这里使用$BBX作为属性aaa的值,这也说明了属性aaa只能在0-1之间任意取值,当这里加入fit01()函数 时,fit01($BBX)这里的取值从0-1扩大到0-10的取值,fit01()函数对原有的取值范围进行均匀的映射。
     只有在变量参数的取值范围在0-1之间是才可以使用fit01()函数进行映射取值。
fit01()函数针对的事原有变量是0-1的范围才可以是fit01()这个函数进行映射,按变量值在范围值内均匀取值。

2)、fit10(),fit01(),fit11()的映射取值的方式

fit10()函数的取值与fit01()函数的取值范围正好相反。


[转载]8月26日(houdini学习笔记)


fit11()函数是从-1-1的取值范围进行取值。


这些fit()函数相对比较麻烦。现在用fit()函数代替以上几种fit()函数的形式

fit()函数的格式:fit(变量,原有的范围最小值,原有的范围最大值,新的范围最小值,新的范围最大值)

eg:
    fit($PT,$NPT-1,0,1)  这样可以将取值规范化处理。
    fit($PT,$NPT-1,0,10)  这样将取值的范围扩大了10倍。

 

 

 

4、distance()  Houdini所特有的内置函数,用于测量两个点之间的距离。


    先说明下distance()函数的使用:
           先创建两个点用于测量,我们用Add节点,创建随机的两个点,计算了下两个点之间的距离值,将测量的距离值用font节点打印出来。
       
distance()函数的格式:

         distance(X1,Y1,Z1,X2,Y2,Z2)也就是写入所需要测量的两个点的XYZ空间坐标。

我们这里通过前面的案例说明下distance()函数的使用:在font节点的text属性中写入distance(),将测量的距离结果打印出来。

表达式:

`distance(point("../add1",0,"P",0),point("../add1",0,"P",1),point("../add1",0,"P",2),point("../add1",1,"P",0),point("../add1",1,"P",1),point("../add1",1,"P",2))`


5、length()函数用于求线段的长度值或者向量的值。

 这里用一个案例说明下lenght()函数来求速度的大小。

      创建一条线段,给予线段一定点数量,方便做spring弹簧的解算效果。为通过spring解算过的线段添加属性,创建一个attribcreate节点,添加一个命名为speed的新属性,
value:length($VX,$VY,$VZ)使用lenght()函数计算。
创建sphere小球,通过copy节点,将小球拷贝到解算的线段上。在copy节点的Uniform scale的属性上调用前面新添加的属性:$SPEED/30 让小球根据lenght()函数计算出来的结果,对小球进行整体的缩放。

 

 

6、Normalize()函数的使用(标准化函数)

    1、normalize()是一个标准化函数,使向量的长度值为“1”,只为了对向量的长度做一个标准化的控制。它不对方向进行控制,只是对长度保持一致,做规范化的处理,(向量由长度和方向构成的,Normalize()函数只是对长度值做修改)。
   
    现在用案例说明下:

 

[转载]8月26日(houdini学习笔记)
     这里利用polygon sphere发射粒子,通过为粒子添加法线,将速度方向显示出来add normal :($VX,$VY,$VZ),添加一个新属性对速度的做一个标准化的处理。创建一个attribcreate节点,
name:(新属性的名称)normalvel ;type:(新属性的数据类型)vector创建一个向量类型;
value:(变量的数值)vector3($VX,$VY,$VZ);这里将分量写在vector3()的函数内,将三个分量合为一个向量,整体的表述出来。

    2、法线,速度都是三元向量,使用 vector3()函数一次性的将向量表述出来,现在在对速度进行标准化处理。他表述的向量:normalize(vector3($VX,$VY,$VZ))

    而在value中写入的是三个分量,那么如何将一个向量写入分量中。这里在向量的后面加入[0]将分量提取出来,这样就可以将向量以分量形式写入value中了。
    value:
               normalize(vector3($VX,$VY,$VZ))[0]
               normalize(vector3($VX,$VY,$VZ))[1]
               normalize(vector3($VX,$VY,$VZ))[2]
    3、现在验证下速度的规范化处理,我们要的是要创建自定义向量属性normalvel的分量形式,才可以写入normal的三个框中。
    在attribcreate的节点下再次创建point节点,添加法线属性,add normal:($NORMALVELX,$NORMALVELY,$NORMALVELZ),在变量之后加入X,Y,Z进行向量转分量的输入。

[转载]8月26日(houdini学习笔记)

    4、在houdini中,对于粒子速度的调整,要在particle节点之前使用,现在在particle节点之后使用$NORMALVEL向量修改速 度,显然是无法实现的,因为这是通过point节点对速度的修改,而不是通过节点解算得到的速度结果。在sop模块下,对速度的修改要在解算之前,不对解 算后的速度节点进行修改更新。

7、mindist()或者 pointdist()两个函数等价。都是求点到面的距离。

    1、XYZdist()是空间点到面上的距离,这是与上面的两种函数的区别;
pointdist()函数的基本格式:
   pointdist(“点所在节点的路径”,点序号,“面所在节点的路径”,面序号,通道号)

   pointdist()函数输入的是点序号,算的是实际点到面上的距离值。这里的通道号,表示所求的属性,“0”代表的是求的点到面上的距离值,“1”代表的是所求面上落点的u方向的坐标值,“2”代表的是所求面上落点的v方向的坐标值。


来源:http://blog.sina.com.cn/s/blog_81ca950a0101czmp.html

<think>好的,用户想要了解关于Houdini的笔记。首先,我需要确定用户的需求是什么。Houdini是一个复杂的3D动画和视觉效果软件,主要用于电影、电视和游戏行业。用户可能是刚开始学习Houdini,想要一些基础的学习笔记,或者他们可能有特定的功能或问题需要解决。 接下来,我应该考虑用户可能的背景。如果他们刚入门,可能需要介绍Houdini的基本概念、界面布局、常用节点和工作流程。如果他们有一定经验,可能需要更深入的内容,比如VEX脚本、动力学模拟或高级建模技巧。不过,用户的问题比较笼统,只是“介绍Houdini笔记”,所以最好从基础开始,结构清晰,分点说明。 我需要确保回答覆盖Houdini的核心特点,比如程序化工作流程、节点系统、SOP和DOP等模块的区别,以及常用工具和资源。同时,用户要求使用中文,结构清晰,分步骤解决问题,所以需要将内容组织成易于理解的章节,可能包括基础概念、界面介绍常用节点、学习资源等。 还要注意用户提到的系统级指令,比如数学表达式用$...$格式,独立公式用$$...$$,但Houdini相关的笔记可能涉及较少的数学公式,不过如果有涉及表达式或算法的地方,需要正确应用LaTeX。例如,在解释粒子系统或物理模拟时,可能需要提到一些数学公式,比如流体动力学的纳维-斯托克斯方程,这时候需要用正确的格式。 另外,需要验证提供的信息是否准确,比如节点名称、工作流程是否正确,避免错误。例如,SOP是几何体操作,DOP是动力学模拟,VOP是可视化编程,这些术语需要正确使用。同时,推荐的学习资源如官方文档、Entagma、cgwiki等,需要确认链接是否有效,但可能不需要具体链接,只需提及名称。 用户可能没有提到的深层需求是希望有一个结构化的学习路径,或者常见问题的解决方法,所以在笔记中可以加入一些学习建议和常见问题,比如如何组织节点网络,如何优化性能等。 最后,确保回答符合用户可见层的格式要求,结构清晰,分步骤介绍,使用中文,避免专业术语过多,必要时进行解释。同时,保持口语化,让内容更易于理解,不过用户可能希望信息准确且专业,所以需要平衡口语化和专业性。</think>以下是一份结构清晰的Houdini学习笔记框架,涵盖核心概念与实用技巧: # Houdini 学习笔记 $$ \text{基于版本: Houdini 19.5+} $$ --- ## 一、核心特性 1. **程序化建模** - 非破坏性工作流:通过参数调整回溯修改 - 节点网络可视化:$node\_network \rightarrow geometry\_output$ 2. **动力学系统** - 刚体/柔体碰撞:`RBD Bullet Solver` - 流体模拟:`Flip Solver`(基于纳维-斯托克斯方程) $$ \frac{\partial \mathbf{u}}{\partial t} + (\mathbf{u} \cdot \nabla)\mathbf{u} = -\frac{1}{\rho}\nabla p + \nu \nabla^2 \mathbf{u} + \mathbf{g} $$ --- ## 二、界面模块速查 | 模块 | 快捷键 | 功能说明 | |-------------|--------|-------------------------| | SOP | F1 | 几何体操作(建模/变形) | | DOP | F4 | 动力学模拟(物理效果) | | VOP | - | 可视化编程(材质/处理) | --- ## 三、常用节点解析 1. **Geometry节点** - `Attribute Create`:创建自定义属性 ```vex @velocity = set(0, @Time * 9.8, 0); // 添加随时间变化的Y轴速度 ``` 2. **粒子系统** - `Pop Network` 工作流程: ``` Emitter → Force → Collision → Solver → Render ``` --- ## 四、VEX编程基础 1. 数据类型 - 向量运算:`vector pos = @P * {0.5, 1, 0.5};` - 矩阵应用:`@P *= ident();` 2. 常用函数 ```vex float noise = noise(@Time + @ptnum); // 柏林噪声 ``` --- ## 五、优化建议 1. **性能优化** - 使用`Divide`节点简化碰撞体 - 开启`Geometry Spreadsheet`监控属性 2. **项目管理** - 使用`Subnet`封装复杂节点组 - 通过`Null节点`控制最终输出 --- ## 六、学习资源推荐 1. 官方文档:SideFX官网文档库 2. 教程平台:Entagma(高级特效案例) 3. 社区资源:cgwiki(Houdini算法解析) --- > **注**:建议配合实践案例学习,从简单粒子系统入手,逐步过渡到流体/布料等复杂模拟。遇到节点报错时,优先检查数据流连接顺序与属性命名一致性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值