什么是context options?
houdini18.0新增的但是到18.5都還沒火雖有點(diǎn)小但繼續(xù)開發(fā)會(huì)很有前景的一項(xiàng)功能.一般稱為上下文選項(xiàng).所謂的context optinos可以理解為整個(gè)hip文件的全局變量.與Edit->Aliases and Variables不同,context options中定義的全局變量,可以直接以@的方式調(diào)用.而且重點(diǎn)是它可以使用腳本來創(chuàng)建與管理,對(duì)于開發(fā)人員來說非常方便.
以前我們可能使用copy parameter或者讀屬性的方式來獲取值,每用到一次就得重復(fù)操作一次,寫的表達(dá)式很長(zhǎng)很多,很迷,使用Top流創(chuàng)建全局屬性雖然也可以但是操作有點(diǎn)重,而且也不方便用腳本管理.現(xiàn)在一個(gè)統(tǒng)一面板一個(gè)@就搞定了.

打開方式

可以創(chuàng)建的類型

前面是標(biāo)簽名稱,后面小寫的是變量名稱,初創(chuàng)時(shí)houdini會(huì)根據(jù)標(biāo)簽自動(dòng)創(chuàng)建的小寫變量。我這里用的python3版所以有中文

創(chuàng)建的了中文也可以的

使用@來調(diào)用

腳本控制命令
hou.contextOptionNames() #獲取所有添加的上下文選項(xiàng)
hou.setContextOption() #設(shè)置上下文內(nèi)容
hou.contextOption() #獲取指定的上下文內(nèi)容
hou.setContextOptionConfig() #設(shè)置上下文配置
hou.contextOptionConfig() #上下文配置
hou.removeContextOption() #移除指定的上下文內(nèi)容
#注:所有添加或者刪除的操作都需要刷新一下才能看見
>>> hou.contextOptionNames()
('myint', 'checkbox', '浮點(diǎn)滑動(dòng)條', 'node_path1', 'heading_title')
hou.setContextOption() 添加上下文選項(xiàng)
hou.setContextOption('opt1',1.0)

注:python3版本的houdini使用腳本創(chuàng)建是可以創(chuàng)建中文變量的,而且也能被腳本讀取,但是不能在節(jié)點(diǎn)面板上引用


導(dǎo)入導(dǎo)出上下文選項(xiàng)配置
import contextoptions
# Export all context options in this scene to a JSON file
contextoptions.exportJson("options.json")
# Import context options from a JSON file and merge them over
# any existing options in this scene
contextoptions.importJson("options.json")
刪除上下文選項(xiàng)
for name in hou.contextOptionNames():
hou.removeContextOption(name)
自定義配置PythonMenu
上下文選項(xiàng)里直接開放了自定義python選項(xiàng),如同添加回調(diào)函數(shù)一樣,有了這就可以搞事情了。在自定義之前需要先了解它的配置:
hou.contextOptionConfig(opt) #里面的參數(shù)是上下文變量名稱
新建一個(gè)python menu,重命名aa.通過該函數(shù)查看一下

所以發(fā)現(xiàn)配置config是一個(gè)json,里面有各元素組成,包括腳本。
所以可以定義自己的python menu,先創(chuàng)建一個(gè)上下文選項(xiàng)
import json
hou.setContextOption('cgai',0) #需要先創(chuàng)建一個(gè)上下文選項(xiàng)
config={"label":"即時(shí)演繹","type":"py_menu"}
hou.setContextOptionConfig('cgai',json.dumps(config))
具體腳本還是進(jìn)界面來編寫,刷新一下界面,剛才創(chuàng)建的option就出現(xiàn)了,選擇它,然后點(diǎn)擊右上角的小筆圖標(biāo)進(jìn)行內(nèi)容編輯,
這里面其實(shí)就是python函數(shù)內(nèi)部,需要返回一個(gè)list,里面的元素以(name,value)的形式一一對(duì)應(yīng)菜單元素。

效果

一些不完善的地方
1.不支持相對(duì)變量文件路徑直接讀取

但是支持絕對(duì)路徑文件讀取

2.不支持任何直接表達(dá)式
包括vex,hscript,python

3.當(dāng)動(dòng)態(tài)計(jì)算houdini內(nèi)部節(jié)點(diǎn)數(shù)值時(shí),值會(huì)清空.但是常量可以持久保持,值隨函數(shù)執(zhí)行后釋放掉了,這很挫。
下面選擇Constant,@pym可以正常讀取,選擇CScale時(shí),發(fā)現(xiàn)@pym值閃一下就回到0,對(duì)應(yīng)物體也是移動(dòng)了一下,說明有計(jì)算,但是沒有持久保存.

4.一旦手誤x掉了就不能Ctrl+Z回來!!! 所以寫長(zhǎng)的腳本時(shí)候在外面先寫好吧.
Houdini18.5 python3
鏈接:https://pan.baidu.com/s/1RZgpBDThcryyVkMPNhnWLg
提取碼:cgai
?