top of page
M A   P R O J E C T 
"C a r    D e s t r u c t i o n"



  R B D    |    P y r o   E x p l o s i o n   |   D e b r i s   |   D u s t





Houdini 16.5

Nuke X













Houdini 16.5

Nuke X

FX Technique

FX Layers:

1. Car Destruction RBD
2. Pyro Explosion
3. Debris
4. Dust




Car Destruction RBD Setup

1. Bring in the car model, unpack and add uv
2. Attach the animation keys on a null or transform node or just import in if it's an animated alembic file.

3. Create a geo node for Fracture. Inside, object merge the animated model. Create category name of group selected for each part: windows, body, tires, etc. 
s@cat_name = ch("name");

- Give random number based on string
int hash = random_shash(s@cat_name);
@Cd=set(rand(hash), rand(hash+3253), rand(hash+23));


- Set fracture category and multiply the scatter points
f@cat_fracture_density = 30.0;

4. Separate this prefracture into 2 parts: fracture and non-fracture. 
Fracture part: add connectivity, foreach voronoifracture system. Connect timeshift FRAC part with foreach and voronoi by using pointdeform. 
Non-Fracuture part: wire to merge with results of pointdeform

5. Cache both parts and put down a merge, rest and trail nodes


Car Destruction RBD setup (continued)

6. Divide to 3 separate groups for Constraints: Hard, Glue, and another to set active and deforming.

6.1 Hard group for parts that hard to break and bendable like car body, engine:
- assemble creating Output Prefix name (example "carBody"), check for connect inside edges
- timeshift start frame
- connectadjecentpieces from surface points
- a wrangle node with vex name example "Body_props":

s@constraint_name = "Hard";
s@constraint_type = "all";

- fuse set to unique
- primitive scale down all to zero
- pointdeform wire in primitive, timeshift, and assemble
- cache out Hard constraint and put a null called OUT_hard_con

6.2 Glue group for parts that easily broken like glass:
- assemble creating Output Prefix name (example "glass), check for connect inside edges
- timeshift start frame
- connectadjecentpieces from surface points
- a wrangle node with vex name (example "Glue_con":

s@constraint_name = "Glue";
s@constraint_type = "all";

- pointdeform wire in wrangle, timeshift, and merge from 3 assemble nodes
- cache out Hard constraint and put a null called OUT_glue_con

6.3 Last group to set active and handoff animation.
Before dopnet, we need to create an active attribute in wrangle. Key value to 1 on active frame or use vex:

@active = 0;
if($FF > 20)
    @active = 1;

Following is how I setup for this group:
- assemble creating packed geometry
- pointwrangle with vex:

i@active = int(ch("active"));
//create Active slider and keyframe the active frame you need.

i@deforming = int(ch("deforming"));
//create Deforming slider and put this inside:

so that number will always be opposite of active

- Put a Null called OUT_geo

7. Create a "sim" DOP Network
- RBD Packed Object  with sop path to frac/OUT_geo
- Overwrite Attr checked on for active animated deforming
- Use Object Transform checked
- Rigidbodysolver, Constraint solver to Pararell Gauss-Seidel
- constraintnetwork node set path to
wire it with rigidbodysolver, Hard Constraint Relationship set Data Name to "Hard", and a sopsolver which inside wire relationship_geo with a wrangle vex:

//if(f@force > f@cat_hard_break_force || f@distance > f@cat_hard_break_dist){
f@forceL = length(v@force);
if(f@forceL > 1 || f@distance > 0.175){
    @group_broken = 1;


and an Output node
- Set another constraintnetwork node set path to
- wire in the first constraintnetwork and a Glue Constraint Relationship with Data name to "Glue"

- Import ground collision as static object

8. Create an OUTPUT geo
- dopimport DOP Network /obj/sim and object mask to *rbd*

9. Cache out this RBD sim using filecache for final animation to export for pyro system

Pyro Explosion Setup

1. New separated file
2. Create a geo for pyro_Explosion

3. Bring in the animated RBD fracture

4. Create noise with point_noise

5. Scatter points and cache out

6. Read in and convert to vdb

7. Create DOPnet and import those into Source Volume.

8. Add gasturbulence and gasdissipate

9. Import RBD car and ground collision as static objects

10. Read in using import_pyrofields

11. Cache out and assign explosion shader

12. Render



Create volume light for Pyro additional from Sun light and HDR Dome light

This is a light pass that will interact with environment, smoke and RBD in the scene.

Settings turn off self shadow and enable point clouds.



Pyro DOPnet

bottom of page