You can use File SOP inside of your loop
Set to Write mode with filename dependent on your iteration
Then you should be able to write out a sequence per each iteration
If however you just want a single sequence when each iteration is a frame then Solver SOP may be more convenient
Found 5863 posts.
Search results Show results as topic list.
Technical Discussion » For-loop with feedback: saving geo from each stage
-
- tamte
- 9127 posts
- Online
Technical Discussion » Simple Matrix Q (Transforming Bullet Packed Primitives)
-
- tamte
- 9127 posts
- Online
You may want to have a look at instance VEX function [www.sidefx.com] which can build transform from instancing attributes for you
Since pivot needs to be applied as an offset before rotation and qconvert does post rotation offset so it's not applicable for pivot
Since pivot needs to be applied as an offset before rotation and qconvert does post rotation offset so it's not applicable for pivot
Houdini Indie and Apprentice » Vectors orientation
-
- tamte
- 9127 posts
- Online
you can also pretend your text is within a 0 centered unit cube when generating direction from @P
adjust Bias to blend between the that and original @P based directions to get the directions you like
EDIT: also make sure the signatures of random() and xnoise() are what you want as by using them in a single line assigned to vector variable or attribute they will return vector effectively changing directions slightly as they act per component
if you wanted to change just length use float signatures
or
adjust Bias to blend between the that and original @P based directions to get the directions you like
float bias = chf( "bias" ); vector center = getbbox_center( 0 ); vector size = getbbox_size( 0 ); vector P = ( v@P - center ) / lerp( size, {1,1,1}, bias ); vector f = chv("frequency"); vector o = chv("offset"); v@v = normalize( P ) * random(@ptnum) * xnoise( v@P * f + o);
EDIT: also make sure the signatures of random() and xnoise() are what you want as by using them in a single line assigned to vector variable or attribute they will return vector effectively changing directions slightly as they act per component
if you wanted to change just length use float signatures
v@v = normalize( P ) * float(random(@ptnum)) * float(xnoise( v@P * f + o));
float length_scale = random(@ptnum) * xnoise( v@P * f + o) ; v@v = normalize( P ) * length_scale;
Edited by tamte - 2025年2月13日 13:24:26
Technical Discussion » Attribute gradient
-
- tamte
- 9127 posts
- Online
Solaris and Karma » Custom rendervars with opacity? Like in Beauty.
-
- tamte
- 9127 posts
- Online
make your AOVs from the material Vector4 and just set 4-th component to 1, in MtlX shadeers Karma seems to automatically multiply all components by opacity
however usually there is no need for this as such Alpha would be exactly the same as Beauty alpha, so no need to have a copy for each AOV unless you need custom values in 4th component
however usually there is no need for this as such Alpha would be exactly the same as Beauty alpha, so no need to have a copy for each AOV unless you need custom values in 4th component
Technical Discussion » Flip SOP add more particles without reseed
-
- tamte
- 9127 posts
- Online
mzigaibif Reseeding and of course Narrow Band is off and you are not sourcing anything anymore then Reseeding should not kick in
Thanks for the feedback!
Is there a way to keep it oversampled just on the first frame and keep the point count?
It would be spurcing just on the first frame.
I am asking this because I am noticing in this new SOP point count change even when reseed is turned off and I am just emitting on the first frame, is that normal?
Do you have an example?
Technical Discussion » Flip SOP add more particles without reseed
-
- tamte
- 9127 posts
- Online
FLIP Solver SOP is always reseeding sources since they come in as SDF so it has to generate points no matter what
therefore, it will still use Reseeding settings even with reseeding off
so you can for example set surface oversampling to 3 and then uncheck reseeding, you wil notice that the source is still oversampled
therefore, it will still use Reseeding settings even with reseeding off
so you can for example set surface oversampling to 3 and then uncheck reseeding, you wil notice that the source is still oversampled
Technical Discussion » Sink flip particles dymamically
-
- tamte
- 9127 posts
- Online
mzigaibPOP Kill will not work directly, since POP Solver that's inside of FLIP Solver has Reap Particles unchecked, so it doesn't remove @dead particles
I tried with a pop kill but no success
mzigaibduring the simulation you can just delete the particles as the surface is generated from them
seems in order to make wholes on the fluid surface I think you need some kind of volume operation but I do not know how to do it inside the flip SOP, am I wrong?
however if you want to do it on the source before sourcing then yes, FLIP Solver SOP uses volume sources
Edited by tamte - 2025年2月11日 00:56:16
Technical Discussion » Sink flip particles dymamically
-
- tamte
- 9127 posts
- Online
mzigaib
I want to remove particles with values bellow 0.5 at certain frame dynamically
you can dive inside of FLIP Solver SOP and add POP Wrangle for example
if( @Frame == 20 && f@mask < 0.5 ) removepoint( 0, @ptnum, 1 );
Technical Discussion » Retiming fluid sim
-
- tamte
- 9127 posts
- Online
for retiming it's always better if your fluid sim doesn't use reseeding and outputs valid i@id
then the retiming can smoothly interpolate each particle's position based on the i@id across multiple frames
in such case your retimed particles should produce smooth motion
it's not common to retime after meshing as there is no clear information on the mesh that can be used to track how it needs to evolve towards neighboring frame geo, unlike on particles where you can easily match by i@id
then the retiming can smoothly interpolate each particle's position based on the i@id across multiple frames
in such case your retimed particles should produce smooth motion
it's not common to retime after meshing as there is no clear information on the mesh that can be used to track how it needs to evolve towards neighboring frame geo, unlike on particles where you can easily match by i@id
Edited by tamte - 2025年2月10日 15:32:17
Houdini Indie and Apprentice » How to prevent pyro sim from moving
-
- tamte
- 9127 posts
- Online
there are 2 factors you need to consider
1. v@P of the simulated volume is not {0,0,0}, but it evolves as the volume is resizing, so overwritingv @P is not gonna apply the correct position, you may want to add the position delta instead so v@P += point(...
2. the position offset you are adding has represent the real offset, in your case it seems like you are just taking centroid, but your sim is aligned to geo on the first frame, so unless that centroid position happens to be {0,0,0} on the first frame it will misalign
so better way would be to use Transform Pieces SOP and connect your pyro cache to first input, your animated centroid to second and centroid timeshifted to first sim frame to third
and it will apply transform delta between 3rd and 2nd input points
1. v@P of the simulated volume is not {0,0,0}, but it evolves as the volume is resizing, so overwritingv @P is not gonna apply the correct position, you may want to add the position delta instead so v@P += point(...
2. the position offset you are adding has represent the real offset, in your case it seems like you are just taking centroid, but your sim is aligned to geo on the first frame, so unless that centroid position happens to be {0,0,0} on the first frame it will misalign
so better way would be to use Transform Pieces SOP and connect your pyro cache to first input, your animated centroid to second and centroid timeshifted to first sim frame to third
and it will apply transform delta between 3rd and 2nd input points
Edited by tamte - 2025年2月10日 15:18:09
Houdini Lounge » How do you export/import/share recipes?
-
- tamte
- 9127 posts
- Online
it's common to get a lot of views and no answer, that just means that a lot of people are interested in an answer and hoping to find it in the thread
and asking the question you are one of them you should not be surprised
also those are not unique views, so it can be just 1 person refreshing 500 times
but regardless, you can watch this if you are interested in recipes
https://vimeo.com/970732930 [vimeo.com]
I haven't watched it in full, so not sure exact answer is there, but there you will find out that recipes are stored in .hda files
which means that even if Recipe Manager doesn't provide a way to export or version up individual recipes you can do it using Assets/Asset Manager using RMB/Duplicate
to overwrite a recipe just save another one for the target pattern under the same name to the same .hda file
or RMB/delete and save a new one
or RMB edit contents and do your edits there and save to override
to create a separate version you can technically use hda versioning by appending ::1.0 ::1.1 to namespace, but it looks like Houdini will currently treat them as separate Recipes instead of showing just one of them in the dropdown
But of course it depends on what you are trying to do with versioning as you can also target different asset versions with your recipes and those will be filtered per asset version
and asking the question you are one of them you should not be surprised
also those are not unique views, so it can be just 1 person refreshing 500 times
but regardless, you can watch this if you are interested in recipes
https://vimeo.com/970732930 [vimeo.com]
I haven't watched it in full, so not sure exact answer is there, but there you will find out that recipes are stored in .hda files
which means that even if Recipe Manager doesn't provide a way to export or version up individual recipes you can do it using Assets/Asset Manager using RMB/Duplicate
to overwrite a recipe just save another one for the target pattern under the same name to the same .hda file
or RMB/delete and save a new one
or RMB edit contents and do your edits there and save to override
to create a separate version you can technically use hda versioning by appending ::1.0 ::1.1 to namespace, but it looks like Houdini will currently treat them as separate Recipes instead of showing just one of them in the dropdown
But of course it depends on what you are trying to do with versioning as you can also target different asset versions with your recipes and those will be filtered per asset version
Houdini Indie and Apprentice » Local Particle Rotation (VOPS Please)
-
- tamte
- 9127 posts
- Online
jaminationit really depends on how you are representing rotation on particle, whether, v@v and v@up, v@N and v@up, p@orient, or 3@transform
-I am looking for an easy way to rotate a particle locally in VOPS. In Softimage there is a compound called "Transform Local" that allows all local transforms.
in case of quaternion p@orient you can use Quaternion Multiply VOP, qmultiply() in VEX to rotate quaternion B by quaternion A, so B is the local one
in case of 3@transform, you can directly use Multiply VOP, * in VEX, to rotate matrix A by matrix B, in which case A is the local one
jaminationagain, just multiply your vector by matrix using Multiply VOP or by quaternion using Rotate By Quaternion VOP ( qrotate() in VEX )
- Softimage also has a "Rotate Vector" node that allows you to rotate a particle around a vector, which really just moves the particle to the rotated position but keeps the particles orientation. I am also wondering if Houdini has a simple solution for that.
Technical Discussion » Different mass to each RBD fractured pieces, How?
-
- tamte
- 9127 posts
- Online
Masoudyou are not sampling density from the correct points
Hello Tamte
Thank you for replying.
Please take a look at my file. I tried this codes in the density field:point("/obj/box1/SRC", $OBJ, "density", 0)
The spreadsheet indicates the density of each piece, which is useful, but the lower-density pieces always sink in the fluid!Image Not FoundImage Not Found
the geometry you are pointing to has 16 points so both of your objects will sample density of 1000 which you can see in the Geometry Spreadsheet
so you either create geo with just 2 points and set density accordingly or just check Create Packed Primitives on your assemble
which will pack your objects but still promote our density attribute, that way
Fractured RBD will still be able to use correct geo based on name and the point() expression will correctly sample point based on $OBJ variable as there are exactly the same amount of points
EDIT: just to explain further as it may seem confusing
feeding Packed geometry to RBD Fractured Object DOP doesn't mean you get Packed RBD, just that the geo fed thee was packed, and RBD Fractured Object will still use it to create individual DOP objects for old RBD solver, packing in SOPs just helps representing each object as a single point and therefore allows having attributes that can be then sampled using point() expression based on $OBJ variable
Edited by tamte - 2025年2月9日 11:30:54
Technical Discussion » Different mass to each RBD fractured pieces, How?
-
- tamte
- 9127 posts
- Online
MasoudThis is not correct
- Fractured RBDs are more suitable when you need individual control over each fractured piece or if the number of fractured objects is relatively small and you need to manage them individually for specific behaviors.
packed RBD is much easier to manage since you have control over every RBD's properties as points of packed prims
However the main reason people use Old RBD solver for mutual interaction with FLIP is that it correctly uses feedback data and its stable, for some reason the Bullet implementation hasn't been working with feedback from other solvers like FLIP so that would be the only reason to not use it in your case
Edited by tamte - 2025年2月9日 11:14:38
Houdini Indie and Apprentice » Motion Capture Data Camera
-
- tamte
- 9127 posts
- Online
I can also only speculate based on my understanding but It's not just the precision of the device, it's precision of the overall alignment with the scene
So even if the device itself gives you precise motion you still need to align it to 3D representation of the scene, whether it's lidar or gaussian splat or whatever you end up having
I dont know what type of motion sensors you are talking about, but for example tracking and accumulating just motion delta will give you motion relative to the start alignment at best and of course with the danger of losing accuracy as it accumulates over time
So you still need to either calibrate at least the start alignment to the 3d scene or of course every frame, either during capture with some external sensors or post capture, which is exactly what most matchmove software do
So in theory yes, if you live in an ideal world and can record all necessary data (motion, alignment, 3d scene representation) precisely it would probably give you perfect alignment, but in real world it's probably much easier to compute best fit alignment per frame and get visually as perfect representation of the camera motion within the imperfect 3d scene representation than having perfect relative motion that doesn't align to anything
You can probably always combine all the information you have, like sensor data, in tracking to get to the result easier especially for difficult to track shots, but then it may be a question of whether its worth capturing and syncing it if you'd still need to use image based alignment and match move techniques anyway
But again,just my limited understanding of the issues
So even if the device itself gives you precise motion you still need to align it to 3D representation of the scene, whether it's lidar or gaussian splat or whatever you end up having
I dont know what type of motion sensors you are talking about, but for example tracking and accumulating just motion delta will give you motion relative to the start alignment at best and of course with the danger of losing accuracy as it accumulates over time
So you still need to either calibrate at least the start alignment to the 3d scene or of course every frame, either during capture with some external sensors or post capture, which is exactly what most matchmove software do
So in theory yes, if you live in an ideal world and can record all necessary data (motion, alignment, 3d scene representation) precisely it would probably give you perfect alignment, but in real world it's probably much easier to compute best fit alignment per frame and get visually as perfect representation of the camera motion within the imperfect 3d scene representation than having perfect relative motion that doesn't align to anything
You can probably always combine all the information you have, like sensor data, in tracking to get to the result easier especially for difficult to track shots, but then it may be a question of whether its worth capturing and syncing it if you'd still need to use image based alignment and match move techniques anyway
But again,just my limited understanding of the issues
Technical Discussion » Different mass to each RBD fractured pieces, How?
-
- tamte
- 9127 posts
- Online
you can use $OBJ local variable for example
so something like:
you can of course use it to pick $OBJ-th value from some SOP geo storing the piece density values on points using
or even from a space separated string using arg() whether its typed in manually or even stored as a detail attrib
etc...
so something like:
fit01( rand( $OBJ ), 500, 1000 )
point("../../OUT_piece_densities", $OBJ, "density", 0)
atof( arg("100 50 1000 75 1500 645.5 711 537.4", $OBJ) )
Technical Discussion » Accessing binding in functions in OpenCL
-
- tamte
- 9127 posts
- Online
While I'm not that familiar with OpenCL snippets, I'd assume it's the same as in VEX, where you need to pass those values as function arguments from the main body of the shader
since the snippet syntax is not part of the language
since the snippet syntax is not part of the language
Technical Discussion » Transforming matrix with python API ignores translation
-
- tamte
- 9127 posts
- Online
In other words most matrices in Houdini are in Row Major order so bear that in mind overall when doing matrix operations in Python or VEX as that may also imply different order of operations than you are likely expecting if you are used to operate Column Major matrices
Edited by tamte - 2025年2月6日 17:56:25
Houdini Indie and Apprentice » SOLVED Creating relative channel references with attribute
-
- tamte
- 9127 posts
- Online
stinzenSounds point wrangle should work
I tried creating a channel path with ch("../" + name) in vex but the value in the channel wasn't actually referenced.
s@unreal_instance = chs("../" + s@name);
Edited by tamte - 2025年2月6日 17:46:54
-
- Quick Links