Alien Drone Attack
In The Making
March 7, 2025
Week 05: Ground Destruction - Debris and Particles
Refining the ground destruction by adding debris and particles has been one of my favorite parts of this project. In this breakdown, I will walk you through the process of setting up the debris emitter, instancing geometry, and configuring a Popnet for particle simulation.
I. Debris and Particles Sourcing
I started by extracting the inner faces from two previously set up fracture configurations. Next, I scattered a copious number of points, setting the stage for the mathematical magic to come.
According to the shared by Gabriel Neville, an FX Lead at MPC FILM, the method of sourcing points for debris emission is demonstrated below:
-
This code is responsible for finding neighboring points within a specified maximum distance (MaxDist). It iterates through the list of neighboring points and checks if the point's name (@name) is different from the current point's name. If they are different, it sets the color (@Cd) of the current point to red (1, 0, 0) and assigns the index of the neighboring point to i@neighbourPoint.
Additionally, it calculates the distance between the current point and the neighboring point and stores it in f@distance. If this distance is less than a specified minimum distance (MinDistance), it sets the distance to the MinDistance.
This part is like a detective looking for nearby points. It checks if any points are close to each other. If it finds a point nearby, it marks it as a "neighbor." It also measures how far these points are from each other. If they're too close, it makes sure they're at least a certain distance apart.
-
This code calculates the actual distance between the current point and its neighbor using the previously calculated distance. It then checks if the actual distance is greater than the distance multiplied by a distance multiplier (DistanceMult). If it is, it sets the color to yellow (1, 1, 0) and sets i@active to 1, indicating that this point is active.
Here, it checks if a point is far enough from its neighbor. If it is, it gives the point a special color and says, "Hey, you're active!" Imagine it as giving a high-five to points that are far apart.
-
This sets a specific frame number. In simpler terms, it's like telling the program to remember that on frame 100, something important will happen.
-
Inside a SOP solver, this code checks if the point is active (i@active == 1). If it is, it sets i@activeFrame to the current frame number (@Frame).
Then, it ensures that i@activeFrame does not exceed the activeFrame value of the previous frame by using min().
This is like having a notebook to remember things. It notes sown which frame something became active. It’s saying, “Hey, on this frame, you became important!”
-
If i@activeFrame is not equal to the current frame (@Frame), it removes the current point.
If a point is no longer needed, it's removed from the program.
-
If i@activeFrame is greater than 36, it removes the current point.
If a point has been active for an extended period, it's cleared from the scene.
II. Debris instancing
Once I successfully set up the sourcing, I instanced various debris geometries onto the points. Since each point has its own pscale and orient attributes, the instanced debris naturally varies in appearance. After defining the velocity, I ran another Rigid Body Dynamics simulation for the debris, using the drone and the main concrete destruction as colliders. To optimize performance, all debris pieces use simple box colliders, significantly speeding up the simulation.
Debris Sourcing
Debris RBD Simulation
II. Particle Simulation
Particles are great substitution for tiny pieces that falling out from the destruction, adding another layer for the effect without increasing the amount of geometry
Particles Sourcing
Particles Simulation
References
Links of references & assets:
Ground Impact in Houdini Tutorial (Part 2) - Fine Debris - REBELWAY