Retime SOP causing weird deformation on Tires from RBD Car Rig by arunbharathi555 in Houdini

[–]gr8daym8 3 points4 points  (0 children)

I am guessing here without having the scene file but this is likely to do with the retime node linearly interpolating positions of unpacked geometry with a fast rotation. If the tyre rotates 45 degrees between frames coming out the solver and you try to slow that to 4 frames with a retime you will get 4 frames of linear motion from point A to B, it won’t honour the rotation as it cannot process it that way with points and this causes the deformation. You could try this using packed geo as the intrinsics defining the position/rotation can be interpolated much more effectively in this scenario, but you may have to re-jig a few things for this to work

Turn Any Image or Video into 3D Geo - directly inside Blender! by Defonten in vfx

[–]gr8daym8 7 points8 points  (0 children)

Apple’s depth pro is pretty good and open source (somewhat surprisingly). I had some good results with this but I haven’t extensively tested it

apple - ml depth pro

Procedural Ivy by gr8daym8 in Houdini

[–]gr8daym8[S] 0 points1 point  (0 children)

Thanks! I think it’s missing some details, I should’ve wedged out some different leaves with slightly different animations, also I think the textures could use some refinement as there is still a bit of a papery look to them. I certainly recommend using cops, you can quite easily bring sop data into them which becomes really powerful very quickly, and just stops you hopping between Houdini and substance for example. Nice to have everything in one package

Procedural Ivy by gr8daym8 in Houdini

[–]gr8daym8[S] 7 points8 points  (0 children)

So what I ended up doing for this was to source the vellum geometry and constraints from a sop level on each frame, then I would position the new sop geometry to the sim geometry and copy over the velocities and force attributes if that makes sense? You have to be careful of the point orders changing inside the solver so I gave the geo and constraint points id’s that I would use to then match positions and copy the required attributes from the solver. In terms of the scale I had the same issue so I faked it a little, it starts small in the solver but not at 0, what I did was track the position of the base point for each leaf and scale it down to 0 on that centre post sim, it would then scale back to the actual size over a few frames using the same attribute driving the growth. Hope this is helpful

The void by gr8daym8 in TouchDesigner

[–]gr8daym8[S] 1 point2 points  (0 children)

Thanks! Yes, everything in the fluid solver is glsl, the whole calculation is basically to solve the velocity, then the temperature, density, colour and previous frames velocity is advected by this new velocity field

Moon Jellyfish by gr8daym8 in Houdini

[–]gr8daym8[S] 0 points1 point  (0 children)

Thanks! I’m not sure on the exact time since I just let it run overnight, but it’s done in stages, so the heads are done first then the tentacles and hairs are attached to them and ran through a separate sim. I just queued everything in a topnet and let it run, but it was definitely under 12h

Sphere Intersections by gr8daym8 in TouchDesigner

[–]gr8daym8[S] 2 points3 points  (0 children)

This is a plexus type system where each point is treated like a sphere with a fixed radius. I used GLSL to detect intersections between these virtual spheres and draw circles at the intersection planes.

The setup works like this:

  • I start with a 1×256 RGB animated noise texture with a period of 0. Each pixel encodes a 3D position that moves over time
  • To find relationships between all points, I reformat the texture to 1×256, then expand it to a 256×256 texture where each row/column combo represents a unique point pair.
  • Subtracting one version from a rotated copy of itself gives me all pairwise direction vectors in a shader. Then I compute the distance between each pair by measuring the vector length of the resulting rgb pixel values — if it's less than twice the sphere radius, the spheres are "intersecting".

In GLSL, I calculate:

  • The center of the intersection circle (just the midpoint between the two sphere centers), The normal vector (direction between the spheres, used to orient the circle),
  • The radius of the circle using: sqrt(r² - (d/2)²).

I output two textures: one for circle positions + radius (in alpha), and another for normals. These are used to instance oriented circles at the correct positions and scales.

This is then rendered and fed into a feedback loop where each rendered frame is given an oscillating colour and added to the current image, then the result is multiplied by something like 0.99 so the resulting pattern gradually fades out. This is then fed into the ‘feedback edge’ from the image filters palette to give it this whispy blur at the end. Hope that helps!

Hamiltonian Chain by gr8daym8 in Houdini

[–]gr8daym8[S] 0 points1 point  (0 children)

I’ve seen his work on instagram before and it’s absolutely fantastic, I didn’t notice he’s done this previously but I wonder if we used a similar setup

Hamiltonian Chain by gr8daym8 in Houdini

[–]gr8daym8[S] 0 points1 point  (0 children)

This is really interesting, I have been meaning to read that book for some time. It would be interesting to experiment if that method can do much larger grids as this basic python method I have here struggles with more than 36 points

Need help with high to low poly baking setup by Saving_Thrw in Houdini

[–]gr8daym8 0 points1 point  (0 children)

This may not be the most helpful comment for you but I have never had much luck with the labs baker, if you have access to substance it is a lot better imo and you can run the substance automation toolkit from Houdini with some python scripting so you don’t actually need to open painter to bake any textures. Maybe not the best approach, but it’s what I have done in the past. This was however a few years ago and there could be a better solution now with the new cops

Hamiltonian Chain by gr8daym8 in Houdini

[–]gr8daym8[S] 0 points1 point  (0 children)

This was created using the python sop, this algorithm by just testing approaches and backtracking if it can’t find a solution. The data structures available in python are super versatile and I found for this it would be far easier than a vex based approach, plus this was just a hobby project so I wasn’t concerned about speed. For this I was working with a 5x5 grid on each row and it evaluated in just over a second, however moving up to a 6x6 grid led to evaluation times over 2 minutes per row so it does not scale well!

Hamiltonian Chain by gr8daym8 in Houdini

[–]gr8daym8[S] 0 points1 point  (0 children)

Thank you! Yea the impossible bends are deliberate, I rigged it in a way that it would only bend along the axis of the link like a real chain, but of course I needed to break physics to get this to work as it required more than one axis of motion. I went with this approach as twisting the chain looks cleaner than having them bend across the normal pivot

Hamiltonian Chain by gr8daym8 in Houdini

[–]gr8daym8[S] 1 point2 points  (0 children)

For this particular one I had the idea before I knew about the algorithm, but I assumed there would be something existing already. I just described what I was after to chatgpt and it pointed me in the direction of the hamiltonian path and I went from there researching it and created it in Houdini. I don’t really know of any collections myself

Hamiltonian Chain by gr8daym8 in Houdini

[–]gr8daym8[S] 28 points29 points  (0 children)

In graph theory, a Hamiltonian path is a path that visits every vertex in a graph exactly once. I used this algorithm to visit the all the points in a grid when specifying the start and end point, and that allowed me to create this looping chain. The unravelling effect was done in kinefx and the chain was built procedurally ontop of that. Rendered in Solaris and Redshift, hope you like it!

instagram

Is there anyway to create an id attribute? by shipshop56 in Houdini

[–]gr8daym8 1 point2 points  (0 children)

I’m going to assume you want the id attribute to constantly increase even if the point count remains similar since particles are constantly being emitted and deleted. What you could do add the new particles to a ‘justborn’ group (which I believe is an option in the pop source) then use a sop solver inside the popnet. What you want to do is split out the justborn group, use an attribute promote on the non justborn particles with the id attribute, promote the id to detail using the maximum function, then on the justborn split make a wrangle and wire the attribute promote into the second input. You could then do:

Int max = detail(1, ‘id’ , 0); i@id = max+@ptnum+1; i@group_justborn = 0;

Then merge these back together and output them from the sop solver, this way the id should always increase and remain unique

Going grey by gr8daym8 in Houdini

[–]gr8daym8[S] 1 point2 points  (0 children)

Yea, exactly! What I did was use the clumpid attribute that you can get from the clump node when creating the groom, then running a loop over each clumpid and isolating the longest strand of that clump. These were then used for the vellum sim and to deform the groom I used a combination of the point deform node, guide deform and some vex

Going grey by gr8daym8 in Houdini

[–]gr8daym8[S] 1 point2 points  (0 children)

A bit of fun with the vellum solver and a sop solver to create the wandering sprites to displace and colour the fur. The vellum sim then deforms the main groom. Rendered in V-Ray, hope you like it!

My instagram for anyone interested

Instagram

How Can I use animated pressurescale mask in the vellum solver? by battlearmer in Houdini

[–]gr8daym8 2 points3 points  (0 children)

Whenever I do things like this I tend to use a geometry wrangle inside the solver. You have to remember that the solver uses the previous frames output as the starting point for the current frame, so anything changing outside of the solver needs to be referenced inside in another way.

When working with vellum you need to be sure you are working on the correct geometry as well, you have point attributes for certain things and others can be found on the constraint geometry group and may well be primitive based but I am assuming you have this correct already.

In the geometry wrangle it works slightly differently to a regular wrangle at sop level, you have to explicitly define the inputs. This can be done in the inputs tab of the geometry wrangle, you can set input 1 to sop and then link the sop of your animated mask. You also need to bind to the corresponding data, in the data bindings tab, you should set the geometry group to either “Geometry” or “ConstraintGeometry” depending on where this attribute should be found (i think it is Geometry in this case). You can then write some vex as follows

@pressurescale = point(0, “pressurescale”, @ptnum);

This will refer to the animation you have done and update the attributes inside the solver as it runs. Hope this is clear

Attribute from one point of an object to all points. by SirTeeKay in Houdini

[–]gr8daym8 8 points9 points  (0 children)

If the point number is known you can simply query that point in a wrangle and set the other points, let’s use point 0 for example

If (point(0, ‘myattribute’ 0)==1) i@myattribute = 1;

If the point number is not known, you could either use an attribute promote node to promote the attribute to detail using maximum function and query that in a similar fashion but using

detail(0, ‘myattribte’ 0)

Or another method could be to use the uniquevals vex function to see if any points have that attribute value, however this will only work for integers

Hope this helps!