Shockwaves
I am excited to share early results of shockwave rendering with the community!
I would like to add visualization of a glowing shockwave during atmospheric reentry in the sfsim spaceflight simulator. I explored possible approaches by discussing the problem with Google Gemini. Popular approaches seem to use meshes with animated semi-transparent noise textures. However this still leaves the problem of determining the shape of the mesh.
Also the shape of the single-stage-to-orbit spacecraft is complex and the shockwave will look different depending on the orientation of the spacecraft.

In the end, Google Gemini pointed out the Jump Flooding Algorithm (JFA), published in 2006. This algorithm essentially enables a real-time distance transform on the GPU. In this case, it can instead be adapted to fit a shockwave to each wind-facing surface patch and determine, for each pixel, which shockwave candidate lies farthest upstream in the wind direction.
Here is a depth image as seen from the direction the wind is coming from.

JFA then expands this image into a depth image of the shock front.
Billig’s formula is used (with a fixed nose curvature radius for this prototype) to create a shockwave emitter at each surface pixel.

The following image visualizes the seed pixel coordinates for the image.
JFA has to track seed pixel coordinates in order to properly propagate the dominant/nearest shockwave.
![]()
The remaining step is to use this depth image for volumetric rendering of the shockwave.
The next image shows a volumetric box used for rendering the shockwave.

By limiting the fog to pixels behind the shockwave, one obtains the following image.

One can instead apply exponential fall-off to create a more realistic image of a glowing shock front.

Future work includes taking into account the surface slope and curvature to get more realistic shockwaves.
Let me know any feedback and comments in the sfsim playtest discussion forum or one of the social channels below.