目标
you can use the HDK to create custom plugins that hook into the Houdini interface. In its simplest form, a plugin is simply a library file (a .so file on Linux, .dll on Windows, .dylib on Mac OSX) which is loaded by Houdini on startup. The library can contain custom node operators, custom script commands and any other objects that are recognized by Houdini.
你可以使用HDK来创建Houdini可以接入的插件。简单来说,一个插件就是一个库文件(在Linux上是.so
,在Windows上是.dll
,在MaxOSX上是.dylib
),它会在Houdini启动时加载。这些库可以包含自定义的节点,自定义的脚本命令,或者其他可以被Houdini识别的对象。
在之前的博客《研究HDK(Houdini Development Kit):使用CMake自动生成VS工程》中,我使用CMake为\toolkit\samples\SOP\SOP_Star
这个范例创建了工程,并生成了dll,这其实就是创建了一个Houdini插件。Houdini在读取它时会添加一个新的SOP节点:“Star”。
本篇的目标是结合官方文档和“SOP_Star”这个范例,来学习为Houdini添加自定义插件的细节。
Houdini如何加载插件?
路径
默认情况下,Houdini将会从下面路径中搜寻插件:
- ./dso
- $HOME/houdiniX.Y/dso
- $HOME/Library/Preferences/houdini/X.Y/dso (only on Mac OSX)
- /Users/Shared/houdini/X.Y/dso (only on Mac OSX)
- $HSITE/houdiniX.Y/dso
- $HFS/houdini/dso
其中的$
路径,可以在Houdini编辑器内的“Hscript Textport”窗口中输入命令查看自己环境中的值:
如果是按照之前的博客中使用CMake进行VS工程的生成,输出路径是自动会被填好的,生成的dll会自动被放到正确位置,很方便:
钩子函数( hook functions )
When Houdini finds a plugin library, it locates and executes hook functions in the library which are responsible for registering custom HDK code with the interface.
当Houdini发现了一个插件的库文件时,他就会锁定并执行那些钩子函数( hook functions ),他们负责来注册HDK代码中的自定义内容。
在官方文档中可以看到这些 钩子函数 的名字都是什么,以及相应的作用。
其中的newSOPOperator
正是之前的“SOP_Star”这个范例所用到的:
它注册了一个新的名为Star的SOP节点。
辅助文件
虽然在之前的博客中成功添加了新的节点,但是可以注意到,新的节点是没有图标的。
然而在\toolkit\samples\SOP\SOP_Star
文件夹下其实是提供了图标的。
在官方文档中指出,这些“辅助文件”应该被放到指定位置:
我将图标.svg拷贝到指定位置
发现图标确实起作用了: