Found 1555 posts.
Search results Show results as topic list.
Houdini Learning Materials » Houdini Shorts
- animatrix_
- 4520 posts
- Offline
Technical Discussion » [H20] Support COP_Wrangle, COP_OpenCL
- animatrix_
- 4520 posts
- Offline
SideFX might add a new Wrangle COP to COPs context in the future. I made one before but it's bounded by the limitations of the COP architecture:
Nowadays it's much better to use volumes for COPs particularly if you want to use OpenCL. You could represent a sequence of images using a stack of 2d volumes in the form of a 3d volume for example.
Houdini 20 even has image visualization for volumes so that might foreshadow a new COP toolset in SOPs.
Nowadays it's much better to use volumes for COPs particularly if you want to use OpenCL. You could represent a sequence of images using a stack of 2d volumes in the form of a 3d volume for example.
Houdini 20 even has image visualization for volumes so that might foreshadow a new COP toolset in SOPs.
Technical Discussion » How to apply SOP non-uniformly using point attribute?
- animatrix_
- 4520 posts
- Offline
Hi,
You can't break the execution of the Sweep SOP like that using per point expressions. You can just set pscale to be randomized instead:
You can't break the execution of the Sweep SOP like that using per point expressions. You can just set pscale to be randomized instead:
Technical Discussion » VEX pathfinding problem
- animatrix_
- 4520 posts
- Offline
I think it's because the result of your locking mechanism won't be available to other points in the same for loop network iteration.
Houdini Learning Materials » Houdini Shorts
- animatrix_
- 4520 posts
- Offline
Houdini Indie and Apprentice » Transfer Attributes with Normal Direction
- animatrix_
- 4520 posts
- Offline
Hi,
You can create a mask using the dot product and then use that mask after attribute transfer to tweak the result:
Mask by Normal (Point Wrangle):
Apply Mask (Point Wrangle):
near pos (Point Wrangle):
You can create a mask using the dot product and then use that mask after attribute transfer to tweak the result:
Mask by Normal (Point Wrangle):
vector n = normalize ( @P - v@pos ); float d = dot ( n, normalize ( v@dir ) ); @mask = fit ( d, ch("min"), ch("max"), 0, 1 );
Apply Mask (Point Wrangle):
@near *= @mask;
near pos (Point Wrangle):
@near = 1; v@pos = @P;
Houdini Indie and Apprentice » Recursive Growth Salt Crystals
- animatrix_
- 4520 posts
- Offline
Houdini Lounge » Shortcut to show document of the selected node?
- animatrix_
- 4520 posts
- Offline
Hi,
You can assign this code to a shelf by drag and drop and then assign a global hotkey to that shelf tool:
You can assign this code to a shelf by drag and drop and then assign a global hotkey to that shelf tool:
selNodes = hou.selectedNodes() if selNodes: hou.ui.displayNodeHelp(selNodes[-1].type())
Houdini Lounge » H20 - Is it possible to use GPU to speed up FLIPS or sp solv
- animatrix_
- 4520 posts
- Offline
LukeP
Is it possible in H20 to use GPU to speed up FLIP sim (in SOPS) or sparse pyro solver?
I've noticed my RTX 4090 is not being used at all during those heavy sims.
Been looking for that 'use OpenCL' checkbox...
Thanks
For FLIP Solver SOP, the OpenCL toggle is not exposed but in DOPs you can turn it on which will solve both viscosity and pressure on the GPU.
For Pyro, you can use the Minimal OpenCL sim type as sekow mentioned.
3rd Party » Supercharged H20 extension (TouchDesigner Style)
- animatrix_
- 4520 posts
- Offline
a2jixrxau
I have a problem using Houdini 20.0
When I right-click, it looks like this
Traceback (most recent call last):
File "C:\PROGRA~1/SIDEEF~1/HOUDIN~1.506/houdini/python3.10libs\nodegraph.py", line 170, in handleEventCoroutine
event_handler = event_handler.handleEvent(uievent,
File "C:\Users/User/Documents/houdini20.0/animatrix/hotkey system/python3.10libs\nodegraphhooks.py", line 229, in handleEvent
uievent.editor.openTabMenu(key = utils.getDefaultTabMenuKey())
TypeError: getDefaultTabMenuKey() missing 1 required positional argument: 'editor'
Hi, that's strange. I am unable to reproduce it. Which context and how are you right clicking i.e. is it on a node, etc? Recording a video would help.
Houdini Lounge » H20 - hidden gems - post them here
- animatrix_
- 4520 posts
- Offline
CYTEcncverkstadHey, cncverkstad could you elaborate on the "New Primitive Image Display Mode"? I couldn't find anything about it.
New Primitive Image Display Mode combination with Smoke SDF or Constant -Polyfill and PolyHinge.
Thanks
CYTE
Houdini Lounge » Need community help with a small test.
- animatrix_
- 4520 posts
- Offline
Hi,
You can implement edge loop selection with this behaviour using VEX (Detail Wrangle):
You can implement edge loop selection with this behaviour using VEX (Detail Wrangle):
function int [ ] GetPrimsFromEdge ( int input; int pt0; int pt1 ) { int prims [ ]; int hedge = pointedge ( input, pt0, pt1 ); if ( hedge != -1 ) { int count = hedge_equivcount ( input, hedge ); for ( int i = 0; i < count; ++i ) { int pr = hedge_prim ( input, hedge ); if ( pr != -1 ) { append ( prims, pr ); hedge = hedge_nextequiv ( input, hedge ); } } } return prims; } int GetNextPoint ( int input; int edgept0; int edgept1; int currentpt ) { int ptneighbours [ ] = neighbours ( input, currentpt ); int primpts [ ]; int prims [ ] = GetPrimsFromEdge ( input, edgept0, edgept1 ); for ( int i = 0; i < len ( prims ); ++i ) { int count = primvertexcount ( input, prims [ i ] ); for ( int f = 0; f < count; ++f ) { int vertIndex = vertexindex ( input, prims [ i ], f ); int pointIndex = vertexpoint ( input, vertIndex ); append ( primpts, pointIndex ); } } int uniquepts [ ]; foreach ( int pt; ptneighbours ) { if ( find ( primpts, pt ) < 0 ) append ( uniquepts, pt ); } if ( len ( uniquepts ) == 1 ) return uniquepts [ 0 ]; return -1; } void GroupEdgeLoops ( int input; string edgegroup, groupname ) { if ( edgegroup == "" ) { setedgegroup ( geoself ( ), groupname, 0, 0, 0 ); return; } int loopedgepts [ ] = { }; int edges [ ] = expandedgegroup ( input, edgegroup ); if ( len ( edges ) == 0 ) { setedgegroup ( geoself ( ), groupname, 0, 0, 0 ); return; } int count = int ( 0.5 * len ( edges ) ); for ( int i = 0; i < count; ++i ) { int edgepts [ ] = sort ( array ( edges [ 2 * i ], edges [ 1 + 2 * i ] ) ); int index0 = find ( loopedgepts, edgepts [ 0 ] ); int index1 = find ( loopedgepts, edgepts [ 1 ] ); int edgefound = index0 % 2 == 0 && index1 % 2 == 1 && index1 == 1 + index0; if ( !edgefound ) { for ( int c = 0; c < 2; ++c ) { int points [ ]; int pt0 = edgepts [ c ]; int pt1 = edgepts [ 1 - c ]; int currentpt = pt0; int lastPoint = pt0; append ( points, currentpt ); int nextPoint = GetNextPoint ( input, pt0, pt1, currentpt ); while ( nextPoint != -1 && nextPoint != lastPoint ) { pt0 = currentpt; pt1 = nextPoint; currentpt = pt1; append ( points, currentpt ); nextPoint = GetNextPoint ( input, pt0, pt1, currentpt ); } int ptcount = len ( points ) - 1; for ( int f = 0; f < ptcount; ++f ) setedgegroup ( geoself ( ), groupname, points [ f ], points [ 1 + f ], 1 ); } setedgegroup ( geoself ( ), groupname, edgepts [ 0 ], edgepts [ 1 ], 1 ); } } } GroupEdgeLoops ( 0, chs("group"), chs("vex_selectiongroup") );
Houdini Indie and Apprentice » Open CL Snippets (search for examples)
- animatrix_
- 4520 posts
- Offline
Houdini Learning Materials » Pragmatic VEX: Volume 1 [4K] [H20]
- animatrix_
- 4520 posts
- Offline
Pragmatic VEX: Volume 1 aligns with the evolution of Houdini 20. We've integrated the new applicable features and VEX functions into our course, ensuring you learn the most efficient VEX production techniques, so you can stay ahead in the rapidly advancing field of visual effects.
Technical Discussion » Manipulating VDBs in OpenCL SOP Node?
- animatrix_
- 4520 posts
- Offline
In Houdini 20, OpenCL SOP and Gas OpenCL DOP can write to VDBs;
https://www.sidefx.com/docs/houdini/news/20/vex.html [www.sidefx.com]
https://www.sidefx.com/docs/houdini/news/20/vex.html [www.sidefx.com]
Technical Discussion » iterating over / writing back to vdb's with the openCl sop
- animatrix_
- 4520 posts
- Offline
In Houdini 20, OpenCL SOP and Gas OpenCL DOP can write to VDBs;
https://www.sidefx.com/docs/houdini/news/20/vex.html [www.sidefx.com]
https://www.sidefx.com/docs/houdini/news/20/vex.html [www.sidefx.com]
Houdini Lounge » H20 - hidden gems - post them here
- animatrix_
- 4520 posts
- Offline
eikonoklastes
As a Dvorak layout user, the new keymapping script ability is massive for me. It took me about a minute to define my Dvorak layout in the text file, and Houdini now just works natively with that layout, without me having to even open the Hotkey Manager.
Beautiful stuff.
I sent an RFE for the core issue years ago, so glad to see it implemented in H20. It's quite massive for the people who are aware of this issue
Houdini Learning Materials » Houdini Shorts
- animatrix_
- 4520 posts
- Offline
3rd Party » Supercharged H20 extension (TouchDesigner Style)
- animatrix_
- 4520 posts
- Offline
Supercharged extension is updated to be fully compatible with Houdini 20. It also implements the latest changes to be more in line with the latest API, such as the new hotkey standard to use unmodified keys:
https://www.sidefx.com/docs/houdini/news/20/hotkeys.html [www.sidefx.com]
The new version is freely available to existing users. Enjoy
https://www.sidefx.com/docs/houdini/news/20/hotkeys.html [www.sidefx.com]
The new version is freely available to existing users. Enjoy
3rd Party » Supercharged H20 extension (TouchDesigner Style)
- animatrix_
- 4520 posts
- Offline
raumafu
I have found this function inside utility.ui and i'd like to use this function with a hotkey inside a wrangle but when i assign a hotkey to this function inside a hotkey editor, it just doesn't work. How can i use this? My workaround is that i click an empty space in the parameter window, press the hotkey then ctrl + v paste the number inside a wrangle. Is this the correct behavior?def pasteRandomNumber(digits=4, decimals=4): rnd = np.random.uniform(0, pow(10, digits), 1)[0].round(decimals=decimals) hou.ui.copyTextToClipboard(str(rnd)) key = QtGui.QKeyEvent(QtGui.QKeyEvent.KeyPress, QtGui.Qt.Key_V, QtGui.Qt.ControlModifier, "V") QtWidgets.QApplication.sendEvent(QtWidgets.QApplication.focusWidget(), key)
Normally it should just work that. Basically the code generates a random number, copies it into the clipboard and then invokes Ctrl+V. So it should paste this number wherever the caret is currently.
-
- Quick Links