Houdini表达式学习笔记 您所在的位置:网站首页 houdini怎么k帧改参数 Houdini表达式学习笔记

Houdini表达式学习笔记

2024-07-09 17:26| 来源: 网络整理| 查看: 265

EXPRESSION SYNTAX(表达式语法)

Here are some of the main syntax elements which you will encounter again and again when using expression functions:(以下是主要的语法元素,你会一次又一次地遇到一些使用表达式函数:)

() Brackets    Brackets are used in order to list all of the arguments that will be contained within a function. Whenever a function is used, there must be an open bracket and a closed bracket. One of the easiest mistakes to make when creating expressions is to accidentally have the incorrect number of brackets.

()括号         括号的使用是为了列举出所有的将要包含在函数中的参数。每当使用一个函数,必须有一个开放的括号和一个封闭的括号。最简单的错误之一就是当你创建表达式时,意外的有多个数目不正确的括号。

“”Quotation    When a string must be used as an argument inside a function, it must be contained within quotation marks. This can include parameter names, and file paths.

“”引号         当一个字符串必须被用作在一个函数的参数,它必须包含在引号内。这可以包括参数名,和文件路径。

`` Back Ticks      When an HScript expression has been entered into a string type parameter, it must be enclosed in backticks in order to be evaluated as an expression. For example, if you are attempting to use an expression function inside a file path, you will need to include the backticks on either end of your function.

``返回标记        当HScript表达式中已经输入了一个字符串类型的参数,它必须包含在返回标记内,以便作为一个表达式的计算。例如,如果您正试图使用在一个文件路径表达式功能,您需要在您的函数结束包含一个返回标记。

‘’ Apostrophe   Text inside apostrophes are not expanded. It may be necessary at times to use these characters inside strings to prevent a variable from being recognized as a variable.

‘’单引号        文本中的单引号不是大写的。可能有必要在有的时候字符串内使用这些字符,以防止一个变量被承认为一个变量。

TYPES OF DATA(数据类型)

There are four main types of data that exist within Houdini(在Houdini中存在有四个主要的数据类型):

Float:          Floating point numbers are single numerical values which may contain decimals i.e.: 15.5. It is possible to break this down further into integers, which do not contain decimals. An Alpha attribute/channel would be a good example of a float value.

浮点          浮点数单一数值可能包含小数,即:15.5。很可能打破这种进一步下降为整数,不包含小数。一个Alpha属性/通道是一个很好的float值的例子。

Vectors:        Three floating point values. These values can be used to represent positions, directions, normals or colors (RGB or HSV).

矢量(向量):   三浮点值。这些值可以用来代表的位置,方向,法线或颜色(RGB或HSV)。

Strings:          Strings are data which are not numbers, but text. A number is not represented as numerical in a string but as a text symbol. You can enclose strings in double quotes (“) or apostrophes (‘). Variables inside double-quotes are expanded. Strings inside apostrophes are not expanded. It is possible to create custom variables which make use of strings.

字符串:        字符串的数据不是数字,而是文字。一个数字并不表示为一个字符串中的数值,而是一个文本符号。你可以在双引号(“)或单引号(')中放入字符串。内双引号内的变量会被展开。单引号内的字符串是不会展开的。它可以利用字符串创建自定义的变量。

Matrix:            Sixteen floating point values representing a 3D transformation matrix.

矩阵:            16个浮点值描述了一个三维变化矩阵。

SIMPLE MATH

+ -             Add, subtract(加,减)

* / %          Multiply, Divide(乘,除)

%             Modulo returns the remainder after division has occured i.e. 4%3=1, 4%20=4

百分号返回除法发生之后的剩余,即i.e. 4%3=1, 4%20=4

^            Raise to exponent i.e. 3^3=9(提高指数,例如3^3=9)

e            Exponential notation is a concise way of representing large numbers with a minimal amount of digits, for example 3.2e-5 (equivalent to 0.000032).

             指数符号是一个代表了最少量的数字的简洁方式,例如3.2e - 5(相当于0.000032)。

()           Grouping(群集)

COMPARISONS

< >         Less than, greater than(小于,大于)

==         inquire as to whether it is equal(询问它是否等于)

!=         not equal to(不等于)

||         or(或)

&&       and(和)

GLOBAL VARIABLES(全局变量)

Data that is accessible in all contexts. There are different types of global variables, which have various purposes.

在任何情况下可访问的数据。不同的全局变量用于不同的目的。

Environment Variables: Useful for setting up your Houdini environment.(环境变量:用于设定你的Houdini环境。)

$HIP         This defaults to the directory containing the current Houdini file.(这个默认值的目录包含了当前的Houdini文件。)

$HIPNAME   The name of the current .hip file(当前.hip文件的名称)

$WEDGE     The current wedge information(当前的 wedge 信息)

$OS         Operator String - contains the current OP’s name(运算符字符串 - 包含运算符字符串的名称)

$JOB        A custom variable that determines where your jobs are located(自定义变量取决于您工作的位置)

$HOME     Your Home environment variable - specify in OS environment variables(你的home环境变量 - 指定运算符字符串的环境变量)

$ACTIVETAKE    Contains the name of the current take(包含当前的名称)

$CH         Current channel name(当前通道的名称)

$TEMP      Where temporary (crash) files are saved - specify in OS environment variables(临时(崩溃)文件保存的位置-指定运算符字符串环境变量)

PLAYBAR VARIABLES:There are various variables that are associated with time in Houdini:(播放条变量:一些与Houdini时间有关的各种变量:)

$F         The current frame.(当前帧) This is very useful, especially for filename numbering.(这对于文件名的编号方式尤其有用。) It allows us to introduce the element of time into our expressions. (它允许我们的表达式可以引入到时间的元素中去。)In the case of file naming we can add padding to $F (因此我们能够在文件的名称中添加到$F)

$F3 gives us a padding of 3 meaning that Frame 1 = 001(给我们提供了3个填充帧 1=001)

We can also use $F on a translation parameter tell it to move over time (我们还可以使用$F把翻译参数告诉它移到那个时间)

We can offset $F with simple math. $F-1 tells frame 1 to return a value of 0(我们可以使用简单的数字补充$F. $F-1表示帧1的返回值为0)

Certain elements, work in units of “Time” which refers to seconds rather than frames:(在某些情况下,工作时所指的“时间”是秒而不是帧)

$FPS        Playback speed in frames/second (set in Global Animation Options)(播放速度 帧/秒(设定全局动画选项))

$T         Current time in seconds(当前时间 秒)

We can use ($F-1)/$FPS to determine the current frame’s time in seconds. This can be useful to know when we see parameters like start time on a particle network and want to be able to determine the start frame. By telling the Start Time to be 40/$FPS, the particle simulation will begin on frame 40.(我们可以使用($F-1)/$FPS取决于当前帧的时间是秒。当我们看到类似于在一个粒子网络结构上的起始时间,并希望可以确定起始帧,知道这些对我们是有用的。设定开始时间为40/$FPS,粒子将以40FPS进行模拟。)

 

Particle and dynamic networks use time rather than frames because we often need subframe data:(粒子和动力学网络的使用时间不是帧,因为我们经常需要子帧数据:)

$FF       Floating point frame number(浮点帧数)

$SF       Simulated frame number(模拟帧数)

These become important variables to remember when we adjust the over sampling. i.e.: if collision geometry isn’t sampling between frames, we can have problems with accuracy therefore we want to over sample (sample more than once per frame).(谨记,当我们调节超过采样值,这些都成为重要的变量。换言之:如果一个碰撞几何体之间没有采样值,我们会引起一个我们无法超过采样值精确度的问题(采样值将多次超过每帧)。)

 

It is important to cache out simulations using $SF for DOPs and $FF in POPs so that we keep subframe data.(给DOP和POP做缓存 要使用$SF为DOPnetwork的子帧参数,pop使用$FF floatframe为计算单位 这样变量去储存子帧数据。注:KID的解释)

It may also become essential when using longer expressions to use the Expression Editor (Alt + e) or right click menu on a parameter.(在表达式编辑器(ALT + e)或在右键菜单中的参数中使用长的表达式时,这是不可或缺的。)

 

OTHER PLAYBAR VARIRBLES(其他的播放条变量)

$NFRAMES       The number of frames in the animation(在动画中的帧数)

$RFSTART        Frame number of the first frame shown in the playbar. The playbar can show a subset of the total number of frames, allowing you to focus on a particular section of a longer sequence(在播放条中显示第一帧的帧数。播放条可以显示所有总数帧的子帧,让你专注较长序列的单个部分)

$RFEND         Frame number of the last frame shown in the playbar(在播放条中显示最后帧的帧数)

$FSTART         Frame number of the first frame of animation (set in Global Animation Options)(在动画中第一帧的帧数)

$FEND           Frame number of the last frame of animation (set in Global Animation Options)(在动画中最后帧的帧数)

$RFSTART and $RFEND control the subset of frames shown in the playbar($RFSTART and $RFEND控制着在播放条中显示的子帧)

$TLENGTH       Total length of animation in seconds(总长度在几秒钟的动画)

$TSTART         Start time of animation in seconds(动画在几秒开始)

$TEND           End time of animation in seconds(动画在几秒结束)

STANDARD VARIABLES(标准变量)

Commonly used variables that are unique to specific contexts, however are common enough that they may be recognized across multiple contexts. Note that some variables such as $CR, $CG, $CB, $CA are actually attributes: Cd and Alpha. Attributes are data that are easy to lock down, and you can see that they exist if you MMB onto a node.

$TX,$TY,$TZ        Point Position(点的位置)

$BBX,$BBY,$BBZ    Point Position within bounding box (ranges 0-1)(在bounding box中的位置(范围0-1))

$YMAX,$YMIN     The max/min values of the geometry on the Y-Axis. Note this goes for X,Y, & Z(几何体Y轴上的最大/最小值。注意标记是X,Y,Z)

$CEX,$CEY,$CEZ    Centroid of the input geometry(输入几何体的质心)

$CR,$CG,$CB,$CA   Diffuse Point Color, and Point Alpha(点的漫反射颜色和点的alpha)

$NX,$NY,$NZ       Point Normal Direction(点的法线方向)

$PT,$PR           Point Number or Primitive Number(点的数量或者面的数量)

$NPTS,$NPRIMS    Total number of points or primitives(点或者面的总数)

VOLUMES AS ATTRIBUTES(体积属性)

Each volume primitive may be used to represent a set of data. This is important to note when working with fluid dynamics to understand what purpose the various fields serve.(每个几何体的体积都有可能被用于说明一组数据。用于流体动力学中了解每组数据所对应服务的记录,这一点是尤为重要的。)

$X,$Y,$Z               Bounding Box Information in Volumes(Bounding Box在体积中的信息)

PARTICLE VARIABLES(粒子变量)

There are some very commonly used Standard Variables that are usually associated with particles. Many of the standard variables can be found on the Point SOP.(有一些很常用的标准变量通常与粒子有关。许多标准变量可以在SOP下找到。)

$VX,$VY,$VZ                Point Velocity values(点的速度值)

$ID                        Particle ID(粒子ID)

$PSCALE                   Particle Scale(粒子缩放)

$LIFE                      Percent of total life used (from 0 to 1)(已使用生命总数的百分之一(从0到1))

LOCAL VARIABLES(局部变量)

Many variables that are common to one context are not necessarily common to another context. Not all variables are standard. In fact, some nodes have local variables, which will be listed in the help cards on a node-by-node basis.(~~~~~~~~~~~~~~~~~~~~~~~~~不是所有的变量都是标准的。事实上,一些节点有局部变量,将在一个节点上的帮助卡中列出了节点的基础。)

We can also use functions designed specifically for accessing attributes: point() detail() vertex() or prim()

 

 

 

 

 

 

 

 

 

 

七、比较(逻辑运算) 你经常会发现自己想要对一些参数或属性做一些对比,做一些简单的对比运算是可行的,在这种情况下,判断为真返回值为1,判断为假返回值为0。这个特性用来做开关很有用。 < > 小于 大于 != 不等于 == 是否相等 || 或 && 且 表达式可以是指向指定数据的简单指针,它们使用别名对数据进行访问。在使用变量时在前面加上$符号。有几种不同类型的变量:全局变量,标准变量,局部变量和自定义变量。 一、 全局变量 数据在整个环境中都可以使用,全局变量分为几不同类型,用于不同的用途。 1、 环境变量:用于设置Houdini工作环境 $HIP 默认为当前Houdini文件所在的文件目录 $HIPNAME 当前.hip文件的文件名 $WEDGE 当前wedge信息 $OS 当前节点名字(字符串) $JOB 一个自定义变量,指定你的工作目录 $HOME Home环境变量(这个变量是在操作系统指定的) $ACTIVETAKE 包含当前houdini文件中take名字 $CH 当前通道名字 $TEMP 临时(崩溃)文件保存的位置(这个变量是在操作系统指定的) 2、 播放(相关)变量 在Houdini中有多种不同的跟时间相关的变量。 $F 当前帧。这个 变量很有用,尤其在使用到文件序列时。它允许我们把时间变量引入到表达式中。在文件命名的时候,我们可以给$F添加占位符。 $F3 规定了三个占位符(数字位),第一帧为 001 我们也可以在位移参数中写入$F,这样物体位移就能随着时间的变化而变化。 我们也可以运用简单的数学运算偏移$F。$F-1这个表达式在第1帧的时候返回值为0。 有一些变量,以“时间”为单位——即以秒为单位而不是以帧。 $FPS 帧速率 单位为:帧/秒 (在Global Animation Options 中设置) $T 当前时间(以秒为单位) 我们可以使用($F-1)/$FPS 把当前帧换算成‘当前时间’($T)。这很有用,当我们在粒子模块中看到一个参数,比如start time(开始时间),而我们想把它换算为start frame(开始帧)。如果当前粒子的start time(开始时间)设置为 40/$FPS,粒子的模拟会在第40帧开始。 $FF 当前帧的浮点形式 $SF 模拟时使用的帧号 这些成为很重要的变量,当我们调整采样的时候。比如,如果碰撞的物体在帧与帧间的时间中没有采样,那么又可能会产生准确性的问题(发生穿插),因此,我们需要提高采样次数。(一帧采样多次)。 POP和DOP中,在模拟的时候使用变量$SF也是很重要的,这样会保存子帧数据。 在使用长的表达式时,使用Expression Editor(表达式编辑器,快捷键 Alt+E)或者右键单击参数选择。 3、 其他播放变量 $NFRAMES 动画中的帧数($FEND-$FSTART+1) $FSTART 动画的起始帧(在Global Animation Options 中设置) $FEND 动画的结束帧(在Global Animation Options 中设置) $RFSTART 在时间播放栏中显示的第一帧。时间栏可以显示总帧数的一部分,以允许你将精力放在很长一段序列的一部分中。 $RFEND 在时间播放栏中显示的最后一帧。$RFSTART和$RFEND控制在时间栏中显示的帧。 $TLENGTH 动画的总长度(以秒为单位) $TSTART 动画的开始时间(以秒为单位) $TEND 动画的结束时间(以秒为单位) 在Flipbook窗口中,你会看到$RFSTART和$RFEND。用于对时间栏中的区域进行拍屏。这些变量也是有用的,当你想在渲染动画时想带上当前时间。 更多的变量在下面的文档中:http://www.sidefx.com/docs/current/expressions/_globals 注意其中包含一些数学常量,CHOP,ROP,和COP变量。 二、 标准变量 变量一般是在指定的语境中起作用的,但有时它们在多语境中起作用也很常见。注意一些变量:$CR,$CG,$CB,$CA ,它们实际上是属性Cd和Alpha。属性是一些数据,可以很容易的沿着节点向下传递。选中节点,单击鼠标中键,你就可以看到一些属性。 $TX,$TY,$TZ 点位置 $BBX,$BBY,$BBZ 点在边界盒子(Bounding box)中的位置(范围0-1) $YMAX,$YMIN 几何体在Y轴的最大/最小值。注意同样使用于X,Z轴。

$CEX,$CEY,$CEZ 输入几何体的中心 $CR,$CG,$CB,$CA 点颜色,点Alpha $NX,$NY,$NZ 点法线方向 $PT,$PR 点序号,Primitive序号 $NPTS,$NPRIMS 点的总数,Primitive总数 三、 体积物体的属性(VOLUmES AS ATTRIBUTES) 一个体积基本体可能会用来表示一系列数据。注意这很重要,当你想要搞明白在流体动力学的模拟中各种不同的field的用途。 $X,$Y,$Z 体积基本体中边界盒子(Bounding Box)信息 四、 粒子变量 这是一些在模拟粒子时很常用的标准变量。有好多可以可以在 Point SOP中看到。 $VX,$VY,$VZ 点的速度值 $ID 粒子ID $PSCALE 粒子大小 $LIFE 当前生命值占整个生命存活时间的百分比(0-1) 在Houdini的文档中你会看到更多的标准变量:http://www.sidefx.com/docs/current/nodes/sop/standardvariables 五、 局部变量 许多变量可能在某一个语境中会用到,而其他语境不必要用到。并不是所有的变量都是标准变量。实际上,某些节点存在一些局部变量,这些你可以在这个节点的帮助中找到。 比如,在Transform节点中: $GCX, $GCY, $GCZ 输入组的中心

另起。。。。。 一、 属性签名(ATTRIBUTE SIGNATURES) 有时候变量也可以作为属性存储在几何体中,在后面的数据流中你可以访问到它们。你经常想访问一些跨语境的变量。但是这些变量的自身签名不允许它们跨语境使用。我们可以使用Attribute Create节点创建我们自己的签名,来处理这种情况。 我们也可以使用一些调用指定属性的函数:point (),detail(),vertex(),prim()。 二、 属性类(ATTRIBUTE CLASS) 属性签名可以区分属性在不同语境是否可以使用,但我们还需要思考一下属性类。 属性签名是不可见的; 属性类可以通过在节点中中键单击看到; 类包括point,primitive,vertex,和detail; 我们可以使用AttribPromote节点把一个类转化为另一个类; 需找几何体中最大或最小的值时,我们一般会用detail类的属性。 三、 DOP中的自定义属性 我们不但可以使用Attribute Create来给已经存在的属性创建正确的属性签名,Attribute Create也可以用于创建自定义属性。 已经存在的属性被使用是因为获取方便,当然,我们也可以创建新的属性。通常一个自定义属性被用到是因为已经存在的属性只能用于指定的属性,不能用于其他用途。 有时在动力学中创建新的属性,会方便我们更灵活的控制。动力学解算器中的很多变量都可以调用自定义属性。 四、 VOPS中的自定义属性 跟动力学一样,在VOPs中许多参数也可以使用自定义属性。VOPs(VEX Operators)是一种在Houdini中处理几何体的很强大的方法,在做几何体置换贴图,或创建自定义材质时很有用。 变量在VOPs中很容易获取,使用变量名就可以,比如:Alpha,而不需要在变量前加$符号,比如$CA。 VOPs中的参数通常用于获取属性来创建shader。导入的属性可以在VOPSOPs中使用,来获得几何体的属性。同样你也可以在VOPSOP中创建属性,用于其他地方。 五、 自定义属性 自定义属性通常用来辅助其他效果,比如:缩放噪波,或者对融合变形的效果进行调节,或者触发粒子的发射。

一、函数 函数是表达式的核心。它们是一小段文本,告诉Houdini根据你提供的参数,执行不同的任务。函数执行的任务有可能是数据传递,数据修改,或者数学运算。 你可以在Houdini的Textport中使用exhelp命令查看函数,或者在帮助中: www.sidefx.com/docs/current/expressions 如果上面的函数没有你想要的,你也可以创建自己的函数,当你创建自己的函数时,你可以使用Python来实现它。 看到这么多的函数需要学可能会吓到你,但只有一小部分你会经常反复的使用,学函数的一个很好的方法就是,拿出几天时间,研究研究它们的功能。 有一些函数是相关的,同时研究这些相关的函数是一个很好的方法。函数分为不同的类,比如:有34个用于DOP的函数。如果你经常使用DOPs,学学这些函数,或想想这些函数用于什么用途,是一件很聪明的事情。 二、函数示例 dopobjscreatedby() 从DOPNET中取出物体 opinputpath() 获得连接到当前节点的节点的名字 ch() 获取某一个通道的值 constant(),bezier() 在关键帧动画中使用 trunc() 通过把小数部分截取掉,获得整数部分 padzero() 可以添加帧的占位符,如果$F3(三个占位符)还不够 fi(),fi01() 输入一个数据,会把它转化为指定的范围内 rand() 产生随机数值 if() 用于数值间复杂的比较 point(),vertex(), prim() 用于返回指定节点的属性 distance() 用于计算节点间的距离 三、其他常用的函数 一定要看下面的函数,因为它们很有用。有了下面的函数,结合我们上面已经用到的函数,几乎没有达不到的。 1、 数据操作 abs() 返回绝对值。比如:abs(-7)=7 clamp() 防止数据超出指定范围 ceil() 向上舍入取整 flor() 向下舍入取整 frac() 返回数据中的小数部分,比如:frac(9.7)=0.7 2、 数学运算 pow() 做幂运算,比如:pow(2,5) = 2*2*2*2*2。 length() 返回矢量的长度,比如length($VX,$VY,$VZ) = speed(速度) cos(), sin(), tan() 余弦,正弦,正切函数。比如 sin($F) noise(), turb() 用来产生噪波 3、 数据的获取 pic() 根据UV,从一个合成节点中返回一个颜色值,比如 pic(“/img/img1/color1”, $MAPU, $MAPV, D_CLUM) 会返回图像的明度信息。 opfullpath() 返回节点的完整路径,比如:opfullpath(“../node”) = /obj/object1/node chs() 返回函数中一个通道中的字符串 chramp() 返回ramp中的一个指定通道 bbox() 返回一个节点的边界盒子的最大值、最小值或大小。比如 bbox(“../node”, D_YSIZE) centroid() 返回给定节点的中心,比如centroid(“../node”, D_Y) npoints() 返回指定节点中点的个数,比如:npoints(“../node”) 4、 强制执行 eval() 用于这种情况,当一个变量它本身包含一个表达式,你需要运行表达式,来获取变量,比如: set foo = 1+2 `eval($foo)` 这个我在Hscript Textport中输入上面代码,运行了一下, 然后输入 : echo $foo 运行的结果为:1+2 3 希望能帮助你们理解。 5、Copy Stamping stamp() 最好用的函数之一。在使用copy节点后,用于对每个点执行不同的任务。

根据你想要实现的功能,有时你会想要使用Detail属性来创建字符串,之后我们可以把它作为表达式。这是一个很有用的半自动的方法,否则可能会很难达到效果。 一个很好的例子就是选择视图中的粒子,然后根据存在的$ID属性来删除它们。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有