Quickest way to read geometry data from a custom file
I'm trying to create a custom point cache format for Houdini and 3D Max. I have managed to send geometry data between both programs using a custom ascii and xml file. The file is just a list of vectors for every frame of animation. I am basically looping throught the vectors from the file and setting the objects position in Houdini and Max when ever the frame changes. The problem is that it if there is more than 500 vectors for every frame then it starts going too slow. I dont know if there is a more efficent way to read the vectors from the file.
I am currently using Python and Maxscript but am thinking of moving to C++ and using a custom binary file but dont think thats gonna make much difference.Below is the Python code from houdini using an xml file which seems to be a little quicker than the ascii file.
import os
import xml.etree.ElementTree
#XML file
if hou.frame() == 1:
filePath = os.path.abspath("F:\My Documents\Work\University\Year 3\Final Majour Project\Output_Test.xml")
xmlFile = xml.etree.ElementTree.parse(filePath)
# This code is called when instances of this SOP cook.
geo = hou.pwd().geometry()
# Add code to modify the contents of geo.
def moveObjectDef():
sceneTime = int(hou.frame()) #Current frame time
frameTag = xmlFile.findall('frame')
frameValue = frameTag[sceneTime].get('currentFrame')
frame = int(frameValue.rstrip('f'))
objectTag = xmlFile.findall('frame/object')
objectVertAmount = objectTag[frame].get('vertcount')
vertsTagList = list(objectTag[frame].getiterator('verts'))
for v in range(int(objectVertAmount)): #Looping through vert list
vert = eval(vertsTagList[v].text)
hou.node('/obj/geo1/newop1').geometry().points()[v].setPosition([vert[0],vert[2],vert[1]]) #Setting point poistion
moveObjectDef()
Xml file layout
<?xml version="1.0"?>
<root开发者_JAVA技巧>
<frame currentFrame="0f">
<object transform="(matrix3 [1,0,0] [0,1,0] [0,0,1] [-74.0923,-1.78125,0])" vertcount="482">
<verts>[-74.0923,-1.78125,25.9382]</verts>
<verts>[-74.0923,3.27904,25.4398]</verts>...
.............
c++ is extremely fast compared to maxscript.
If you ask me that is the only way to go.
I've written several exporters \ importers that works with ascii\xlm, both in maxscript and c++, and c++ plugin for this is the way to go if you want speed. Also writing to\ reading as binary makes it even faster.
精彩评论