Jump to content

Leaderboard


Popular Content

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

  1. 12 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
  2. 12 points
    I wrote a custom render engine in COPs today. While 'engine' is probably a bit far fetched, it's a little ray tracer experimentally supporting: Meshes with UV coordinates Shading on diffuse textures Multiple point lights (including color, intensity, size) Area shadows and light attenuation Ambient occlusion Specular highlights Reflections with varying roughness The snippet basically transforms the pixel canvas to the camera position and shoots rays around using VEX functions like intersect() and primuv(). The rendering process only takes a few seconds. I still have to figure the licensing fees, though COP_render.hipnc
  3. 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
  4. 8 points
    Hi all! This is the dynamic cloud I created with time-lapse effect in Houdini 17.5. I tried many ways and added several types of Gas Microsolvers, especially during the process of the dissipation and creation of the could. Because this is a difficult problem that must be solved in order to complete simulation, I added more Gas Microsolvers to control the shape of the cloud and adjusted its ambient temperature and buoyancy forces. Eventually the problem is solved. You’re welcome to make comments and discuss the related skills. https://vimeo.com/376645761 My PC specs: Memory: 64GB Processor: AMD Ryzen 1950X Graphics: GeForce GTX 1070Ti Simulation: 20H Space disk: 500G Render:Mantra I recommend using Linux for massive simulation because Linux requires less ram usage than Windows.
  5. 6 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.
  6. 5 points
    And we're done and everything seems to be in order. Thanks
  7. 5 points
    Hey everyone, so after my very long thread (https://forums.odforce.net/topic/44053-implement-kernel-maths-in-vex/) I finally found a solution. The setup works great at 0.05 res, you might have to dive inside the solver and change some parameters to get it work at other resolutions (especially to get the droplets). Here are some test : Emission threshold at 60 (depending on the situation, there might be some abusive expansion, like at the end on the rubber toy, but this seems impossible to fix when you want a full thin sheet) Stretch threshold at 0.75 / Surface Tension 0.5 Emission threshold at 15 / Stretch threshold at 1.25 / Surface Tension 1 Houdini default Flip with Surface Tension at 1 Crown test with 50 Emission threshold (problem with infinite expansion with liquid dropping from the collider) If someone has suggestion to improve it, feel free to tell me I'm still working on fixing the infinite expansion issue, but the emission threshold is doing great until 20-30 depending on the situation Cheers, thin_sheet_solver.hipnc
  8. 5 points
    Here is an update with obstacles, sliding fuel sources, randomized fuel shape and strong prevailing winds. ap_raining_fuel_111819.hiplc
  9. 5 points
    I took time to put in some comments in the vellumsolver, hope that helps....here's the file. vu_wallpeel.hiplc
  10. 4 points
    Hello again! It's been a long time. Today with the release of Houdini 18 marks the first "official" release of MOPs: v1.00. This includes a ton of changes since the previous Stable release, and is now feature complete, barring any future bugfixes. Development of new features will now be focused on the upcoming commercial version of MOPs. The list is way too long to post here, so I'll just link to the Github release page: https://github.com/toadstorm/MOPS/releases/tag/v1.00 Please continue to post bug reports, feature requests, or any other feedback, either here, on GitHub, or in the MOPs forums! Thanks as always!
  11. 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
  12. 4 points
    Maybe it's useful for someone? just sharing what I have learned. vopS7.hipnc
  13. 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
  14. 4 points
    This has come up quite often for me when working with imported static FBX files. Often you will get every little piece of a model inside it's own geo object but you really just want to work with them all as a single mesh. This script will examine your node selection and create a new /obj level object that will object merge in all the nodes selected into a single merge. Then you can just use that single node to represent your model. (i.e fix up normals, detail materials, prepare for simulation, export etc...) import hou THRESHOLD = 0.015 def luminance(pixel): return (0.299 * pixel[0] + 0.587 * pixel[1] + 0.114 * pixel[2]) def is_similar(pixel_a, pixel_b, threshold): return abs(luminance(pixel_a) - luminance(pixel_b)) < threshold lst_user_selection = hou.selectedNodes() if len(lst_user_selection): # Make a geo node that will ObjectMerge in all the nodes in the selection. node_geo = hou.node('/obj').createNode("geo","geo_merge_result") if node_geo: node_geo.moveToGoodPosition() #node_geo.node('file1').destroy() node_merge = node_geo.createNode('merge') node_merge.moveToGoodPosition() # Create a normal to fix up everything after the merge. node_normal = node_geo.createNode("normal","normal1") node_normal.setInput(0, node_merge) # Create a NULL for our output placeholder. node_normal.setDisplayFlag(True) node_normal.setRenderFlag(True) node_normal.moveToGoodPosition() # Create a NULL for our output placeholder. node_null = node_geo.createNode("null","OUT") node_null.setInput(0, node_normal) # Create a NULL for our output placeholder. node_null.setDisplayFlag(True) node_null.setRenderFlag(True) node_null.moveToGoodPosition() for (n,node) in enumerate(lst_user_selection): print node.name() node_temp = node_geo.createNode("object_merge",node.name()) node_temp.parm('objpath1').set(node.path()) node_temp.parm('xformtype').set(1) node_temp.moveToGoodPosition() assign_by_node_color = True if assign_by_node_color: # Use the color of nodes to inherit the same @shop_materialpath. s = "rs_DEFAULT" if is_similar(node.color().rgb(), (0.584,0.776,1.0), THRESHOLD): s = "rs_blue3" if is_similar(node.color().rgb(), (0.6,0.6,0.6), THRESHOLD): s = "rs_grey5" if is_similar(node.color().rgb(), (0.145,0.667,0.557), THRESHOLD): s = "rs_green5" if is_similar(node.color().rgb(), (1.0,0.725,0.0), THRESHOLD): s = "rs_yellow6" if is_similar(node.color().rgb(), (0.996,0.933,0.0), THRESHOLD): s = "rs_yellow5" # Create a wrangle to define our shop_materialpath. node_wrangle = node_geo.createNode("attribwrangle","attribwrangle1") node_wrangle.parm('snippet').set('s@shop_materialpath = "/shop/%s";' % s) node_wrangle.parm('class').set(1) node_wrangle.moveToGoodPosition() node_wrangle.setInput(0, node_temp) # Create a color to match the node color. node_color = node_geo.createNode("color","color1") node_color.parm('colorr').set(node.color().rgb()[0]) node_color.parm('colorg').set(node.color().rgb()[1]) node_color.parm('colorb').set(node.color().rgb()[2]) node_color.moveToGoodPosition() node_color.setInput(0, node_wrangle) node_merge.setInput(n,node_color) else: node_merge.setInput(n,node_temp) In this image the white areas were not part of the selection. The color of the nodes in the selection is forwarded into the object merge as an additional color node. There is also an attribute wrangle added inline to assign the @shop_materialpath based upon the color detected. This can convert objects with same exact material referencing multiple copies of the same material into a single /shop path material. You can adjust to /mat if needed.
  15. 3 points
    Time should be around 12am PST. Apologies to all our non North American visitors, insomniacs and anyone working OT tonight. On the plus side the site should be faster and, uh... well just faster really.
  16. 3 points
    Dark mode for the documentation.
  17. 3 points
    Such a great release! It is an honor to find out that a little piece of code I wrote a few years ago is now a part of Houdini (: I stole it from this guy and just converted it to vex, so all credit goes to him : https://forums.cgsociety.org/t/slerp-function/1406236/4
  18. 3 points
    @Omar Wanis Hi! http://www.issp.ac.ru/ebooks/books/open/Advanced_Fluid_Dynamics.pdf https://www.in.tum.de/fileadmin/w00bws/cg/Research/Publications/2016/NBFlip/nbflip.pdf http://graphics.stanford.edu/courses/cs348c/ http://www.cs.columbia.edu/cg/liquidhair/main_opt.pdf https://cs.uwaterloo.ca/~c2batty/papers/Larionov2017/Larionov2017.pdf https://nccastaff.bournemouth.ac.uk/jmacey/MastersProjects/MSc17/03/thesis.pdf https://www.diva-portal.org/smash/get/diva2:559073/FULLTEXT01.pdf http://wanochoi.com/lecture/Houdini16_FLIP.pdf http://staffwww.itn.liu.se/~jonun/web/teaching/2011-TNCG13/Lectures/Lecture03-MW/Wrenninge_2011_Fluids.pdf https://pdfs.semanticscholar.org/9a91/863baccd64c570e6912617f2b11cf55a971b.pdf
  19. 3 points
    There are a few notes inside the hipnc to explain what I did. Basically, the trick is to align the roof with the main axis before dividing it, then transform it back to its previous orientation. And some housekeeping here and there roof.hipnc
  20. 3 points
    Really enjoyed his fmx talk. https://www.youtube.com/watch?v=JqeEO8zccW8
  21. 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.
  22. 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
  23. 3 points
    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.
  24. 3 points
    Hi RustyMac2020, may I give you a polite suggestions to: - give your threads a correct descriptive titles (like the one above instead of the original "What is the difference?") - avoid asking about things directly described in relevant documentation (like what does a given function) - avoid collapsing many unrelated topic into single thread - finally start using spell checker These are not to make life of a novice user harder, but to lower noise level and make public forum more useful. Thanks! btw documentation chapter about attributes (what they are and so forth): https://www.sidefx.com/docs/houdini/model/attributes.html
  25. 3 points
    This one already exists - it is called Houdini CORE.
  26. 3 points
    Hi all, As some of you may know I have recently started a youtube channel where I am sharing some techniques, setups and tips. My goal is to first cover some of the fundamental tools/setups and then build more elaborate setups. I wanted to share this with the odforce community too as this community will always have a special place in my heart :). Thank you for watching & have fun learning! The channel: https://www.youtube.com/channel/UCZMPkkgnAFghvffxaTh6CsA My first video:
  27. 3 points
    Haven't seen 18 yet so don't know if the code editor was improved, but if not, this still is my ABSOLUTE NR. 1 wish. if(code_editor_improved != true) { Code editing in Houdini Wrangles is - well - crap. It's a total shame we don't even see command parameter lists when typing since even in value fields typing expressions does it and has autocomplete for paths etc. Even only bringing that ability to the VEX editor would be very helpful. Of course it would also make a lot of sense to have other settings and helpers in there, like auto-closing brackets, more clever cursor positioning, offering existing variables and attributes when typing etc. - the Houdini devs should know ALL about that, they probably spend their life in real code editors... The use of external editors could be improved a lot if a.) we wouldn't have to press ALT+E twice for the external editor and wouldn't have to get to the floating editor first each time and b.) if that connection would be "live" like for instance the Pinegrow Web Editor does it with a little plugin for Code and Atom, where you can type in either the internal or external editor and they update each other in realtime. The current system is too clumsy and the 3rd party implementations also aren't really there (no negativity towards the authors intended at all!). Make it native! Make it goooooooood! } else { All is well. Nothing to see here. :-) } Cheers, Tom
  28. 3 points
    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.
  29. 3 points
    Now I get it , just to fine adjust and I'm goona posted hipnc .
  30. 2 points
    Thanks Jie for explanation, it works!! Spot on Aizatulin! That is what I was missing. So everything was correct in vops, just needed to normalize the N beforehand! Cheers I`ll add the hip here, if anyone needs it, grooming specific shape is so much more controllable than using guideadvect. Vector_length4.hip
  31. 2 points
    You can have the boolean seam result hang out in space. Animate the grid to track the bottom of the wave and animate the particle activation when you need to spray more particles. ap_WaveDeformerTestQuickMask_edit2.hiplc
  32. 2 points
  33. 2 points
    Hello ODforce! I just added a new Houdini 18 update to my course, "Houdini for the New Artist" that goes over the basics of LOPS and Karma with Houdini 18: In the near future, I'll be adding more updates to my other courses which you can find at www.cgforge.com Happy holidays! - Tyler
  34. 2 points
    So just an update, I've really worked the lighting and made a bit of comp in photoshop with a quick and dirty painted sky. I'm thinking of adding some more smoke now, as the volcano looks kind of shy with this tiny smoky champ Cheeeeers,
  35. 2 points
    Hi all, I've been practicing and experimenting with VEX in Houdini and I challenged myself to see how far I can go with only VEX and VOP. I did successfully manage to create this simple effect without any use of dynamic simulation (DOP). https://vimeo.com/375250070 Basic Summary: A particle system that computes at frame-basis. I can jump from frame 1 to 700 without waiting for simulation. Instead of the traditional age/life computation, this system uses travel speed to compute. Trajectory generated with polar coordinate + Flow Noise on sphere section. The graph mainly consist of VEXs. There's still room to be improved definitely, if anyone is building more upon this, please share it, would love to see it. I think at the end of the day, this kind of system is probably not entirely practical tbh, but it's a great practice and study on coding with VEX. (SHOUTOUT to a best friend of mine who's studying mechanical engineering, helped me to find a way to calculate the spiral length.) HIP file here: FX_Rasengan_v01.hipnc Happy Coding!
  36. 2 points
    Play with this file ( combine different shapes ) solu2od.hipnc colODD.hipnc I like the arrangement in your file ...
  37. 2 points
    His website is also a very good resource https://www.glassner.com/computer-graphics/cga-columns/
  38. 2 points
    if you do an extremely simple test case where your hair just hang in midair with no colliders...it works fine, breaking fine. If you then add a collider like a character's head, the scalp, the hairs tend to get stuck and not all would break as you want. In your scene, in vellumsolver2>solver set Collision Passes to 0 set Post Collision Passes to 1 voila...no more hair... vu_AdvancedHairYeahYeah.hiplc
  39. 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
  40. 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.
  41. 2 points
    Added a transform to rotate before the polysplits.....Thanks @Paul Corfield for the idea!!!
  42. 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
  43. 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
  44. 2 points
    Hi, I am specialized in Houdini FX, Simulations (flip, pyro, RBD Bullet), VEX and Python scripting also a good experience in lighting and compositing. Currently based in Shenzhen, China. you can checkout my vimeo for my work and contact me on LinkedIn. Available for freelance Houdini FX work (Remote work) and Houdini pipeline development (Remote work) Thanks, Mahesh MS. vimeo: https://vimeo.com/maxcolor/ LinkedIn: https://www.linkedin.com/in/maxcolor/ email: msmahesh@live.com
  45. 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,
  46. 2 points
    here is a simple example ts_carve_by_clip.hip
  47. 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
  48. 2 points
    Who you callin old? Can't wait to see the finished project, you folk at Filmakademie always make amazing stuff!
  49. 2 points
    In case you wanted truly horizontal greeble, you could put a clip SOP into loops on all primitives. Keeps you UVs intact, too. horizontal_greeble.hipnc
  50. 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;
×