简单概括HAPI(Houdini Engine API)所涵盖的功能

概念

“Houdini Engine” 这一角色让“宿主程序”(指UE4、Unity、Maya等)可以与Houdini数据进行交互。
各宿主程序都有其对应的 “Houdini Engine 插件”

Houdini Engine API,简称 HAPI,是 “Houdini Engine” 最底层的接口 。
换句话说:无论是哪个宿主程序,无论插件版本是什么,无论上层经过了何种封装,他们最底层都在使用同一套接口,即 HAPI
比如,对于UE来说:
在这里插入图片描述

相对于插件代码来说,HAPI本身的变化是不大的。比如,UE4插件的“第二版”(这篇博客是翻译官方对第二版插件的介绍),对比其“旧版”(这篇博客对旧版插件代码进行了梳理),第二版是全新的面貌,且有很多新功能。但是,第二版的改变主要在于UE4插件的C++代码,HAPI几乎没变化。
(主要的变化是加了“Session同步”相关的功能,见Houdini Engine 3.5: What’s New in HAPI):
在这里插入图片描述

目标

HAPI所有函数都在HAPI.h中,大概有200多个。

本篇的目标是:

  • 依照官方文档中的分类,简单概括一遍所有函数。并结合自己的使用经验,指出其中相对重要的函数。最后概括下一般的使用流程。

下面是所有的分类:
(其中“★”表示我认为最基础且必要的分类,“☆”是经常会用到的分类,不常用的放在了最后)

1. ★ Sessions(13个函数)

关于 “Session” 的概念,可以参考之前对官方文档的翻译
简单来说,你通过Session和后台的Houdini进程进行通信。因此几乎所有HAPI函数都要求一个Session指针作为参数。

这个分类下的函数大概包括:

  • 创建各种类型的Session
  • 查询session状态
  • 清理session
  • 关闭session
  • 等其他和session直接相关的函数

2. ★ Nodes(23个函数)

这个分类包含了和节点相关的关键操作。比如:

  • 创建节点
  • Cook节点
  • 删除节点
  • 连接节点
  • 获得节点的子节点

3. ★ Parms(33个函数)

这个分类包含了参数相关的关键操作。比如:

  • 获得节点的所有参数
  • 对 整数/浮点数/字符串/等类型 的参数进行设置
  • 得到 整数/浮点数/字符串/等类型 的参数的值

4. ★ Geometry Getters(15个函数)

这个分类包含了“得到几何数据”相关的操作。比如:

  • 得到 Object 节点中的当前Display的 geo节点
  • 得到Geo信息
  • 得到Part信息
  • 得到面数
  • 获得顶点列表

5. ★ Attributes(36个函数)

这个分类包含了Attribute相关的关键操作。比如:

  • 获得 attribute 信息。
  • 获得各种类型的 attribute 的数据。
  • 设置各种类型的 attribute 的数据。

6. ★ Geometry Setters(8个函数)

这个分类包含了“设置几何数据”相关的操作。比如:

  • 设置Part信息
  • 设置面数
  • 设置顶点列表
  • 提交几何体(CommitGeo

还需要注意的是:如果要设置几何数据,当然还需要上面 Attributes 分类下一些设置 attribute 数据的函数。

最后要注意:设置完数据后,最后一定要调用CommitGeo来提交几何数据。如果此时Open Scene in Houdini,可以看到这个节点是被冻结的,其中就是设置的几何数据。

7. ★ Volumes(16个函数)

这个分类包含了 体积(高度场) 相关的操作。比如:

  • 获得Volume的信息
  • 获得Volume的数据
  • 设置Volume的数据

8. ☆ Environment(8个函数)

包含了对环境相关的一些操作。比如:

  • 设置环境变量
  • 获得环境变量

9. ☆ Status(12个函数)

包含了对各种状态的查询。以及其他状态查询的函数。

10. ☆ Strings(6个函数)

字符串相关的函数。

最主要的是HAPI_StringHandle和字符串数据之间的转换。

11. ☆ Assets(8个函数)

这里的 “Assets” 指的是HDA。
这个分类包含HDA相关的一些操作,比如:

  • 加载HDA
  • 获得HDA信息

12. ☆ Hip Files(5个函数)

包含了HIP文件相关的操作,比如:

  • 读取Hip文件
  • 保存Hip文件

13. ☆ Presets(3个函数)

包含了Preset相关的函数,比如:

  • 生成Preset文件
  • 根据Preset设置参数

14. ☆ Objects(8个函数)

OBJ节点相关的操作,比如:

  • 获得OBJ节点的信息
  • 设置OBJ节点的transform

15. ☆ Curves(8个函数)

包含了曲线相关的操作,比如:

  • 获得/设置曲线信息
  • 获得/设置曲线上的顶点数目

16. ☆ SessionSync(5个函数)

包含了SessionSync功能需要的接口

17. ☆ PDG/TOPs(36个函数)

这个部分有大量PDG相关的接口。

其他分类

至于其他的分类,从我自己的使用经验来看并不常用(也许对于某些任务来说是关键的)。包括:

  1. Utility(6个函数):从名字看似乎想要包含一些通用函数,但现在主要是Transform矩阵计算相关的函数。
  2. Time(7个函数):时间相关的一些操作
  3. Height Fields(2个函数):创建用来输入高度场数据的节点的辅助函数
  4. Materials(14个函数):材质相关的一些操作
  5. Animation(2个函数):动画相关的一些操作
  6. InputCurves(5个函数):创建用来输入曲线数据的节点的辅助函数
  7. Caching(11个函数):缓存相关的函数?不确定。。

一般的使用流程

首先使用Sessions分类下的函数创建session,并维护它,管理它的生命周期。

然后使用Nodes分类下的函数创建节点,并维护若干需要的节点,对其做需要的操作,比如连接节点,或是用Parms分类下的函数操控参数。

你还可能需要将数据传入Houdini中,这时候就要用到Geometry Setters分类下的函数,和Attributes下的函数来输入几何体。曲线,高度场也有对应的函数可以输入。

最后,当一切参数以及输入都准备就绪,就可以对节点进行Cook了。然后,就可以得到结果,比如Geometry Getters可以得到几何体数据,Attributes可以得到属性数据,Volumes能得到高度场数据。

猜你喜欢

转载自blog.csdn.net/u013412391/article/details/115526495
今日推荐