Jump to content
LaidlawFX

Houdini 13 Wishlist

Recommended Posts

agreed, especially some of the SOPS can also be very slow to work with or require vast amounts of ram,

some optimization could totally revolutionize the way assets are built as some SOPS are just too slow to use practically on a big scale at the moment.

For example?

Share this post


Link to post
Share on other sites

For example?

I love Edward's posts. Short but hits the spot :)

Share this post


Link to post
Share on other sites

For example?

the Iso offset node, becouse it is only utilizing one core it is by far the worst bottleneck of my procedural terrain system.

if it were to become multithreaded it would help enormously. I know there are lots of operations which are hard to multithread, but this one would be key for me.

also a memory optimization (if possible storing big numbers of adjacent similar voxels as one block) would help a lot.

also the attribute transfer sop can be slow, not sure if anything can be done about that one but again it would help me a lot.

the smooth? (also a relax option would be great both in UV and 3D space)

the best thing would be if Houdini would be able to recognize which chains can be calculated simultaniously as they are independent from one another,

say a chain that processes creating houses, and another calculating the placement of those houses.

both need to be completed for the copy to work, but the inputs can be calculated at the same time.

and if one input is already complete and the other is still running that free core could theoretically start working on another task.

again full multithreading has been asked quite often here so me asking again is probably not really helping...

but mainly the Iso-Offset and the attribute transfer slow me down.

Edited by freaq

Share this post


Link to post
Share on other sites

Wouldn't a generic opencl sop node be something which could be easly done? The opencl sop would besically handel all the opencl setup and dispatching and kernels could be loaded in since they are compiled at runtime anyway. Maybe one point per workitem would do the trick.

It would be like vex just using the gpu instead of the cpu. But my guess is that it would be useless because you need to have alot of calculations per workitem so that it would give any speed ups.

Share this post


Link to post
Share on other sites

+1 for multithread the iso-offset node, is one of the key tool's in sop's to work with volumes.

Share this post


Link to post
Share on other sites

I'll beat my dead horse: POPs. They need to be faster, handle more particles. Some new pops would be nice, like sdf collisions, better fov avoidance pops etc.

Barring that though I think the DOPs workflow needs a good sorting out. Its a bit like a mildly autistic child at this point (Aspergers maybe?), where it has the most amazing potential but trying to get it to do what you want is an exercise in frustration.

That's it for me on this version, nothing major ;).

M

  • Like 2

Share this post


Link to post
Share on other sites

Wouldn't a generic opencl sop node be something which could be easly done? The opencl sop would besically handel all the opencl setup and dispatching and kernels could be loaded in since they are compiled at runtime anyway. Maybe one point per workitem would do the trick.

+1

It would be like vex just using the gpu instead of the cpu. But my guess is that it would be useless because you need to have alot of calculations per workitem so that it would give any speed ups.

Never underestimate the computational requirements of houdini users :), if that kind of functionality would become available it would get used to great extent. You can build entire particle systems, flocking systems, pathfinding, pointbased shading, etc,... with just points. 24 threads in my current system, replaced/augmented by 500 gpu cores sounds like a very attractive feature.

Share this post


Link to post
Share on other sites

I would like Houdini to have more "connections" with post production softwares. Posibility to export nulls and similar things to After Effects would be awesome. Thats just a small example.

Sorry to say that. Everyone Cry to have some additions or other stuff...No Package like Houdini got more connections to Software outside.!!! If you not able to create a good pipeline then think about and build some.

And btw... Houdini is a professional software, and After FX is not really.. Try to Use NUke,Fusion, or even Houdini Halo.

Sorry for my hard words but i cant hear it any more... bye

  • Like 2

Share this post


Link to post
Share on other sites

I would like Houdini to have more "connections" with post production softwares. Posibility to export nulls and similar things to After Effects would be awesome. Thats just a small example.

Here's a short python script that does that (I think). It's not done by me! Maybe someone could create a little ui for it to make it more usable.

# This script exports Houdini objects to Adobe After Effects 8.x
# A .jsx file will be created
# You can run it as a script in AE
# ver 0.01 Andrew V.K.

import toolutils
import hou 
import string
import math

viewer = toolutils.sceneViewer()
objsel = viewer.selectObjects("Select objects and press Enter",
        use_existing_selection=False,
        allow_multisel = True,
        quick_select=True,
        allowed_types = ('cam','hlight','null','geo','subnet'))

dir = hou.expandString('$HIP')
hip = hou.expandString('$HIPNAME')
dirpath = dir + '/' + hip + '.jsx'
fname = hou.ui.selectFile( start_directory = dirpath,
        file_type = hou.fileType.Any,
        collapse_sequences = False,
        multiple_select = False,
        image_chooser   = False)
if not fname.endswith('.jsx'):
	fname = fname + '.jsx'
fp = open(fname,'w')

fps = hou.fps()
duration = hou.expandString('$TLENGTH')
fend = string.atoi(hou.expandString('$FEND'))
fstart = string.atoi(hou.expandString('$FSTART'))
firstCam = 0
objCamera = []
objLight = []
objNull = []

for obj in objsel:
    name = obj.name()
    objType = obj.type().name()
    if objType == 'cam':
        resx = obj.parm('resx').eval()
        resy = obj.parm('resy').eval()
        aspect = obj.parm('aspect').eval()
        aperture = obj.parm('aperture').eval()
	focal = obj.parm('focal').eval()
	fovx = 2 * math.atan((aperture/2)/focal) 
	zoom = ((resx/2)/math.tan(fovx/2))
	if firstCam == 0:
        	objCamera.append('var myItemCollection = app.project.items;\n')
        	objCamera.append('var myComp = myItemCollection.addComp("'+name+'"'+','+`resx`+','+`resy`+','+`aspect`+','+duration+','+`fps`+');\n')
        	objCamera.append('var SceneScaleNull = myComp.layers.addNull();\n')
        	objCamera.append('SceneScaleNull.threeDLayer = true;\n')
        	objCamera.append('SceneScaleNull.name = "Scene Scale";\n')
        	objCamera.append('SceneScaleNull.property("Position").setValue([0.0,0.0,0.0]);\n')
        	objCamera.append('SceneScaleNull.enabled = false;\n')
		firstCam = 1
        objCamera.append('var '+name+' = myComp.layers.addCamera("'+name+'",[0,0]);\n')
        objCamera.append(name+'.autoOrient = AutoOrientType.NO_AUTO_ORIENT;\n')
        objCamera.append(name+'.property("Zoom").setValue('+`zoom`+');\n') 
        objCamera.append(name+'.parent = SceneScaleNull;\n')
    elif objType == 'hlight':
	lighttype = obj.parm('light_type').eval()
	intensity = obj.parm('light_intensity').eval()
	cr = obj.parm('light_colorr').eval()
	cg = obj.parm('light_colorg').eval()
	cb = obj.parm('light_colorb').eval()
	coneangle = obj.parm('coneangle').eval()
	shadow = obj.parm('shadow_type').eval()
        objLight.append('var '+name+' = myComp.layers.addLight("'+name+'",[0,0]);\n')
        objLight.append(name+'.autoOrient = AutoOrientType.NO_AUTO_ORIENT;\n')
        objLight.append(name+'.property("Intensity").setValue('+`intensity*100`+');\n') 
        objLight.append(name+'.property("Color").setValue(['+`cr`+','+`cg`+','+`cb`+']);\n') 
	if shadow > 0:
        	objLight.append(name+'.property("castsShadows").setValue(1);\n') 
	if lighttype == 1:
        	objLight.append(name+'.property("coneAngle").setValue('+`coneangle`+');\n') 
        objLight.append(name+'.parent = SceneScaleNull;\n')
    else:
        objNull.append('var '+name+' = myComp.layers.addNull()\n')
        objNull.append(name+'.threeDLayer = true;\n') 
        objNull.append(name+'.name = "'+name+'";\n')
        objNull.append(name+'.parent = SceneScaleNull;\n')

if firstCam == 0:
	fp.write('var myItemCollection = app.project.items;\n')
	fp.write('var myComp = myItemCollection.addComp("Camera1",640,480,1,%s,%s);\n'%(duration,fps))
	fp.write('var myCamera = myComp.layers.addCamera("Camera1",[0,0]);\n')
	fp.write('myCamera.autoOrient = AutoOrientType.NO_AUTO_ORIENT;\n')
	fp.write('var SceneScaleNull = myComp.layers.addNull();\n')
	fp.write('SceneScaleNull.threeDLayer = true;\n')
	fp.write('SceneScaleNull.name = "Scene Scale";\n')
	fp.write('SceneScaleNull.property("Position").setValue([0.0,0.0,0.0]);\n')
	fp.write('SceneScaleNull.enabled = false;\n')
	fp.write('myCamera.parent = SceneScaleNull;\n')
for x in objCamera:
   fp.write('%s'%x)
for x in objLight:
   fp.write('%s'%x)
for x in objNull:
   fp.write('%s'%x)

i = fstart
while i <= fend:
   	hou.setFrame(i)
   	ftime = hou.frameToTime(i)
   	for obj in objsel:
      	    name = obj.name()
      	    objType = obj.type().name()
            wtm = obj.worldTransform()
            objt = wtm.extractTranslates("srt")
	    tx = objt.__getitem__(0)
	    ty = objt.__getitem__(1) * -1
	    tz = objt.__getitem__(2) * -1
            objr = wtm.extractRotates("srt","zyx")
	    rx = objr.__getitem__(0)
	    ry = objr.__getitem__(1) * -1
	    rz = objr.__getitem__(2) * -1
	    fp.write('%s.property("X Rotation").setValueAtTime(%f,%f);\n'%(name,ftime,rx)) 
	    fp.write('%s.property("Y Rotation").setValueAtTime(%f,%f);\n'%(name,ftime,ry)) 
	    fp.write('%s.property("Z Rotation").setValueAtTime(%f,%f);\n'%(name,ftime,rz)) 
	    fp.write('%s.property("Position").setValueAtTime(%f,[%f,%f,%f]);\n'%(name,ftime,tx,ty,tz)) 
    	    if (objType == 'cam') and (len(obj.parm('focal').keyframes()) != 0):
        	resx = obj.parm('resx').eval()
        	resy = obj.parm('resy').eval()
        	aspect = obj.parm('aspect').eval()
        	aperture = obj.parm('aperture').eval()
		focal = obj.parm('focal').eval()
		fovx = 2 * math.atan((aperture/2)/focal) 
		zoom = ((resx/2)/math.tan(fovx/2))
		fp.write('%s.property("Zoom").setValueAtTime(%f,%f);\n'%(name,ftime,zoom)) 
    	    if objType == 'hlight':
		if len(obj.parm('light_intensity').keyframes()) != 0:
		   intensity = obj.parm('light_intensity').eval()
		   fp.write('%s.property("Intensity").setValueAtTime(%f,%f);\n'%(name,ftime,intensity*100)) 
		if len(obj.parm('coneangle').keyframes()) != 0:
		   coneangle = obj.parm('coneangle').eval()
		   fp.write('%s.property("coneAngle").setValueAtTime(%f,%f);\n'%(name,ftime,coneangle)) 
		kr = len(obj.parm('light_colorr').keyframes())
		kg = len(obj.parm('light_colorg').keyframes())
		kb = len(obj.parm('light_colorb').keyframes())
		if (kr != 0) or (kg != 0) or (kb != 0):
		   cr = obj.parm('light_colorr').eval()
		   cg = obj.parm('light_colorg').eval()
		   cb = obj.parm('light_colorb').eval()
	           fp.write('%s.property("Color").setValueAtTime(%f,[%f,%f,%f]);\n'%(name,ftime,cr,cg,cb)) 
    	    if (objType == 'geo') or (objType == 'null') or (objType == 'subnet'):
                objs = wtm.extractScales("srt")
	        sx = objs.__getitem__(0)
	        sy = objs.__getitem__(1)
	        sz = objs.__getitem__(2)
	        fp.write('%s.property("Scale").setValueAtTime(%f,[%f,%f,%f]);\n'%(name,ftime,sx,sy,sz)) 
	i = i + 1
fp.close()
hou.setFrame(fstart)

Share this post


Link to post
Share on other sites

Maybe someone could create a little ui for it to make it more usable.

At least for now You can:

RMB click on any shelf....

push "New Tool"

name it "HouToAE"

jump to script section

paste content of attached file

click "Accept"

Select camera, lights, nulls etc

push "HouToAE" button on the shelf

press enter

HouToAE.txt

Share this post


Link to post
Share on other sites

At least for now You can:

RMB click on any shelf....

push "New Tool"

name it "HouToAE"

jump to script section

paste content of attached file

click "Accept"

Select camera, lights, nulls etc

push "HouToAE" button on the shelf

press enter

That's cool. Thanks.

Share this post


Link to post
Share on other sites

More love to the sculpt SOP, speed with high poly counts.

Better snap behavior (like the one in Maya).

Capacity for the curve editor to select multiple keys with a hotkey (like ctrl+a in the viewport).

Share this post


Link to post
Share on other sites

Crowds ladies and gentlemen, crowds! Most people agree that Massive is closer to a nightmare than a dream, no other software package does proper crowds, there is an increasing need for crowds, Houdini's procedural system will suit it perfectly, bring on those NOP's (Neuro Operators).

H13 == Crowds

Edited by Nerox
  • Like 1

Share this post


Link to post
Share on other sites

Crowds ladies and gentlemen, crowds! Most people agree that Massive is closer to a nightmare than a dream, no other software package does proper crowds, there is an increasing need for crowds, Houdini's procedural system will suit it perfectly, bring on those NOP's (Neuro Operators).

H13 == Crowds

+1

It would be a dream to have in our disposal every tool massive has plus houdini's procedural workflow. I'd also love to render agents in mantra with real pathtrace GI instead of using 3Delight or Air.

  • Like 1

Share this post


Link to post
Share on other sites

What about a multi-physics / granular / sand solver? One that handles the breaking / clumping behavior that everybody loved in the la-kug!-oa demo's. To cover the simulation non-fluidly-fluids area between FLIP and bullet.

  • Like 2

Share this post


Link to post
Share on other sites

- More Multithreading, for example all vexfunctions that access primitives seem to be singlethreaded, for exampel intersect or primitiveAttribute

- More Vexfunctions, like nearestPrim in hom, neighborprims, neighborpoints for prims and vertices

- Complete Bulletintegration ( constraints, collision models)

- Access to the collision methods of bullet in POP

- instances of subnets should be possible with fast instances, and different instances per point should be visible in ogl

- better transparencies in ogl

- ogl comment should be pimped to a full slate tool

- render view should support overlays, too, not only backgrounds. best would be if the comptool uses a renderviewstyle update node. You reender and see it refine in the comp.

- pscale/width of delayed loads should modifieable by a multiplier during the ifdgeneration/rendering without rewriting teh bgeo

- more advanced layout possibilities for parameter pages, also more work on ramps, and a twodimensional slider would be cool

- PaintTool in Comp

- Group/Partition Nodes to inherit attributes.

If a object is in a group and the group has the material applied the object uses this material, same goes for other properties. Objects can be in many groups. if two groups override the same material the user has to keep care of. groups can be put in assets. think of it like kind of bundle in nodes. the other things are partitions. a object can be only in one partition, partitions live in outputdrivers, partitions override groups, if a object is in a partition in mantra node1 it renders in mantra node1 with this attributes. there is something like a background partition, it stores all objects, untill they are assigned to other partitions. so You can easily hide all objects form rendering, and new objects don't show up in other passes unless You want. many xsi users will recognize this system, and I do miss it when dealing with lots of passes and many objects. the takelist gets so messy so fast. the group/pass system is one of the best I can imaging, I owe the guy who inventedit so many beers. Would like to hear Your thoughts.

Martin

Edited by sanostol

Share this post


Link to post
Share on other sites

- instances of subnets should be possible with fast instances, and different instances per point should be visible in ogl

Point Instancing is supported in the GL3 viewport using GL instancing for the Instance Object. Does this cover it?

Share this post


Link to post
Share on other sites

Point Instancing is supported in the GL3 viewport using GL instancing for the Instance Object. Does this cover it?

Where I can find that property?

I can't find it in the edit parameter interface.

Thanks

Share this post


Link to post
Share on other sites

Where I can find that property?

I can't find it in the edit parameter interface.

Just add the Instance Render Properties to your instance object, enable Fast Point Instancing and reference your instance object. Then make sure you are using the new GL3.2 viewport in the preferences and in the Display Options > Geometry tab, Point Instancing is enabled. The viewport instances only show up in object view, not SOPs. Just pin your viewport at /obj when you work on the SOP instance attributes.

You can adjust what percentage of instances to visualize in the viewport.

If you have any of the standard instance attribues present (pscale, N/v, UP), they will be used.

Share this post


Link to post
Share on other sites

would love it if point instancing could use instancepoint() etc at the SOP level...

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×