【编程】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列表中的第二个元素
获得教程的方法: