Jump to content


Popular Content

Showing most liked content since 09/19/2021 in all areas

  1. 6 points
    Transferring curl noise curves into volumes along with displacements based on principal curvature is another way to shape organic sculptures. sculpture_2.hiplc
  2. 6 points
    Hi @caskal, you could push curves in the opposite direction of the underlying surface normals and use them as a collider for a vellum simulation. asphyxiate.hiplc
  3. 4 points
    I just worked my way through Dave's whirlwind tutorial on how to get better creasing out of vellum. ap_ds_vellum_advanced_crumple_wrinkle_101421.hiplc
  4. 3 points
    Statistically improbable until you factor in a pandemic! Houdini 19 is coming out this Halloween season! TM data analysis says it should have been here this summer based on years of old... I have to say I awoke from a long slumber for this release. So I am looking forward to seeing what good offerings there are in this issue. My only wish is for SideFX to still keep on being independent and carving its own path. Trying to get folks to understand the heart of Houdini is no small feat. As always, this is a non-official wish list. So please submit BUGs, RFEs, and Questions directly to support. Also for anecdotal questions and rants branch them to another thread. People will more likely help you in a dedicated thread. -Cera
  5. 3 points
    Particle based RBDs ap_egj_particles_to_rbd_101421.hiplc
  6. 3 points
    inside the Sheeter sop, where you get the particles from the flip solver and apply the filling process, you can do VDBfromParticles, then use VdbSmoothSDF to smooth a bit the surface, and then use a Group SOP where you group only the particles that are inside the smoothed surface, AND THEN apply the filling process only on that group. This causes the Hole Filling to be applied only on areas that are the "body" of the simulation and not the egdes.
  7. 3 points
    Here's a simple example. You need to use a Vellum constraint type that supports orientation, which generally means you want to use hair. Once the sim is done, convert the orient attribute to the KineFX-supported 3x3 transform matrix like this: 3@transform = qconvert(p@orient); Then input to a Bone Deform and you're done. vellum_kinefx_toadstorm.hip
  8. 3 points
    attached is an example of how it could be done. Keep in mind this is intended to be used with lower contrast images, for bump mapping etc and not a fully blown high contrast brick image. but it gets the point across I think. restratio_flipblend.hiplc
  9. 3 points
    In the "Asset Manager" window, set the "Asset Bar" to "Display Menu of All Definitions" https://www.sidefx.com/docs/houdini/ref/windows/optypemanager.html#configuration-tab Operator Type Bar Controls the visibility of the Operator Type Bar that appears at the top of Parameter dialogs. This bar shows the path to the HDA file that defines the node pointed to by the Parameter dialog. The Operator Type Bar can be hidden completely, or it can be in a read-only mode where it simply displays the HDA path, or it can be in a mode where it presents a menu listing all HDAs that contain a definition for the asset. You can then revert back to the previous definition of the sweep node if needed.
  10. 3 points
    Thank you, that helps a lot. I discovered that if I leave the bend value as 1220 and animate the x-axis of the Capture Origin, that I get a nice rollup. ap_rs_roll_up_grid_portion_100921.hiplc
  11. 3 points
    Overlay network editor would be nice to have built-in in H19 or 20 I have been using it for more than 2 years in production, so the video I initially uploaded is severely outdated. Will update once H19 is released.
  12. 3 points
    There are so many nice example files on this website that I am often searching for. I wanted to use this page as a link page to other posts that I find useful, hopefully you will too. This list was started years ago, so some of the solutions may be dated. Displaced UV Mapped Tubes Particles Break Fracture Glue Bonds Render Colorized Smoke With OpenGL Rop Moon DEM Data Creates Model Python Script Make A Belly Bounce Helicopter Dust Effect Conform Design To Surface Benjamin Button Intro Sequence UV Style Mapping UV Box and Multiple Projection Styles Ping Pong Frame Expression Instance vs. Copy (Instance Is Faster) Particle Bug Swarm Over Vertical and Horizontal Geometry Rolling Cube Rounded Plexus Style Effect Pyro Smoke UpRes Smoke Trails From Debris Align Object Along Path Fading Trail From Moving Point Swiss Cheese VDB To Polygons Get Rid Of Mushroom Shape In Pyro Sim A Tornado Ball Of Yarn Particles Erode Surface Unroll Paper Burrow Under Brick Road Non Overlapping Copies Build Wall Brick-By-Brick FLIP Fluid Thin Sheets Smoke Colored Like Image Volumetric Spotlight Moving Geometry Using VEX Matt's Galaxy Diego's Vortex Cloud Loopable Flag In Wind Eetu's Lab <--Must See! Wolverine's Claws (Fracture By Impact) Houdini To Clarisse OBJ Exporter Skrinkwrap One Mesh Over Another Differential Growth Over Surface [PYTHON]Post Process OBJ Re-Write Upon Export Rolling Clouds Ramen Noodles Basic Fracture Extrude Match Primitive Number To Point Number Grains Activate In Chunks Fracture Wooden Planks Merge Two Geometry Via Modulus Fill Font With Fluid DNA Over Model Surface VDB Morph From One Shape To Another Bend Font Along Curve Ripple Obstacle Across 3D Surface Arnold Style Light Blocker Sphere Dripping Water (cool) Exploded View Via Name Attribute VEX Get Obj Matrix Parts eetu's inflate cloth Ice Grows Over Fire Flying Bird As Particles DEM Image To Modeled Terrain Pyro Temperature Ignition Extrude Like Blender's Bevel Profile Particles Flock To And Around Obstacles BVH Carnegie Mellon Mocap Tweaker (python script) Rolling FLIP Cube Crowd Agents Follow Paths Keep Particles On Deforming Surface Particle Beam Effect Bendy Mograph Text Font Flay Technique Curly Abstract Geometry Melt Based Upon Temperature Large Ship FLIP Wake (geo driven velocity pumps) Create Holes In Geo At Point Locations Cloth Blown Apart By Wind Cloth Based Paper Confetti Denim Stitching For Fonts Model A Raspberry Crumple Piece Of Paper Instanced Forest Floor Scene FLIP pushes FEM Object Animated Crack Colorize Maya nParticles inside an Alembic Path Grows Inside Shape Steam Train Smoke From Chimney Using Buoyancy Field On RBDs In FLIP Fluid Fracture Along A Path COP Based Comet Trail eetu's Raidal FLIP Pump Drip Down Sides A Simple Tornado Point Cloud Dual Colored Smoke Grenades Particles Generate Pyro Fuel Stick RBDs To Transforming Object Convert Noise To Lines Cloth Weighs Down Wire (with snap back) Create Up Vector For Twisting Curve (i.e. loop-d-loop) VDB Gowth Effect Space Colonization Zombie L-System Vine Growth Over Trunk FLIP Fluid Erosion Of GEO Surface Vein Growth And Space Colonization Force Only Affects Particle Inside Masked Area Water Ball External Velocity Field Changes POP particle direction Bullet-Help Small Pieces Come To A Stop Lightning Around Object Effect Lightning Lies Upon Surface Of Object Fracture Reveals Object Inside Nike Triangle Shoe Effect Smoke Upres Example Julien's 2011 Volcano Rolling Pyroclastic FLIP Fluid Shape Morph (with overshoot) Object Moves Through Snow Or Mud Scene As Python Code Ramp Scale Over Time Tiggered By Effector Lattice Deforms Volume Continuous Geometric Trail Gas Enforce Boundary Mantra 2D And 3D Velocity Pass Monte Carlo Scatter Fill A Shape Crowd Seek Goal Then Stop A Bunch Of Worms Potential Field Lines Around Postive and Negative Charges Earthquake Wall Fracture Instance Animated Geometry (multiple techniques) Flip Fluid Attracted To Geometry Shape Wrap Geo Like Wrap3 Polywire or Curve Taper Number Of Points From Second Input (VEX) Bullet Custom Deformable Metal Constraint Torn Paper Edge Deflate Cube Rotate, Orient and Alignment Examples 3D Lines From 2D Image (designy) Make Curves In VEX Avalanche Smoke Effect Instant Meshes (Auto-Retopo) Duplicate Objects With VEX Polywire Lightning VEX Rotate Instances Along Curved Geometry Dual Wind RBD Leaf Blowing Automatic UV Cubic Projection (works on most shapes) RBD Scatter Over Deforming Person Mesh FLIP Through Outer Barrier To Inner Collider (collision weights) [REDSHIFT] Ground Cover Instancing Setup [REDSHIFT] Volumetric Image Based Spotlight [REDSHIFT] VEX/VOP Noise Attribute Planet [REDSHIFT] Blood Cell Blood Vessel Blood Stream [REDSHIFT] Light Volume By Material Emission Only [REDSHIFT] Python Script Images As Planes (works for Mantra Too!) [REDSHIFT] MTL To Redshift Material [REDSHIFT] Access CHOPs In Volume Material [REDSHIFT] Mesh Light Inherits Color [REDSHIFT] Color Smoke [REDSHIFT] FBX Import Helper [REDSHIFT] Terrain Instancer Height Field By Feature Dragon Smashes Complex Fractured House (wood, bricks, plaster) Controlling Animated Instances Road Through Height Field Based Terrain Tire Tread Creator For Wheels Make A Cloth Card/Sheet Follow A NULL Eye Veins Material Matt Explains Orientation Along A Curve Mesh Based Maelstrom Vortex Spiral Emit Multiple FEM Objects Over Time Pushing FEM With Pyro Spiral Motion For Wrangle Emit Dynamic Strands Pop Grains Slope, Peak and Flat Groups For Terrains Install Carnegie Mellon University BVH Mocap Into MocapBiped1 Ramp Based Taper Line Fast Velocity Smoke Emitter Flip Fill Cup Ice Cubes Float [PYTHON]Export Houdini Particles To Blender .bphys Cache Format [PYTHON] OP UNHIDE ALL (opunhide) Collision Deform Without Solver or Simulation Mograph Lines Around Geometry Waffle Cornetto Ice Cream Cone Ice Cream Cone Top Unroll Road Or Carpet Burning Fuse Ignites Fuel or Painted Fuel Ignition Painted Fuel Combustion Small Dent Impact Deformation Particle Impact Erosion or Denting Of A Surface Helicopter Landing Smoke And Particles Radial Fracture Pieces Explode Outwards Along Normal Tangent Based Rocket Launch Rolling Smoke Field Tear/Rip FLIP (H12 still works in H16) Rain Flows Over Surface Rains Water Drip Surface Splash Smoke Solver Tips & Tricks Folding Smoke Sim VEX Generated Curve For Curling Hair Copy and Align One Shape Or Object To The Primitives Of Another Object (cool setup) A Better Pop Follow Curve Setup FEM Sea Cucumber Moves Through Barrier Fracture Cloth Smoke Confinement Setup Merge multiple .OBJ directly Into A Python Node Blood In Water Smoke Dissipates When Near Collision Object Whirlpool Mesh Surface Whirlpool Velocity Motion For FLIP Simple Bacteria Single Point Falling Dust Stream Flames Flow Outside Windows Gas Blend Density Example Localized Pyro Drag (smoke comes to a stop) Granular Sheet Ripping Post Process An Export (Post Write ROP Event) Corridor Ice Spread or Growth Set Velocity On Pieces When Glue Bonds Break Water Drops Along Surface Condensation Bottle Grains Snow or Wet Sand Starter Scene A Nice Little Dissolver Turn An Image Into Smoke Fading Ripples Grid Example Stranger Things Wall Effect Face Through Rubber Wall [PYTHON]Create Nurbs Hull Shelf Tool [PYTHON] Ramp Parameter [PYTHON] On Copy OF HDA or Node Select Outside Points Of Mesh, Honor Interior Holes Sparks Along Fuse With Smoke Umbrella Rig Melt FLIP UVs Tire Burn Out Smoke Sim Flip or Pyro Voxel Estimate Expression Motorcycle or Dirt Bike Kicks Up Sand Particles Push Points Out Of A Volume [PYTHON]Cellular Automata Cave Generator Punch Dent Impact Ripple Wrinkle VEX Rotate Packed Primitive Via Intrinsic Kohuei Nakama's Effect FLIP Fluid Inside Moving Container Particles Avoid Metaball Forces FLIP Divergence Setup FLIP Transfer Color Through Simulation To Surface Morph Between Two Static Shapes As Pyro Emits Constraint Based Car Suspension Pyro Smoke Gas Disturbs Velocity Wire Solver Random Size Self Colliding Cables Fast Cheap Simple Collision Deform CHOP Based Wobble For Animated Character Slow Motion FLIP Whaitewater Avoid Stepping In Fast Pyro Emission Fast Car Tires Smoke FLIP Fluid Fills Object Epic Share Of Softbody/Grain Setups (Must see!) Balloon, Pizza, Sail, Upres Shirt, Paint Brush Create Pop Grain Geometry On-The-Fly In A DOPs Solver Varying Length Trails VEX Based Geometry Transform Determine Volume Minimum and Maximum Values Grain Upres Example Animated pintoanimation For Cloth Sims Batch Render Folder Of OBJ files Vellum Weaving Cloth Fibers Knitting Kaleidoscopic Geometry UV Image Map To Points Or Hair Color Particles Like Trapcode Particular Flat Tank Boat Track With Whitewater Orthographic Angle Font Shadow Select Every Other Primitive or Face? Printer Spits Out Roll Of Paper Unroll Paper, Map, Plans, Scroll Simple Vellum L-System Plant Basic Cancer Cell 2D Vellum Solution Vellum Animated Zero Out Stiffness To Emulate Collapse Whitewater On Pre Deformed Wave [PYTHON] Menu Callback Change Node Color Extruded Voronoi With Scale Effector Multi Material RBD Building Fracture House Collapse Spin Vellum Cloth Whirlpool Vortex Trippy Organic Line Bend Design Logo Based Domino Layout Delete Outer Fracture Pieces, Keeping Inside Pieces UV Mapped Displaced Along Length Curly Curves Slow Particle Image Advection Nebula Saw Through VDB Like Butter Fuel Based Rocket Launch With Smoke Fuel Based Rocket Launch With Smoke [upres] Deform Pyro Along Path Bend Pyro Gas Repeat Solver With RBD Collision Raining Fuel Fire Bomb City Video Tutorial Pyro Cluster Setup (Animated Moving Fuel Source) [PYTHON] Mantra .MTL File Reader (creates new materials) Pyro Dampen By Distance FLIP Fluid Sweeps Away Crowd Ragdoll Gas Repeat Solver X-Men Mystique Feather Effect Camera Frustum Geometry Culling Vellum Extrude Shape Into Cloth Wire Web Constraint Setup Pyro Smoke Font Dissolve "Up In Smoke" Helicopter Landing With Vellum Grass and Dust or Smoke Another Thin Sheet Fluid Setup Color Rain Drops Over Surface Dual Smoke Object Wand Battle Custom GasDisturb node (easy to use) Hair Driven Grass Example File Pyro Smoke With Masked Turbulence Align High Resolution Mesh With Low Resolution RBD Simulation Streaky Portal Effect Height From Luma Cracking Glass Dome, Fracture VEX Noise Types FLIP Waterwheel Fracture Brick Wall Using UVs Vellum Stacked Torn Membranes Terrain Topographical Line Curves Prepare RBD Fracture For Unreal Alembic Export Growing Ivy Solver Fix For Intermittent FLIP Surfacing Issue Extensive RBD Fracturing Thread With HIP Files Peter Quint's Pop Streams Particle Example Fracture Geometry To Release Flip Fluid Inside Procedurally Reverse Normals Vellum Culling Voronoi Shape To Shape Transition Animated Scattering Accessing Parametric UVs On A Surface Organic Hallways/Corridors Through A Mesh Smoke Particle Dissolve Along One Axis Expanding Vellum Rings That Collide With One Another Read, Fetch, or Get SOP Attribute Inside Of DOPS Broad Splash When Object Enters Water Blendshape Crowd Example [PYTHON] Replace Packed Intrinsic Geometry From Another Source Rip/Tear Part Of Paper To Reveal And Roll Up Use Google To Discover Attached HIP Files Useful Websites: Tokeru Houdini Houdini Vex Houdini Python Houdini Blueprints FX Thinking Rich Lord HIP Files iHoudini Qiita Ryoji Toadstorm Blog Eetu's HIP Of The Day Video Tutorials: Peter Quint Rohan Dalvi Ben Watts Design Yancy Lindquist Contained Liquids Moving Fem Thing Dent By Rigid Bodies Animating Font Profiles Swirly Trails Over Surface http://forums.odforce.net/topic/24861-atoms-video-tutorials/ http://forums.odforce.net/topic/17105-short-and-sweet-op-centric-lessons/page-5#entry127846 Entagma Johhny Farmfield Vimeo SideFX Go Procedural
  13. 3 points
    Another try. The previous one work sometime but sometime not. Embrace F2.hiplc
  14. 3 points
    Hey @Follyx, this is essentially a dart throwing algorithm. The switch node decides whether the current sphere or the empty null is merged based on the number of points of the intersection analysis node. if(npoints('../intersectionanalysis2')>0,1,0) If its just about avoiding spheres to collide (and not arbitrary meshes) you can also watch these tutorials: Fill with Non-Overlapping Packed Instances : https://www.youtube.com/watch?v=XJ7QJOZcLJk SOP Solver Tutorial - Dart throwing algorithm: https://www.youtube.com/watch?v=Y1UC3T9l15U
  15. 3 points
    attached is a file with all sorts of curvature computation for vdbs ... hth. petz vdb_curvature.hipnc
  16. 2 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
  17. 2 points
    I'm guessing you probably have the Nvidia 496 driver installed. If you do, rollback to a version < 495 or no shader program that uses a geometry shader will compile (and Houdini uses them a lot - it'll be unusable with 496). We contacted Nvidia earlier last week about this and they're looking at it.
  18. 2 points
    If you've worked through a tutorial and want to share your HIP file with the community, post it here. I completed one where Mikael Pettersen demonstrates how to create a Blendshape crowd agent. ap_mp_blendshape_crowd_character_052120.hiplc
  19. 2 points
    It's not much different from using single rest fields, just in addition of that you have to consider the interpolation between the two rest fields and their resets. To interpolate two details attribute are created by the solver. They are called rest_ratio and rest2_ratio, which are basically values that describe how much the noise advected by rest1 and the noise advected by rest2 should be visible at a certain frame. About that, I think it's better you use higher values on "Frames between resets" on the Rest tab of the flip solver. Since usually it has to move slowly, you don't want to see any fast changing noise on the shader.
  20. 2 points
    FLIP comes with built-in options for dual rest fields now... they've been there for a few years. My post is really old, but the concept behind dual rest fields hasn't changed... it's actually pretty similar to how flow map shaders work, if you're into shaders. You can find the options under Particle Motion > Rest on the FLIP Solver DOP.
  21. 2 points
    I would say dual rest is quite useful. as stated previously by Atom a lot of the details you want will come from good shading and texturing. Dual rest will help you maintain a crisp look of your bump/ displacement on the surface
  22. 2 points
    Hi Natiq, there is a trigonometry lesson by the same author: https://www.youtube.com/watch?v=gLOd_FFL58Y Also unity developer Freya Holmér explains maths for computer graphics. Part 3 is about trigonometry: https://www.youtube.com/watch?v=MOYiVLEnhrw&list=PLImQaTpSAdsD88wprTConznD1OY1EfK_V
  23. 2 points
    A simpler and more efficient solution Inspired by Konstantin 's last post (one more time :)) but this time transfering distance to displacement. Embrace F3.hiplc
  24. 2 points
    This is a fun one to play around with. Redshift doesn't support code snippets, like Mantra, but I was able to leverage texture maps for displacement.
  25. 2 points
    So, I did get this to finally work. DOP Import with Transform Pieces did the trick. I've attached the scene here, and here's a quick overview of the setup, it's actually quite simple (once you know how): rbd test.hiplc
  26. 2 points
    Very nice, thanks for that little secret @Atom! Makes extruding both sides of a mesh a lot easier, especially being able to dissolve the middle edge. This thickens everything all together rather than just the thin objects, but in finding this Labs Thicken SOP, I also saw the Labs Calculate Thickness SOP. I managed to combine the power of both to first calculate the thickness of each model part, then only thicken the pieces that weren't enclosed shapes. If anyone wants to see the process, the file is attached. Extrude_Only_Thin_Polys.hip
  27. 2 points
    Hi @eunchae, @ssh has already implemented the Kelvin Wake pattern in Houdini:
  28. 2 points
    Sorta dodging your question really, but I found you can cheat this by getting 3 samples ($F, $F-0.5, $F-1) and feeding them to a sequence blend shape with cubic interpolation enabled. interpolate_transforms_via_blendshape.hiplc
  29. 2 points
    The blur node supports weighting eg. coming from an attribute remap node. weight_blur.hiplc
  30. 2 points
    First post here for feedback and direction, this mostly a test render for my first big pyro simulation. It's being driven by a pop system that's firing particles downwards and using that to drive a pyro simulation. The collisions for the simulation are pretty broken, please ignore those. One thing that I'm having trouble with is getting the outside plumes of smokes to rise higher, anyone got suggestions? Sequence_1_v01_-_converted_with_Clipchamp.mp4
  31. 2 points
    I guess my point is that lava doesn't have to be a heavy sim. The example file on Houdini Blue print simulates fairly quickly. https://hdbp.io/fK0FtieT The detail in a lava shot is going to lean more on the materials rather than the surface generation.
  32. 2 points
    Alternatively remap and average out directions and distances to points across a height field: float scale = chf('scale'); float range = chf('range'); float disps[] = {}; int pts[] = nearpoints(1, v@P, range * 4.0); foreach(int pt_near; pts){ vector pos = point(1, 'P', pt_near); vector nml = point(1, 'N', pt_near); float pscale = point(1, 'pscale', pt_near); vector dir = normalize(pos - v@P); float angle = fit11(dot(nml, dir), 0.0, 1.0); float dist = distance(pos, v@P); float shape = chramp('shape', angle); float dist_mod = dist * shape * pscale; float mask = 1.0 - smooth(0.0, range, dist); float wave = sin(dist_mod * 0.02); float height = 1.0 - chramp('height', angle); float disp = height * mask * scale * wave; append(disps, disp); } f@height = avg(disps); boat_waves_VEX.hiplc
  33. 2 points
    Animation and rigging toolset to rival Maya so I can dump Autodesk for good!
  34. 2 points
    Ok, I think I finished this. If anyone is interested, the hip file is available below. I hope it could be instructive for beginners. I added leaves, they can have a general motion (breeze), and you can add another wind based on the tree motion (length of averaged velocity). I discovered that Bone Deform is way faster than Point Deform (it was realtime for this tree), but Point Deform is more accurate. My setup includes both, I use Bone Deform for previewing, you can just switch. The wire sim is realtime as well, and cooking everything with leaves and with little branches was around 3 fps on my shy laptop without any pre-caching. (I think it's not that bad.) Actually the leaves part could be better, for example right now leaves don't orient themselfs according to the direction of the wind... so some controlling features like this still would be nice to have. Well, feel free to improve it I would say, theoreatically this setup should work with any tree, bush, plant, etc. created by the Labs Tree tools. The hipfile includes some notes as well, I tried to explain why am I doing what I'm doing. Also, I started an attempt to create a non-simulated tree motion, what I saw in nirfse3D's videos about his Simple Tree Tools. Not really impressive right now... I have no idea how he did it, this approach is getting really slow with more branches Anyway. Best wishes! tree_16.hiplc
  35. 2 points
    Nice Stuff.----s
  36. 2 points
    It's hard to say exactly what's going wrong without seeing a file, but my guess is that you're not properly applying the orientations of your vellum sim back to the transforms of your skeleton. When you run the Vellum simulation, assuming you're using a constraint type like "String" that supports orientation, the p@orient value of your input points needs to match the KineFX joints. You can do this pretty quickly by converting your 3@transform attribute (this is in world space and common to all KineFX joints): p@orient = qconvert(3@transform); Then feed this into your Vellum String configuration and simulate. I'm using Pins to keep some of the original joints attached to their animation. The p@orient attribute will update during the simulation. To turn these results into something useful post-sim, we have to take this computed orientation and convert it back into the 3@transform attribute. You start with a default matrix, make sure its scale matches that of the original, then rotate it to match the orientation of your simulated points: // convert world space orient quaternion (from vellum) back to transform matrix vector scale = cracktransform(0, 0, 2, 0, 3@transform); matrix3 xform = ident(); scale(xform, scale); matrix3 rot = qconvert(p@orient); 3@transform = xform * rot; Now that that's done, you can connect your skeleton into the Bone Deform SOP and it ought to work. I'm attaching an example HIP file... you'll have to load your own FBX, define a clip name and pick new pin numbers on the Vellum Constraint. vellumcat.hip
  37. 2 points
    Hi Carlos, As far as I remember this geometrical model assumes infinite waves. However, for practical reasons it's good to have it disappearing. I've made updated version, check "Max Distance" parameter. ssh_kelvin_wake_v02.hipnc
  38. 2 points
    Great stuff, Nicolas. This is starting to look Giger-like already! You don't necessarily need to create UVs in SOPs, though. To project textures on those VDB meshes it's arguably more efficient to do in a shader: 1) Transform position to world space. 2) Curve IDs shown as random colors. 3) U value from curves in HSV colors. 4) Direction to nearest curve position. 5) Tangents from curves set to absolute. 6) Direction to curve oriented along tangents. 7) V coordinate enclosing each wire. 8) UV coordinates in red and green. 9) UV mapping an image texture. 10) Texture based displacement along curves or at least what happens when mandrills do the job ; ) The material snippet: string geo = 'op:/obj/curves/OUT'; P = ptransform('space:current', 'space:world', P); int prim = -1; vector uvw = vector(0.0); float dist = xyzdist(geo, P, prim, uvw); vector pos = primuv(geo, 'P', prim, uvw); float u = primuv(geo, 'u', prim, uvw); vector tangent = primuv(geo, 'tangentu', prim, uvw); matrix3 rot = dihedral(tangent, {0,1,0}); vector dir = normalize(P - pos); vector dir_mod = dir * rot; float v = fit( atan2(dir_mod.z, dir_mod.x), -M_PI, M_PI, 0.0, 1.0 ); P = set(u, v, 0.0); curly_curves_shader.hipnc
  39. 2 points
    Here is one way to add UVs to those lines. It does not convert to VDB, it uses a sweep to loft the mesh along the line. If you need VDB output, you can do that at the end and use an AttributeInterpolate to transfer the UVs to your final mesh. This setup drops in an attribute VOP to add a secondary displacement map along the length of each spline. This means mesh displacement is happening prior to render, but you can still add more normal maps or bump maps to the surface when you get to adding materials. ap_uv_curly_curves_081819.hiplc
  40. 2 points
    You can fit-range an attribute with setdetailattrib() set to "min" and "max". 1st pointwrangle: setdetailattrib(0, 'height_min', @height, "min"); setdetailattrib(0, 'height_max', @height, "max"); 2nd pointwrangle: float min = detail(0, "height_min", 0); float max = detail(0, "height_max", 0); @Cd.g = fit(@height, min, max, 0.0, 1.0); fit_range_VEX.hiplc
  41. 1 point
    SBUX_dl.hipnc EDIT: I meant to say "cross product" instead of "dot product" in the sticky note.
  42. 1 point
    There's no reliable way to slerp matrices as far as I know, typically people will convert the rotation to quaternion then slerp. You can then store the result as a matrix by converting from quaternion back to matrix. This example shows a lerp of the translates, scales and slerp of rotations with the result converted back to matrix.
  43. 1 point
    more toggle's for group nodes (like the group combine SOP) to interpret missing groups as an empty group (so you can choose for it to return a warning, instead of an error. While I know there are workarounds, its quite annoying if your delete node cleans a group on empty geometry and then the group combine returns an error :P) for the "Convert line" SOP to be able to maintain vertex ordering (instead of basing the new vertex ordering, on the input point numbering) (sorting by vertex number does not work in cases where you have closed primitives, resulting in the "last" edge of an original primitive to have a reversed direction) Edit: Update the find shortest path, so it can output the start point attribute even when you are not outputting paths (this way you could use this reference attribute to transfer attributes to the flood-filled network from the closest start point: (right now its possible to work around this by setting the output paths to "from EAch start to any end" and then write some vex to find the lowest value in the cost array, that is not -1, and use that to link the points, but its a bit clunky ) Some heavy nodes (in particular the remesh node) could make more use of multithreading, right now, cooking times can be massively decreased by splitting the mesh (using some kind of internal connectivity logic) and using a for loop, even without compiling sometimes as is the case here: and because of how the remesh works it keep those isolated pieces isolated anyways, so "free" perf yay!
  44. 1 point
    @konstantin magnus When you are calling the function on the button, use -1 or 1 to swap up/down (technically you can swap with a value that's at any offset but for practical reasons...) #SwapValues(kwargs, hou.ParmTemplate.name a, hou.ParmTemplate.name b) def SwapValues(kwargs, a, b): #a, b are parameter names (not labels) node = kwargs["node"] pA = node.parm(a) pB = node.parm(b) if len(pA.keyframes()) == 0: #if both params have no keyframes if len(pB.keyframes()) == 0: valueSelf = pA.rawValue() valueOther = pB.rawValue() pA.set(valueOther) pB.set(valueSelf) #if A has no keyframes but B does else: valueSelf = pA.rawValue() valueOther = pB.keyframes() pA.setKeyframes(valueOther) pB.deleteAllKeyframes() pB.set(valueSelf) else: #if A has keyframes but B doesn't if len(pB.keyframes()) == 0: valueSelf = pA.keyframes() valueOther = pB.rawValue() pA.deleteAllKeyframes() pA.set(valueOther) pB.setKeyframes(valueSelf) #if both params have keyframes else: valueSelf = pA.keyframes() valueOther = pB.keyframes() pA.deleteAllKeyframes() pB.deleteAllKeyframes() pA.setKeyframes(valueOther) pB.setKeyframes(valueSelf) #GetParamNames(kwargs, hou.parmTemplate mpBlock, int index, int swapIndex, int nestingDepth) def GetParamNames(kwargs, mpBlock, index, swapIndex, nestingDepth): node = kwargs["node"] for i in range(len(mpBlock)): #If the current parameter is of a valid type, check if it has channels if mpBlock[i].type() == hou.parmTemplateType.Int or mpBlock[i].type() == hou.parmTemplateType.Float or mpBlock[i].type() == hou.parmTemplateType.String or mpBlock[i].type() == hou.parmTemplateType.Toggle: #note that vector channels are suffixed after multiparm index - "vector_#x" instead of "vector_x#" if mpBlock[i].numComponents() > 1: for c in range(mpBlock[i].numComponents()): if mpBlock[i].namingScheme() == hou.parmNamingScheme.XYZW: if c == 0: vComponent = "x" elif c == 1: vComponent = "y" elif c == 2: vComponent = "z" elif c == 3: vComponent = "w" elif mpBlock[i].namingScheme() == hou.parmNamingScheme.RGBA: if c == 0: vComponent = "r" elif c == 1: vComponent = "g" elif c == 2: vComponent = "b" elif c == 3: vComponent = "a" elif mpBlock[i].namingScheme() == hou.parmNamingScheme.UVW: if c == 0: vComponent = "u" elif c == 1: vComponent = "v" elif c == 2: vComponent = "w" pName = mpBlock[i].name().replace("#","%s") % index + vComponent pOthrName = mpBlock[i].name().replace("#","%s") % (index+swapIndex) + vComponent SwapValues(kwargs, pName, pOthrName) else: pName = mpBlock[i].name().replace("#","%s") % index pOthrName = mpBlock[i].name().replace("#","%s") % (index+swapIndex) SwapValues(kwargs, pName, pOthrName) #if a folder is found, determine if it's a nested multiparm elif mpBlock[i].type() == hou.parmTemplateType.Folder: #if it is, compare the number of instances in each multiparm if mpBlock[i].folderType() == hou.folderType.MultiparmBlock: getNMP = mpBlock[i].name().replace("#","%s") % index getOthrNMP = mpBlock[i].name().replace("#","%s") % (index+swapIndex) nmpInstances = node.parm(getNMP).evalAsInt() nmpOthrInstances = node.parm(getOthrNMP).evalAsInt() #If both multiparms have the same number of instances, swap nested parameter values if nmpInstances == nmpOthrInstances: for j in range(nmpInstances): pA = node.parm(getNMP).parmTemplate().parmTemplates()[j-1].name().replace("#","%s") % (index, j+1) pB = node.parm(getOthrNMP).parmTemplate().parmTemplates()[j-1].name().replace("#","%s") % (index+swapIndex, j+1) SwapValues(kwargs, pA, pB) #Otherwise, save values to a temporary holder else: tempA = list() tempB = list() for j in range(nmpInstances): nestedParm = node.parm(getNMP).parmTemplate().parmTemplates()[j-1].name().replace("#","%s") % (index, j+1) if len(node.parm(nestedParm).keyframes()) > 0: tempA.append(node.parm(nestedParm).keyframes()) else: tempA.append(node.parm(nestedParm).rawValue()) for j in range(nmpOthrInstances): nestedParm = node.parm(getOthrNMP).parmTemplate().parmTemplates()[j-1].name().replace("#","%s") % (index+swapIndex, j+1) if len(node.parm(nestedParm).keyframes()) > 0: tempB.append(node.parm(nestedParm).keyframes()) else: tempB.append(node.parm(nestedParm).rawValue()) #initialize number of multiparm blocks SwapValues(kwargs, getNMP, getOthrNMP) #and update each block from the temporary holders for k in range(nmpOthrInstances): pA = node.parm(getNMP).parmTemplate().parmTemplates()[k-1].name().replace("#","%s") % (index, k+1) node.parm(pA).deleteAllKeyframes() try: node.parm(pA).set(tempB[k]) except: node.parm(pA).setKeyframes(tempB[k]) for k in range(nmpInstances): pB = node.parm(getOthrNMP).parmTemplate().parmTemplates()[k-1].name().replace("#","%s") % (index+swapIndex, k+1) node.parm(pB).deleteAllKeyframes() try: node.parm(pB).set(tempA[k]) except: node.parm(pB).setKeyframes(tempA[k]) #if it's not a multiparm, dive inside and swap each nested parameter else: GetParamNames(kwargs, mpBlock[i].parmTemplates(), index, swapIndex, 0) #Swap(kwargs, int targetSwapIndex) def Swap(kwargs,targetSwapIndex): node = kwargs["node"] button = kwargs["parm"] #Shorthand to access the index of a multiparm index = int(kwargs["script_multiparm_index"]) #Raise error if parameter hierarchy is configured incorrectly if not button.tuple().isMultiParmInstance(): raise hou.NodeWarning("Button is not inside a multiparm block.") #Get the parent multiparm folder mpFolder = button.tuple().parentMultiParm() #Count the number of multiparm instances -> raise errors if swapping is not allowed mpInstances = node.parm(mpFolder.name()).evalAsInt() #Raise errors if trying to swap up on first block, or swap down on last block if targetSwapIndex > 0: if index == mpInstances: raise hou.NodeWarning("No value below to swap with.") elif targetSwapIndex < 0: if index == 1: raise hou.NodeWarning("No value above to swap with.") #Get the other parameters inside this multiparm block so we can start swapping. mpBlock = node.parm(mpFolder.name()).parmTemplate().parmTemplates() GetParamNames(kwargs, mpBlock, index, targetSwapIndex, 0)
  45. 1 point
    The curve you are feeding into the path deform is not closed. If it was closed it would shade as a polygon. If you remove, the 'ends' and 'fuse' nodes it works as you would expect. You could also put an 'ends' node after the fuse with the option 'Close Straight' in 'Close U' to close it again.
  46. 1 point
    You can also just pack them first, that will give you the pivots. Use assemble. Or connectivity. If you use connectivity you need to assign the name on the primitives yourself. //primitive wrangle with class as primitive attribute s@name = "piece"+itoa(i@class); Then pack by name attribute. Now you can rotate the packed primitives //pointwrangle matrix3 m = primintrinsic(0,"transform",@ptnum); vector axis_y = set(0,1,0); //if you want axis to be aligned with packed transform axis_y *= m; float angle = radians(rand(@ptnum)*360); rotate(m,angle,axis_y); setprimintrinsic(0,"transform",@ptnum,m,"set");
  47. 1 point
    i think there's a flaw in your logic...I'm not a coder so can't pinpoint where it is...but it happens when a geometry intersects your curve where there is not a single point inside..ie. it envelopes a little section but does not contain a point. The intersection analysis does show the points (on the surface)..but somehow you're not processing them ? dunno. (edit: ahh of course, if there's no point inside...you can't promote it to edge !!) You can see I added a little box to illustrate this in your file. I tested mine with this little test box as well and it works... curve_bool_x2.hipnc DissolveInside5.hipnc
  48. 1 point
    The pattern is not highly realistic, we still see the straight line from the voronoi noise, but is pretty decent to me. the tricky part is to get the radial / circle pattern....as oppose to just smaller pieces in the middle like this one.
  49. 1 point
    There is config file for colors (.wb for dark scheme, .bw for light scheme): c:\Program Files\Side Effects Software\Houdini 13.*.*\houdini\config\3DSceneColors.wb Copy this file into your %HOME% directory eg: c:\Users\user\Documents\houdini13.0\config\3DSceneColors.wb And then look for this row in this file: ViewMaskOverlayColor: 1.00 1.00 1.00 # view mask overlay You can change colors there. It will be applied after Houdini restart.
  50. 1 point
    it's used in the Cloud Light SOP to precompute arrival times from light points, in other words how long it takes to get from light point to certain voxel based on speed field that information is then used to compute light intensity/color basically just remap arrival time volumes to light color so it's quite fast to tweak light color, intensity, falloff since arrival times are already computed