How to get all NEW nodes in H19?

   3206   9   3
User Avatar
Member
626 posts
Joined: Nov. 2013
Offline
Hi,
Where can get all new nodes, new python APIs, and vex functions in H19?
The What's Mew document is too simple to get new features.
Edited by jerry7 - Oct. 29, 2021 07:00:17
User Avatar
Member
900 posts
Joined: Feb. 2016
Offline
this should be the list of new SOP nodes in hou19.
Note: the list doesn't include labs nodes or nodes that were just updated.

{'agentlayer::2.0', 'attribfill', 'volumecombine', 'volumenormalize', 'cacheif', 'volumerasterizelattice', 'mergepacked', 'packinject', 'invokegraph', 'attribcombine'}
User Avatar
Member
900 posts
Joined: Feb. 2016
Offline
and this should be the list of nodes that are now compilable in H19.
Notable additions: polyextrude and attribute transfer

agentlayer::2.0
attribcombine
attribfill
attribtransfer
cacheif
cap
convertvolume
crease
curvesect
edgecollapse
edgecusp
edgeflip
fractal
guidegroomcore
hole
invoke
kinefx::attribtransformcompute
kinefx::attribtransformextract
kinefx::characterblendshapesadd
kinefx::computemotionclipcreate
kinefx::computemotionclipretime
kinefx::computemotionmixer
kinefx::ikchains::2.0
kinefx::motionclipextractkeyposes
kinefx::motionclipmerge
kinefx::motionclipupdate
kinefx::skeletonblend::2.0
lopimport::2.0
material
mergepacked
neighborsearchcl
packededit
packinject
polyextrude::2.0
polypatch
polysplit::2.0
refine
relax
repack
tetlayer
trace
tribez
tridivide
tristrip
unpackusd::2.0
uvrelax
vdbextrapolate
vdbmerge
volumecombine
volumenormalize
volumerasterizelattice
volumetrail
wire
User Avatar
Member
233 posts
Joined: March 2009
Offline
Silly question: what does it mean for nodes to be compilable? Do they run faster?
User Avatar
Member
900 posts
Joined: Feb. 2016
Offline
Yes, faster because you can use them inside a compiled block, so that you can have multithreaded for-loops operations.
https://www.sidefx.com/docs/houdini/model/compile.html [www.sidefx.com]
Side note: compiling a for-loop doesn't automagically make your network faster. In fact in some cases it makes it slower! You should always do some profiling with the performance monitor, and see if it's worth using compiled blocks.


Another benefit of compilable nodes: you can call and chain them directly inside a python script
https://www.sidefx.com/docs/houdini/model/verbs.html [www.sidefx.com]
Edited by Andr - Oct. 29, 2021 09:14:18
User Avatar
Member
900 posts
Joined: Feb. 2016
Offline
Andr
this should be the list of new SOP nodes in hou19.
Note: the list doesn't include labs nodes or nodes that were just updated.

{'agentlayer::2.0', 'attribfill', 'volumecombine', 'volumenormalize', 'cacheif', 'volumerasterizelattice', 'mergepacked', 'packinject', 'invokegraph', 'attribcombine'}


disregard this, it's an incomplete list.

The problem is that many factory nodes don't show up as Internal when you ask for node.type().sourcePath()
This is how I was trying to split SideFX nodes from custom HDAs added by the user.
For example the new H19 Adjust Color node is not "signed" as Internal

Anyway this was my workflow to find new h19 nodes
import json
 
# Opening JSON file
f = open(r'C:\Users\andre\all_19nodes.txt' )
#file obtained with shell command
# hython $HFS/houdini/python3.7libs/opnode_sum.py > all_19nodes.txt

data = json.load(f)
nodes19 = data['Nodes']['Sop'].keys()

inodes19 = []  ## internal nodes

## internal nodes of h18.5 from opnode_sum.py script run in 18.5 session
inodes185 = ['add', 'agent', 'agentclip::2.0', 'agentlayer', 'agentunpack', 'align', 'attribcast', 'attribcomposite', 'attribcopy', 'attribcreate', 'attribcreate::2.0', 'attribfromparm', 'attribfromvolume', 'attribinterpolate', 'attribmirror', 'attribpromote', 'attribreorient', 'attribstringedit', 'attribswap', 'attribtransfer', 'attribute', 'attribvop', 'bakeode', 'bakevolume', 'basis', 'blast', 'blendshapes', 'blendshapes::2.0', 'block_begin', 'block_end', 'bonecapturebiharmonic', 'bonecapturelines', 'bonedeform', 'bonelink', 'boolean::2.0', 'bound', 'box', 'bulge', 'cache', 'cap', 'capture', 'captureattribpack', 'captureattribunpack', 'capturecorrect', 'capturelayerpaint', 'capturemirror', 'captureoverride', 'captureproximity', 'carve', 'channel', 'chopnet', 'circle', 'circlefromedges', 'clay', 'clip', 'clothcapture', 'clothdeform', 'cluster', 'comb', 'compile_begin', 'compile_end', 'connectivity', 'control', 'convert', 'convertmeta', 'convertvolume', 'convexdecomposition', 'cop2net', 'copy', 'copytopoints', 'copytopoints::2.0', 'copyxform', 'crease', 'creep', 'cregion', 'curve', 'curveclay', 'curvesect', 'delete', 'deltamush', 'detangle', 'dissolve', 'dissolve::2.0', 'divide', 'dopimport', 'dopimportrecords', 'dopnet', 'each', 'edgecollapse', 'edgecusp', 'edgedivide', 'edgeequalize', 'edgeflip', 'edgestraighten', 'edgetransport', 'edit', 'ends', 'enumerate', 'error', 'extractcentroid', 'extracttransform', 'extrude', 'facet', 'file', 'fillet', 'fit', 'font', 'force', 'fractal', 'fur', 'fuse', 'fuse::2.0', 'grid', 'groupcombine', 'groupcopy', 'groupcreate', 'groupdelete', 'groupexpand', 'groupfindpath', 'grouppaint', 'grouppromote', 'grouprange', 'grouprename', 'grouptransfer', 'hole', 'inflate', 'intersectionanalysis', 'intersectionstitch', 'invoke', 'iso', 'isooffset', 'join', 'knife', 'lattice', 'line', 'lopnet', 'lsystem', 'magnet', 'matchtopology', 'material', 'matnet', 'mdd', 'measure', 'measure::2.0', 'merge', 'metaball', 'metagroups', 'mirror', 'name', 'normal', 'null', 'object_merge', 'objnet', 'opencl', 'orientalongcurve', 'output', 'pack', 'packededit', 'packpoints', 'particlefluidsurface', 'partition', 'peak', 'pointcloudiso', 'pointgenerate', 'polybevel', 'polybevel::2.0', 'polybevel::3.0', 'polybridge', 'polycut', 'polydoctor', 'polyexpand2d', 'polyextrude', 'polyextrude::2.0', 'polyfill', 'polyframe', 'polyloft', 'polypatch', 'polyreduce', 'polyreduce::2.0', 'polysoup', 'polyspline', 'polysplit', 'polysplit::2.0', 'polywire', 'posespacedeform', 'primitive', 'profile', 'project', 'python', 'rails', 'ray', 'refine', 'relax', 'remesh', 'remesh::2.0', 'repack', 'resample', 'rest', 'reverse', 'revolve', 'rewire', 'rishader', 'rop_geometry', 'ropnet', 'sblend', 'sblend::2.0', 'scatter', 'scatter::2.0', 'script', 'sculpt', 'sesi_temporary::tetrahedralize::2.0', 'shapediff', 'shopnet', 'shrinkwrap', 'skin', 'smooth', 'smooth::2.0', 'softpeak', 'softxform', 'solidify', 'sopnet', 'sort', 'sphere', 'splitpoints', 'starburst', 'stash', 'stitch', 'stroke', 'subdivide', 'subnet', 'superquad', 'surfsect', 'sweep', 'sweep::2.0', 'switch', 'switchif', 'tetpartition', 'tetrahedralize', 'tetrasurface', 'texture', 'timeshift', 'topnet', 'topnetmgr', 'topobuild', 'topotransfer', 'torus', 'trace', 'trail', 'triangulate2d', 'triangulate2d::2.0', 'triangulate2d::3.0', 'tribez', 'tridivide', 'trim', 'tube', 'unix', 'unpack', 'unpackpoints', 'uvautoseam', 'uvbrush', 'uvedit', 'uvflatten', 'uvflatten::2.0', 'uvflatten::3.0', 'uvfuse', 'uvlayout', 'uvlayout::2.0', 'uvlayout::3.0', 'uvpelt', 'uvpelt::2.0', 'uvproject', 'uvtransform', 'uvtransform::2.0', 'uvunwrap', 'vdbfromparticlefluid', 'vertex', 'visibility', 'volume', 'volumeanalysis', 'volumeblur', 'volumebound', 'volumebreak', 'volumecompress', 'volumeconvolve3', 'volumefeather', 'volumefft', 'volumefromattrib', 'volumemerge', 'volumemix', 'volumeopticalflow', 'volumepatch', 'volumerasterize', 'volumerasterizeparticles', 'volumereduce', 'volumeresample', 'volumeresize', 'volumesdf', 'volumeslice', 'volumesplice', 'volumestamp', 'volumesurface', 'volumetrail', 'volumevisualization', 'volumevop', 'vopnet', 'voronoisplit', 'windingnumber', 'wire', 'wireblend', 'wirecapture', 'wiredeform', 'wiretransfershape', 'xform', 'xformaxis', 'xformbyattrib']

for n in nodes19:
    ntype = hou.nodeType(hou.sopNodeTypeCategory(), n)
    if ntype.sourcePath() == 'Internal':  ## check if it's internal node
        inodes19.append(n)
f.close()

new_h19_nodes = [k for k in inodes19 if k not in inodes185]
print(new_h19_nodes)
Edited by Andr - Oct. 30, 2021 04:07:04
User Avatar
Member
4526 posts
Joined: Feb. 2012
Offline
New VEX functions in Houdini 19

BSDFs

chiang
Returns a chiang BSDF.


Crowds

agentcollisionlayers
Returns the names of an agent primitive’s collision layers.

agentcurrentlayers
Returns the names of an agent primitive’s current layers.

setagentcollisionlayers
Sets the collision layers of an agent primitive.

setagentcurrentlayers
Sets the current display layers of an agent primitive.


Noise & Randomness

mx_cellnoise
MaterialX compatible cellnoise

mx_perlin
MaterialX compatible Perlin noise


Strings

decodeutf8
Decodes a UTF8 string into a series of codepoints.

encodeutf8
Encodes a UTF8 string from a series of codepoints.

replace
Replaces occurrences of a substring.

replace_match
Replaces the matched string pattern with another pattern.


USD

usd_flattenediprimvar
Reads the value of a flattened primvar directly from the USD primitive or from USD primitive’s ancestor.

usd_flattenediprimvarelement
Reads an element value of a flattened array primvar directly from the USD primitive or from its ancestor.

usd_iprimvar
Reads the value of a primvar directly from the USD primitive or from USD primitive’s ancestor.

usd_iprimvarelement
Reads the value of an element from the array primvar directly from the USD primitive or from USD primitive’s ancestor.

usd_iprimvarelementsize
Returns the element size of the primvar directly from the USD primitive or from USD primitive’s ancestor.

usd_iprimvarindices
Returns the index array of an indexed primvar directly on the USD primitive or on USD primitive’s ancestor.

usd_iprimvarinterpolation
Returns the element size of the primvar directly on the USD primitive or on USD primitive’s ancestor.

usd_iprimvarlen
Returns the length of the array primvar directly on the USD primitive or on USD primitive’s ancestor.

usd_iprimvarnames
Returns the names of the primvars available directly on the given USD primitive or on USD primitive’s ancestor.

usd_iprimvarsize
Returns the tuple size of the primvar directly on the USD primitive or on USD primitive’s ancestor.

usd_iprimvartimesamples
Returns the time codes at which the primvar values are authored directly on the given primitive or on its ancestor.

usd_iprimvartypename
Returns the name of the primvar type found on the given primitive or its ancestor.

usd_isabstract
Checks if the primitive is abstract.

usd_isarrayiprimvar
Checks if there is an array primvar directly on the USD primitive or on USD primitive’s ancestor.

usd_isindexediprimvar
Checks if there is an indexed primvar directly on the USD primitive or on USD primitive’s ancestor.

usd_isiprimvar
Checks if the primitive or its ancestor has a primvar of the given name.

usd_ismodel
Checks if the primitive is a model.

usd_makevalidprimname
Forces a string to conform to the rules for naming USD primitives.

usd_makevalidprimpath
Forces a string to conform to the rules for paths to USD primitives.

usd_setvisibility
Configures the primitive to be visible, invisible, or to inherit visibility from the parent.

usd_specifier
Returns the primitive’s specifier.


Volume

volumecubicsample [www.sidefx.com]
Samples the volume primitive’s value. Values between voxels are evaluated with tri-cubic interpolation.

volumecubicsamplev [www.sidefx.com]
Samples the volume primitive’s value. Values between voxels are evaluated with tri-cubic interpolation.

volumesmoothsample [www.sidefx.com]
Samples the volume primitive’s value. Values between voxels are evaluated with smooth interpolation.

volumesmoothsamplev [www.sidefx.com]
Samples the volume primitive’s value. Values between voxels are evaluated with smooth interpolation.
Edited by animatrix_ - Oct. 31, 2021 01:31:50
Senior FX TD @ Industrial Light & Magic
Get to the NEXT level in Houdini & VEX with Pragmatic VEX! [www.pragmatic-vfx.com]

youtube.com/@pragmaticvfx | patreon.com/animatrix | pragmaticvfx.gumroad.com
User Avatar
Member
626 posts
Joined: Nov. 2013
Offline
Thanks for your replies!
User Avatar
Member
637 posts
Joined: June 2006
Offline
if you want to get all nodes and parms there is a script in houdini, you just need a diff viewer.
https://www.sidefx.com/forum/topic/18448/?page=1#post-254872 [www.sidefx.com]
User Avatar
Member
1 posts
Joined: Aug. 2021
Offline
mandrake0
if you want to get all nodes and parms there is a script in houdini, you just need a diff viewer.
https://www.sidefx.com/forum/topic/18448/?page=1#post-254872 [www.sidefx.com]

but it doesn't seem to work on 19.5
  • Quick Links