Skip to content

A 3D game engine in python, for learning purposes

Notifications You must be signed in to change notification settings

MonliH/nimble-engine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Nimble logo

Nimble Engine


Nimble is a basic 3d game engine written in python. It renders the 3d models (and game) using low level GLSL shaders (with OpenGL), uses Pybullet for physics, and Qt5 for the UI.

Before you ask: yes, I know, this is probably not suitable for super-serious games because of CPython's poor performance. It's more for learning purposes, like pygame is.


example

roll a ball demo Demo of the roll-a-ball game, located in examples/roll-a-ball. To try it, open the project.nimproj file in nimble, using the File > Open menu.


running

The easiest way to try nimble is to download the packaged binaries, found in the releases page.


running from source

You will need:

  • Python (3.9+)
  • Conda (preferably Miniconda, as the pyqt5 packaged with Anaconda is not compatible with some dependencies)

Download the source either through github zip, or:

git clone https://github.com/MonliH/nimble-engine.git
cd nimble-engine

Activate a conda environment, for example base:

conda activate base

Install the dependencies:

conda install -c conda-forge pyqtads
pip install -r requirements.txt

Then run:

python -m nimble

building into an executable

NOTE: make sure the commands below are run in the conda environment that you set up above. Also, building on windows is a serious pain, as you need to use backdated dependencies. Please open an issue if you need help with this.

For now, nimble uses pyinstaller to bundle everything into an executable. Make sure to install my branch with a patched splash screen:

git clone https://github.com/MonliH/pyinstaller.git
cd pyinstaller
git checkout develop
python setup.py install #  may need sudo

Then build using the nimble.spec file:

pyinstaller nimble.spec

todo

  • Add some lighting system, and eventually physically based rendering (PBR)
  • Add a UI to add 2d elements