【Houdini】入门教程、快捷键与节点含义相关学习笔记(图)

目录

个人关于Houdini的一些看法

快捷键 

视图窗口

节点窗口

参数窗口

节点含义与使用

SOP节点

Vop节点

VEX编程


个人关于Houdini的一些看法

业内一直传言,Houdini的学习门槛非常高,更是包含建模、材质、渲染、动画、粒子、烟火、流体、破碎等等各个系统庞大繁杂。同时经验与思路非常重要,就算死记硬背了各个节点的含义,也没法很好的驾驭它,就像弹钢琴知道每个键的音和位置,脑子里还得有乐谱才能弹奏好听的曲子。因而劝退了很多的尝试者。

本人刚接触Houdini不久,作为程序员对这个能呈现出影视级的画面渲染与美感的程序化三维软件深深吸引,鉴于能慢慢熟悉UE4这个庞大的引擎,我也有信心慢慢熟悉这个充满魅力与无限可能的特效魔术师。

所以现总结学习中用到的快捷键和节点含义供小白们一同学习,也将闲余时间持续更新,错误地方望大佬指正。

部分界面示意

官网Learn页面内的教程
CG猎人民间大牛,可以在B站、公众号查到免费与收费的教程


快捷键 

视图窗口

快捷键按钮功能
F1帮助手册,快捷查找节点含义
W

切换线框显示
T

移动
R

旋转
E

放大/缩小
M

切换调整坐标系轴
D

显示详情窗口
C

快速操作
Tab新建节点
Ctrl+B

最大化窗口

Ctrl+1/2/3/4

1/2/3/4窗格显示

Space+B

切换单/四窗格模式
Space+F/G

聚焦单个对象/选中边面

Space+H

聚焦默认主视图
Space+A

聚焦所有对象

Space+左键

旋转视角

Space+中键

移动视角

Space+右键

缩放视角

ESC/长按Space

观察视角,不加空格就能进行上面的左、中、右键操作
S

切换选择模式

2

3

线
4

N选择所有

Shift+LMB加选、Ctrl+LMB减选、Shift+A+LMB最小路径选择

Enter

节点参数快速修改模式(如:左键、滚轮)

节点窗口

快捷键效果功能
H

总览所有节点
Y断开节点连线
U

返回上一级
I

进入下一级
L

自动排版/自动对齐全部节点
Shift+L自动对齐选中的节点
Alt+L

创建连接点
Tab/右键

调用节点(推荐在视图中调用)

固定窗口

参数窗口

操作点击位置与结果功能
左键

切换数值/参数显示模式
Ctrl+左键

取消参数绑定(背景绿色为参数)
Ctrl+中键

复原变量默认值
中键对值进行不同量级修改

节点含义与使用

SOP节点

推荐在视图窗口中或上方菜单栏点击添加节点,这样可以仅对你选中的点/边/面处理

类别名称含义
AttributeAttribute Wrangle编写VEX脚本操作几何体属性
Attribute VOP使用VEX节点操作几何体属性,原理同上
Attribute Transfer在两个模型间基于就近原则传递属性
EdgeBlast删除选中的点、面
Poly Split添加点/边
ExportFile读/写本地路径中的文件
GroupGroup新建组
Group Combine选择Equals All But,反选组
Group Promote
LabsLabs Triplanar Displace按高度图对几何体表面进行置换
Geo | Gameres对几何体减面、自动UV、渲染纹理。适合制作低模
Geo | Thicken沿着平均法线挤出
Geo | Split Primitives by Normal基于法线方向分离prims
UV | Auto UV模型自动展UV
UE4 | WorldComposition Prepare将高度图与点云分块导入到UE4的World Composition
Terrain | HeightField Combine Masks合并heightfield下的多个layer
Utils | Calculate Slope计算几何体每个点的坡度
Utils | WFC Initialize Grid初始化WFC网格大小
Misc | 2D WaveFunctionCollapse2D 波函数塌缩算法
WorldBuilding | Wang Tiles Sample王浩瓷砖样本集
WorldBuilding | Wang Tiles Decoder根据颜色信息解码出对应的wang tile
Extract Silhouette提取物体轮廓
CleanUp | Delete Small Parts基于连接性与大小移除一些pieces
Flowmap | Flowmap为输入的Geo生成一个flowmap
Flowmap | Guide Flowmap根据曲线修改flowmap
Flowmap | Flowmap Obstacle根据障碍物修改flowmap
Flowmap | Flowmap to Color将flowmap存储在vertex color上用于烘培贴图
ManagersROP Geometry Output保存几何体到本地路径
ManipulateBend在两个平面之间产生弯曲、扭曲或变形
Edit对点/线/面进行平移/旋转/缩放
Peak使点/线/面沿法线方向移动一定的距离
NURBSSkin连接曲线各点构建成多样式的蒙皮表面
ParticleScatter模型表面生成随机点
PolygonPoly Extrude从边、面挤出
Poly Bevel将一条边上创建成多边形圆角曲面,平滑硬边
Dissolve删除边
Boolean使两个几何体做交集/并集/相减等操作
Divide细分模型、将四边面模型转换为三角面
Fuse将一定距离内的点合并为一个点
Poly Bridge桥接(选择一个边/面,点击再选择另一个边/面,按回车)
Poly Wire将边转换为管,将点转换为球体,形成线框
Poly Fill将闭合的边环连接成一个面
Poly Reduce减少面数,计数耗性能最好只使用一次
Remesh用近60度的三角形均匀细化模型
TerrainHeightField根据已有的高度图生成一个地形
HeightField Blur平滑地形
HeightField Distort添加细节,生成凹凸不平的地形
HeightField Erode播放模拟自然侵蚀效果
HeightField Slump模拟土壤或者地基沿着下坡坍塌
HeightField Noise根据噪声高度图调整地形,可叠加
HeightField Terrance创建梯田
HeightField Resample重新采样,可调整网格密度
HeightField Remap映射输入[0,1]输出[1,0]可以反向Mask
Convert HeightField可增加地形厚度,创建根基
HeightField Scatter按规则进行随机撒点
HeightField Mask By Feature根据斜坡、高度、山峰山谷等生成遮罩
HeightField Mask By Object根据对象生成遮罩
HeightField Draw Mask按下Enter,手动绘制蒙版
HeightField Paint手动绘制蒙版(画笔不同于上面的Draw Mask)
HeightField Projection
HeightField Mask Shrink收缩蒙版面积
HeightField Mask Extend扩大蒙版面积
HeightField Layer合并地形,可选多种方式
HeightField Copy Layer将Houdini生成的Layer Mask重命名为你想在UE4里对应的Landscape Layer的名字
HeightField Visualize图层信息可视化,方便观察
HeightField Tile Split制作无缝地图,拆分地形为多个Tile块
HeightField Layer Clear清除该层的蒙版颜色
UtilityBound创建一个包住Geo的box/sphere/rectangle

Connect Adjacent Pieces

Copy and Transform复制一定数量的连续变换的几何体(包括源几何体)
Copy Stamp复制几何体到所有的目标点上
Copy to Point复制几何体到目标点上
Convert转换平面的数据格式
Enumerate为点/面添加连续的int/string型属性
Extract centroid提取每个piece的重心
Mirror镜像
AllVoronoi Fracture创建基于输入的点集对输入的几何体模型进行泰森多边形算法分割
Mountain可创建基于Grid凹凸不平的表面或基于Sphere的岩石等等
Color简称Cd,对象颜色
UVUV Project创建UV纹理属性
UV Unwrap自动展开选定的面UV
UV Layout优化UV排版布局
UV Quick Shade快速预览模型表面默认的棋盘格纹理分布
GameDev Auto UV基于4种方法 自动展开UV(需安装Game Development Toolset)
VolumeVolume VOP编写VEX脚本操作Volume Primitive

VOP节点

类别名称含义
DisplaceDisplace Along Normal使曲面沿着曲面法线移动一定的距离
GeometryIntersect发射射线返回命中的第一个的Primitive,没有则返回-1,注意Ray Direction指代射线长度
Import Point Attribute导入几何体的各种属性,注意Input值
NoiseTurbulent Noise

可以计算三种类型的1D和3D噪声,并能够通过粗糙度和衰减来计算湍流。

柏林噪声

原始柏林噪声

稀疏卷积噪声

鳄鱼噪声

简单噪声

零中心柏林噪声

UtilityRamp Parameter可以暴露参数的斜坡曲线
Bind根据Name绑定参数
Two Way Switch根据条件决定输出1或2端口
VolumeVolume Sample File根据参数采样Primitive属性

VEX编程

Vex是一种语法上与C类似的编程语言,它的性能非常高,几乎可以媲美C/C++。

一般在AttributeWrangle中编写,Attribute VOP是可视化节点式编写,ctrl-enter快捷键能够执行编写的VEX代码。

带有@的名称是attribute,数据位于几何体上,Houdini常用属性可以不指定前缀类型,如下表;否则,需要在@前方指定属性类型,默认为f。

变量含义
@CdColor 颜色,注意大小写
@PPosition 坐标
@NNormal 法线
@ptnumpoint number 顶点编号
@numptnumber point 顶点总数
@group_name名为name的组,赋值为1代表进组,0移除
@pscale等比缩放
@scale非等比缩放{x,y,z}
@accel加速度
@center轴心点 
i@name创建名为name的int型属性
f@namefloat属性
f[]@namefloat型数组(属性)
float a[]float型数组(变量)
value[start:end:step]start和end左闭右开,-值代表从后向前。step=-1意为倒着输出,每次+1
u/v/p@name二/三/四维向量属性
2/3/4@name2×2/3×3/4×4矩阵属性
s@nameString属性
@opinput1_Cd读取第二个输入端的Cd属性,若非常用属性@前注明类型
$E自然对数
$PI圆周率
@Time当前时间
@Frame当前帧
@Timeinc帧与帧之间的时间间隔,单位为秒
@SimFrame解算到了第几帧,仅限动力学节点中使用
@SimTime解算到了第几秒,仅限动力学

可在官方 VEX-Function API或在软件中按下F1参阅。

分类函数名返回值用法示例含义
Castfloat(@ptnum)floatfloat(@ptnum);cast 整数类型转换为浮点数
Printprintf("%[flags][width][.precision][format]",a)voidprintf("%.2f",f);打印字符串 。[flag]: + - 0;[format]: g p c代表通用格式;
sprintf()stringstring s = sprintf("%.2f",f);返回字符串,不打印
\\-printf(‘\\n’);转义符,打出一个n
Channelch(),chf(),chv()float/stringchi('scale');引用其他节点的数值或创建新通道
chramp()float/vector@Cd = chramp("gradient",@rampNum);或@Cd = vector(chramp("gradient",@rampNum));新建自定义映射曲线
Geometrypoint(),prim()<type>@Cd = point(1,'Cd',@ptnum);读取某输入端序号为ptnum的点/面的属性值
addpoint()intaddpoint(geoself(),{0,1,0});或addpoint(0,2);添加点,返回点的序号。第二个参数可以是位置,也可以是点序号
removepoint()intremovepoint(geoself(),@ptnum);去除点
removeprim()intremoveprim(0,3,1);删除0输入端的3号面,1代表同时删除点
addprim()intaddprim(0,"sphere",{0,0,0});addprim(0,"polyline",p0,p3);创建一个几何体,可以设定类型是线、球、三角面等图形
setpointattrib()、setprimattrib()intsetpointattrib(0,"Cd",3,{1,0,0});设置0输入端序号为3的点的颜色为红色
setpointgroup()、setprimgroup()intsetpointgroup(0,"river",@ptnum,1);设置0输入端的ptnum点进组(或出组)
setvertexpoint()voidsetvertexpoint(0,5,1,2);将0输入端的5号面的1号顶点放在2号点上
inpointgroup()intinpointgroup(0,"up",@ptnum);判断是否在up组内,在返回1,不在返回0
npointsgroup()intnpointsgroup(0,"up");返回0输入端的up组里有多少个点
expandpointgroup()int[]int list[] = expandpointgroup(0,"up");以数组形式返回0输入端up组里的所有点的序号
setprimintrinsic()void setprimintrinsic(0,"transform",1,matrix3(ident())*0.5);将0输入端的序号为1的prim的transform缩小一倍
Point,Prim and Vertex Visitsprimvertices()int[]primvertices(0,1);给出primnum,返回prim的所有顶点的'线性序号'数组(线性序号可以勾选Geometry SpreedSheet->Vertices->View->Map Offset查看)
primvertex()int给出primnum和顶点序号,返回这个顶点的'线性序号'
primvertexcount()int给出primnum,返回prim的顶点的数量
primpoints()int[]给出primnum,返回这个prim的所有点的序号[数组],有序
primpoint()int给出primnum和顶点序号,返回这个顶点所在的点的序号
pointprims()int[]给出点序号,返回所有包含这个点的prim的序号[数组]
pointvertices()int[]给出点序号,返回所有住在这个点上的顶点的‘线性序号’[数组]
pointvertex()int给出点序号,返回住在这个点上的第一个顶点的线性序号
vertexpoint()int给出顶点序号,返回这个顶点所在的点的序号
vertexnext()int给出顶点‘线性序号’,返回同在一个点上的下一个顶点的‘线性序号’
vertexprev()int给出顶点‘线性序号’,返回同在一个点上的上一个顶点的‘线性序号’
vertexindex()int给出primnum和顶点序号,返回这个顶点的‘线性序号’
vertexprim()int给出顶点‘线性序号’,返回包含这个顶点的prim的序号
vertexprimindex()int给出顶点的线性序号,返回这个顶点的序号

neighbours()

int[]给出点序号,返回与该点相连接的点的序号[数组]
Mathfit()float/vector@rampNum=fit(@ptnum,0,@numpt,0,1);将ptnum从区间[0,顶点总数]映射到区间[0,1]
lerp()float/vectorlerp(value1,value2,alpha);双线性插值
rint()intrint(2.5)=3四舍五入,返回整数
length()floatlength(@P);测量点到原点距离
distance()floatdistance(@P,{1,1,1});测量两点间的距离
sin()floatsin(@ptnum);正弦函数
cross()vectorcross(@P,@N);叉积
dot()vectordot(@P,@N);点积
normalize()vectornormalize(@P);标准化
indent()matrix-单位矩阵
Arrayappend()-append(array,a);数组中添加元素a/数组a
find()intfind(array,a);

返回数组中a的位置,若无返回负值

foreach()voidforeach(float point ; points);或foreach(int id; float point ; points);循环遍历每一个元素,注意中间是分号。id为当前循环到的次数
for()voidfor(int i=0;i<n;++i)或for(int i : {1,2,4,5})循环遍历每一个元素
array()arrayint p[] = array{1, @pt};创建数组,{}内可以有变量
resize()voidresize(array,6);重置array数组的大小
pop()<type>pop(num)或pop(array,index);默认移除数组array最后一个元素并返回它
serialize()<type>

vector pos[] = { {1,2,3}, {4,5,6}};

float posfloat[] = serialize(pos);

将向量数组拆分为浮点数组
unserialize()与上相反
removeindex()<type>removeindex(&array[], index);移除数组中索引为index的元素并返回
removevalue()intremovevalue(array,value);删除第一个值为value的元素,成功返回1,否则0
avg()<type>avg(array);数组的平均值
sort()--返回新排序的数组,原数组不变
reverse--返回反转数组
insert()insert(array,n,1)或insert(array,-n,1)在数组第n个前/倒数n个前插入元素1
Functionfunction()<type>function int Cost(const int a,c; const float b){return 1;}参数类型相同时可用逗号隔开,不同时用分号。参数都是引用,最好前缀加const;需要修改时再去掉 

  • 92
    点赞
  • 399
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
以下是 Houdini 一些常用的快捷键: **通用操作** - `Ctrl + N`:新建场景 - `Ctrl + O`:打开场景 - `Ctrl + S`:保存场景 - `Ctrl + Shift + S`:另存为场景 - `Ctrl + Alt + S`:打开场景设置 - `Ctrl + Z`:撤销 - `Ctrl + Y`:重做 - `Ctrl + C`:复制 - `Ctrl + V`:粘贴 - `Del`:删除选的对象 - `F1`:帮助文档 - `F2`:打开节点编辑器 - `F3`:打开参数面板 - `F4`:切换显示器编辑模式 - `F5`:播放动画 - `F6`:暂停动画 - `F7`:单步调试 - `F8`:跟踪运行时错误 - `F9`:打开 Python shell **节点编辑器** - `Tab`:创建节点 - `W`:切换选择工具 - `E`:切换放置工具 - `R`:切换旋转工具 - `T`:切换缩放工具 - `A`:切换锚点工具 - `S`:切换直线工具 - `D`:切换曲线工具 - `Q`:切换选择框工具 - `Z`:放大 - `X`:缩小 - `C`:居 - `Ctrl + F`:查找节点 - `Ctrl + G`:组合节点 - `Ctrl + Shift + G`:取消组合 **3D 视** - `Alt + 左键`:旋转视角 - `Alt + 键`:平移视角 - `Alt + 右键`:缩放视角 - `Ctrl + Alt + 左键`:选择物体 - `Ctrl + Alt + 键`:平移视口 - `Ctrl + Alt + 右键`:缩放视口 - `Ctrl + Shift + 左键`:旋转光源 - `Ctrl + Shift + 键`:平移光源 - `Ctrl + Shift + 右键`:缩放光源 - `Shift + A`:选择所有物体 - `Shift + D`:选择当前物体的上级物体 - `Shift + F`:在当前视角下选择物体 以上是 Houdini 一些常用的快捷键,希望能对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值