top of page

Creating a cable simulation in Houdini I Nona Bocheva Week 12&13

Empathize , Define, Prototype

Emphatize

Learning goal: Choosing this project my initial idea was to focus on simulations in Houndi, however as 3D assets turned out to be more important I had to focus on that. Nonetheless,

I still decided to spend some time, researching and learning about the basics of wire simulations.

Note: In the end, this simulation was not included in the final scene since it was not finished.


References used:


"Wire simulations are useful for simulating anything long and flexible, for example, grass, fur, or even scaffolding. When wire objects are used with constraints, they can be used to simulate things such as ropes swinging, bungee jumping cords springing, or a tail of a kite, as well as for effects like a structure of collapsing girders." Houdini library: https://www.sidefx.com/docs/houdini/dyno/wire.html


As a part of the #empathise phase expectations for this cable simulations were set. Factors such as realism level, flexibility, and interaction with the environment were considered. Since the courtroom scene is not too detailed except in some parts my goal was to start with a more simplified cable geometry.


  1. Gathering reference



2. As for the next step of the process it was useful to establish possible constraints and define the objectives:


Objectives:

- Achieving a visually realistic cable simulation

- Design the simulation with customizable parameters for flexibility

- Ensure simulation runs smoothly


Constraints:


- Limited computational resources for real-time simulations.

  • Impact: Simulation complexity and accuracy may be constrained by available computing power.

- Tight deadline for project completion.

  • Impact: The need for efficient development and simulation setup to meet the project timeline.

- Balancing realism with real-time performance requirements.

  • Impact: Adjusting simulation parameters to achieve a realistic look while maintaining acceptable performance.


3. As a part of the ideation process the necessary time was spent to research how other people approached a similar type of process. YouTube tutorials were also a part of the ideation process. Deciding to also start with the prototyping phase after the tutorials proves to always be a useful practice since often important information can be forgotten when being exposed to lots of information at once.

Following Simon Verstrate's tutorial https://www.youtube.com/watch?v=QFeLnnMnLxo proved to be a great way to approach the task. There were 6 different videos on the topic, all easy to follow and not too long.


4. Creating the base:


Setting up this project, and starting simple helped with easily following the process. The idea is to increase the difficulty of the nodes throughout the process.

Starting with a simple line, which is just a representation of the used inputs. After that, a resample node is used to add more points to the line which will later help with adjusting the complexity of the model.




The next steps will be to multiply the existing cable and use the twirl option to twist the geometry. In the screen captures the cables appear too narrow and stiff, however, this will be fixed when some forces are introduced later in the process.


To give some dimension to the cables instead of using a Line node, it is useful to create a cylinder and connect it to the line giving it more dimension.


Sweep node:


This element utilizes a cross-sectional curve provided in the second input, duplicates it along a spine curve from the first input, and generates a surface by connecting the distributed cross-sectional curves. This component is highly versatile and serves as a powerful tool for generating procedural geometry.


This node can take polylines, NURBS curves, or Bézier curves as input. By default, the surface type is determined by the type of input curves (e.g., polylines result in polygons, NURBS curves yield NURBS surfaces). However, you have the option to override the surface type by adjusting the Primitive type parameter on the Construction tab.

Instead of employing modeled cross-sections linked to the second input, you have the flexibility to utilize automatic circle, square, or line cross-sections by manipulating the Surface Shape parameter.


Fig 1. Example of transforming a one-dimensional surface to a three-dimensional model


  • Spine curves can be anywhere in space.

  • This node assumes all cross-section curves are modeled at the origin in the XY plane, with +Y up direction.

  • When the curve is flat (planar), the node assumes it should orient the up direction of the cross-sections perpendicular to the curve plane.


  • To simulate “fat” wires, change the Width on the Wire Object node’s Physical tab. This affects the mass of the wires (it is multiplied by the Density) as well as collisions with other objects. You can visualize the width of the wires by turning on Width on the Wire Object’s Visualization tab.


Then Vellumhair node:

  • enables the selection and configuration of a geometry piece as vellum hair within the active simulation, seamlessly integrating it with any existing vellum objects.

  • is represented by polygonal lines that maintain their length and orientation during the simulation. The solving process incorporates the concept of twist, meaning that applying torsion to the hair will result in buckling effects.

  • settings in this node are set to constraint type: string. This is because this option creates constraints that are lighter-weight hair constraints. They are a distance along the edge and the angle between edges. However, they don’t have any twist constraints, so the edges can spin freely.


Typically, it is necessary to pin the roots of the hair to the animation. The Group Expression SOP includes a convenient preset for selecting the initial points of curves, which proves useful for this purpose.

From a technical standpoint, hair in this context supports only unbranching curves. However, if branched curves are provided, they will be split at the branches, and a branched attribute will be utilized to facilitate the reconstruction of the original geometry.


On an important note is important to not forget that the ends of the cables should be pinned:

  • Setting this to 1 on a point will prevent the wire solver from affecting the point’s position, meaning it will use its position any any animation from the source geometry.




As it can be seen on the video lines are already acting like cables, realistically interacting with each other.


Overall, the process ended here, and I am happy with how the simulation turned out. However, I wish I spent more time on texturing and rendering so a more realistic and finished look can be achieved. Altogether, learning the basics of wire simulations was a useful experience that will prove to be helpful in the future as a solid foundation.

Comments


bottom of page