Found 53 posts.
Search results Show results as topic list.
Technical Discussion » What is the full name for VOP
- Robbert
- 53 posts
- Offline
It's a VEX operator, as the nodes in VOPs are direct node-implementations of VEX functions. VOPs also compile into VEX code which you can actually see by clicking on the VOP node -> View VEX/VOP Options -> View Vex Code.
Technical Discussion » vellum animate rest length scale for a sequence of objects
- Robbert
- 53 posts
- Offline
Took a quick look at your setup and pulled it a few steps forward I've attached that file again. As for the changes;
- The most important thing is to really regard the surface constraints and the pressure constraint as totally separate things. Scaling the surface of a balloon does not simply multiply the inside volume and thus we need some tricks to calculate the correct rest length for the pressure constraint (you can see this in the setup that is attached). I've used a transform that looks up a detail attribute from it's spare input to simply scale the original balloon so you can visually see what is happening (you could also just calculate it all in a wrangle). We then have the original volume and the target volume, and can simply deduct a scaling factor from those.
- I've pulled the writing to the pressure constraint totally separate from the other constraints. Mostly for clarity.
- A real balloon has a bit more pressure than its surface allows for (hence the stretching of the surface). So we either scale the pressure up a bit (can be done in the wrangle with a slider) or lower the final restlengths a bit (done in the sim in the VellumConstraintsProperty node).
- The pressure constraint 'fighting' with the surface constraint can cause bit of random movements as they try to overcome each other. I've added a bit of drag to quickly dampen this, but there are many other more elegant ways of doing this.
Anyhow, I think you were not that far off. This balloon thing is a bit of a complicated setup, and doing the same with a softbody containing pressure 'strut' constraints would be much easier and more stable to handle. Hope this helps you out a bit tough
Cheers!
- The most important thing is to really regard the surface constraints and the pressure constraint as totally separate things. Scaling the surface of a balloon does not simply multiply the inside volume and thus we need some tricks to calculate the correct rest length for the pressure constraint (you can see this in the setup that is attached). I've used a transform that looks up a detail attribute from it's spare input to simply scale the original balloon so you can visually see what is happening (you could also just calculate it all in a wrangle). We then have the original volume and the target volume, and can simply deduct a scaling factor from those.
- I've pulled the writing to the pressure constraint totally separate from the other constraints. Mostly for clarity.
- A real balloon has a bit more pressure than its surface allows for (hence the stretching of the surface). So we either scale the pressure up a bit (can be done in the wrangle with a slider) or lower the final restlengths a bit (done in the sim in the VellumConstraintsProperty node).
- The pressure constraint 'fighting' with the surface constraint can cause bit of random movements as they try to overcome each other. I've added a bit of drag to quickly dampen this, but there are many other more elegant ways of doing this.
Anyhow, I think you were not that far off. This balloon thing is a bit of a complicated setup, and doing the same with a softbody containing pressure 'strut' constraints would be much easier and more stable to handle. Hope this helps you out a bit tough
Cheers!
Edited by Robbert - April 28, 2023 03:44:11
Technical Discussion » vellum animate rest length scale for a sequence of objects
- Robbert
- 53 posts
- Offline
In the SOP network, prior to emitting the balloons into the vellum sim you can store the frame number on the geometry. A wrangle with something like f@emitframe = @Frame; will do. When they are emitted into the sim, this attribute stops accumulating and thus stores the frame at which it was actually emitted. You can then use another wrangle, or a VEXpression in the sim and just lerp the restlength based on that number. For example; f@restlength = lerp(f@originalrestlength,f@targetrestlength,fit(clamp(@Frame - f@emitframe,0,10),0,10,0,1)); This way, your restlength will lerp from the original length to another length over 10 frames. Additionally, you can store the targetrestlength on the emitted geo, giving you per-balloon control. You could even do the same with the time it takes to lerp, by replacing '10' with for example 'f@lerptime'. Hope this helps a bit
Edited by Robbert - April 25, 2023 08:57:40
Technical Discussion » How to affect a fluid stream dynamically from a curve?
- Robbert
- 53 posts
- Offline
I had to deconstruct this setup a bit from a much larger setup, so there might be some things that you simply do not need or things that can be simplified for your setup. But it might help you get going. There is basically a curve that you can sculpt however that will guide everything down the line. The sim is extremely simple and fast, in another version of that setup I also transferred the f@curveu from the original curve to lerp attributes down the line (confinement of the shape for example). There are some operations in the last step to control the confinement of the shape and such, as the original setup was used to go from a water-like shape into a perfectly glass-like shape that still had to retain the bubbles moving through it (so we needed the flip particles in there).
Technical Discussion » How to affect a fluid stream dynamically from a curve?
- Robbert
- 53 posts
- Offline
I did something similar some time ago, which is why I proposed this solution in the first place. Worked out for me so I can probably update you with a bit of my setup in the coming days. For what I can say now is that I just simulated a water stream pouring straight down (using a POP advect by Volumes to keep it tight, but you can use whatever you prefer) and then post-sim point-deformed it with a point-deform node piping in the FLIP-sim a staight sweeped curve, and a deformed sweeped curve (deform the points, not the mesh, only re-mesh it after deforming). Simple as that, It will work
Technical Discussion » How to affect a fluid stream dynamically from a curve?
- Robbert
- 53 posts
- Offline
Since the spiral is so well defined in the reference, the easiest way to go would probably to go with simulating a simple straight falling down liquid stream. Then make a line (line SOP) along that curve and resample it for some more detail, use the point-deform node and capture the liquid stream with the line, now you can just twist and bend the line that acts as a lattice for the liquid stream you have. This will be fast, easy to manipulate and you can still use CHOPS to deform the line if you really want to get it to be audio-reactive The other option is to actually deform the liquid with forces, but you will end up needing a lot of iterations to get the forces just right... So if you have the time you can push for that little extra dynamic, if not, go the easy route. Cheers!
Edited by Robbert - April 13, 2023 09:17:45
Technical Discussion » Point Relax in VEX
- Robbert
- 53 posts
- Offline
Cicuta
Hi Robbert!
Yes! But as soon as you are doing some other vex inside a SOP-solver that for example creates points and moves them per frame and you want a progressive relaxation per point to sort of drive that movement that won't work. The point relax SOP will work on all points at the same time and all at once.
The idea of having its code is for getting it into other functions.
Thanks for the reply though!
Maybe you could write the newly created points into a group with setpointgroup(), put those in the point relax group (use the other points only as influencers for which you can use the second input if you want). Then remove the group from the newly created points after the first iteration. Oh well just a thought
Technical Discussion » Depth Map from VDB ?
- Robbert
- 53 posts
- Offline
I don't know if I understand the first question correctly, but I think you would be able to generate both directly on the VDB. For a depth map you can use a volume wrangle in which you simply calculate the distance between your 'camera-point' and the voxel by using the distance() function. To generate UV's you can maybe use the getbbox_min() and getbbox_max() functions and fit the current v@P to a 0-1 value like; fit(@P.x,bboxmin.x,bboxmax.x,0,1); This way you basically get 0-1 UV's in any direction (would result in 3 dimensional UVs). Ofcourse this perfectly normalized mapping might not be what you are looking for but I cannot tell by the question Remember that you will need two seperate VDBs for this as a VDB only holds a single attribute.
Technical Discussion » Point Relax in VEX
- Robbert
- 53 posts
- Offline
Not really answering the question of how to do it in VEX, but if you just want to do it per-iteration/per-frame you can use a SOP-solver.
Technical Discussion » ffmpeg encode video top frame range?
- Robbert
- 53 posts
- Offline
ffmpeg just simply requires you to specify the frames differently from Houdini. Ffmpeg is a different software, the node in Houdini just encapsulates it and construct a command-line argument. Therefore, your solution will be in the ffmpeg documentation. Bit annoying to switch conventions, but I guess we cannot be too picky
https://www.ffmpeg.org/ffmpeg.html#Automatic-stream-selection [www.ffmpeg.org]
https://www.ffmpeg.org/ffmpeg.html#Automatic-stream-selection [www.ffmpeg.org]
For creating a video from many images:ffmpeg -f image2 -framerate 12 -i foo-%03d.jpeg -s WxH foo.avi
The syntax foo-%03d.jpeg specifies to use a decimal number composed of three digits padded with zeroes to express the sequence number. It is the same syntax supported by the C printf function, but only formats accepting a normal integer are suitable.
When importing an image sequence, -i also supports expanding shell-like wildcard patterns (globbing) internally, by selecting the image2-specific -pattern_type glob option.
For example, for creating a video from filenames matching the glob pattern foo-*.jpeg:
Technical Discussion » How to process multiple output with pdg?
- Robbert
- 53 posts
- Offline
From the little insight your post provides it seems to me like you are using a fine way to import your geo to TOPS and export it with a ROP there. To speed up TOPS, you want to make sure the settings on your TOPS-Scheduler node actually allow TOPS to use all of the cores on your computer. By default this is set to 1/4th of cores, and thus slower than a normal ROP with automatically takes 100% of power. There might be some other ways to speed this up, but without seeing the network it is hard to guess.
Technical Discussion » Merge Geometry Order
- Robbert
- 53 posts
- Offline
The geometry is merged from left to right, so yes a different order will change the implicit ID or point number. However, you can always just set the ID after the merge, or set them before, and then after merging the geometry sort it by attibute with the sort node.
Technical Discussion » Houdini iconvert documentation for .rat files
- Robbert
- 53 posts
- Offline
Hi there,
I have created a batch texture converter that makes use of (among others) the iconvert.exe that comes with Houdini. Alternatively to OpenImageIO's iconvert, SideFX seems to have added a .rat ImageOutput to their own compiled version. However, since iconvert seems to have been updated, the command-line documentation has changed and does not give a rundown of options per file any more. Now, where can I find documentation on converting to .rat files (specifically the rat options) from SideFX's version of iconvert?
I have created a batch texture converter that makes use of (among others) the iconvert.exe that comes with Houdini. Alternatively to OpenImageIO's iconvert, SideFX seems to have added a .rat ImageOutput to their own compiled version. However, since iconvert seems to have been updated, the command-line documentation has changed and does not give a rundown of options per file any more. Now, where can I find documentation on converting to .rat files (specifically the rat options) from SideFX's version of iconvert?
Technical Discussion » Any documentation about pdgattribvals function?
- Robbert
- 53 posts
- Offline
The documentation is here; https://www.sidefx.com/docs/houdini/expressions/pdgattribvals.html [www.sidefx.com]
it will just return the values of the attribute with the name given in the parenthesis. So for whatever work_item is currently processing it will return the value of "image" and use that to retrieve and insert the path to the image file that is to be zipped. The function he uses is a common command-line/terminal function; https://www.geeksforgeeks.org/zip-command-in-linux-with-examples/ [www.geeksforgeeks.org]
Hope this helps you out, cheers!
it will just return the values of the attribute with the name given in the parenthesis. So for whatever work_item is currently processing it will return the value of "image" and use that to retrieve and insert the path to the image file that is to be zipped. The function he uses is a common command-line/terminal function; https://www.geeksforgeeks.org/zip-command-in-linux-with-examples/ [www.geeksforgeeks.org]
Hope this helps you out, cheers!
Technical Discussion » Directly rendering .usd file with USD Render ROP
- Robbert
- 53 posts
- Offline
Hi there,
When rendering with Mantra, we always used a single computer to output an .ifd file that was then used by computers on our local farm to start rendering. Especially for .ifd files that were relatively short to write out this gave some gain as we don't have to re-start the task for every frame. I would like to do the same for .usd files, however I cannot seem to find an option on the ROP node as it always creates its own .usd for rendering. We could just call the husk command ourselves and render the usd like that, though that would require me to embed all those nice options of the already created ROP which would just take some time.
Is anyone aware of an option where I can just feed the ROP node the .usd file for rendering directly?
Cheers!
When rendering with Mantra, we always used a single computer to output an .ifd file that was then used by computers on our local farm to start rendering. Especially for .ifd files that were relatively short to write out this gave some gain as we don't have to re-start the task for every frame. I would like to do the same for .usd files, however I cannot seem to find an option on the ROP node as it always creates its own .usd for rendering. We could just call the husk command ourselves and render the usd like that, though that would require me to embed all those nice options of the already created ROP which would just take some time.
Is anyone aware of an option where I can just feed the ROP node the .usd file for rendering directly?
Cheers!
Technical Discussion » Python inside locked HDA that create chop nodes doesn't work
- Robbert
- 53 posts
- Offline
I have come across this problem before and have so far not found a solution to being able to actually create or remove nodes inside of a locked HDA (as this basically required Houdini to see inside the asset, which is something we prevent when we lock it). Additionally, all paths have to be relative to the internal nodes that you are calling from, so no absolute paths allowed neither are lookups from the encapsulating HDA node.
To get around this issue you basically have to create a few different setups and use for example a switch to pick the desired one. Additionally you can of course set the parameters of those nodes programmatically. Hope this works out for your case
To get around this issue you basically have to create a few different setups and use for example a switch to pick the desired one. Additionally you can of course set the parameters of those nodes programmatically. Hope this works out for your case
Technical Discussion » re-loading python module in HDA
- Robbert
- 53 posts
- Offline
Andr
if you load the module in the "Extra Files" section of the Type Properties window of you HDA, you have the RELOAD ALL FILEs button.
I assume then you should be able to refer to that module from the Python module, but I don't know how, I never use this workflow.
Hey, Thanks for this answer! I checked it out and it does you are able to include external files, however it does so by actually pointing it to the file name. I would like to avoid direct-linking so that the HDA can be distributed easily to other computers (which have the same PYTHONPATH). For now I settled with;
import importlib importlid.reload(module_name)
This seems to at least reload by module name every time I click apply/accept on the HDA parameter window.
Cheers!
Technical Discussion » re-loading python module in HDA
- Robbert
- 53 posts
- Offline
I am working on an HDA and would like to have my python code in an external file (not only save it in the python modules inside the HDA). I then just create functions that call the actual functions inside that module. However, when altering the contents of an external module, it does not update the one the HDA is referencing. I assume this is because Houdini loads the modules in Python path on startup. Is there a way that I can manually force re-importing/sourcing the external python modules in my custom python path? This way I can just work in VSCode -> source/import the changes -> test the HDA.
Cheers!
Cheers!
Technical Discussion » About VEX Noise direction offset problem.
- Robbert
- 53 posts
- Offline
You are offsetting it in your parameters right? I don't get what behavior is wrong exactly? What are you trying to achieve?
Technical Discussion » Determine if a point belongs to two groups
- Robbert
- 53 posts
- Offline
Use group combine; https://www.sidefx.com/docs/houdini/nodes/sop/groupcombine.html [www.sidefx.com]
new group equals group 1
intersect (and) group 2
There you go
new group equals group 1
intersect (and) group 2
There you go
Edited by Robbert - Oct. 13, 2022 04:07:36
-
- Quick Links