Purpose and Inspiration
This started with taking 3 different areas of interest and making something out of it. At the
intersection of 'Web', 'NASA', and 'Asteroids', I found inspiration to create an asteroid visualizer
using Three.js for WebGL-based graphics. The primary objective was to utilize NASA APIs to collect data
on asteroids and comets, and then integrate them into a simulated solar system. This visualization
serves to illustrate the orbits and density of these celestial bodies as they orbit the Sun, providing
a sound exploration of our cosmic neighborhood.
Changes to the project
Although my initial goal was to visualize the density of asteroids within the scene, I encountered
performance issues due to the impact caused by a dense cluster of objects. This challenge can be
addressed through better design, instanced meshes, and low-poly models. Consequently, I had to limit
the visualizer to displaying only Atira and Halley-class celestial objects. This led me to revise the
presentation to resemble solar system visualizers like NASA's 'Eyes on the Solar System' and other
simulators with greater fidelity than my project.
Additionally, throughout the project development, I faced time constraints that required me to classify
any additional scope creep, fixes, and cosmetic issues as technical debt. Therefore, the direction of
my project was influenced by both performance considerations and time constraints.
Possible Future Development
- Sound and Audio - Adding ambient royalty free soundtracks to the visualizer. This was to be originally
implemented but will need to conform with changes with the AudioContext with chrome.
- Mesh Optimisation - Improving the existing mesh handling setup to handle higher volumes of celestial
bodies.
- Atmospherics - For planets like Venus and the Earth, some minor shader based atmospherics
simulate light through an artificial atmosphere.
- Information Window for Planets, Asteroids and Comets - A mini information window will appear after
the selection of a celestial body.
- Inclusion of interstellar objects - Reveal orbital paths and approximate object features of
objects originating outside the solar system.
- Expansion to simulate other small-body objects - With improved optimisation, the visualizer can
extend to reveal other celestial objects.
Known Issues
- Zooming whilst on planet - When scrolling / zooming on a planet while the time travel is moving either
backwards or forwards. The zoom won't be able to keep up with the planet and will zoom out to max distance
from the planet.
- Low detail for Pluto's orbit ring - The same calculation for the orbital ring is used for each planet.
The further they go out the more stepped each of the ring segments are. This causes the ring line to not be
aligned to the planet.
- Extreme lighting on smaller planets - The lighting button activated on smaller planets can be extremely bright.
This is caused by the relative distance to the planet and the light intensity.
- Camera snapping during travel - When attempting to orient camera view whilst travelling to a planet.
This will cause the camera view to snap between positions.
Limitations
- Real-time object positioning - To avoid cost of running a server on an EC2 instance. A snapshot of the data
is stored within a json file to then be used by the visualizer. However, the data stored locally is sourced from both the
SBDB Query and Horizons API.
- Mobile support - The visualizer can be opened through mobile but the interactions are very clunky. This project
was never intended to be created for mobile and only for desktop browsers.