【编程】CG猎人python教程第001期 houdini中使用python案例

——  微资讯 · 微课程  ——

利用零碎时间,走上超神之路!


专栏导读

小编想了好久该如何带大家入门编程:python的学习。如果从基本编程概念和一些数据类型入手是最常用的方法,但是可能会很无趣,并且信息量挺大的。最重要的编程这些东西一定要直接写一遍才行(这个houdini学习是一样的)看和自己写永远是两个世界的东西。

最后决定使用一套简单的入门教程,以一个案例为基础,直接使用houdini作为平台,制作一个文字中单独字幕创建的功能。可能很多初学者对于编程都比较恐惧,但是小编建议,不需要理解太多东西,看一遍,自己照着写一遍。能理解多少是多少,当你呆着疑问学习后面CG猎人带来更多的基础教程,你就会更容易的理解了和记忆了。里面涉及了houdini非常常用的api(或者说是houdini的内置函数)

课程安排

1课程介绍

2houdini的python基础讲解

3读取/设置houdini中的物体/参数

4使用python创建houdini节点的方法

5-7创建shelf 工具(每个字符都独立的文字工具)

2houdini的python基础讲解

python基础讲解:主要是变量,函数的基本定义和讲解(忽略)

3读取houdini中的物体

houdini中的函数都存储在hou module中,所有可以通过hou.进行访问

访问物体

hou.node(“物体路径”)

比如 mybox = hou.node("obj/box_object1")

访问物体上的参数的方法

mybox.parm("参数的名字")

比如访问box上的tx的参数

mybox_tx =mybox.parm("tx")

print mybox_tx返回的是当前box中 translate x位移x的值;

对参数的修改,调用parm().set()方法进行设置

设置box的tx的值为5:

mybox_tx.set(5)

4使用python创建houdini节点的方法

包含步骤:基于最原始路径创建geo节点-使用内置参数关闭默认file创建-在geo中创建box-在geo中创建subdivide节点-把subdivide第一个接口连接到box中-把geo中内部子节点重新布局-设置subdivide节点可见和渲染

01创建节点

createNode("节点的类型“)但是前提是基于一个父亲(路径)

obj =hou.node("obj")获得obj这个父层级

obj.createNode("geo") #基于这个obj层级的父物体创建一个geo类型的节点

但是默认会在里面是生成file节点,所以需要调用内置函数进行关闭

obj.createNode("geo",run_init_scripts = False) #关闭初始化运行的脚本

02在geo节点中创建一个box节点

同理需要获得父层级为geo

mygeo =obj.createNode("geo",run_init_scripts = False)

mybox = mygeo.createNode("box") #在mygeo中创建了一个box节点

03在geo中再创建一个subdivide节点并且把第一端口连接到box,设置subdivide为可见和可渲染

mysubd = mygeo.createNode("subdivide") #在geo中创建geo节点

mysubd.setFirstInput(mybox) #设置节点第一个input连接到box中

mysubd.setDisplayFlag(True) #设置节点可见

mysubd.setRenderFlag(True) #设置节点可渲染

04对geo节点中所有子节点进行排列布局

mygeo.layoutChildren(); 对子节点进行layout布局处理

5-7创建shelf 工具(每个字符都独立的文字工具)

01 在工具架上新建一个shelf,然后在shelf上创建一个tool工具,编辑tool可以进入工具编辑面吧

创建列表类型,然后使用for循环把每个字符中每个字母单独取出来做创建

text = "Green" #创建一个字符串

letters = list(text) #把text字符串修改为list类型,list中每个元素就是每个字符

for id, char in enumerate(letters):

geo=hou.node("obj").createNode("geo",run_init_scripts = False) #每迭代一次那么创建一个geo,并且不生成里面的file节点

font = geo.createNode("font") #在geo节点中创建font这个节点

font.parm("text").set(char) #设置么个font中的文字为每次迭代的字符

geo.parm("tx").set(id) #设置geo中的每迭代一次偏移一个单位

extr = geo.createNode("extrude") #在geo中创建extrude节点

extr.setFirstInput(font) #设置extrude节点的第一个端口连接到font节点

extr.setDisplayFlag(True) #设置extrude可见

extr.setRenderFlag(True) #设置extrude可渲染

extr.parm("depthscale").set(0.1) #设置基础深度为0.1

geo.layoutChildren() # 对每个geo中的子节点进行layout重新布局

#完成了for循环的中的设置,回到obj层级对geo进行layout排列

hou.node("obj").layoutChildren() #对obj层级下的geo节点进行自动布局

02 使用用户自定义输入的文字来替换green

使用方法hou.ui.readInput():返回的是一个列表 元素0是数值,元素1才是用户输入的列表

修改最开始的text

text=hou.ui.readInput("please insert a letter") #这时候text不是一个字符,而是一个数组,比如[0,"用户输入的单词"]

letters = list(text[1]) #这里需要取text列表中的第二个元素

获得教程的方法:

(0)

相关推荐