Jump to content


  • Content count

  • Donations

    0.00 CAD 
  • Joined

  • Last visited

  • Days Won


animatrix last won the day on September 14

animatrix had the most liked content!

Community Reputation

235 Excellent

About animatrix

  • Rank

Contact Methods

  • Website URL

Personal Information

  • Name

Recent Profile Visitors

4,126 profile views
  1. Pragmatic VEX: Volume 1 [4K] [H18.5]

    There is a very practical use of the limit surface to figure out where a point is on the subdivision limit surface. Imagine a character head like the one we were using, and you add a lot of detail to it, just like what we did before using adaptive subdivision. That sounds all good in action, but what we are missing is the future projection of the same geometry, by additional subdivision, either as a post operation before exporting out the geometry, or as a render time operation. In any case, this will result in the areas where there is added detail, to be flatter than before, even though it's not the case without adaptive subdivision. Because if you recall, we were using Catmull-Clark subdivision algorithm, which will keep the original geometry nice and smooth. But in other cases where you might have additional detail using algorithms such as Bricker, it might result in the areas where there is added detail to be flatter than before. But we don't necessarily want this. What we want is to create detail without disturbing the future subdivided shape of the geometry. So how can we do this? Evaluating attributes at the subdivision limit surface gives us a way out.
  2. Pragmatic VEX: Volume 1 [4K] [H18.5]

    To celebrate the yearly anniversary, I decided to share the Limit Surface Sampling chapter from the course (5 separate videos). AFAIK this topic has never been covered by other tutorials, so I hope it proves to be useful for your work! Enjoy! To generate interpolating surfaces for other subdivision schemes we need a method of determining the position and the normal at a set of points on the limit surface. Because the surface is the result of repeated application of a subdivision step, we can analyze the behavior of a small neighborhood of points as they converge to the limit surface in order to determine the surface properties at the point of convergence.
  3. Houdini 19 Wishlist

    Btw for people who are interested I simplified the locked viewport indicator code that I posted earlier: class ViewportOutlineWidget(QtWidgets.QWidget): thickness = 0 def __init__(self, thicknessValue=2): QtWidgets.QWidget.__init__(self, hou.qt.mainWindow(), QtGui.Qt.WindowStaysOnTopHint) self.thickness = thicknessValue self.setParent(hou.qt.floatingPanelWindow(None), QtGui.Qt.Window) self.update() p = self.palette() p.setColor(QtGui.QPalette.Window, QtGui.Qt.red) self.setPalette(p) def update(self): viewport = getSessionVariable("viewportWidget") s = viewport.size() p = viewport.mapToGlobal(QtCore.QPoint(0, 0)) w = s.width() h = s.height() self.setGeometry(p.x(), p.y(), w, h) all = QtGui.QRegion(0, 0, w, h) inside = QtGui.QRegion(self.thickness, self.thickness, w - 2 * self.thickness, h - 2 * self.thickness) self.setMask(all.subtracted(inside)) So instead of using 4 lines, I am just creating a mask to hollow out the inside of the rectangle, which is much easier to handle.
  4. Simple problem with vex, attribute array?

    Hi Ben, Your code is fine. It's just that the point numbers returned by addpoint are not guaranteed to be the final point numbers: https://www.sidefx.com/docs/houdini/vex/functions/addpoint.html Returns A point number for the created point, or -1 if the point could not be created. You can use the return value with setpointattrib to set attributes on the new point, however it may not be the final number of the point.
  5. Blue Text Under Node

    Hi, It's called Descriptive Parm:
  6. Pragmatic VEX: Volume 1 [4K] [H18.5]

    Celebrating 1 year anniversary of Pragmatic VEX: Volume 1! Since its inception it has been a huge success among the high end VFX studios and artists alike. And for that I am hugely grateful! Therefore it will be on a discounted sale for a week until August 20 12 PM PST. Enjoy!
  7. Blender function in VEX (snap)

    Hi, VEX has a lot of sample functions for these, for example sample_circle_uniform: https://www.sidefx.com/docs/houdini/vex/functions/sample_circle_uniform.html So you can do something like this in a Detail Wrangle: int count = chi("count"); for ( int i = 0; i < count; ++i ) { float u = float ( i ) / count; vector2 uv = set ( u, 1 ); vector2 p = sample_circle_uniform ( uv ); vector pnew = set ( p.x, 0, p.y ); addpoint ( 0, pnew ); }
  8. Random Seed Question [SOLVED]

    Hi, It's pseudo random, so the result will be completely different regardless of the size of the difference between the seeds. If you want the randomness to be relative to the seed value changes, you can use noise instead: https://www.sidefx.com/docs/houdini/expressions/noise.html
  9. Hi, When you create polylines, you can check if the current point number is greater than the target point number, or the opposite to avoid duplicates: if ( @ptnum > targetpt ) addprim()
  10. random sineblip wave help

    There are many ways, but the easiest is to sample the resulting curve using a float parameter like this: primuv("../attribwrangle1/", 0, "P", 1, ch("pos"), 0) This would be the expression you use in your parameter. Then you can control where to sample using another float parameter (normalized) called pos for example. This could be the current time also if you want, or you can animate the curve while sampling the same location on the curve.
  11. random sineblip wave help

    Hi, You can write something like this: float radius = ch("radius"); float amp = ch("amplitude"); float seed = ch("seed"); int count = chi("count"); for ( int i = 0; i < count; ++i ) { float r = rand ( i + 34.13 + seed ); vector p = primuv ( 0, "P", 0, r ); float d = distance ( p, @P ); float d2 = fit ( d, 0, radius, 0, PI ); float y = amp + sin ( d2 + 0.5 * PI ) * amp; if ( d < radius ) @P.y += y; }
  12. Interrupt SOP Cooking with time limit (Python)

    Hi, Since PolyExpand2d is compileable, you can implement it as a Python wrapper using node verbs with your time out/retry logic: https://www.sidefx.com/docs/houdini/model/verbs.html
  13. Hi, You can use pwd and path functions: paneTabObj = hou.ui.paneTabUnderCursor() print paneTabObj.pwd().path()
  14. Pragmatic VEX: Volume 1 [4K] [H18.5]

    Pragmatic VEX is listed as part of the official VEX learning path! Thanks SideFX! https://www.sidefx.com/learn/vex
  15. Hi, You can capture point neighbours and weights inside a For Loop network using Point Deform (Capture), and then use another Point Deform SOP to deform afterwards. So the capturing is done without time dependency which takes longer to cook while the deformation happens after, which will run much faster.