Jump to content


Popular Content

Showing most liked content since 08/20/2017 in all areas

  1. 13 points
    Hello, since last week i can play with houdini again to keep going my tests ... and bellow , some of my latest hip files from this video: torus+wrinckles+.hiplc stick man rbd+ .hiplc bubbles- rbd+cloth-2.hiplc
  2. 9 points
    Hey, thought I'd share this here. Preview of tree and foliage creation and layout tools now available on Gumroad. I've released them as "pay what you want" as my contribution to the community. I plan to keep supporting and improving these tools in future as well as releasing other tools. Let me know if you have any feedback/suggestions and I look forward to seeing what people create with them. Enjoy! https://gumroad.com/l/zWFNX
  3. 8 points
    If I can get the reaction API working reliably, we could maybe introduce a "best of" emoji that would archive especially good posts to a read-only channel or some other container (like the vault) if they get enough votes. This would allow for a quick rundown of the best content for people that aren't as directly involved in the day to day discussion. I just need a little free time to play around with the bot code...
  4. 7 points
    I am working on a way to use one object to dent or impact another object, with a ripple effect around the impact area. The color red is available to create a group out of the impact area. Here is what I have so far. There is a small jump in the result which I have not figured out how to solve yet. ap_matte_vdb_dent_with_ripple.hiplc
  5. 7 points
    The backstory is that Jason and I were trying to find a name for our newly fledged Houdini website, and so we challenged the artists in the studio to come up with a name (bearing in mind that Jason and I were the only two Houdini users in the facility). We even offered a reward for the best name: pizza! About 20 minutes later we stumbled across the 'Od Force' definition on some website somewhere and ran with it. The pizza we bought ourselves was amazing.
  6. 6 points
    Hi all We need to run maintenance on the server as well as upgrade the forum. The work will take place this weekend sometime, so if you get here and things look down, please be aware that we're working on it ;). Thanks M
  7. 6 points
    Hey magicians, Wanted to share some Houdini tutoriales I did You can find them here: https://caskaldesign.com/tutorials/ Cheers!
  8. 5 points
  9. 5 points
    Take a look. organic_stuff.hipnc
  10. 5 points
    In this tutorial we will go over how to set up optimized pyro clustering with oriented DOP containers in Houdini given a piece of geometry moving through a scene. This process will lower simulation time and be more efficient when saving to disk because there are fewer voxels. Link to Tutorial -> https://gum.co/TqUNR The tutorial is free though, if you feel like giving me some support I'd be grateful !! We first go over how to get things set up quick and easy and in the second half of the tutorial we make further optimizations using VEX. We'll look at how to rewrite cluster points to do exactly what we need it to, which includes rewriting the resample sop using VEX. An intermediate tutorial for those looking to speed up their pyro workflow and learn some VEX. Includes the scene file! Hope to see everyone leveraging these optimizations in the future and squeezing in those extra few iterations before deadline! You can reach me at trzankofx@gmail.com for questions or comments.
  11. 5 points
    Even though @trandzik already has an amazing solution for creating these patterns, I wanted to take a shot at it myself and ended up with the following. I didn't clean up any of the code, so this is just a mess but it works . divide_grid_2.hipnc
  12. 4 points
    What's that old adage? "When all you know is a single chop trick, everything looks like that same single chop trick..." pig_timeslice.hip
  13. 4 points
    Hello Everyone, We are very excited to announce our latest workshop "Mastering Pyro FX In Houdini" This trailer summarizes the content of the workshop. Please feel free to email as us contact@rebelway if you have any questions. Link: https://rebelway.net/mastering-pyro-fx-in-houdini/ Regards Saber
  14. 4 points
    From my personal understanding: 1. HScript is a shell-like language, the old scripting core of Houdini, mostly replaced with Python this days. Example: # Node geometryvopglobal1 (Vop/geometryvopglobal) opadd -n geometryvopglobal geometryvopglobal1 oplocate -x 1.90579 -y 1.97631 geometryvopglobal1 opspareds "" geometryvopglobal1 opparm geometryvopglobal1 chlock geometryvopglobal1 -* chautoscope geometryvopglobal1 -* opset -d on -r on -h off -f off -y off -t off -l off -s off -u off -e on -b off -L off -M off -H on geometryvopglobal1 opexprlanguage -s hscript geometryvopglobal1 Scripts typically look like sequences of commands. We still may find such scripts in old shelf tools, menu scripts, etc. Summarizing: npoints(): unavailable. Expression function can be used inside backticks. @numpt: unavailable. Where to use: in scripts and shelf tools, but better use HOM. 2. HScript Expressions is a special part of HScript used inside `backticks` to substitute contents with result of some computation. In parameter fields we use them without backticks (assumed that everything is expression), in string parameter fields we need to use backticks to evaluate contents and substitute with resulting values. # Typical expression. if(npoints(0)==0, $F, $FEND - $F) # Typical string. $HIP/render/explosion_`$F-1`.png # We can use "vex-like" @Frame instead of $F. # There is no "vex-like" equivalent for $FEND. if(npoints(0)==0, @Frame, $FEND - @Frame) When we type "@foo" in parameter field, we don't use VEX. It's like an alternate way to access something stored in "$FOO". It is not guaranteed to work for every variable that can be accessed with dollar sign. Example: before H16 Group SOP stored number of input points in variable $NPT. After @-syntax was introduced in H15, we expected logical "vex-like" equivalent with same meaning to exist: @numpt. There is no such variable, however. The feature still not implemented fully, and pretty much undocumented. New Group SOP node dropped the local var. npoints() is an expression function we can use anywhere in parameters. This is what we can use in new Group SOP to get number of input points. It accepts string path. It specially treats numbers provided as arguments (by automatically calling "opinputpath(".", number)" I guess). There is many expression functions which has no such convenient handling and will fail if we provide just 0 to them. opinputpath(".", 0) can be used instead. Expressions are widely used in Houdini. They have nice and compact syntax convenient to use inside parameters. Python is used too, but for more advanced tasks. Summarizing: npoints(): available as expression function. @numpt: unavailable. Other vex-like implicit variables may work, e.g. @Frame. $NPT: available as local variables defined on some old nodes. Where to use: in numeric parameters, in string parameters inside backticks. 3. VEX is a C-like programming language for shading and geometry processing tasks. Typical VEX program defines some context function operating over inputs and writing (exporting) some results. Sample VEX program defining SOP context function: sop restpos(export vector rest={0,0,0}) { rest = P; } There is no "@numpt"-like syntax in VEX. If we need to access some attribute, we need to use functions like attrib(). We need to compute non-attribute variable like @numpt using corresponding VEX function npoints(). Summarizing: npoints(): available as VEX function. @numpt: unavailable. Where to use: in standalone .vfl and .h files. 4. Wrangles, Snippets, VEXpressions . It is VEX extended with extra features, implemented via Snippet VOP and Attribute VOP SOP. @-style attribute bindings is one of them. Also, as we type the code inside string parameter, we can also incorporate some HScript Expressions using backticks. Typical Wrangle: @rest = @P; This will be wrapped into CVEX context function and expanded into normal VEX program automatically: void wrangle(vector rest; vector P) { rest = P; } cvex f(export vector rest={0,0,0}; export vector P={0,0,0}) { wrangle(rest, P); } @numpt is an implicit variable defined in Attribute VOP SOP and containing number of points of first input. Whenever you use VEXpressions (Snippet VOP, Wrangle SOPs, Attribute Expression SOP, Group Expression SOP, etc.), you can use @numpt. npoints() VEX function is also available, obviously. Summarizing: npoints(): available as VEX function. Also, expression function can be used inside backticks. @numpt: available. Where to use: in VEXpression parameters. 5. Grouping patterns mini-language. Specifically, an ad-hoc groups where @ also used for attribute access. You can pass a string like "@P.x<0.5" to the group parameter in many nodes, or as group argument in VEX functions. It will be processed by Houdini automatically. As we enter the group parameter string, we can use HScript Expressions inside backticks. Summarizing: npoints(): unavailable. Expression function can be used inside backticks. @numpt: unavailable. Where to use: in group parameters, in group string arguments in VEX.
  15. 4 points
    Hey magicians, sharing some procedural concepts, all the first setup comes from a decahedron, you change that shape and get another character completely different, the second one is more focus on get a proper functionality, still messing with the shape language
  16. 4 points
    Usually use this approach to merge clusters. vdb_merge_clusters.hip
  17. 4 points
    Hey Cristina, So in regards to your question about masking the turbulence field. I've attached a scene file showing how to mask a turbulence field. In the example I've built there are a few steps to get this working: 1) in dops you can use the 'gas match field' node to create a new field ('turbmask_custom') based on an existing field. In this case I first want to build the field that is going to be used for masking. (this is the initialization of the variable). 2) then I need to put a value inside the voxels of the newly created field, so I am using a source volume for this, but in the sop to dop bindings, the density field will put its value in the 'turbmask_custom' field instead of adding it to density. 3) the next step is to add the gasturbulence node to create a noise field, but in the control field tab we can specify the mask. So that is where I put 'turbmask_custom' and also set the control influence to 1 so 100% of my field is used. In the case of your skull, ultimately you need a fog volume density field that contains those masking values. In the file I've added in a sphere to represent your skull. I first build an SDF from the sphere geo, then dilate the sdf, then turn it into a fog volume, then rename the field so it is not named 'surface' but instead is named 'density' so my sourcing in dops will be able to find the density field. I've also turned on the velocity visualization in the pyro object so you can see what the velocity field is doing (especially visible if you turn on/off the control field on the gas turbulence). You can get much more fancy by using dynamic fields that change over time (like temperature or heat, or some other custom field), but this should provide a good base example of masking a field in dops. Good luck and definitely post back the results of your project when you're done with it! dop_masking_v001.hip
  18. 4 points
    "Volume Displacement" Volume Displacement Experiment. Rendered in Redshift. Cheers, Tom
  19. 4 points
    depending on the number of vertices, the easiest method is most probably using setdetailattrib() like in f1's second example. however, for very dense meshes and if performance is important it's better to iterate over the vertices and resize the array in advance instead of appending in a loop. this way you avoid continuous bounds checking of the array. int num = detailintrinsic(@OpInput1, "primitivecount"); f[]@val_array; resize(@val_array, num); for(int i = 0; i < num; i++) @val_array[i] = vector(vertex(@OpInput1, "uv", i)).y; hth. petz
  20. 4 points
    you could put the following two lines in a vertex wrangle: setdetailattrib(geoself(), "min_val", @uv.y, "min"); setdetailattrib(geoself(), "max_val", @uv.y, "max");
  21. 3 points
    Sorry for making this thread and then going silent for a while, a lot has happened over the past few months, including me moving to LA on a whim... But I'm back!!!! I have tons of new files to share, which I'll push out in the coming weeks. Today I had a couple of hours to play with Houdini before going to an Escape Room (wish me luck), and I had been discussing the Laplace-Beltrami operator with a couple of buddies on discord for a long time, so i thought, why not implement one myself! After having thought about it for so long it actually didn't involve anything I hadn't already done, or covered in my blogs for that matter (go read them!!!!). The implementation is based off this paper: http://www.cs.princeton.edu/courses/archive/fall10/cos526/papers/sorkine05.pdf I did comment the wrangle so hopefully it makes sense. One caveat, is that this version does not include border weighting, so watch out for crazy minimization. For production, just use the attribute blur sop, this is more just me exploring weird math stuff that makes me question my art school degree... <3 <3 <3 P.S. there's a little ray tracing demo in there as well, since my roommate wanted to understand normals, and I went a bit too far off the deep end in explaining it to him.... JR_Laplacian_v001.hip
  22. 3 points
    During the last 3 weeks, a did some Rnd and published my results on vimeo . Some people asked me to share my files here, so here we are i hope it will help!
  23. 3 points
    I think primuvconvert function will be helpful for intrinsic uv attribute. An example of code to get relative distance between the vertices. // Run Over -> Points int prim; vector uv; xyzdist(0, @P, prim, uv); int mode = 4; // PRIMUV_UNIT_TO_UNITLEN u@uv_profile = primuvconvert(@OpInput1, set(uv.x, 0.0), prim, mode);
  24. 3 points
    @galagast, thanks! I updated my own snippet with closure check to work like yours. Here is what I got: // Detail wrangle. float length = primintrinsic(0, "measuredperimeter", 0); // Set to false if value of 1.0 is unwanted for the last point // of closed prims and instead need to be treated as if point with // u=1 is coincident with the first point (like in unrolled prims). int as_open = true; // Compensate for closing auto-edge length. if (as_open && primintrinsic(0, "closed", 0)) { vector auto_edge = point(0, "P", 0) - point(0, "P", @numpt-1); length -= length(auto_edge); } // Compute curve u. float passed = 0; for (int i = 1; i < @numpt; i++) { vector d = point(0, "P", i) - point(0, "P", i-1); passed += length(d); setpointattrib(0, "u", i, passed/length); } Difference between behaviors "as open" and "as unrolled":
  25. 3 points
    #Add Null node by pressing 'N' key selected_nodes = hou.selectedNodes() for node in selected_nodes: parent = node.parent() name_node_selected = node.name() null = parent.createNode(‘null’,’OUT_’ + name_node_selected) null.setInput(0,node) macolo = hou.Color((0,0.5,0)) null.setColor(macolo) pos = node.position() null.setPosition(pos) null.move([0,-1]) #flags null.setSelected(True,True) null.setDisplayFlag(True) null.setRenderFlag(True) Credit-Florian Bard
  26. 3 points
    Decided to look at this thread finally and it was a fantastic way to get more comfortable with animation techniques and just getting better with Vex. Some of the older (1st page) ones were H15 so I went ahead and updated them to H16 nodes where it made sense. Cleaned up a couple bits and bobs and made some minor visual tweaks. Hopefully this will help someone else who is starting out with basic Wrangle wrangling. Most of this is direct ports of Matt's work, with some contributions from iamhoy and some chitchat on the Discord forum. -Robert beesAndBombs_01_columns.hiplc beesAndBombs_02_twistingBox.hiplc beesAndBombs_03_waveGrid.hiplc beesAndBombs_04_twistingCubes.hiplc beesAndBombs_05_dancingOrbs.hiplc beesAndBombs_06_bounce.hiplc beesAndBombs_07_swirlBall.hiplc beesAndBombs_08_circleWave.hiplc
  27. 3 points
    More info here: http://simonfarussell.com/The-Creatures-of-Prometheus
  28. 3 points
    hi there. you can read the 'packedfulltransform' primitive intrinsic attribute of your packed primitives to get translate and rotate values from the primitives. you can then run these values thru your chops and apply then back in a primitive vop or wrangle. here's a vop example. -b C4D_mograph_rebuilding_bb_01.hip
  29. 3 points
    I want to share a little tool I made for grooming feathers. Its a set of 6 nodes, one base node and 5 modifiers. Super easy to use. Just connect them and.. there you go - you got yourself a pretty little feather. You can layer modifiers as many as you want. Any feedback is super appreciated. https://www.dropbox.com/sh/8v05sgdlo5erh0b/AADSfadqkxgPOBVeaGr2O49Oa?dl=0
  30. 3 points
    Monday update: The forum has been upgraded to the latest version and everything seems to be working well. There are some slight skin differences, but they should be minimal. For any who are interested, here is a full list of what the update brings us: https://invisioncommunity.com/news/invision-community-42-r1030/ Thanks M P.S. If any of the 'minimal' skin changes bother you in some way, please post in the od|force suggestions/bugs forum.
  31. 3 points
    Yes, I usually, flatten everything using vdb, and for the velocity fields, just use a max operation, you will have at the end a vdb combine for every field class in a for each loop.
  32. 3 points
    EDIT - Link to the boolean sphere file, in case anyone has trouble downloading the attachment: https://drive.google.com/open?id=0B0BbxninBS49aEVYa21TR3JYclU ----------------------------------------------------- Hi Marty, I don't know if you have anything specific in mind but here's a quick scene I threw together that renders a short 45-frame sequence. A dense poly sphere that gets booleaned, converted to VDB, back to polys and rendered via Mantra. Open a Render Scheduler tab if you don't have one open and hit "Render to Disk in Background" in the Mantra ROP. The work is split roughly 30/70 between SOP cooking and rendering. This machine completed the sequence in 15min 53sec (1950x @ 3.75GHz, Memory @ 3200MHz). Curious what you get on your machine, and also feel free to share any scenes you want me to run. booleanSphere.hip
  33. 3 points
    There are many other kitchen and sink nodes that need to be broken up: Facet SOP, Primitive SOP, Fuse SOP, etc.
  34. 3 points
    Well, there are cases where watertight geometry may have more advantages than using sweeped tubes with nicer UVs and lower overall vertexcount. I would compare both. I forgot to do my homework. In UV Transform replace this expression: piece_area / uv_area With this: sqrt(piece_area / uv_area)
  35. 3 points
    thats badass NPR
  36. 3 points
    (a) This method uses volume based and point based collisions (collision detection). The results are much better at the cost of speed in some cases with huge colliders; Regards velocity this method has 3 modes to automatically compute your collision velocity, "Rigid", "Point" and "Volume". (Look at the Gas Build Collision Mask DOP node for more info) (b) This method uses the standard pic approach to take into account colliders into the system as sdf representations; But at particle level the collision is just a test to see if a particle is inside, if is it, it will take it closer to the isocontour of the collision sdf. For the collision velocity you must compute it yourself. Both are very useful methods. For example when you have large scale sims, the (a) can be a pain of slow with high rez collisions, because the solver has to recompute the collisionmask even if you sample the collision volume from sops, and that can take a lot of time. With (b) method there is no need to compute the collisionmask out of a collision relationship, so it will be faster but you can loose some nice collision behavior, it will be more basic in few words. Cheers! Alejandro
  37. 3 points
  38. 3 points
    In truth there are many ways of approaching generative design challenges but Houdini has two fundamental toolsets that are peerless in the realm of DCC's and algorithmic design options such as Rhino's Grasshopper: - The multi-threaded nature of VEX in combination with the Solver SOP. - Houdini's VDB toolset. Put these two together and Houdini is a generative design powerhouse. The excellent approach laid out by @f1480187 is a variation on the kinds of approaches shared by the Entagma boys/girls. If you've been following them for quite a while you need to start looking at the tutorials as departure points for your own explorations. They've shared many of the core generative design techniques you can use in Houdini over the last 12 months or so; the trick for you as an artist is to decide how you're going to combine and build on those techniques. They're not sharing magic formulas as such but more a way of approaching your design goals. Two videos they didn't share on Entagma that are worth watching, go through the way they break down algorithms from academic papers into a structure (using both VEX and nodes) that can achieve their goals in Houdini (the were shared by SideFX on Vimeo and YouTube, so you might have already seen them, even so they're worth watching again). Algorithmic Design in Houdini Houdini Day at FMX 2017 - Generative Art I believe the core of what Entagma are sharing is an attitude and approach that artists can take to solving their own design challenges. For me, that's the true value of Entagma.
  39. 3 points
    vector qToE(vector4 q_value){ float q_0 = q_value.w ; float q_1 = q_value.x ; float q_2 = q_value.y ; float q_3 = q_value.z ; vector out = {0,0,0} ; out.x = atan2(2*(q_0*q_1+q_2*q_3), (1-2*(q_1*q_1+q_2*q_2))) ; out.y = asin(2*(q_0*q_2-q_3*q_1)) ; out.z = atan2(2*(q_0*q_3+q_1*q_2), (1-2*(q_2*q_2+q_3*q_3))) ; return out ; }
  40. 3 points
    1. Make noisy Iso Surface (like, noise($X * 5, $Y * 5, $Z * 5)). Deform with Soft Radius of Edit node or by low-frequency noise. Clip and mirror. 2, 4. Find any reaction diffusion implementation, apply it to a sphere. Rise points by resulting value. 3. Duplicate grids, apply noise, clip and extrude.
  41. 3 points
    Hey Alvaro, Here is a bit over-complicated setup using a vector field to define the id masks, but you can use also scalar fields directly. In this setup I'm using the id masks ( aka source A, sourceB ) to affect dissipation and turbulence for each source, please look into those "shapers" in the pyro solver. I hope this helps you! Cheers! Alejandro multi.pyro.v1a.hiplc
  42. 3 points
    @konstantin magnus, try function-style cast: vector(vertex(0, "uv", 0))
  43. 3 points
    Second constraint must be a constant vector like @up. They define static reference frame for the changing @aim vector. // Point wrangle. #define PI 3.1415926535897932384 float angle = acos(dot(v@up, v@aim)); int first_half = sign(dot(v@z, cross(v@up, v@aim))) >= 0; angle = first_half ? angle : 2*PI - angle; @angle = degrees(angle); circle_angle.hipnc
  44. 2 points
    With VEX, I found learning Processing to be a great path to learning VEX (Processing is Java based but it's still very C like but more importantly feature bespoke functions for driving graphical assets). A lot of people recommend "The C Programming Language" by Brian W. Kernighan and Dennis Ritchie (the creators of C). Whilst this is a great resource (that I think is worth getting) it's written by programmers for programmers so it's not the most beginner friendly. Personally I like using Dash on the Mac and Velocity on Windows to access the C docs (alongside over a hundred other technical docsets including Python). Much like the Python docs, the C docs has a great 'Guide' section and Dash has an integrated annotations tool where you can jot down notes (I tend to use the annotations to note specific VEX code and how it fits the rules governed by C - loop syntax and suchlike). My background was graphic design so programming used to be a barrier for me, but Processing helped me overcome my fears, and much like Processing, VEX rewards your efforts with a creative end product so as a creatively driven individual, I've found it easier to grasp than I originally feared even though it's a very C like language. The C Programming Language Dash Velocity
  45. 2 points
    I first taught myself the basics of Houdini by going through SideFX's excellent Quick Start tutorials hosted on Vimeo (and the multitude of videos put together by Peter Quint - even though Peters stuff is nearly 10 years old, his tutorials are still relevant and they're perfectly paced for beginners). Quick Start Tutorials And reading the Quick Start section of the documentation is essential too, it's lightyears ahead of the documentation you get with other DCC's. The most valuable part of the Quick Start docs are the 100's of example HIP's that cover all of Houdini's contexts. You'll find that many of the example use nodes that are no longer recommended (like the old Point Sop) but that doesn't diminish their utility. And as already recommended, @mestela's fantastic wiki not only walks you through all the significant differences of Houdini compared to other leading DCC's such as Maya; he supplies hundreds of well thought through example HIP files. The best thing about Houdini is that you can reverse engineer the vast majority HIP files, and this is an excellent way to learn. My only other advice is to go beyond simply reverse engineer the multitude of HIP files that are generously made available by SideFX and the wider Houdini community; but get in the habit of creating new projects based on the HIP examples you've just reverse engineered. It's only by doing and learning how to error check your own networks that new knowledge gets locked in. With so much learning material freely available, you can find yourself doing nothing other than watching videos and digging through example HIP's. Knowledge won't stick until you start applying it.
  46. 2 points
    All for that too, but within reason. Going atomic in SOP's is great for those nodes that contained too many disparate tools. But monolithic nodes still have their place if all the tools and functions have a natural fit.
  47. 2 points
    I was working on a scene where I wanted lines to wrap around a geo shape but lie upon the surface. FindShortestPath is used. Here is a basic setup with UV mapping setup, thanks to Matt Estela, as well. Currently it is setup in lightning mode where the lines change per frame. This is accomplished by adding $F to the random seed of the scatter. To make the lines stand still simply remove that expression. ap_connect_points_around_geo_surface.hiplc
  48. 2 points
    As you requested a VEX solution, I would put something like this into a detail wrangle: int all = nvertices(0); @min = vertex(0, "uv", 0); @max = vertex(0, "uv", 0); for(int i = 0; i < all; i++){ float compare = vertex(0, "uv", i); if(compare < @min) @min = compare; if(compare > @max) @max = compare; } Unfortunately I would not know how to access a single vector component in this manner: @min = vertex(0, "uv.y", 0); // these lines @max = vertex(0, "uv", 0).y; // do not work Maybe someone can help me out here?
  49. 2 points
    hey, looks pretty ,nice! Do you know how to put biud a mesh with this? I found this video where he made it in processing thks a lot for your answer!!!!!!!!!
  50. 2 points
    There was an error in pop_too_close wrangle. It deleted both intersecting bubbles, not just the smaller one, drastically reducing bubblecount. Normally it should remove only degenerate bubbles almost enclosed by neighbours. It also seems that whole loop can be replaced with a point wrangle. So, it cooks instantly now, retains topology and scales better. Scattering and pscale setup really matters. You need to generate a good foam first, before doing intersections. The current setup should be improved somehow. bubbles2.hipnc