There is a paper on how to reverse Catmull-Clark subdivision:
https://dspace5.zcu.cz/bitstream/11025/6630/1/Laquentin.pdf [dspace5.zcu.cz]
AFAIK there is no implementation of this in Houdini, so you will have to implement it yourself if you want this feature or send an RFE to SESI.
Found 1543 posts.
Search results Show results as topic list.
Houdini Lounge » Is un-subdivide possible in Houdini?
- animatrix_
- 4495 posts
- Offline
Technical Discussion » A problem with VEX
- animatrix_
- 4495 posts
- Offline
Hi,
addpoint returns interim point numbers. If you want to group them using their finalized point numbers, use the setpointgroup VEX function:
https://www.sidefx.com/docs/houdini/vex/functions/setpointgroup.html [www.sidefx.com]
addpoint returns interim point numbers. If you want to group them using their finalized point numbers, use the setpointgroup VEX function:
https://www.sidefx.com/docs/houdini/vex/functions/setpointgroup.html [www.sidefx.com]
Technical Discussion » Euler angles from two sets of N and up
- animatrix_
- 4495 posts
- Offline
Hi,
You can also use the cracktransform function:
https://www.sidefx.com/docs/houdini/vex/functions/cracktransform.html [www.sidefx.com]
You can also use the cracktransform function:
https://www.sidefx.com/docs/houdini/vex/functions/cracktransform.html [www.sidefx.com]
vector normal0 = normalize ( primuv ( 0, "N", @primnum, 0.5 ) ); vector normal1 = normalize ( primuv ( 1, "N", @primnum, 0.5 ) ); matrix M0 = maketransform ( normalize ( v@up ), normal0 ); matrix M1 = maketransform ( normalize ( v@opinput1_up ), normal1 ); matrix M2 = invert ( M0 ) * M1; vector angles = cracktransform ( 0, 0, 1, 0, M2 ); v@angles = angles;
Houdini Indie and Apprentice » Learning route
- animatrix_
- 4495 posts
- Offline
Applied Houdini is pretty good for all around FX. For specialized topics, you can pick and choose individually online as there is no single resource that's best at every area.
For VEX, I can recommend my own course Pragmatic VEX: Volume 1 [www.pragmatic-vfx.com]
For VEX, I can recommend my own course Pragmatic VEX: Volume 1 [www.pragmatic-vfx.com]
Houdini Learning Materials » Houdini Shorts
- animatrix_
- 4495 posts
- Offline
Houdini Lounge » Post your favourite Wrangle SOP presets
- animatrix_
- 4495 posts
- Offline
Reviving an old thread from the dead
Best kind of Wrangle preset is an empty one that (ab)uses the Run Over parameter with an expression:
Best kind of Wrangle preset is an empty one that (ab)uses the Run Over parameter with an expression:
if(ch("sourcegrouptype") == 4, 0, ch("sourcegrouptype"))
3rd Party » Supercharged H20 extension (TouchDesigner Style)
- animatrix_
- 4495 posts
- Offline
raumafuanimatrix_
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
Is it also updated on the patreon?
I didn't update that one yet. But should be soon that includes a few new changes.
Technical Discussion » Sort scatter points on moving curve
- animatrix_
- 4495 posts
- Offline
You can freeze your animation using Timeshift SOP and then copy the point numbers by storing them as an attribute before the Timeshift.
Houdini Learning Materials » Houdini Shorts
- animatrix_
- 4495 posts
- Offline
Technical Discussion » [H20] Support COP_Wrangle, COP_OpenCL
- animatrix_
- 4495 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_
- 4495 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_
- 4495 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_
- 4495 posts
- Offline
Houdini Indie and Apprentice » Transfer Attributes with Normal Direction
- animatrix_
- 4495 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_
- 4495 posts
- Offline
Houdini Lounge » Shortcut to show document of the selected node?
- animatrix_
- 4495 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_
- 4495 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_
- 4495 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_
- 4495 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_
- 4495 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") );
-
- Quick Links