Bites of Python

          1 分钟    智伤帝
出品方: Mix Training 难度: beginner houdini 版本: houdini 16+
houdini 模块: SOP
流程: modeling
标签: ࠕPython
网盘链接: https://pan.baidu.com/s/1zP6oO2AieDgQ50f77CMgfg   提取码: wiki

总结

观看笔记

01 - Environment setup

http://cgtoolbox.com/houdini-expression-editor/

  配置 Expression Editor 以及 VScode

02 - Help, variables and nodes

hou.wd() 获取当前 python 节点位置
hou.selectedNodes() 获取选中的节点

  介绍了 Python 的基础操作,以及 Houdini 相关的模块帮助查找。

03 - HOM, OBJ loader custom tool

https://www.sidefx.com/docs/houdini/hom/hou/ui#selectFile

hou.ui.selectFile(title="title") Houdini 的文件选择窗口

hou.expandString 可以将 Houdini 的变量 $HIP 扩展成完完整的路径或名称。

案例分析

选择目录 加载目录下所有的模型文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# -*- coding: utf-8 -*-
from __future__ import division
from __future__ import print_function
from __future__ import absolute_import

import os
import hou

# NOTE 打开 Houdini 文件选择窗口 | 选择目录
obj_dir = hou.ui.selectFile(title="Select Obj Directory",file_type=hou.fileType.Directory)
# NOTE 获取的路径可能包含 $HIP houdini 环境变量 | expandString 方便处理
obj_dir_expanded = hou.expandString(obj_dir)

# NOTE 遍历目录下的文件
obj_files = os.listdir(obj_dir_expanded)

# NOTE 创建 geometry 节点
loader = hou.node('/obj').createNode('geo','OBJ_Loader')
# NOTE 创建 merge 节点
merge_objs = loader.createNode("merge","OBJ_Merger")

# NOTE 遍历创建 file 节点 | 修改节点的属性并自动连接到 merge 节点上
for obj in obj_files:

    obj_file_node = loader.createNode('file',obj)
    obj_file_node.parm('file').set(obj_dir + obj)
    obj_file_node.parm("missingframe").set(1)
    merge_objs.setNextInput(obj_file_node)

# NOTE 自动排布节点
loader.layoutChildren()

# NOTE 设置显示标记和渲染标记
merge_objs.setDisplayFlag(True)
merge_objs.setRenderFlag(True)