A hybrid approch to volume rendering
Astronomical data is rapidly increasing in both size and complexity. Most current vizualization tools are not adequately equipped to deal with this data boom. Current tools are often forced to load the entire data cube into memory which is practically impossible in most cases. Visualization tools often lack 3D rendering capabilities as well, further reducing their usefulness.
CARTA (Cube Analysis and Rendering Tool for Astronomy) is one of the leading astronomical visualization tools. It employs a client-server architecture that delegates the expensive processing and rendering to an enterprise-grade server, and exposes a web-based user-interface. The data cube is also downsampled before rendering allowing it to circumvent the memory problems present in most current solutions. CARTA however, has no 3D rendering capabilities. This project aims to implement a prototype that explores a scalable 3D rendering solution that can be integrated into CARTA.
The aim of this project is to implement a 3D rendering prototype that can eventually integrate into CARTA. The protoype needs to:
The application is in the form of a client-server application. The client is written in React and the server is written in C++. The client and server communicate via gRPC.
We decided to implement a hybrid-rendering model to satisfy our aims above.
When the user selects a data cube to render, it downsamples the large model to a target size
(initially 10mb). The server then sends this high quality model to the frontend. The frontend
then renders this level-of-detail (LOD) model and the user can begin interacting with it. Once
the user stops interacting with the model for a small amount of time (~200ms), a high quality
image is generated by the server, which exactly matches the orientation of the LOD model. The
LOD model is then replaced with this image, allowing more detailed analysis to be performed.
Once the user starts interacting with the cube again, the view switches back to the LOD model.
This approach allows large datacubes to be analyzed at interactive framerates while also
providing enough detail for visual analysis.
The sequence diagram below details the
communication between the client and server.
The client and server sections contain the specific details about their implementation.