Jump to content


Popular Content

Showing most liked content since 11/14/2019 in all areas

  1. 10 points
    A basic way to span a graph that efficiently connects all points using Prim's algorithm. https://en.wikipedia.org/wiki/Prim's_algorithm minimal_graph.hipnc
  2. 5 points
    Here is an update with obstacles, sliding fuel sources, randomized fuel shape and strong prevailing winds. ap_raining_fuel_111819.hiplc
  3. 5 points
    I took time to put in some comments in the vellumsolver, hope that helps....here's the file. vu_wallpeel.hiplc
  4. 4 points
    A simple exercise to deposit fuel at impact points that are generated from a particle system. No clustering used. ap_raining_fuel_111719.hiplc
  5. 4 points
    Maybe it's useful for someone? just sharing what I have learned. vopS7.hipnc
  6. 3 points
    Like everyone else, I use a bunch of tools for my work. But I found myself using Houdini more and more for 2d work, including making a sketch or etch style of pictures like these. I did it using sops, and while I imagine there is at least a million ways to do that in Houdini, it was bloody fast, took just a few nodes, and with plentiful variations.
  7. 3 points
    0. Updated code editor. That's the biggest dream. I freaking love coding for Houdini, but that's one of the aspects what still feel like pre-16 version. Maybe the team can integrate Electron framework or something. You don't want people to go and use external editors for anything more then a few lines. 1. COP3 context. Houdini 5.5 gave us COP2. It was in 2002. It's still in 2002. I do believe what Houdini can shine with 2D too, both in procedulal generated images, and even with compositing. But it's not. Most of us just try to find other ways around instead of going there. 2. Physics-based Animation. Solaris gives us a fantastic method of doing layout work based of phisics. It's trully amazing. Why not to impliment the same approach into animation. There is a team what is doing it already, making Cascadeur app (https://youtu.be/nj_Dtj7c0Lc). I'm pretty sure SESI can do even better. It's a chance to get a tiny piece from nearly impossible task of taking Maya's pie. 3. Texture painting. Hear me out, nobody expects Mari/Substance level of painting, it's not for that. But a lot of times it's beneficial to paint something basic and not be dependant on topology. For example: I don't wanna go into painting app just to put a few tiny dots and the cat's face in order for fur to be colored by it later.
  8. 3 points
    A passion project re-using footage shot a few years ago. The water is split into two sims: the first covering the sphere and the downward stream, the other filling the basin and overflowing around the sides. A total of over 7 million particles make up the fluid sim. Software used: Houdini Redshift Nuke
  9. 3 points
    A while ago, I was working on a project that had lots of animated tiles. It is actually quite a tricky problem to pack a bunch of shapes together with the smallest amount of "grout". While researching this, I stumbled across this paper "Simulating Decorative Mosaics" by Alejo Hausner, and thought this would be a perfect thing to implement in Houdini! Here is the input, the houdini logo: Also needed are curves that represent the color or element boundaries: Here is one iteration of the loop. This is basically the result you would get copying tiles using a scatter and copy sop: After running the loop for fifty iterations, the tiles seem to be pretty well packed, and are respecting the boundary curves very well: And lastly, here is a version with randomized tile sizes. Still works pretty well! While I never actually ended up using this in production, But I thought it was pretty cool and could be used for other stuff, like maybe packing houses in a procedurally generated map or something. Anyway, here is an example .hip file if anyone wants to play around with it: mosaics_example.hip
  10. 2 points
    something like this? i'm attaching an example file. also, if you're coming from a C4D background... you might want to try MOPs. it uses a similar flow to Mograph... you could use Falloff from Texture and then the Transform Modifier to scale objects in Y in this particular case. height_from_luma.hip
  11. 2 points
    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.
  12. 2 points
    More cuts where the colour is a lighter value and less cuts where it is darker. Then a local rotation matrix to rotate only blocks above a certain colour value. Final colour scheme slightly different than the one that drives the cuts.
  13. 2 points
    Added a transform to rotate before the polysplits.....Thanks @Paul Corfield for the idea!!!
  14. 2 points
    Finally I found most closest way. The big challenge was to find such parameter for breaking threshold to keep sphere while some noises and velocities. I also found that best look for motion is when you use Pyro as source of velocity and add some random area initial velocities to pyro source object linefracture.hiplc
  15. 2 points
    You need to use setCurrent method in hou.Node. For eg., say you've copy pasted some nodes in the geometry node called geo1 and to get back to the object level, just setCurrent on geo1. geo1 = hou.node("/obj/geo1") geo1.setCurrent(True) -J
  16. 2 points
    Sorry but this is amazing!!
  17. 2 points
    Now I get it , just to fine adjust and I'm goona posted hipnc .
  18. 2 points
    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;
  19. 1 point
    some info about this can be found here
  20. 1 point
    Hi, unfortunately this is an infrastructure allowing (typically large) studios to download and license Houdini programmatically via https. It has nothing to do with Houdini itself or creating geometry.
  21. 1 point
    Check this: sample_03_simple.hipnc First of all - before making a rbd sim make sure that all of your objects have proper names. I know you don't use constraints, but lets keep it consistent! No need for a sop solver, use Geometry wrangle - much faster and cleaner. Also it is a good practice to update the velocity when moving the position. Oh, and make the caps regular Static Object - you are gonna manipulate them manually inside the DOPS.
  22. 1 point
    Hi guys, Does anybody here on the forum can point me out towards voxel-printing topic related threads on the forum, if any? Secundo; are there any folks out here with some experience on the subject? For those unfamiliar yet interested in the subject; https://www.media.mit.edu/projects/making-data-matter/overview/ A few noob questions regarding voxel-printing in houdini: can you import a stack of png/bmp files in Houdini and create a voxel geometry? can you import, let's say an stl file, and export it as stack of png/bmp files? Final question; Is there anybody out there interested to collaborate on such a Houdini setup? Thanks for looking into it, cheers! Fred
  23. 1 point
    Hi Frederik, this may help you regarding your first question:
  24. 1 point
  25. 1 point
    You've saved my ass, thanks so much for your help! (Also, neat path deformer!)
  26. 1 point
    Does anyone know of a hotkey/option to mirror a component selection on a symmetrical mesh? I've found myself selecting stuff in the viewport quite a bit the last few days, but can't seem to find anything. Edit: I had forgotten about Attribute Mirror SOP, which is pretty useful for what I'm after, however if someone knows an answer to the above question that'd be cool too.
  27. 1 point
    Thanks guys! So what I did in the end is to negate the volume gradient of the collider and use it as force, it is working well!
  28. 1 point
    http://www.patreon.com/posts/31506335 Carves out polygons using a point attribute with the ability to define the carve values per primitive using primitive attributes. Pure VEX implementation, 10x faster than the default Carve SOP (compiled). It preserves all available attributes. It supports both open and closed polygons.
  29. 1 point
    Did an experiment with subsampling the curve instead of adding extreme amounts of points to get precision. The downside is that you cant predefine the cuts with your own attribute. clip_by_noise.hiplc
  30. 1 point
    I don't understand why this must be done in a single VOP network...? Like Tomas said, VOPs run in parallel over all points so you can't really smooth your geo between noises. You either need to add up all your noises and then blur at once, or apply blurs in between noise stages. If you really need to keep the appearance of a single work environment and you're good with Python, you could of course wrap this whole process into a single HDA and use a multiparm block to create new noise functions and associated blurs upon user demand.
  31. 1 point
    This one already exists - it is called Houdini CORE.
  32. 1 point
    Note that @ikoon's method is faster than the partition SOP at least in 17.0x and earlier, have not yet tested in later versions. Difference is of course going to be very small, but can make a difference on heavy geo
  33. 1 point
    When importing into UE - make sure that Vertex Paint is set to Replace. for rbd the vertex colors are used to store the packed fragment offset - this is why the rotations are jacked
  34. 1 point
    The whole point of a Proxy is to bypass Scene Extraction stage of Rendering - if it still had to check each single Proxy to see if there are duplicate attributes in the DCC vs Proxy, then you'd lose some of the benefit of a Proxy to begin with.
  35. 1 point
    I just wish we can select/edit multiple points at a time in Curve Node. It's been so many years, the Curve Tool in Houdini still sucks.
  36. 1 point
    Hi guys, just another update on the tools: LYNX.shelf: Introducing the LYNX shelf, a collection of helpful presets and tools to support the LYNX toolset. LYNX_fabric: LYNX_fabric_configure shelf tool script let's you create weave setups with a single click A new example file for LYNX_fabric let's you bake patterns to tileable textures New patterns for LYNX_fabric_pattern UX improvements
  37. 1 point
    The script implements the ability to drag files of geometry, caches, textures, images right into the viewport. This project was open-source, so I spread it for everyone. Can someone come in handy. Thank you for watching! Projects: https://github.com/alexwheezy/python/tree/master/houdini/drag_drop_files
  38. 1 point
    So I got this from entagma, I think it's simple enough for a starting point. It works just like an attribute transfer: vector pos = point(1, "P" , 0); int points[] = pcfind(0 , "P" , pos , ch("radius") , 300); foreach(int point ; points) { setpointattrib(0 , "Cd" , point , {1,0,0}); } The forach part starts at 6:20 and I transcripted what Moritz says: I feel like it sounds dumb but i think i need to understand the very basic concept of this. So we have foreach(int point ; points) - what does the first (int point) and the second element (points) does? int point is the number of points I have and the foreach will run points for each one of the points?
  39. 1 point
    A lot of people asked me to share this fake fire method.If you interested it, you can will check this simple hip. After rander i used ACES for a better look. fake_fire_rnd.hip
  40. 1 point
    I saw this HDA demo from Kim Goosens circa 2012, where it takes any smooth input curve and outputs a straight edge or angled curve with angle shaping controls Anyone have any insights as to how you might go about recreating this? Especially interested in the parts towards the end where he switches between angled curves and straight edges, with control over the angle of the curve The closest I can get is doing a linear resample and quantising/snapping to grid, which gives an okay result but it is limited to the nearest snap point or rounded integer, there isnt any actual control over overall edge angle, like for instance I would like to be able to set a global curve angle, so curves can only be 90 degrees along an axis or say 60 degrees, or increments of 15 degrees, etc https://www.youtube.com/watch?v=fPy4U0eGQ0Q&t=1s
  41. 1 point
    I'm sure I'm not the only one who stumble across this image wondering how the heck he did it. I tried using those basic scatter commands, but it doesn't create clean lines. If anyone knows where I can find tutorials to generate clean traces over geometry like this, it would be much appreciate, and the whole community will thank you.
  42. 1 point
    This is how I usually do it: UVtexture in row/column mode to create a uv value (on points for this usecase) along the curve and then a pointwrangle to create a Base_Width value and a Width_Ramp for the tapering. I also put in a colour gradient using the same technique: EDIT 2019: Since somebody recently found this useful: These days I use UV-Texture in "Arc Length Spline" mode on points instead of row/column mode. Seems to give more precise positions in some cases. Also, if you write the code as: // Thickness along Curve using @uv.x: f@pscale = f@width = chramp('Width_Curve', @uv.x) * chf('Base_Width'); // Colour along Curve. The "vector" creates a colour ramp automatically! @Cd = vector(chramp('Gradient', @uv.x)); This way, a.) "pscale" and "width" are both set in one go. For the viewport (Geo Node -> Misc -> "Shade Open Curves in Viewport") Houdini uses "width", while everything else mostly needs "pscale" and b.) if you enclose a chramp() with a "vector()", you will get a colour ramp right away without having to go to the parameter interface editor... :-) Cheers, Tom FIND_POINTS_CURVE_Tom.hiplc
  43. 1 point
    Here's another approach.. also using VEX. The idea is to divide 1 with the number of line primitives, and modulo those to get a repeatable range that I could use for carving each primitive. Concept sketch: Houdini Indie 15.5.607 Mosplinelike_v2.hiplc
  44. 1 point
    This happens due to the fact that you are creating a new geometry. To get your grouping back use the "Group Transfer" SOP and change the group name conflict to overwrite. Hope that helps. Dennis
  45. 1 point
    Thanks for the tip @acey195 and @petz thanks for the solution. Here is the quick VEX snippet that I tested, works a treat! // Get Lines vector A = point(0, "P", 0); vector B = point(0, "P", 1); vector C = point(1, "P", 0); vector D = point(1, "P", 1); // Calculate Line Vectors vector AB = B-A; vector CD = D-C; // Calculate To Vector vector toVec = A - C; // Calculate Intersection vector vecx = cross(AB, CD); float val1 = dot(vecx, cross(CD, toVec)); float val2 = dot(vecx, vecx); vector pos = A + (val1 / val2) * AB; addpoint(0, pos);
  46. 1 point
    You can always do hou.hscript("oppresetload ...") http://www.sidefx.com/docs/houdini14.0/commands/oppresetload
  47. 1 point
    Check out the attached file. I am not sure what you are trying to do with rest position. I don't think that has much to do with uv's, just tracks initial position throughout the sim, which is useful for driving procedural noise and other procedural textures, but I don't think is useful for uv's. You really need to track uv coordinates through the sim. Anyway, the first file I am including is very simple. A sop solver attribute transfers uv coordinates from the source geometry at frame 1. After building the fluid mesh, the uv's are transferred to it from the sim points. Only thing weird I did was turn off reseeding in the flip solver, just to keep a constant point count. The second file is even easier, just changes the way particles are sourced into the sim. This way, no sop solver is needed and the flip particles just inherit the uv's from the source. Hope these help! -Adam FluidWithUVs.hipnc FluidWithUVs_V02.hipnc
  48. 1 point
    While very interesting, it felt quite high level sometimes (still at a very basic level) and it still didn't really solve my problem. I just want a simple pin constraint, which defies gravity and breaks depending on the force it gets. I will look more into it, thanks for the link anyhow.
  49. 1 point
    I am not sure if I understand your question completely, but: - are you using a skin node instead of a sweep node? - are you using nurbs curves to skin (rather than poly lines), that way you can simply use "rows and columns" setting in a UVTexture node. If you are using a skin node, but have an incorrect orientation, you need to add normals and possibly upvectors to the curve you are using to copy your secondary curves on. Normals should follow the curve's tangent, you can use a polyframe SOP for that.
  50. 1 point
    Hscript doesn't support string comparisons using '=='. You need to use either strcmp() or strmatch() to test 2 strings for being the same.