Skip to content

Paraview: Horizon Surfaces

Maria Okounkova edited this page Jul 18, 2022 · 1 revision

Horizon surface movies

An intuitive way to visualize the inspiral and merger of black holes is to render space-like slices of the event horizon over time. Producing consistently pleasing results in ParaView requires a few tips and tricks, described here.

Inputs

  • Trajectory data for initial black holes (pvd file collecting vtu frames)
  • Apparent horizon surface data for initial and final black holes with quantity of interest (pvd files collecting vtu frames)
  • Event horizon surface data with OnOffMask and quantity of interest (pvd file collecting vtu frames)

Render pipeline

The below is a list of the Filters to be applied in Paraview.

Trajectories

This will trace out the orbital trajectories of the initial black holes. Note: ParaView will print warnings if you animate to timestep 0; these are harmless.

  1. Extract Surface: This just tweaks the VTK data type into something we can apply additional filters to (this might not be needed if we generated vtp line data instead of vtu data)
  2. Tube: This traces out the trajectory with a cylindrical tube that can be colored and shaded
    • Number of sides: 24: This makes the cylinders look much smoother

Apparent horizons

Since you probably don't have event horizon data during the early inspiral, apparent horizons can be used instead (they will match the event horizon very closely until close to merger). If possible, output these with a fixed resolution for the entire run (otherwise temporal interpolation will be glitchy).

  1. Temporal Interoplator: This allows your movie framerate to be independent of your data dump rate and still render black hole motion smoothly
    • Discrete Time Step Interval: Leave this at 0 if using "Sequence" mode for animation control. If you haven't set up "Sequence" mode yet, you can set this to a non-zero value to re-enable frame-stepping
  2. Tetrahedralize: I'm not exactly sure why you need this (might be related to using vtu instead of vtp surfaces), but without it, Loop Subdivision won't work right
  3. Extract Surface: This just tweaks the VTK data type into something we can apply additional filters to (this might not be needed if we generated vtp poly data instead of vtu data)
  4. Generate Surface Normals: Make the horizons smooth instead of faceted
  5. Loop Subdivision: Smooth things out even more, especially near the endcaps (this must come after Generate Surface Normals for endcap smoothing to work)
    • Number of Subdivisions: Leave this at 1 for apparent horizons (they're already pretty smooth, and higher values don't seem to help the endcaps)

Event Horizons

This is where the good stuff is.

  1. Temporal Interoplator: This allows your movie framerate to be independent of your data dump rate and still render black hole motion smoothly
  2. Extract Surface: This just tweaks the VTK data type into something we can apply additional filters to (this might not be needed if we generated vtp poly data instead of vtu data)
  3. Loop Subdivision: Smooth out coarse portions of the surface (for event horizons, this should come before Generate Surface Normals in order to leave fewer holes after thresholding)
    • Number of Subdivisions: 2: Higher levels benefit event horizons much more than apparent horizons (though they are very slow)
  4. Generate Surface Normals: Make the horizon smooth instead of faceted
    • Feature Angle: 180
  5. Threshold: Hide the generators, showing only the actual event horizon (We only want the threshold filter to be visible in paraview)
    • Scalars: OnOffMask
    • Minimum: 0
    • Maximum: 0.1: You can tune this number to render more or fewer spindles around cusps

Animation

  • Use "Sequence" mode to set the number of frames independent of your data dumps
  • Use "Variable Time" TimeKeeper to add slow-mo
  • Toggle "Visibility" on pipeline leaves to switch between apparent and event horizons
  • Interpolate camera positions to zoom camera in and out

General tips and tricks

  • Early times may contain gauge distortions, making it look like your holes are growing. Start the animation after a quarter orbit or so to hide this
  • Increase the "Specular" Lighting property of surfaces to make them look glossy
  • Add a slight "Additional Headlight" in the Lights Editor (with intensity set to ~0.1) to brighten things up a bit
  • When zooming via camera interpolation, "double-tap" your zoom endpoints to prevent camera "breathing"
    • For example, to zoom from C1 to C2 between t=100 and t=150, add the following camera keyframes: t=0: C1, t=99: C1, t=100: C1, t=150: C2, t=151: C2
  • When rendering an animation, render PNG frames at 2x your final resolution, then downsample, to get quality anti-aliasing
    • For example, a 1080p movie should render its frames at 3840x2160, then use a command like convert <input_file> -filter Mitchell -resize 1920x1080 <output_file>
  • If coloring surfaces by a quantity like vorticity, consider using a nonlinear colormap adapted to the area-weighted CDF of the data (Curran has a script that do this on a per-frame basis, though a time-independent smooth fit calibrated to the point of merger will look smoother)
Clone this wiki locally