Jump to content


Popular Content

Showing most liked content since 11/13/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. 9 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
  3. 5 points
    Here is an update with obstacles, sliding fuel sources, randomized fuel shape and strong prevailing winds. ap_raining_fuel_111819.hiplc
  4. 5 points
    I took time to put in some comments in the vellumsolver, hope that helps....here's the file. vu_wallpeel.hiplc
  5. 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
  6. 4 points
    Maybe it's useful for someone? just sharing what I have learned. vopS7.hipnc
  7. 4 points
    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
  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. 2 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.
  10. 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.
  11. 2 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.
  12. 2 points
    Added a transform to rotate before the polysplits.....Thanks @Paul Corfield for the idea!!!
  13. 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
  14. 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
  15. 2 points
    Sorry but this is amazing!!
  16. 2 points
    Your best bet would be to add an extra parameter (can be hidden) with Python expression which would expand that relative path for you and then in you can read this string back in vex. " ".join([n.path() for n in hou.pwd().glob(hou.pwd().evalParm('relative'))])
  17. 2 points
    thanks for testing, maybe it's time for sidefx to optimize Clip SOP and Poly Cut SOP as both more or less can be used in this way, but it's not nice to be paying speed penalty over more custom VEX solutions
  18. 2 points
    So, to update, just added some smoke ! Tell me what you think of it ! Next step is to create some clouds and work on lighting ! Cheeers,
  19. 2 points
    here is a simple example ts_carve_by_clip.hip
  20. 2 points
    I have used this setup on a number of projects and thought I would share. Basically, it is a simple setup that uses the wire deformer and hair system to animate geometry. I used to do this all the time back in Maya using Shave and a haircut, and was surprised that there isn't a more straightforward method to do this kind of effect in Houdini. This is especially useful when you need to add flowers or other kinds of detailed grass to an existing grassy field that has wind blowing through it. grass_example.hip
  21. 2 points
    Who you callin old? Can't wait to see the finished project, you folk at Filmakademie always make amazing stuff!
  22. 2 points
    Now I get it , just to fine adjust and I'm goona posted hipnc .
  23. 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;
  24. 1 point
    Hi, you can set a detail attribute for example and call in the detail() function in copy node. copy_detail_attr.hipnc
  25. 1 point
    "She Flow" I really love how this one came out - make sure to view the full size one for the details. Houdini 17.5 & Redshift & Luminar 2018 Cheers, Tom
  26. 1 point
    assemblyRnD_martin_v21_walksim_working.mp4 That's how a first version ended up looking! Just some noise to make it more alive... But it's something to start the buildup from.
  27. 1 point
    it seem in H16 the * syntax in the group sop, not work, or don't work the same. just remove it (this will select all the points). This way the file sort of work. The second problem seem to be the Volume rasterize particle sop. it's not the same in H17+ I'm attaching a capture so you can see and the "semi-working" file physarum_2d_01Error b.hipnc
  28. 1 point
  29. 1 point
    Hi Frederik, this may help you regarding your first question:
  30. 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.
  31. 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.
  32. 1 point
    hi, there is a job for you in guangzhou, would you like to try? you can add my wechat:world_sparky
  33. 1 point
    Good day ladies and gentlemen, This student project is a Houdini tool aimed at generating game-ready rooms using predefined asset libraries, developed by myself and Mihnea Stoica, over the course of five months, at Breda University of Applied Sciences. We developed this tool, as part of an outsource group, for a student game project, called Captain Starshot, developed by Double Door Games. We wanted to see how flexible and adaptable the tool was with different asset libraries, therefore, by courtesy of team Morbid, a student game team at Breda University of Applied Sciences, in one week we were able to make a new test case, where the results of the generated rooms looked very promising. All kind of feedback and suggestions are welcome ----------------- Developers: · Gonzalo A. Gigosos https://twitter.com/GGigosos https://www.linkedin.com/in/gonzalo-gigosos-739247b1/ · Mihnea Stoica https://twitter.com/stoica_mihnea https://www.linkedin.com/in/stoica-mihnea/ ----------------- · Double Door Games https://www.doubledoorgame.com/ · Captain Starshot (avaliable on Steam for free) https://store.steampowered.com/app/1037410/Captain_Starshot/ · Team Morbid https://shatteredlights.com/ ----------------- · Song Title: Crimson Fly Artist: Huma-Huma youtu.be/qpxhgby-ONI ----------------- · Breda University of Applied Sciences https://www.buas.nl/
  34. 1 point
  35. 1 point
    I just did a Python script to create a sphere only with nulls. Actually can be done any shape you want. Here the video with the HIP file included: I know, it's a completely useless and silly project, but was fun to do. Any comment will be welcomed, Oscar
  36. 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
  37. 1 point
    Hi, I just clicked 'Don't ask me again' in a Confirmation Message while I was testing a script and now I don't know how to make it appears again ( maybe in a preferences file?) Anyone knows ? Thanks, J. P.D. SOLVED There is a tab in preferences ( main menu), called 'Warning Dialogs'
  38. 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
  39. 1 point
    Look really cool. I wonder how fast the cook times are on an average level. And how hard would it be to add an editor in Unreal to make the level maps. So you would not need to go back and forth between Photoshop and unreal to iterate on levels.
  40. 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
  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
    To get reflection symmetry in VEX try setting v@P to abs(v@P). Feeding that into an animated noise function will bring you some caleidoscope-like effects. vector pos = abs(v@P) + set(@Time * 0.2, @Time, @Time * 0.4); v@P += v@N * anoise(pos); Otherwise yes, clip and mirror. calei.hiplc
  43. 1 point
    Thanks! I dug around a bit, and my problem turned out to be my confusion regarding how Houdini handles two things: - The comp / over nodes and default alpha behaviour - Houdini's apparent inconsistency when displaying mask images. I will explain: When looking at the my mask (the image from the sop import) the comp view displays it as black->red. However, the thumbnails in the tree view are in greyscale. This threw me for a loop and I thought I had missed some colourspace conversion step. In the end it turned out I basically had things right, but to get the proper values I had to use a channel copy to properly bind the reds in the imported mask into mask values. So, sorry for the ignorance and many thanks for the help. I hope this might be of help to someone else in the future.
  44. 1 point
    Isolate Selection I wrote this many many years ago, still works Can put it on a hotkey or new radial menu. It's a toggle. When nothing is selected - it shows everything. import os def isolate(): sel = hou.selectedNodes() if not sel: sel_string = "*" else: sel_string = " ".join([n.name() for n in sel]) try: if hou.os.environ['CUR_ISOLATE'] == sel_string: sel_string = "*" except: pass hou.hscript('viewdisplay -G "%s" `run("viewls -n")`' % sel_string) os.environ['CUR_ISOLATE'] = sel_string
  45. 1 point
    There are several ways of doing it This one in particular uses the point number to control the width The polywire is the default one, just put "$WIDTH" in the "wire radius" option. The function "npoints" just returns the amount of points in some geometry, in this case, the first input (designated by the 0 there). The "(float)" part is just because Houdini wasn't being nice with the division without it
  46. 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
  47. 1 point
    You may not have counted on the fact that multiple events are sent on the same frame. This may mess up simple flip/flop logic approaches. If you install the callback even viewer, from the help, you can see the events that are flowing through the playbar. I am not sure what your final timeline control goal is, but here is a short script where I made a tool button that basically acts as a start/stop/rewind but also updates the count field on the NULL. I added an additional integer value to the NULL as well. This is called last_frame which holds the last frame number when this count value was updated. So the first thing we do when we receive an event is to examine the frame number for the event. If it is the same as our last_frame value then the work needed done on this frame is assumed to be completed (thus we don't increment count). import hou p_count = hou.parm('/obj/box_object1/CONTROLS/count') p_last_frame = hou.parm('/obj/box_object1/CONTROLS/last_frame') # Setup event monitoring as described in help. def outputPlaybarEvent(event_type, frame): print type(event_type) s = "" if s.find("FrameChanged") != -1: # Houdini gives us many events on the same frame. # We only want to count once for each frame number. if p_frame != frame: # Our last frame is not equal to this frame, issue a new count. val = p_count.eval() p_count.set(val+1) p_last_frame.set(frame) print "Playbar event", event_type, "at frame", frame hou.playbar.addEventCallback(outputPlaybarEvent) if hou.playbar.isPlaying(): # We are already playing, so issue a stop. hou.playbar.stop() else: # The user want to start playing, reset count to one. p_count.set(1) hou.setFrame(1) p_last_frame.set(1) hou.playbar.play() ap_toolshelf_playbar_control.hiplc
  48. 1 point
    As you described, glue constraints will hold together until deleted or collision. A force breaking on glue constraints does not work. If you want to use forces you would have to use the cone twist or similar constraints. So your file looks fine to me. Setting the active value also looks correct. I found a file from an older post I made where the conetwist and the active value was used. Check it out to better understand and see one way of how to set it up. Hope it helps. Dennis active_with_constraint_v01.hipnc
  49. 1 point
    Hey Atom, Even though Lost Boys School is a pretty decent school (some of my colleagues went there, and A.Lowell is a great teacher) that sounds like a crazy tuition, and I agree with David that you could much more easily learn things on your own nowadays, especially with the knowledge you already have. I'd much rather buy an online CG workshop more than going back to school, unless you are trying to get a Master degree to teach at a college level, or something like that. About wages, here in Canada people can make approximately between 50k to 150k a year, with exceptions for sups and dependent and companies and cities. In London you can ask for a bit more but you don't get paid OT (like many cities in Europe) and life cost is extremely expensive. In big companies I believe the people who make big figures are developers, RnDs, and once again Sups. If you want to know something more specific feel free to PM me.
  50. 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.