3D Solar System
Hans Pärtel Pani, Arnold Luich, Artur Salumäe
https://docs.google.com/presentation/d/18HPpccjz7sxcOJtyeCE5NR-R8IrpQJmLW4pRKm0EDso/edit#slide=id.p
Live Demo
https://arnoldluich.github.io/3D-Solar-System/
GitHub
https://github.com/ArnoldLuich/3D-Solar-System
Video
Instructions for setting up and running this project are available in our GitHub repository. Please visit the repository to find detailed steps on installation, prerequisites, and usage.
Description
This project is a Three.js-based 3D Solar System Simulation designed to create an interactive, visually realistic model inspired by NASA's designs. It features accurately scaled planets and the Sun, modeling planetary orbits, axial tilts, rotation periods, and revolution speeds that reflect real-world orbital dynamics. The system incorporates detailed textures, realistic lighting, and satellite simulations for Earth. Key functionalities include interactive controls, such as zooming in and out, selecting planets, focusing on a chosen planet, and controlling the flow of time by stopping it, speeding it up, or reversing it. This simulation provides an engaging and educational experience by combining physical accuracy with visual appeal.
Features
Planets
We used IcosahedronGeometry for our planets to avoid pole distortions common with spheres, ensuring smooth, evenly distributed geometry. To achieve a realistic look, we applied MeshPhongMaterial. High-quality textures were carefully mapped to the geometry, showcasing detailed planetary features like continents and oceans.
- Planet textures are from https://planetpixelemporium.com/earth.html
- Planetary radiuses are from the https://api.le-systeme-solaire.net/en/ api.
- Accurate planetary orbital positions, rotation axes and degrees are calculated using the astromony engine package.
Sun
The Sun was created using the same technique as the planets, utilizing IcosahedronGeometry and MeshPhongMaterial. Additionally, we added a PointLight to simulate sunlight, enabling accurate shadow casting across the solar system. A slight glow effect was achieved by using the material's emissive property, giving the Sun a radiant appearance that enhances its realism.
Rings for Saturn and Uranus
The rings for Saturn and Uranus were made using RingGeometry and MeshPhongMaterial. We applied two textures: ringTexture for the ring's appearance and alphaTexture to create transparency, making parts of the rings invisible in certain spots for a more realistic effect.
Satellites
Satellites were visualized using the satellite-js package and TLE data from NORAD CelesTrak. Satellite-js was used for finding the approximate positions for every satellite given a date-time and the satellite’s TLE data. TLE data consists of orbital elements required to calculate satellite positions [1]. Nothing is done to improve the accuracy of the satellite visualization as the position calculation inaccuracy increases over time nor are satellites being added/removed based on their launch, decommission and or deorbiting dates.
Interaction
The simulation can be controlled with buttons on the UI or keyboard keys:
- Pause Time: Press the Down and Up Arrows, pause and resume the simulation.
- Speed Up Time: Press the Right Arrow Key to accelerate time, speeding up the simulation.
- Go Back in Time: Press Left Arrow Key once to return to the previous time speed state. Press it again to start going back in time, reversing the progression of the simulation.
- Zoom In and Out: Click on any planet to zoom in and use the mouse scroll wheel to zoom in or out, adjusting the view as needed.
Stars
To create a realistic star-filled background, we used a Python script to extract data on the 3,000 stars closest to Earth. The data, including RA (Right Ascension), Dec (Declination), and Magnitude, was obtained using astroquery with the Vizier module. This information was then saved into a JSON file, which was later imported into the project to position the stars accurately in the scene.
Initial progress (12.11):
- Planets and Sun: All planets, including the Sun, have been successfully implemented. The astronomy-engine library and le-systeme-solaire.net api are used for accurate planet positions.
- Color Maps: Each planet uses high-quality color maps for realistic surface visuals, enhancing the immersive experience.
- Zoom Functionality: Currently, the zoom feature allows users to zoom in on the Sun, though zooming in on other planets is still in development.
- Planet Selection: An early version of planet selection.
- Randomly Generated Star Field: A randomly generated star field serves as the background, creating a realistic space environment that surrounds the solar system.
- Satellites: Earth orbiting satellites are displayed in their actual positions (at the start of the epoch)