Jump to content


Popular Content

Showing most liked content on 02/09/2018 in all areas

  1. 6 points
    After a year, I have another project to which I can share the source files. (link to the previous one) It is nothing revolutionary or special, it was partially done in After Effects, but I hope that it might be helpful and inspirational for somebody. Video from the 270° presentation: https://vimeo.com/246338905 Source .hiplc files: http://bit.ly/2BO4Rj3 Everything I can do in Houdini is based on the help and knowledge shared by the community. I can do it thanks to you guys! Thank you very much. Thanks goes to great guys from http://www.xlab.cz, I did it for them! Preview:
  2. 3 points
    Maybe this? Just a bunch of axis forces, point emitters, trails, and setting alpha so you get that multiplicative effect in areas of high density. trail_graph.hip
  3. 2 points
    I think I would set it up something like this... Then you can just animate the Gas Target Force to control density morphing. ap_gas_blend_density.hipnc
  4. 1 point
  5. 1 point
    Hi all, I started to learn Vex, But I think it's better for me if I have some exercises. I mean like on this topic : It can be very cool to do this method for vex too, like this everybody can participate and learn. Of course each day the exercise need to be a little more complex. Thanks and I hope you will like the idea.
  6. 1 point
    parent = hou.node('/path/to/parent') nodeToCopy = parent.node('./nodeToCopy') parent.copyItems( (nodeToCopy, ), channel_reference_originals = True)
  7. 1 point
    How about... a circle? You can do a spiral if it's too easy!
  8. 1 point
    Here is a similar setup using a line.
  9. 1 point
    ah why not So here is the first exercise before it gets to complex hehe. VEX Sinus Wave
  10. 1 point
  11. 1 point
    my clunky non-VEX way (just a tiny bit)...but it's something.... vu_CellMerge.hipnc
  12. 1 point
    What Time Machine does is to select a frame from the first input's sequence based on the second input's image, on a per-pixel basis. Black maps to 0, White maps to +10 frames (by default), relative to the current frame. The easiest way to see the effect is by plugging an animation into the first input, and a ramp into the second input. Smaller values, like -2 and +2, tend to give more interesting results, especially when noise is used as the second input.
  13. 1 point
    OK i have found a solution for this.... First i converted each polygon to point with wrangle. int pt = addpoint(0,@P); vector nml = primuv(0, "N", @primnum, {.5,.5,0}); setpointattrib(0, "N", pt, nml); removeprim(0, @primnum, 1); this adding point to each polygon's center... after that, - I cached animation , animation_$F.obj -Time blend sop -time shift sop , stamp("../copy1","stamp_time",0) -copy sop , time_stamp value= $PT It worked for me. If anybody need the file i can share.
  14. 1 point
    I had chance to test new Flip NarrowBand workflow and wanted to share resaults with community
  15. 1 point
    It is fundamental for float type, you can't do much there. Use nearly equal comparisons or rounding if you want to avoid precision issues in VEX, which uses 32 bit floats. While it may be huge computer science problem, for Houdini artist it is moderately painful, all you need is to be more considerate. Comparisons will usually work if the numbers were freshly assigned, not computed by imprecise arithmetic. Therefore people usually use == and succeed most of the time. Suppose you have points that are go down over time and you want to check if they passed ground: if (@P.y <= 0.0) ... else // y > 0 ... Don't use this: // Equal case (y == 0) handled in "non reached zero" branch. if (@P.y < 0.0) ... else // y == 0 or y > 0 ... // y == 0 never handled. if (@P.y < 0.0) ... else if (@P.y > 0.0) ... You should include equality case in one of conditions: "<= or >", "< or >=", etc., depending on the logic. This allows to handle all numbers. If your points fall on ground and stop, you may get into troubles doing code above (consider case where point is slightly greater than zero). Instead, use some small "tolerance": if (@P.y <= 0.001) ... else ... Actual value should be large enough to not yield visually incorrect results and encompass precision error for that scale. You can't have millimeter detail accuracy for skyscraper-sized object using 32-bit floats, and you will use value like 0.1. Coin-sized object, however, would allow you to use 0.00001 without facing precision issues. You may find Fuse SOP in grid snapping mode with "tolerance-sized" division scale useful. It will round values to the nearest division, which fit all those "1.23456e-7" values to solid zeros.
  16. 1 point
    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.
  17. 1 point
    Hi All, Just wanted to share my explorations on this theme. This thread has given me the push to explore a couple of coral growth papers I have been interested in for quite a white, particularly this one: http://www.sciencedirect.com/science/article/pii/S0022519304000761 After playing around with some of the setups on this thread I built a solver based that is a bit of a mutant space colonization system - in that the coral grows towards a food source. This means you can drive the simulation to fill objects and makes it controllable from an artistic perspective. I have attached the HIP if anyone wants to play. Dan. HOU_CoralGrowth_v1.hipnc
  18. 1 point
    Ok. here is the updated version on fields.. previously it wasn't working. in gas field vop, distance and speed ramp(promoted outside) controls how particles stick to the surface. spheredripping01.hip
  19. 1 point
    The best way to learn Houdini is by playing around. When you open up a VOPSOP you have to have an idea of what you're trying to achieve. If you want to randomize points maybe you can find a node for that by searching for "random" in the tab menu. And then you can try what happens when you add point position and a random vector and put into the position output or maybe the color output. Perhaps there are even other ways to randomize points. Noises are a very popular way to randomize points. Try some noises out and play with them. For a beginner they might seem confusing, but really most DCC apps use them in one way or another. As for adding color based on point position, that's really just throwing the Position vector into color. But because position can go from -infinity and +infinity and color is between 0 and 1, the points will most likely be very brightly colored. To be honest, learning how to use VOPSOPs is just playing around with it and putting down nodes. Open up the help card (press f1) for nodes you do not understand. really_basic_vopsop_example.zip
  20. 1 point
    thanks, retried this one again. last time i didn't set the playback range to in python now it looks like this: hou.hscript("tset " + str((start-1)/24.0) + " " + str((end)/24.0) ) hou.playbar.setPlaybackRange(start-1,end) [/CODE] start and end are frames