Houdini bake particle instance otl工具介紹



otl工具說明,場景測試文件請參考附件,節點的連接,命名以及參數的設置都需要程序相一致,否則工具無法運行。

詳情見附件:http://download.csdn.net/detail/baichuanxiaoove/9300277

所得效果是將粒子替代物bake成關鍵幀動畫的物體一個Instance物體對應一個Geometry物體

instance節點連接參數設置:

VOP SOP節點創建orient屬性:

Python Module代碼

from time import *

def bakeInstance():
        tstart = time()
        hou_node = hou.pwd()
        hou_geo = hou_node.geometry()
        hou.setFrame(int(hou_node.evalParm('f2')))
        points = hou_geo.points()

        point_loc = hou.node('/obj')
        group_node = point_loc.createNode('subnet','group')
        rbd_node = hou_node.node('..')
        group_node.setPosition(rbd_node.position())
        group_node.move([0,-1])
        group_node.setSelected(True)
        rbd_node.setSelected(False)

        for point in points:
                frags_node = group_node.createNode('geo','due'+str(point.number()))
                a_node = hou.node('/obj/group/due'+str(point.number()))
                b_node = a_node.children()
                b_node[0].destroy()

                c_node = a_node.createNode('object_merge','obj'+str(point.number()))
                obj_num = point.attribValue('instancepath')[-1]
                obj_path = c_node.parm('objpath1')
                obj_path.set('/obj/'+rbd_node.name()+'/Obj'+obj_num)

        for x in range(int(hou_node.evalParm('f1')), int(hou_node.evalParm('f2'))+1, 1):
                hou.setFrame(x)
                print str(x) + ' frame' + ',please wait...'
                points = hou_geo.points()

                for point in points:
                        pos = point.position()
                        orient_num = point.attribValue('orient')
                        frags_selet_node = hou.node('/obj/group/due'+str(point.number()))
                        orient_qua = hou.Quaternion(orient_num).normalized()
                        matrix3 = orient_qua.extractRotationMatrix3()
                        rot = matrix3.extractRotates()

                        point_tx = frags_selet_node.parm('tx')
                        point_keyframe = hou.Keyframe()
                        point_keyframe.setValue(pos[0])
                        point_tx.setKeyframe(point_keyframe)

                        point_ty = frags_selet_node.parm('ty')
                        point_keyframe = hou.Keyframe()
                        point_keyframe.setValue(pos[1])
                        point_ty.setKeyframe(point_keyframe)

                        point_tz = frags_selet_node.parm('tz')
                        point_keyframe = hou.Keyframe()
                        point_keyframe.setValue(pos[2])
                        point_tz.setKeyframe(point_keyframe)

                        point_rx = frags_selet_node.parm('rx')
                        point_keyframe = hou.Keyframe()
                        point_keyframe.setValue(rot[0])
                        point_rx.setKeyframe(point_keyframe)

                        point_ry = frags_selet_node.parm('ry')
                        point_keyframe = hou.Keyframe()
                        point_keyframe.setValue(rot[1])
                        point_ry.setKeyframe(point_keyframe)

                        point_rz = frags_selet_node.parm('rz')
                        point_keyframe = hou.Keyframe()
                        point_keyframe.setValue(rot[2])
                        point_rz.setKeyframe(point_keyframe)

        print 'Done'
        tend = time()
        t = tend - tstart
        print 'time use ' + str(int(t)) +" s"



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章