什么是context options?

houdini18.0新增的但是到18.5都还没火虽有点小但继续开发会很有前景的一项功能,一般称为上下文选项.所谓的context optinos可以理解为整个hip文件的全局变量。与Edit->Aliases and Variables不同,context options中定义的全局变量,可以直接以@的方式调用,而且重点是它可以使用脚本来动态创建与管理,对于开发人员来说非常方便.

以前我们要定义全局变量可能使用copy parameter或者表达式读属性的方式来获取值,每用到一次就得重复操作一次,写的表达式很长很多,很迷,使用Top流创建全局属性虽然也可以但是操作有点重,而且也不方便用脚本管理.现在一个统一面板一个@就搞定了.

houdini界面恢复默认 houdini恢复默认设置_python

打开方式

houdini界面恢复默认 houdini恢复默认设置_python_02

可以创建的类型

houdini界面恢复默认 houdini恢复默认设置_python_03

前面是标签名称,后面小写的是变量名称,初创时houdini会根据标签自动创建的小写变量。我这里用的python3版所以有中文

houdini界面恢复默认 houdini恢复默认设置_json_04

创建的了中文也可以的

houdini界面恢复默认 houdini恢复默认设置_json_05

使用@来调用

houdini界面恢复默认 houdini恢复默认设置_houdini界面恢复默认_06

脚本控制命令

hou.contextOptionNames()  #获取所有添加的上下文选项hou.setContextOption()   #设置上下文内容hou.contextOption()  #获取指定的上下文内容hou.setContextOptionConfig()  #设置上下文配置hou.contextOptionConfig()  #上下文配置hou.removeContextOption() #移除指定的上下文内容#注:所有添加或者删除的操作都需要刷新一下才能看见

hou.contextOptionNames() 获取所有添加的上下文选项名称

>>> hou.contextOptionNames()('myint', 'checkbox', '浮点滑动条', 'node_path1', 'heading_title')

hou.setContextOption() 添加上下文选项

hou.setContextOption('opt1',1.0)

houdini界面恢复默认 houdini恢复默认设置_php 每次刷新界面全局变量都没了_07

注:python3版本的houdini使用脚本创建是可以创建中文变量的,而且也能被脚本读取,但是不能在节点面板上引用

houdini界面恢复默认 houdini恢复默认设置_json_08

houdini界面恢复默认 houdini恢复默认设置_全局变量_09

导入导出上下文选项配置

import contextoptions# Export all context options in this scene to a JSON filecontextoptions.exportJson("options.json")# Import context options from a JSON file and merge them over# any existing options in this scenecontextoptions.importJson("options.json")

删除上下文选项

for name in hou.contextOptionNames():    hou.removeContextOption(name)


自定义配置PythonMenu

上下文选项里直接开放了自定义python选项,如同添加回调函数一样,有了这就可以搞事情了。在自定义之前需要先了解它的配置:

hou.contextOptionConfig(opt) #里面的参数是上下文变量名称

新建一个python menu,重命名aa.通过该函数查看一下

houdini界面恢复默认 houdini恢复默认设置_全局变量_10

发现配置config是一个json,里面有各元素组成,包括脚本。

所以可以定义自己的python menu,先创建一个上下文选项

import jsonhou.setContextOption('cgai',0)  #需要先创建一个上下文选项config={"label":"即时演绎","type":"py_menu"}hou.setContextOptionConfig('cgai',json.dumps(config))

具体脚本还是进界面来编写,刷新一下界面,刚才创建的option就出现了,选择它,然后点击右上角的小笔图标进行内容编辑。

这里面其实就是python函数内部,需要返回一个list,里面的元素以(name,value)的形式一一对应菜单元素。

houdini界面恢复默认 houdini恢复默认设置_python_11

效果

houdini界面恢复默认 houdini恢复默认设置_json_12

一些不完善的地方

1.不支持相对变量文件路径直接读取

houdini界面恢复默认 houdini恢复默认设置_全局变量_13

但是支持绝对路径文件读取

houdini界面恢复默认 houdini恢复默认设置_houdini界面恢复默认_14

2.不支持任何直接表达式

包括vex,hscript,python

houdini界面恢复默认 houdini恢复默认设置_python_15

3.当动态计算houdini内部节点数值时,值会清空.但是常量可以持久保持,值随函数执行后释放掉了,这很挫。

下面选择Constant,@pym可以正常读取,选择CScale时,发现@pym值闪一下就回到0,对应物体也是移动了一下,说明有计算,但是没有持久保存.

houdini界面恢复默认 houdini恢复默认设置_houdini界面恢复默认_16

4.一旦手误x掉了就不能Ctrl+Z回来!!! 所以写长的脚本时候在外面先写好吧.

Houdini18.5 python3

链接:https://pan.baidu.com/s/1RZgpBDThcryyVkMPNhnWLg

提取码:cgai