总览

Houdini 是一款次时代的程序化建模、动画、特效、模拟、渲染和合成软件包。
Houdini 的强大在于程序化的工作流程。在 Houdini 中工作涉及创建连接在一起的节点网络,描述完成任务的步骤。例如,一个创建盒子的节点可能被连接到一个将盒子的边缘挤出的节点,然后是一个细分多边形的节点,再是一个编辑点位置的节点。这赋予了您巨大的力量:

  • 您可以返回到网络中的先前节点并更改选择、更改设置或替换资产。更改会自动传播到网络中,改变最终结果。您无需撤销或重新开始并重新创建工作,以更改您之前做出的决定。
  • 它鼓励快速原型设计。在探索想法时,您无需丢弃已完成的工作 - 只需重复使用网络的部分或重新配置网络以将其升级为工业级的质量。
  • 由于 Houdini 基于程序生成事物,它拥有许多用于管理极其庞大和复杂场景的工具,包括支持生成/加载几何体,并在渲染时添加细节,而不是将所有内容保存在内存中。
  • 您可以打包网络并将其制作成具有自己界面的新工具,而无需编写任何代码。在 Houdini 中,这些工具被称为数字资产(HDA Houdini Digital Assets)。

img

节点和网络

Houdini 的网络就像计算机的文件系统,其中网络就像文件夹,节点就像文件。节点也可以是包含其他节点的子网络。下面是一个节点网络的示例。

一个network,其中包含很多各种各样的节点

Networks(网络)

Houdini 的root network包含一些预制网络,如对象或“场景”级网络( /obj )和渲染节点网络( /out )。网络有一个“类型”(如“几何网络(geometry network)”或“动力学网络(dynamics network)”),这决定了您可以放入网络中的节点类型。

对象级网络( /obj )包含场景中的“顶层”对象(几何对象、灯光、摄像机),并允许您在不同对象之间建立关系。在对象级别,您可以拥有纯粹是子网络的对象,比如包含定义对象几何的节点的几何子网络(如下例中的cube和grid)或包含定义模拟行为的节点的动力学子网络(下面是 dopnet)。

img

在cube网络中有定义立方体几何的节点。几何级别低于对象级别。

img

Nodes(节点)

节点有输入和输出。您可以通过将一个节点的输出连接到另一个节点的输入来创建节点之间的关系。

连线在不同类型的网络中可能有不同的含义。通常情况下,它意味着一个节点创建或处理的数据被传递到下一个节点。然而,在对象级别,连线建立了对象之间的层次或父子关系。

每个节点都有一个名为参数的用户界面设置。您可以在参数编辑窗格中编辑这些参数,以更改节点的功能。以下是 Crowd Solver 节点参数编辑器中显示的参数示例。

img

Object在Houdini中大多数被称为O,用于表示一个节点对象,节点对象有不同的类型,有些类型限定了能包含其的网络

SOPs

Surface OPerators 或几何节点,位于对象文件夹内部。这些用于构建和修改几何体。任何类型的几何体,从多边形到体积。

DOPs

动态操作符或用于构建模拟的模拟/求解器节点。模拟从 SOPs 中读取几何数据,并将此数据传递给 DOP 求解器。

SHOP

SHading Operators 是表示要应用于几何体的着色器的材料。有些是使用 vex 硬编码的,而其他一些是您可以深入并修改其中的 VOPs 的文件夹。

VOPs

Vector OPerators 用于从构建着色器到修改几何、体积、像素等各种操作。

COPs

Composite OPerators用于图像合成操作。

ROPs

在 ROP 输出目录中的 Render OPerators,用于创建渲染输出依赖图,以自动化输出任何类型的数据并触发外部进程(如渲染)。通常用于生成几何序列、模拟数据并触发生成图像序列到磁盘的渲染任务。

TOPs

Top网络包含代表一系列任务或工作项的任务节点。有四种主要类型的Top节点:生成工作项的处理器(processors )、运行工作项作业的调度器(schedulers)、将传入的工作项合并在一起的分区器(partitioners ),以及在否则无关的工作项之间建立依赖关系的映射器(mappers)。

LOPs

对于灯光艺术家来说,将几何、灯光和摄像机带入 Solaris LOPS 上下文并使用 Karma 渲染它们是很容易的。在 LOPS 中,这些元素变成了 USD,可以在场景图中进行分析。然后,您可以配置并导出这些部件作为 USD,供其他镜头使用。

CHOPs

CHannel OPerators 用于创建和修改从运动到音频等各种原始通道数据。大多数用户安全地忽略 CHOP 上下文,现在你也可以这样做。在学习 Houdini 时,将其放在“稍后处理”列表中。但一定要将其保留在列表中。

一般多用于自定义时间序列:https://www.youtube.com/watch?v=JoDD9HGjFkQ

Geometry and attributes

Houdini 支持不同类型的几何体,如多边形、NURBS 和贝塞尔曲线,几何基元,如圆和球,以及元球。 Houdini 将任何这些类型的几何体的每个“部分”称为基元( primitive)。 例如,多边形的面是一个基元,多边形曲线是一个基元,元球是一个基元。 这个术语其实有点抽象的,因为一些“基元”具有可编辑的组件。 例如,多边形面有点和顶点。

场景中的许多信息都存储在属性(Attribute)中 - 存储在模型、基元、点和顶点上的隐藏数据。例如,Houdini 在空间中的位置显示点,该位置由它们的 P (位置)属性定义。

您可以在 Houdini 中使用 geometry spreadsheet 查看几何属性值。

image-20240628215715869

编程语言

Houdini中有HScript,VEX,Python三种语言

HScript

是旧版的 Houdini 脚本语言,它很像操作系统中的 Shell 脚本,我们可以通过这个工具访问 Houdini,例如我们可以添加新节点,或删除节点,更改显示标志等。我们应该在 Window->HScript Textport 中编写 HScript 命令(就像 Maya 中的 MEL)。

通常与 hscript 相关联的是表达式(Expression)。Hscript 通常包含 $ VAR 变量。

Expression

基于HScript,表达式:是一些在通道(参数)中控制它们的代码。例如,$F 返回当前帧编号给某些参数,或者 npoints(“…”)返回指定对象的点数给某些参数或通道。(就像 Maya 中的表达式)

Python

是一种新功能,可以像 HScript 一样准确访问 Houdini。我们可以添加新节点,删除它们,编辑它们,访问 GUI 等。此外,我们还可以使用 Python 创建新的自定义节点。

VEX

是一种强大的语言,用于编写新的着色器和自定义节点。它与 C/C代码非常相似。它比 Python 和 HScript 快得多,甚至我认为在某些特殊情况下,它可能比 C/C工具更快!我们可以用两种方式编写 VEX 代码:

  1. 直接编写 VEX 代码

  2. 使用可视节点编写 VEX 代码!

在第二种方法中,我们可以仅使用可视节点编写我们的程序!例如,要编写 A * B = C,我们应该为 A 和 B 添加两个节点,然后添加乘法节点并将 A 和 B 连接到其输入,最后将乘法节点的输出连接到 C 节点。我们称这种方法(可视化)为 VOP。VOP 节点对于不同的网络(SHOP、POP、OBJ、CHOP、COP 等)是相同的,但对于每个网络,导入的参数是不同的。例如,在几何网络中,我们有 P 参数用于导入点的位置,但在 COP 网络中,我们应该有 R、G、B 参数用于将红色、绿色和蓝色导入 VOP 网络。因此,我们有不同的 VOP 网络用于不同的网络,例如:VOP SOP,VOP COP,VOP CHOP,VOP POP 等。

总结

  • Houdini目前有三种脚本语言,执行效率由低到高进行排列为Python,HScript和VEX,三种脚本各自有各自的优点和应用场景
  • Expression是Houdini中索引/获取 Channel/Param值的专用脚本,可以用HScript和Python两种脚本来写Expression,可以用在各个地方:https://www.sidefx.com/docs/houdini/expressions/
  • 按功能来划分的话,HScriptPython可以看成一类脚本,VEX是单独的一类
  • HScript一般用在一些工具流程向的处理(比如创建删除Node,修改Node的UI显示状态,打开工程等):https://www.sidefx.com/docs/houdini/commands/index.html
  • Python可以同VEX一样用于处理几何,但也可以方便的处理数据和工具流程,比如从外部读取json转换成Houdini中的几何数据:https://www.sidefx.com/docs/houdini/hom/index.html
  • VEX一般用在attribute wrangle nodes这些SOP中处理几何计算,当然了,VEX自己也有一套获取Channel/Param值的方法,可以认为通过VEX自定义了node内部的处理逻辑:https://www.sidefx.com/docs/houdini/vex/index.html
  • @是VEX的标志性符号,$是HScript的标志性符号。但实际上使用的时候会相当困惑,比如可以在HScript里写@引用特定的一些属性(比如@Frame@Time,但它仍然是HScript而不是VEX),再比如可以在VEX中书写$来引用一些全局变量

Solaris

Solaris 是一套外观开发、布局和照明工具套件,赋予艺术家们创造基于 USD 的场景图的能力,从资产创建到最终渲染

Solaris 与 USD 的 HYDRA 成像框架集成,可访问各种渲染器,如新的 SideFX Karma,Pixar RenderMan,Autodesk Arnold,Maxon Redshift,AMD ProRender

以USD为核心,Solaris 是一个完美的管线工具,用于外观开发、布局和照明。USD 使任意数量的资产组装和组织成虚拟集、场景和镜头成为可能,并让您使用简单、一致的 API 在单一场景图中进行非破坏性编辑。内置概念用于分层镜头、创建变体和管理数据流的关键方面。在 Solaris 中,您可以轻松配置 USD 资产,集成和叠加 FX 镜头,并使用程序依赖图(PDG)将任务分发到计算农场以提高效率。

USD

推荐阅读 Houdini官方的USD介绍

USD 是一种用于通过组合图层(composing layers)描述 3D 场景的软件和文件格式系统。例如,描述厨房场景的主 USD 文件( kitchen.usd )可能引用包含道具( chair.usdtable.usd ) 、灯光、角色等的图层文件,将它们组合成一个的舞台。

图层范式的主要优势是非破坏性编辑。您可以从现有场景开始,创建一个包含您编辑的新图层。这些编辑不会影响其他人使用相同场景,除非他们选择包含您的新图层。您还可以替换其中一个图层(例如资产的更新版本或更新的照明),并自动重新应用所有现有更改。这使得多个部门可以协作、共享数据,并更新资产,而不会相互干扰。

Houdini 的 USD 工具链和周边系统被统称为 Solaris。Solaris 在视图中包括 USD 支持和一种新的网络类型 LOPs(Light Operators)。LOP 网络与 SOPs 略有相似,每个节点接受传入的几何图形,修改它,并输出新的几何图形。在 LOPs 中,每个节点接受传入的 USD 场景,修改它,并输出新的场景。

因为 USD 是一个非常全面的框架,它并不简单。LOPs 被设计成您不需要了解底层的 USD 结构。然而,在可能的情况下,LOP 参数使用 USD 术语,并且有时是对内置于 USD 中的功能的薄包装。对 USD 概念和特性的基本理解将使理解 LOPs 变得更加容易。

Karma

Karma 是 Houdini 基于物理的路径追踪器,与 USD 深度集成(它使用 USD 作为场景描述格式,并充当 Hydra 渲染代理)。虽然它与 Mantra 共享一些概念,但 Karma 是一个全新的渲染器,旨在取代 Mantra 用于新项目。

Karma 可以渲染使用 Principled 着色器的传统 Houdini 对象级场景(可以直接使用 Karma 渲染节点渲染它们,或者将它们导入到 USD 并使用 Scene Import LOP 导入)。

Karma 不支持大多数 VEX 着色函数(除了某些情况下的跟踪)。它不支持 VEX 几何/点云查找函数。它不支持现已弃用的材质样式表。

XPU

Karma 有两个渲染引擎:Karma CPU 完全在 CPU 上的软件中运行,Karma XPU 利用 CPU 资源,同时也利用 GPU 和硬件加速。

由于必须在 GPU 上运行,XPU 比 Karma CPU 支持的传统功能更有限。Karma XPU 将永远不会支持基于 VEX 的着色器。目前它支持内置的 USD 材质(USD Preview Surface)和 MaterialX(这可能是 Karma 中着色的未来方向)。

MaterialX

MaterialX 是一种用于描述着色网络的开源标准。MaterialX 着色网络旨在在应用程序和渲染器之间具有可移植性

Solaris 和 Karma 通过 UsdMaterialX 利用 MaterialX,这是一个允许 USD 导入 MaterialX 着色器的插件。Houdini 允许您在 VOPs 中构建 MaterialX 材质,并自动将其转换为 UsdShade prims。虽然有一个脚本可以将 VOP 节点转换为 .mtlx 文件存储在磁盘上,但 Solaris 支持的主要工作流程是将 MaterialX 节点编码为 USD prims。Solaris 可以引用磁盘上定义的 MaterialX 外观文件,但对于写入 .mtlx 文件的支持要有限得多。

在 Solaris 中,用户可以构建纯 MaterialX 材质,或者以 Karma 为中心的材质。区别在于 Karma 能够通过专用着色器节点补充缺失的功能。为了促进这些工作流程,相应的构建节点可在材质库中使用。

因为 Karma XPU 永远不会支持 Mantra 和 Karma CPU 使用的基于传统 VEX 的着色器,MaterialX 可能是 Karma 渲染器构建材质的未来。

Houdini 的 MaterialX 支持包括 MtlX 标准表面节点,这是一种基于物理的超级着色器,类似于 Principled 着色器。您可以使用此节点满足大多数需求,而不是定义自己的着色器。

总结

可以看到,从USD到MaterialX,Houdini致力于提供跨渲染器(Houdini,Maya,3dMax,UE,Unity)的工作管线,这是大势所趋,那我们看看Unity在干什么呢?哦,在搞微信小游戏啊,那没事了