Leaderboard
Popular Content
Showing content with the highest reputation since 02/15/2025 in all areas
-
3 points
-
rbd_freeze_de_activate_sleep_temp_group.mp4 RBD_Active_deactivate_freeze_sleep_in_group_anim.hip the sleeping function itself is getting deactivated automatically if a collision happens or a force interacts which pushes the v and w out of the sleep threshold. however if you wanna freeze rbds temporarly you can take this setup2 points
-
2 points
-
2 points
-
2 points
-
Here is a solution almost entirely in SOP, with barely any code: Start with a square, regular (rows=columns, choose any number) grid in the ZX plane, in REVERSE TRIANGLES (default is rows and columns, we don't want that) and transform it with this Transform SOP: scale.z = sqrt(3)/2 shear.y = sqrt(3)/3 This produces a grid of equilateral triangles Then divide SOP it with: [x] Compute Dual enabled and you have an hexagonal grid (inside two adjacent equilateral triangles) Then do a group expand starting from the center primitive, and store the step. Primitives with the same step number are going to be on the same hexagonal ring, so at this point this is over. The rest is left as exercise.2 points
-
2 points
-
Hello fellow magicians I've released my latest project Skull Beach and raised some interest regarding the method I used for the foam. I want to share a hip file with the basic principle behind this fx. Have fun with it, improve on it, and don't hesitate to share your creations! vellum_foam.hip2 points
-
1 point
-
You need to use second input on popwrangle where you import animation from sop Should be something like this: float mask = point(1,'mask',@ptnum); v@force = normalize(v@P) * mask;1 point
-
Hi Hunter, you would probably use the "orient along curve"-node instead, it also happens to offer rotations. However, if you want to do it in VEX you could try: float freq = chf('frequency'); float sc = chf('scale'); float u = vertexcurveparam(0, i@vtxnum); float amount = u * (1.0 / freq); matrix m = ident(); rotate(m, amount, v@N); scale(m, sc); v@P += v@up * m; od_spiral.hip1 point
-
You can achieve this with a Gas curve force micro-solver. It brings a curve from the SOP network. You can also use Gas axis force, but the visualisation of curve force is better.1 point
-
Since it is all one big procedural journey, Houdini or not: I'd like to show you our new Media·Art studio, together with my partner Susanne Kohl: https://UrbanFlow.art We do generative realtime art, projection mapping on sculptures and objects, soundscapes... We mostly use Tooll3 (https://tooll.io) since it is the closest to Houdini in the way it works and thinks - and open source on top. There is at least a little bit of Houdini in this one: ;-) So yeah, be creative, wherever life takes you... Cheers, Tom & Suko1 point
-
Hey algo junkies, I realized I posted this on a new thread, but it should be a continuation of that one. A clip that I saw on Pinterest, it's done by a (collective of) Mograph artist in Atelier 8, no claimed author, titled #1cfwip. That's been so obsessing I've decided to try reproducing it. It appears to be a recursive growth whose main body is strongly driven by curl noise on its highest curvature convexity, the organic intricacy and coherency of surface detail is amazing though, devil is in that detail. It looks like a velocity vector extraction displacing the main body, a trailing of sort, could be polywire with noise recombined with the main VDB maybe, am on it despite it being above my pay grade. What is your take on this? Visual by #1cfwip_scaled.mp41 point
-
Hey Sarah, I found this hip file on Tokeru's website, and I modified it to match what you need. untitled.mp4 rolling.hip1 point
-
1 point
-
1 point
-
Thank you for your answers! @Sepu I'll take a look at this one for further understanding in case I missed something. @CarlosGuzman Thank you for the explanation and the file. Really good method to break constraint with velocity. So this is a clear statement, as said @Sepu : We can't break constraint with velocity only. We need to break the constraint as you have done in your file, with the help of a threshold, but not with velocity only. If we apply any velocity on a pre-fractured mesh, the constraint will not break by itself. So I can also see a simple method where we can use the "Break Thresholds" in the RBD Bullet Solver, with the At Frame. (See attached file) At the end, it's just a matter of breaking the constraints at one moment, to allow velocity to work. Thank you for your help ! Appreciate it Simple_RBD_Explosion_FKT.hipnc1 point
-
Hi Fakit, you can break glue constraints based on velocity, in order to achive this you will need to transfer the velocity to the constraint network and remove points or prims based on a rule. please have a look. Simple_RBD_Explosion_CG.hipnc1 point
-
.. or use the maximum height from two ray nodes. combining_two_patterns_KM.hipnc1 point
-
Hi, use Ray sop, Direction from - Vector, Ray Direction - 0, 1, 01 point
-
Hi Nathan, Please have a look to this file, I am old school, so I made this setup using Dops method. I am sure you will be able to translate it to the new rbd workflow. cheers! rbd_elements.hip1 point
-
Hi @konstantin magnus thank you very much for kind answer. I´m a big fan of your tutorials on youtube. Let me check more in detail your solution and I´ll tell you. Thank you very much.1 point
-
@Yors_Void Here is a version that copies a cylinder to a grid of triangles. hexagon_pyramid.hip1 point
-
Put this in a primitive wrangle: string img = chs('image'); vector bb = relbbox(0, v@P); vector uvw = set(bb.x, bb.y, 0.0); v@Cd = colormap(img, uvw);1 point
-
untitled.mp4 maybe you can just fake the part where its just rotating in the air like that. pop and noisey geo pop_surface_slider_ray_water_ball_attract_2.hip1 point
-
nah. none of these really add much to usability flat single-color icon palettes are not really in vogue anymore and make it harder to discern between tools the text labels are unreadable when embedded into nodes, especially when names are long roll-out property drawers aren't adding anything new that you can't already get by pressing P or whatever of all the things you choose to add to the limited real estate of the timebar, you want to include an FPS control? how often does one change the FPS of a shot during production? what is the value add? it kinda just seems like you're used to a GUI that's more like blender and you want houdini to follow suit? but little of this is adding any usability, it's just a reskin.1 point
-
Hi guys I started creating a series of brief tutorials covering specific tips and tricks for using Houdini features. So these tutorials are not meant to provide comprehensive explanations of the topics. Please subscribe to my YouTube channel for more. Houdini Tutorial: Attribute Paint re-cache method feature:1 point
-
Hey guys, I've been taking a look at the famous video mentioned a few pages back: While lots of techniques have been covered in this thread, I'm a bit lost when it comes to the later variations that "carve" into the surface. The variation 10 (area contraction) can be achieved using the same curvature based growth that's described in this thread (just go in opposite direction), but I can't seem to get the behavior of 12 (point contraction, starts at around 4:13) and 13 (line contraction). Anyone have any ideas how those two effects 12 (point contraction), 13 (line contraction) could be achieved?1 point
-
Hi Tom, absolutely gorgeous work. Very inspiring. I would love to know how you create these customised cost attributes in such a way where you can art direct them.1 point
-
Or inside $HOUDINI_USER_PREF_DIR/scripts/OnCreated.py Add this: kwargs["node"].setUserData("nodeshape", "circle") If the folder or file doesnt exists, create one1 point
-
1 point
-
1 point
-
1 point
-
1 point
-
Ok, I think I finished this. If anyone is interested, the hip file is available below. I hope it could be instructive for beginners. I added leaves, they can have a general motion (breeze), and you can add another wind based on the tree motion (length of averaged velocity). I discovered that Bone Deform is way faster than Point Deform (it was realtime for this tree), but Point Deform is more accurate. My setup includes both, I use Bone Deform for previewing, you can just switch. The wire sim is realtime as well, and cooking everything with leaves and with little branches was around 3 fps on my shy laptop without any pre-caching. (I think it's not that bad.) Actually the leaves part could be better, for example right now leaves don't orient themselfs according to the direction of the wind... so some controlling features like this still would be nice to have. Well, feel free to improve it I would say, theoreatically this setup should work with any tree, bush, plant, etc. created by the Labs Tree tools. The hipfile includes some notes as well, I tried to explain why am I doing what I'm doing. Also, I started an attempt to create a non-simulated tree motion, what I saw in nirfse3D's videos about his Simple Tree Tools. Not really impressive right now... I have no idea how he did it, this approach is getting really slow with more branches Anyway. Best wishes! tree_16.hiplc1 point
-
1 point
-
C:\Program Files\Side Effects Software\Houdini 18.0.xxx\houdini\help\examples\nodes\dop\rbd* or sop\rbd*1 point
-
1 point
-
8 lesson. Now, this must move-Dance, have fun basically. Solver Dops Pio MIo L-system (build everything, mostly fun with Architecture). Just copy paste and use some shapes with some accurate normal DIR you can build funny stuff. I learned a lot from Yancy Lindquist. Solver Like solver solver (repeating) . For lazy people Ameba file. I use Houdini 16.5 Ameba.hipnc1 point
-
Ok, it's been a while, but let's try it one by one: 1. Scaling world coordinates to unit size vector bbox = relbbox(0, @P); vector size = getbbox_size(0); vector ratio = size / max(size); vector scale = bbox * ratio; relbbox() creates linear gradients along each axis of the object from 0.0 to 1.0. Those can be spread out in UV space later. getbbox_size() returns the absolute dimensions of the object. While we don't care about the actual size, we need to factor in how those dimensions relate to one another: size / max(size) Dividing all dimensions by the biggest one effectively scales them to unit size while keeping the proportions. This is the aspect ratio for X, Y and Z. bbox * ratio combines the gradients on all mesh points with the overall aspect ratio. All projections fit proportionally onto the UV grid now, we only need to split them up and lay them out. 2. Splitting up projection sides vector side = sign(v@N); vector nml = abs(v@N); if (nml.x == max(nml)) { ... } else if (nml.y == max(nml)) { ... } else { ... } sign(v@N) decides towards which side the normals point to. Its either left or right, top or bottom, front or back. Later this will compensate for.. abs(v@N) setting all normals to positive values. So we can easily compare which direction they are mainly facing, using: if (nml.x == max(nml)) for X, else if (nml.y == max(nml)) for Y and else for Z. By comparing each absolute component with the normals' maximum, we split the geometry into UV islands. 3. Laying out UV coordinates if (nml.x == max(nml)) { @uv = set(scale.y * side.x, scale.z, 0); } else if (nml.y == max(nml)) { @uv = set(scale.x * side.y, scale.z, 0); @uv.y += 1; } else { @uv = set(scale.x * side.z, scale.y, 0); @uv.y += 2; } @uv *= 0.3333; @uv.x += 0.5; set(scale.x * side.y, scale.z, 0); Depending on which side has won, the UV coordinates are composed of either top or side views (first component) and front or side views (second component). Setting the scale variables negative can be used to sort out direction issues. *side.x, *side.y and *side.z are simply flipping directions in case the normal directions have been negative. Thus getting their own islands on the left side. @uv.y += 1; and @uv.y += 2; are moving the UV islands upwards, so they are not landing on top of each other. @uv *= 0.3333; Currently UV coordinates span across six unit spaces, so we scale them down to fit into one. @uv.x += 0.5; Because of flipping the sides we also have to move all our coordinates to the right by half. Alright, I hope things got less confusing now.1 point
-
1 point
-
1 point
-
Hi, thanks for this and it's wonderful and works for particles. However, it doesn't seem to centroid the rotation as well?1 point
-
1 point
-
There are many ways you can project onto volume. The rest field is one of them and as you mentioned it can been used as UVs. I tend to skip that step and directly use the P which has been fitted to a the bounding box of the desired projection. It's easier to try that on a volumeVOP to begin with. Let's say you want to project along the Y axis between x and z values of -10 to 10. All you need to do it fit the x and z values within that range so you have a 0 to 1 and feed that to the UVs (st) of the texture node. You can even have a second object as input and automatically get its bounds to calculate your fit range. Now if you want the projection to be on an arbitrary axis, you will have to do some extra maths to rotate the P, project and rotate back within VOPs, or if it's easier, you can do it at the SOP level. What is important to keep in mind, is that volumeVOP will operate on a voxel level and you will never get any sharper detail than the voxel size. But once you do this, you can easily transfer the same nodes/logic onto a volume shader, which operates on rendered samples, which means you can go as sharp as your texture. But of course if you move your camera away from your projection axis, the texture representation will get blurred along that axis. But then again, that's just one approach and maybe there are other ways that may give you more control and better results.1 point
-
Here is a vertexwrangle method for projecting cubic UVs on any kind of mesh: vector bbox = relbbox(0, @P); vector side = sign(@N); vector nml = abs(@N); vector size = getbbox_size(0); vector ratio = size / max(size); vector scale = bbox * ratio; if (nml.x == max(nml)) { @uv = set(scale.y * side.x, scale.z, 0); } else if (nml.y == max(nml)) { @uv = set(scale.x * side.y, scale.z, 0); @uv.y += 1; } else { @uv = set(scale.x * side.z, scale.y, 0); @uv.y += 2; } @uv *= 0.3333; @uv.x += 0.5;1 point
-
I got it working! In order to apply a pivot to a matrix you need to invert the original matrix before multiplying it by the pivot. After that you will need to invert it again and add the pivot xyz to the position on the matrix. ApplyTransPivWorking.hip1 point
-
Look at this modified version; My surface Tension asset supports particle and field approach, and you can use an attribute as a mask. For high particle counts (Large Scale sims) use the field based approach instead. Hope that helps. surfaceTensionMask_dv.hipnc1 point
-
you can use res() expression to get resolution of the COP node, it'll force it to update if necessary or if you want to avoid COPs you can use hou.imageResolution() to get resolution of image file directly res_of_the_image.hip1 point