N-Body Simulator with CUDA compute and OpenGL visualization support
Report Bug
·
Request Feature
Table of Contents
The Gravitational N-Body Simulator is a computational physics project designed to simulate the complex interactions between multiple celestial bodies under the influence of gravity. This project aims to provide a versatile tool for scientists, researchers, and astronomy enthusiasts to better understand the dynamics of celestial systems, from simple two-body interactions to intricate multi-body systems like galaxies and star clusters.
- Simulation is decoupled from visualization, allowing for extremely small integration steps. Which provids realistic N-Body simulation
- Exploiting the embarrasingly parallel nature of the N-body problem, Most of the work is offloaded to GPU by using CUDA kernels for mathematical calculations
- CUDA kernels directly write to OpenGL vertex buffer objects in GPU memory, avoding extremely costly Host to Device and Device to Host data copies
- Provide a simple YAML initializer support for configuring initial state
The core of empyrean, handles the physics calculations and simulation loop.
- Add support for more integretors (Verlet, Runge-Kutta IV, etc)
- Optimize reduction in CUDA kernels (Ref)
- Add Barns-Hut approximation algorithm
- Implement SI prefixes and scale units automatically
The rendering component handles the visualization of the particles and the simulation.
- Render anti-aliased circular points
- Add more camera controls
- Support pause/resume and controlling simulation speed
- Support Vulkan
- Display FPS and other details on window
- Provide a user interface widget before rendering to control simulation parameters
- Motion blur for fast moving points
- Add documentation
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
Distributed under the MIT License. See LICENSE
for more information.
Dheemanth Manur - [email protected]
Project Link: https://github.com/dhmnr/empyrean