Jump to content


Popular Content

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

  1. 11 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
  2. 10 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. 4 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
  4. 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.
  5. 3 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
  6. 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
  7. 3 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.
  8. 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
  9. 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/
  10. 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'))])
  11. 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
  12. 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,
  13. 2 points
    here is a simple example ts_carve_by_clip.hip
  14. 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
  15. 2 points
    @luidox I use this method for mine patterns On CNC machining. You have endless possibilities and different inline code here on the forum. Houdini 16.5 Odex.hipnc
  16. 2 points
    Who you callin old? Can't wait to see the finished project, you folk at Filmakademie always make amazing stuff!
  17. 2 points
    This one already exists - it is called Houdini CORE.
  18. 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
  19. 2 points
    I'd recommend against using parameter paths that point different nodes in VEX like Roznick said, create all UI you need on your wrangle and just channel reference those parameters to external parameters, this way Houdini will be able to track dependencies and if you rename your line1 node everything will still work
  20. 2 points
    I want to start spending an hour everyday to just explore simple stuff in Houdini. This will be areas I probably feel I lack a little understanding, as well as ideas I have had but never really executed. Hopefully some form of render will emerge from every little exercise that I do. Last night I had a quick dive into vellum and played around with some Cloth. Rendered in Redshift.
  21. 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!
  22. 1 point
    npoints() gives you the number of points the input have. point() can give you an attribute value from a specific point. If you write the function in vex you can put your mouse over the function and hit f1, then a helpcard will tell you what it does.
  23. 1 point
    Interesting, do you use intrinsic uvs or do you create your own uv for the carve position? (or is this a question i have to pay for). Is it 10x faster than the carve sop if you dont want per primitive controll?
  24. 1 point
    Alright, found a great setup by good old Matt Estela. http://www.tokeru.com/cgwiki/index.php?title=ConstraintNetworks2 "leaves_rbd_speedlimit_and_torque.hipnc" Depicts a pretty great workflow to set this up. Got it working with pigheads in a redo-scene. I only switched out the old spring constraint relationships to bullet soft constraint relationships. They work wonderfully.
  25. 1 point
    I am not sure why it doesnt work when you load from cop. It does work when you load from a file. You could just save out the cop to file then load it as back ground image.
  26. 1 point
    Hi, that feature is already built-in by setting the distribution mode to "Custom Ramp". If you still want to do it your way make sure the chramp() has the correct path, in your case "threshold" instead of "../att-retime", then that should work too.
  27. 1 point
    No, because I usually just drop a vellum cloth and vellum solver. If I go inside the vellum solver I can add pop nodes and somehow I have to import the velocity there.
  28. 1 point
    Here are the single passes for now:
  29. 1 point
    That's one of the main reasons that the Gamedev team has rebranded as SideFX Labs - so that what they produce isn't just seen as content for games. They're really driven by the community.
  30. 1 point
    same wrangle, add following lines of code vector avg = {0,0,0}; for(int i = 0; i!=@scattered; ++i) { int pt = findattribval(1, "point", "sourceprim", @primnum, i); vector p = point(1, "P", pt); avg += p; } avg /= float(@scattered); v@avgP = avg;
  31. 1 point
    Thanks for answering Librarian. I have figured out the answer - I wanted to add a youtube link and I found that all I had to do is to paste the link Kind regards, Ippokratis
  32. 1 point
    on the scatter, under Output atributes, turn on Prim Num Attribute then use a primitivewrangle, plug the grid into the first and scatter into second input: i@scattered = findattribvalcount(1, "point", "sourceprim", @primnum);
  33. 1 point
    nowadays you can use quaterniontoeuler() VEX function, which returns radians however
  34. 1 point
    Thank you very much
  35. 1 point
    Hi, your code snippet already works. I would recommend using relative paths where possible though: f@test = chf("../line1/dist"); You can also use these functions to read ramps, string, vector or integer parameters or their raw value: Cheers, Luca
  36. 1 point
    Recent work from Chinese animated feature 哪吒 (NeZha), I was responsible for creating and rendering of the water effects using Houdini flip to build a guided system for water and render in Mantra, final compositing done in Nuke.
  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
    more fun and adjustments. Combine with first file
  39. 1 point
    None of the above are smaller wishes. I wouldn't worry. These wishlist have been around for well over a decade for each major version. Plus as noted this is non-official, for actual BUGs, RFEs, and Question they need to be submitted to support in order to be considered. SideFX staff may be lurking on Odforce, but they do not actually monitor outside SideFX.com forums. Mostly these threads are for ranting, venting, and once in a while a collaborate group hive mind for features that should exist. Also a lot of re-directions for features that do exist, but are obscure in the Houdini lexicon of terminology like the past and thankfully dead Cookie Sop...
  40. 1 point
    soon for everyone(hipnc) to have fun, just to fine adjust yupiiiiii
  41. 1 point
    Check out the course at: https://www.cgforge.com/course?courseid=pyro-i Thanks for watching!
  42. 1 point
    It's been a while (!) but here's an interim development of the original double wishbone chassis concept. Now you can fully adjust chassis to match car - it's all done via names - so you can transform the model in any way you like (just don't change the point numbering as constraint naming is based on point numbers). Effectively bullet is used to make the constraints easy and the only real simulation is on the wishbone springs. Wheels are pre-animated along a path and then adjusted for roll, ackerman steering angle (inner and outer wheels at different angles). Still quite tricky to adjust the sim because mass, spring strength/damping, load transfer and conetwist maximum angles are all interrelated - change one and you need to change all the others! This test Porsche is overly springy to illustrate the basic concepts at work especially the load transfer forward to back. Needs more work on rest to action transition period, too! To change the car simply bring the new car and wheels into the chassis node and swap out, make sure to transform chassis geo to fit. Change path, collision ground as you see fit.... car_rig_bullet_julian.hip
  43. 1 point
    Here is a more generic modification of my previous example using an @mask attribute. I have no idea, if there is way to make it work for the blend shape node aswell. By the way: nice houdini viewer ! blend_inside_controlGeoA.hipnc
  44. 1 point
    you can exclude the current prim in the xyzdist() function by using groups. i've attached an example. hth. petz xyzdist_1.hipnc
  45. 1 point
    Hi, I attached a file that goes through some ways I found that will read a channel from CHOPs using SOP wrangles. It is based on the suggestion from this post of adding a spare parameter that reads in the channel using a chop() hscript expression. Then from there, I just discovered that the ch() vex expression can have a second argument that accepts time as an input! With that, you can now use any attribute from your points to sample the channel. In the example file, I sampled using the standard point numbers, and another one using UVs. H16.5.268 Indie - chop_to_sop.rar
  46. 1 point
    If you explicitly cast chramp to a vector first, the 'create spare parameters button' will create a colour ramp. Eg @Cd = vector(chramp('myramp',@P.x));
  47. 1 point
    i was thinking of the same thing although glue constraint doesn't seem to respect world space anchors, we probably need to place bogus packed objects for it to attached to, and set it to never collide unto anything, hopefully in the future we get more opitons, glue has this nice ability to bunch objects together as one, unlike the hard/pin constraint which will stretch or jitter, seems to me that glue is much more worthy of the name hard constraint.
  48. 1 point
    I'd never pay that much to study. For that amount you could sit at home learning by yourself for a long time, get an internship somewhere and get into the industry that way. $41k is crazy. I dont know how the industry looks like over in america but yeah, if thats the norm I feel sorry for you guys.
  49. 1 point
    Awesome! Thanks guys! I got both methods working. H15 file attached below. insideObject.hipnc
  50. 1 point
    or volumesample() on a vdb sdf. maybe not the most straight forward solution, but one that is pretty handy. and I believe faster on high point counts.