Jump to content


  • Content count

  • Donations

    0.00 CAD 
  • Joined

  • Last visited

Everything posted by GeordieM

  1. Yup that's exactly what I'm doing now re For loops. If you set the Iterations parm of a For loop to $F and Gather Method to Feedback you basically turn a For loop into a Solver (obviously some nuances to this). I then have a toggle in the HDA to use a specific iteration as output or override with current time to simulation a Solver SOP for development. Thanks for the validation Florian!
  2. Hi all, I'm create SOP HDAs that internally use Solver SOPs for calculations. The end result is not time dependent, the Solvers are part of a generative system and the user can set number of iterations in the HDA UI. I use Solvers instead of For loops since they're easier to visually debug while developing the system. I've been using the Timeshift SOP and exposing the Frame parm to the HDA to set number of iterations. I then disable caching on the Solver SOP and put the Timeshift directly after it. This kind of works, but if you say set the Frame parm to 500 it will process the solver to that frame, but then if you set it back to 400 it won't refresh the graph downstream. I'd like to avoid scripted calls to force node cooking etc. What's the definitive way of locking the output of a solver to a specific frame and not have the output cached in any way?
  3. Exaclty! Here's a quick demo scene Solver_Time_Lock_Test.hipnc On the Solver_Test obj there's a "Solver Iterations" int slider. If you push that up you'll see the number of points increase, if you pull it back down they won't decrease till you hit 0 then it force the cache to clear as per the "Enable Automatic Resimulation" option on the DOP sop inside the solver SOP. I want a way to completely invalidate the entire cache whenever the local time of the solver is changed without forcing any node cooking via scripts. I'm working on my own custom solution as well but thought there might be an easier solution.
  4. Hi all, I'm working with flow fields and want to calculate eigen vectors from the flow field values. I'm working with 2D volumes in ZX plane. Originally I had 2x vector volumes (I know this is actually 6x float volumes under the hood) representing a vector to the closest point on a curve and vector perpendicular the curve. I'm now converting this to use a single matrix volume. This would work well since the only Rank matrix option on a Volume SOP is 3x3 matrix and that's what the VEX eigenvalues function takes. BUT I'm unclear on how to map 2x 2D vectors (or even 2x 3D vectors for that matter) into the 3x3 matrix so I can just pass it to the eigenvalues function. hou.Matrix4 class docs has some interesting statements: http://www.sidefx.com/docs/houdini/hom/hou/Matrix4.html "Note that Houdini’s matrices are stored in row-major format, and vectors that are multiplied with matrices are treated as row vectors." "Both VEX and the UT_DMatrix4 class in the Houdini Development Kit (HDK) also store matrices in row-major format." So I'm guessing something like: Row major zero matrix: | x1, y1, 0 | | x2, y2, 0 | | 0, 0 , 0 | Row major unit matrix: | x1, y1, 0 | | x2, y2, 0 | | 0, 0 , 1 | Thoughts? TNKS! G
  5. how to get @ sign in string

    Just stumbled onto this problem. The help for VEX functions using SOP group syntax needs to be way more clear. From tooling around using \@ instead of \x40 seems to also work.
  6. Hi all, I'm attempting to generate a tangent space normal map of a large terrain using Bake Texture ROP. It keeps failing due to geo size so I'm attempting to render tiles. I have two object nodes, one merges low res tiles from main terrain and other merges hi res tiles. I'm using a Wedge ROP to drive X and Y parms on an object which the tile objects reference to change the tile they display. This all works fine, except the Bake Texture ROP doesn't seem to refresh the bounds of the tile objects between Wedge iterations. It renders the tile in the space of the entire terrain. What's even weirder is I added bounds and match size SOPs to the tile to scale it to the entire terrain size, and it still only render tiles in terrain space. Is there some magic I need to do to get Wedge renders to update SOP graphs correctly? Does the last SOP graph node need to reference parms driven by the Wedge node? I've attached an image of the output, as you can see it's correctly rendering the tile, just in the space of the entire terrain. Thanks! G
  7. Hi all, I need an input curve for a HDA that has arbitrary values between -100 and 100. Though you can manually set the values of points in a Ramp parm outside 0-1, the curve UI doesn't rescale to show them. Any way to make this work? TNKS! G
  8. So this is a focus related issue but haven't worked out a good callback to use. But have worked out a slightly dodgy solution. Instead of inheriting from QWebEngineView directly I inherit from QWidget and then add a QWebEngineView. I then listen for the timerEvent event on the python panel and call QWebEngineView.update() every 0.5 seconds. This works well but probably not the best solution.
  9. Hi all, I'm creating a python panel tool with a web front end. I've successfully put a Qt WebEngineView in a Python panel, but when the panel is hidden and displayed again (ie switching tabs in Houdini UI) the main loop of WebEngineView seems to pause. Any animations stop and all mouse/keyboard interaction stops. If I resize the panel it will recover most of the time. I assume I have to call something on WebEngineView when then the python panel onActivateInterface() is called but I can't see anything obvious in the Qt docs http://doc.qt.io/qt-5/qml-qtwebengine-webengineview.html#WebAction-prop PS: I'm on Win 10. Anyone solved this before? TNKS! G
  10. Small update, I can get WebEngineView to start updating by calling: self.resize(self.width()-1, self.width()-1) self.resize(self.width(), self.width()) Here my class inherits from QtWebEngineWidgets.QWebEngineView. BUT as soon as the mouse enters the QWebEngineView control it freezes again.
  11. Hi all, I know python but am just starting out uncovering how to get things really working. I have a .pyd file which I need to reference in a script but it cannot be moved into any Houdini folders, it has a lot of dependencies to relative paths in it's folder (a whole game engine). I'm running Win 7 so I'm relying on Houdini's Python not the system install. Where/how do I set an include path to external Python libraries in Houdini's Python? Thanks! Geordie
  12. Try exposing each component element of a float3 parm out as a separate float parm and see if that makes a difference. I have experience with other engines and Houdini engine but not Unity but this helped in my experience. Also I'd suggest just creating a UI debug OTL and start with the simple UI like ints and floats then add different parm types and test in Unity every time you add one. G
  13. Hi all, I have point data that doesn't have any primitives but it's partitioned into groups. I'd like the ForEach SOP to loop once per group. I've seen examples of this working for primitive groups: http://forums.odforce.net/topic/15277-how-to-access-the-iterating-group-inside-foreach-sop/ But I can't get it to work for point groups. Any suggestions? Thanks! G
  14. ForEach SOP loop over point groups

    Had some more problems but sorted them out: 1. I'd deleted and re-added the Each SOP which had nuked it's connections to the ForEeach SOP 2. had hou.node("..").stampValue("FORVALUE", 0) instead of hou.node("..").stampValue("FORVALUE", "") which was forcing the output to 0. TNKS! G
  15. ForEach SOP loop over point groups

    Thanks! Arrg missed that check box
  16. Hi all, I'm writing tools to extract data from a mesh and I need to calculate AO per point. I know how to calc the AO but I can't see any built in VEX functions that allow ray casting in the SOP context. FastShadow() would be perfect but won't work in SOP VEX. I've written my own ray/triangle hit test in vex which works but probably not the fastest way to do. Also are there any built in SOPs that can create per point AO that I might have missed? TNKS! G
  17. Ambient Occlusion SOP and/or ray casting in VEX

    As usual I find the answer just after I post something. Intersect() VEX...
  18. TL;DR: How do I transfer/create attributes from geo faces & points to VDB to a point cloud? Hi all, I'm working on some vegetation scatter tech on poly objects. The problem is the input poly objects are non manifold and I need to cull the intersecting areas so vegetation is scattered only on the external surfaces. This is my currently work flow: Input Geo -> Poly Cap -> Convert to VDB = Input Geo -> Poly Cap -> Convert to VDB => Merge VDBs -> Scatter points on VDB for vegetation Apart from the poly cap not being the best this works pretty well until I want to create attributes for the vegetation, some need to be sourced from the input Geo and some need to be generated. What I was hoping to do was generate a point cloud from the VDB, then populated it with data and cache it to disk so I could do fast lookups on the data whenever I needed to spawn vegetation: -> Input VDB, process volumes, write data to point cloud Merge VDBs -> Scatter point ----------------------------------------------------> Sample data from point cloud The most simple example is I want an attribute present in the VDB/ point cloud identifying which areas were created with the poly cap so I know not to spawn points there as these would always be the back sides of the input geo. I've seen in the Polygon to VDB you can create attributes, and I can see it's created a VDB for each attrib, but how to i visualize this in any way? The Geometry Spread Sheet doesn't have a volume mode and I can't seem to get volume visualization SOP to do anything. What I want is something like how the scatter SOP works where it interpolates point attribs across a polygon and assigns the interpolated value to the scatter points, but for polygon -> VDB. Also, should I be skipping adding attribs to the VDB and assigning them directly to the point cloud? is there a better way of doing this whole thing? Thanks! G
  19. Haha so many colleagues So the Ray sop did the trick. I wanted to avoid adding the attribs directly to the VDB since it dubes the whole volume per attrib and I might need 15 or so attribs. I post an example file when I'm done. G
  20. Sorry yeah forgot that, but am doing that correctly in my other hip file, 'll clean it up and post it soon
  21. Coolz, I wanted to do what I just uploaded but can't get to work with my specific example so must be something else going wrong...
  22. OK magnito I got you simple example working, I must be doing something weird in the other test I was making. There's a detail attrib called maxCount, set that to the max number of loops... TNKS! G foreachstop_working.hip
  23. Did anyone ever get this working?
  24. Convert Primitive type in Python

    Hi all, is there a Python function that can covert Primitive types in a Python SOP? I want the same functionality as the Convert SOP. I have Python code that creates a Tetrahedron prim and I want to convert it into Polygons so I can iterate over the faces. TNKS! G
  25. Hi all, has anyone played with exporting the displacement maps from an OceanEvaluate SOP? The SOP has a tab called "Export to Texture" and I want render out a 1024x1024 texture sequence of the wave displacement. If I hit the "Render Control..." button it gives me the option to set a resolution (in fact native is 1024) but the textures it renders are always 128x128. Am I doing something wrong or is this a bug? TNKS! G PS: It doesn't show it in the attached image but I've tried manually setting the resolution to 1024 but still get 128 render.