Hi All
Just learned a cool trick from SESI to solve a problem that has always bugged me.
If you have a group sop that has an existing selection and want to edit interactively, I have always struggled with this as pressing enter in the viewport, editing my selection and then pressing enter again will create another groupsop!?!?! Now you have to copy the selection into the old sop. Rubbish and inefficient!!
The solution is as follows:
select the group sop and press enter in the viewport, now press ` (the tilda key to the left of the number 1), your group sop will disconect and show an error but once you reselect and press enter again in the viewport, your selection will update the original sop!
Is that common knowledge? If not I hope it is useful!
Found 65 posts.
Search results Show results as topic list.
Technical Discussion » Intereractive reselection for a Group Sop - cool trick!
- megasets
- 85 posts
- Offline
Technical Discussion » Read Maya geo cache without FBX
- megasets
- 85 posts
- Offline
Hi there
Bit late in the day but thought I'd add to this thread
one solution I have been using is to use the KP point cache tools (supported by maya and xsi) to write pc2 files
There is a pc2 reader for houdini available on the forums
Of course this is all been supeceded by alembic these days
Bit late in the day but thought I'd add to this thread
one solution I have been using is to use the KP point cache tools (supported by maya and xsi) to write pc2 files
There is a pc2 reader for houdini available on the forums
Of course this is all been supeceded by alembic these days
Technical Discussion » Open CL Settings
- megasets
- 85 posts
- Offline
omg! This can't be right?:
400^3 at 750 ms per frame!
Intel I7 920 @2.67GHz 2.67GHZ
9GB Ram
64bit
Windows 7 Pro
Geforce GTX 680 4GB
This is crazy fast
400^3 at 750 ms per frame!
Intel I7 920 @2.67GHz 2.67GHZ
9GB Ram
64bit
Windows 7 Pro
Geforce GTX 680 4GB
This is crazy fast
Technical Discussion » Wire solver
- megasets
- 85 posts
- Offline
I had similar issues with the wire solver and in the end had to set the collision handling on the wire solver to global geometric. You will need to rebalance your
material settings. This is the case when using self collisions anyway
Also I have been told by sesi to play with the solver tolerance on the solver though there is a massive hit to simtimes as the accuracy increases
hope that helps!
material settings. This is the case when using self collisions anyway
Also I have been told by sesi to play with the solver tolerance on the solver though there is a massive hit to simtimes as the accuracy increases
hope that helps!
Technical Discussion » integration and differentation in vops
- megasets
- 85 posts
- Offline
Hi all
I am looking to implement a few basic mechanics problems in vops as a learning exercise ( which of course I will share ). Basic springs, normal modes, torques ect
I need a method of numerical differentiation and integration in respect to time which I cannot find as vex functions.
I was thinking of maybe using a taylor polynomial though I'm not sure what order will give a suitable accuracy. I have also started reading about verlet integration as this seems like a popular solution
Does anyone have any experience with this and could give me a wee steer?
EDIT:
I should add that I will probably start off with a solver sop to give me the time increments rather than DOPS atm
many thanks!
Sam Swift-Glasman
I am looking to implement a few basic mechanics problems in vops as a learning exercise ( which of course I will share ). Basic springs, normal modes, torques ect
I need a method of numerical differentiation and integration in respect to time which I cannot find as vex functions.
I was thinking of maybe using a taylor polynomial though I'm not sure what order will give a suitable accuracy. I have also started reading about verlet integration as this seems like a popular solution
Does anyone have any experience with this and could give me a wee steer?
EDIT:
I should add that I will probably start off with a solver sop to give me the time increments rather than DOPS atm
many thanks!
Sam Swift-Glasman
Houdini Lounge » Otl scan Path
- megasets
- 85 posts
- Offline
mattv
soooooooooo, 10 seconds after I posted my message I found a thread that solved my problem.
Heres the solution if anyone looks for this in the future, found from this thread: http://www.sidefx.com/index.php?option=com_forum&Itemid=172&page=viewtopic&t=11496&sid=5791fadd3eb15a67cee447196260a0ad [sidefx.com]
I had to add a reference to the default OTLs in order to avoid the error, so
HOUDINI_OTLSCAN_PATH = “$HSITE/otls;&”
becomes
HOUDINI_OTLSCAN_PATH = “$HSITE/otls;&;$HFS/houdini/otls”
If you want to use HSITE just set it as a variable:
HSITE = “CProjects”
there is no need to append $HSITE/otls to the “HOUDINI_OTLSCAN_PATH” as it will get picked up anyway. If you set “HSITE” and leave “HOUDINI_OTLSCAN_PATH” unset you will pick up:
$HSITE/otls
$HFS/otls
$HOME/otls
for free
also note that Houdini on windows expects forward linux style paths. I have had issues passing windows style paths to Houdini.
hope that helps
Houdini Lounge » Otl scan Path
- megasets
- 85 posts
- Offline
There is another option:
Instead of setting config variables explicitly such as HOUDINI_OTLSCAN_PATH ect you can just append onto the HOUDINI_PATH
You just need to conform to the Houdini folder structure as it works in $HFS and $HOME
ie
your directory can contain any of the following folders
otls
scripts
config/Icons
dso
toolbar
soho
you append the directory path to HOUDINI_PATH and make sure you also append the default paths shortcut “&”. Separate different paths with “:” on linux and “;” on windows.
for example in the houdini env:
on windows:
'HOUDINI_PATH' = “”CProjects;&"
on linux:
'HOUDINI_PATH' = “”CProjects“:&”
if you have a python wrapper for Houdini instead of using Houdini Env (my preference), you can let the os module deal with the path joining and separators ect, this way the code is not specific to any platform:
import os
os.environ = os.pathsep.join("")
the code above will work in both linux and windows
CAVEAT:
If you use “HOUDINI_PATH, do not set any other config location variables such as ”HOUDINI_OTLSCAN_PATH“ or ”HOUDINI_TOOLBAR_PATH".
Instead of setting config variables explicitly such as HOUDINI_OTLSCAN_PATH ect you can just append onto the HOUDINI_PATH
You just need to conform to the Houdini folder structure as it works in $HFS and $HOME
ie
your directory can contain any of the following folders
otls
scripts
config/Icons
dso
toolbar
soho
you append the directory path to HOUDINI_PATH and make sure you also append the default paths shortcut “&”. Separate different paths with “:” on linux and “;” on windows.
for example in the houdini env:
on windows:
'HOUDINI_PATH' = “”CProjects;&"
on linux:
'HOUDINI_PATH' = “”CProjects“:&”
if you have a python wrapper for Houdini instead of using Houdini Env (my preference), you can let the os module deal with the path joining and separators ect, this way the code is not specific to any platform:
import os
os.environ = os.pathsep.join("")
the code above will work in both linux and windows
CAVEAT:
If you use “HOUDINI_PATH, do not set any other config location variables such as ”HOUDINI_OTLSCAN_PATH“ or ”HOUDINI_TOOLBAR_PATH".
Edited by - Jan. 10, 2014 11:15:49
Technical Discussion » Whitewater, foam shading and rendering
- megasets
- 85 posts
- Offline
Skybar
That looks great Jason! Any tip on how to add normals to the whitewater particles?
A good trick here is to use polygon to vdb to convert your point cloud to a sparse volume.
In vex vops you can then use the point positions of your original point cloud to sample the gradient of this volume and obtain faux-normals.
Technical Discussion » launch parameters window via hython or hscript
- megasets
- 85 posts
- Offline
Never mind - found it! From the docs:
http://www.sidefx.com/docs/houdini12.5/hom/hou/Desktop [sidefx.com]
def openParmPane(node):
‘'’Open a floating parameter pane for a particular node.'''
pane_tab = hou.ui.curDesktop().createFloatingPaneTab(hou.paneTabType.Parm)
pane_tab.setCurrentNode(node)
pane_tab.setPin(True)
return pane_tab
http://www.sidefx.com/docs/houdini12.5/hom/hou/Desktop [sidefx.com]
def openParmPane(node):
‘'’Open a floating parameter pane for a particular node.'''
pane_tab = hou.ui.curDesktop().createFloatingPaneTab(hou.paneTabType.Parm)
pane_tab.setCurrentNode(node)
pane_tab.setPin(True)
return pane_tab
Technical Discussion » launch parameters window via hython or hscript
- megasets
- 85 posts
- Offline
Hi there
I am trying to launch a parameters window for a given node
Essentially I want to call whatever script runs when I right click on a node and select Parameters…
Can’t locate those scripts
Many thanks!
I am trying to launch a parameters window for a given node
Essentially I want to call whatever script runs when I right click on a node and select Parameters…
Can’t locate those scripts
Many thanks!
Technical Discussion » passing arguments to pyqt_thread_helper.queueCommand
- megasets
- 85 posts
- Offline
Hi All
I am running the example file from:
http://www.sidefx.co…ook/pyqt/part2/ [sidefx.co]
I am hacking it around to suit my needs but I have run into a problem where I need to pass through args when I run:
pyqt_thread_helper.queueCommand(myguicommand)
I want to pass a string through but am finding this a bit mystifying
any body had any experience with this?
many thanks!
I am running the example file from:
http://www.sidefx.co…ook/pyqt/part2/ [sidefx.co]
I am hacking it around to suit my needs but I have run into a problem where I need to pass through args when I run:
pyqt_thread_helper.queueCommand(myguicommand)
I want to pass a string through but am finding this a bit mystifying
any body had any experience with this?
many thanks!
Technical Discussion » hou.InteruptableOperation outside of a with statement?
- megasets
- 85 posts
- Offline
answer from SESI:
Hello Sam,
It sounds like you should set the long operation name/message in hou.InterruptableOperation in order to update the progress bar dialog with message updates.
For example:
# Create an interruptable operation.
operation = hou.InterruptableOperation(“Doing Work”, long_operation_name=“Starting Tasks”, open_interrupt_dialog=True)
# Start the operation. This will pop-up the progress bar dialog after a second or two.
operation.__enter__()
# Execute tasks. Periodically update the progress percentage and message in the progress bar.
num_tasks = 10
for i in range(num_tasks):
# Do task work here. For this example, just sleep for a second.
time.sleep(1)
percent = float(i) / float(num_tasks)
operation.updateLongProgress(percent, “Finished task %i” % (i + 1))
# Stop the operation. This closes the progress bar dialog.
operation.__exit__(None, None, None)
I hope this helps.
Hello Sam,
It sounds like you should set the long operation name/message in hou.InterruptableOperation in order to update the progress bar dialog with message updates.
For example:
# Create an interruptable operation.
operation = hou.InterruptableOperation(“Doing Work”, long_operation_name=“Starting Tasks”, open_interrupt_dialog=True)
# Start the operation. This will pop-up the progress bar dialog after a second or two.
operation.__enter__()
# Execute tasks. Periodically update the progress percentage and message in the progress bar.
num_tasks = 10
for i in range(num_tasks):
# Do task work here. For this example, just sleep for a second.
time.sleep(1)
percent = float(i) / float(num_tasks)
operation.updateLongProgress(percent, “Finished task %i” % (i + 1))
# Stop the operation. This closes the progress bar dialog.
operation.__exit__(None, None, None)
I hope this helps.
Technical Discussion » hou.InteruptableOperation outside of a with statement?
- megasets
- 85 posts
- Offline
Hi there
I am trying to create a generic progress bar so have been looking at hou.InteruptableOperation
My conundrum is that due to in-house generic pipeline tools that implement this for all packages (including maya and softimage), I need to separate out the progress bar into 3 stages:
Creation
Update
Exit
The docs state not to call this class unless I am within a ‘with’ statement. This makes the separation of these stages very difficult
I am attempting to call the __enter__ and __exit__ methods directly but am not having much luck
Could someone give me a pointer about how to achieve this?
Many thanks!
I am trying to create a generic progress bar so have been looking at hou.InteruptableOperation
My conundrum is that due to in-house generic pipeline tools that implement this for all packages (including maya and softimage), I need to separate out the progress bar into 3 stages:
Creation
Update
Exit
The docs state not to call this class unless I am within a ‘with’ statement. This makes the separation of these stages very difficult
I am attempting to call the __enter__ and __exit__ methods directly but am not having much luck
Could someone give me a pointer about how to achieve this?
Many thanks!
Houdini Lounge » Houdini 13 Wishlist.
- megasets
- 85 posts
- Offline
1) It would be fantastic if there was a central file manager for relinking textures and caches in a hip. I know that C4D for example has this as a feature - could be VERY handy! Simple enough to implement as a tool using python but would be awesome if it was built in
2) Better GUI authoring tools please! This is really painful if you don't have PYQT.
3) the ability to autoreload and dynamicaly build shelves at startup
4) a decent preset manager for nodes so artists can share node presets
5) more shader examples in the gallery please
6) super fast realtime renderer in mantra to rival IRAY please!
7) OOP in vex?
8) +1 COPS! I love them them but refresh issues drive me insane - for example what is going on with the switch COP!?!
cheers!
2) Better GUI authoring tools please! This is really painful if you don't have PYQT.
3) the ability to autoreload and dynamicaly build shelves at startup
4) a decent preset manager for nodes so artists can share node presets
5) more shader examples in the gallery please
6) super fast realtime renderer in mantra to rival IRAY please!
7) OOP in vex?
8) +1 COPS! I love them them but refresh issues drive me insane - for example what is going on with the switch COP!?!
cheers!
Technical Discussion » shutter time override
- megasets
- 85 posts
- Offline
Hi All
I have two rops rendering the same camera
I want to increase the shutter time of only one render (as an effect)
however when I add the shutter time override to each Rop the camera value seems to still have precedence
I resolved this by duplicating the camera though this seems rather inflexible. How do I get the shutter time override on the rop to override the camera?
any help would be appreciated
I have two rops rendering the same camera
I want to increase the shutter time of only one render (as an effect)
however when I add the shutter time override to each Rop the camera value seems to still have precedence
I resolved this by duplicating the camera though this seems rather inflexible. How do I get the shutter time override on the rop to override the camera?
any help would be appreciated
Technical Discussion » instance geo with materials assigned
- megasets
- 85 posts
- Offline
greetings all,
I am instancing some geo which has shop_material_path primitive
attributes baked into it.
How do i get Mantra to read these from the
geo and ignore the fact that the instance points do not have this
attribute?
In other cases we have used ids to drive a switch in a massive
multi-shader but this is very laborious to manage
any ideas would be greatly appreciated!
please find attached an example hip
cheers
I am instancing some geo which has shop_material_path primitive
attributes baked into it.
How do i get Mantra to read these from the
geo and ignore the fact that the instance points do not have this
attribute?
In other cases we have used ids to drive a switch in a massive
multi-shader but this is very laborious to manage
any ideas would be greatly appreciated!
please find attached an example hip
cheers
Technical Discussion » RBD - gluestrength triggering issues
- megasets
- 85 posts
- Offline
Hi there
I am simulating destruction using the rbd solver
I am using a color attribute to drive glue strength
in order to trigger the impulses to break the glue, i am using a lookup in an expression but am running into problems. I am a bit baffled, i am creating a python expression inside on the glue strength attribute of the rbdstate node
I want to return the current object name in the dop, when i use hou.lvar(“OBJNAME”) it returns a float value
in the docs it says that that variable should return a string
I need this name as a string so i can look up color values in a sopgroup with the same name
this is the python expression that I am using:
node = hou.node('/obj/mysopPath')
groupName = hou.lvar('OBJNAME')
geo = node.geometry()
groupies = geo.primGroups()
r = None
for g in groupies:
if groupName == g.name():
p = g.prims()
r = p.attribValue('Cd')
if r == 1.0:
return 0
else:
return -1
I printed groupName and got a float value?
any help would be muchly appreciated!
I am simulating destruction using the rbd solver
I am using a color attribute to drive glue strength
in order to trigger the impulses to break the glue, i am using a lookup in an expression but am running into problems. I am a bit baffled, i am creating a python expression inside on the glue strength attribute of the rbdstate node
I want to return the current object name in the dop, when i use hou.lvar(“OBJNAME”) it returns a float value
in the docs it says that that variable should return a string
I need this name as a string so i can look up color values in a sopgroup with the same name
this is the python expression that I am using:
node = hou.node('/obj/mysopPath')
groupName = hou.lvar('OBJNAME')
geo = node.geometry()
groupies = geo.primGroups()
r = None
for g in groupies:
if groupName == g.name():
p = g.prims()
r = p.attribValue('Cd')
if r == 1.0:
return 0
else:
return -1
I printed groupName and got a float value?
any help would be muchly appreciated!
Technical Discussion » multiparm callback for OTL? HOM?
- megasets
- 85 posts
- Offline
I had a similar issue
I did not want the artists to need to remember to press an update button so:
I created an integer with the callback attatched
i put a channel expression in the mutiparm block referencing my int parm
i then hid the multiparm
hey presto - the great thing is you still see all of the parms in the multiparm block!
hope that helps
I did not want the artists to need to remember to press an update button so:
I created an integer with the callback attatched
i put a channel expression in the mutiparm block referencing my int parm
i then hid the multiparm
hey presto - the great thing is you still see all of the parms in the multiparm block!
hope that helps
Technical Discussion » subframe caches into a file node - help!!!!!
- megasets
- 85 posts
- Offline
thank you jason, this is what i have settled on thanks to yourself and jenny at sesi support. it supports two digits of decimal places
cache.`pythonexprs(“'%04d.%02d' % (int(hou.frame()),int(hou.frame()*100)%100)”)`.obj
cache.`pythonexprs(“'%04d.%02d' % (int(hou.frame()),int(hou.frame()*100)%100)”)`.obj
Technical Discussion » subframe caches into a file node - help!!!!!
- megasets
- 85 posts
- Offline
I have solved this issue
this is the crazy expression that i came up with:
myGeoCache.`padzero(4,floor($FF))`.`ifs(strmatch(“*.*”,$FF),substr($FF, 4, 4),“0”)`.obj
my main issue was that when using non-integer frames in houdini, frame 101.0 is called 101 with no decimals, i had to use the ifs expression!
this is the crazy expression that i came up with:
myGeoCache.`padzero(4,floor($FF))`.`ifs(strmatch(“*.*”,$FF),substr($FF, 4, 4),“0”)`.obj
my main issue was that when using non-integer frames in houdini, frame 101.0 is called 101 with no decimals, i had to use the ifs expression!
-
- Quick Links