elements_video_540_high.mp4
Elements introduces for the first time the power of the Entity-Component-System (ECS) with the versatility of Scenegraphs, in the context of Computer Graphics (CG), Deep Learning (DL) for Scientific Visualization (SciViz). It also aims to provide the basic tools to anyone that wants to be involved with basic Computer Graphics as well as advanced topics such as Geometric Deep Learning, Geometric Algebra and many many more.
Following a modern educational approach, all related packages are in the Python programming language.
To dive in the details of the project check its detailed developer documentation and the research paper behind this project: arXiv LINK, Eurographics LINK.
- pyECSS: A package for applying ECS to any Scenegraph
- pyGLV : A package applying ECSS to CG, DL and SciViz problems
- pyEEL : A learning hub for various topics where ECSS can be applied
Begin by following the installation instructions, found HERE. For Computer Graphics Course students, the instructions are HERE.
Note
We strongly recommend using:
- Anaconda for your python environment,
- Visual Studio Code as your IDE, and
- Fork/Sourcetree for version control.
The main steps summarize as follows:
- Install Anaconda, VSCode, Git and a optionally a version control app
- Clone (or download) this repo (or your forked repo)
- Create a python 3.9 (recommended) environment, by running
conda create -n elements python=3.9, and activate it viaconda activate elements - Install the Elements in editable mode by running
pip install -e .This is sufficient to run all examples in the repository. - To install all optional extras as well, run
pip install -e ."[all]" - Start exploring the examples in the
Elements/examplesfolder.
- docs: Files used to generate the documentation
The project follows a standard Python project layout with source code in
src/and examples/tutorials at the top level.
Elements/
├── src/
│ └── Elements/ # Core package
│ ├── extensions/ # Modules extending basic functionality
│ │ ├── BasicShapes/ # Helper functions for basic 3D shapes
│ │ ├── GA/ # Geometric Algebra implementation
│ │ ├── Gizmos/ # Unity-like Gizmos for object manipulation
│ │ ├── SkinnedMesh/ # Skinned mesh visualization systems
│ │ ├── Slicing/ # Tools for slicing 3D objects
│ │ ├── Voronoi2D/ # Voronoi diagram visualization
│ │ ├── bezier/ # 3D Bezier curve visualization
│ │ ├── plane_fitting/ # Plane fitting visualization
│ │ ├── plotting/ # 2D/3D function plotting utilities
│ │ ├── rigid_body_animation/ # Skinned mesh animation (preliminary)
│ │ └── usd/ # USD format support (loading/saving)
│ ├── files/ # Static assets and resources
│ │ ├── atlas_files/ # Resources for AI examples
│ │ ├── models/ # 3D models (static and rigged)
│ │ ├── scenes/ # Pre-built USD scenes
│ │ ├── scv/ # Scientific Visualization data
│ │ ├── shaders/ # GLSL shader programs
│ │ └── textures/ # Image textures
│ ├── pyECSS/ # Core Entity-Component-System-Scenegraph framework
│ │ └── tests/ # Unit tests for pyECSS
│ ├── pyGLV/ # Graphics Library for Visualization (Rendering, GUI)
│ │ ├── GL/ # Low-level OpenGL wrappers
│ │ ├── GUI/ # Window management and GUI initialization
│ │ └── tests/ # Unit tests for pyGLV
│ └── utils/ # General utility functions
├── examples/ # Standalone example scripts
│ ├── 1.Introductory/ # Basic examples for beginners
│ ├── 2.Intermediate/ # Intermediate concepts (textures, cameras)
│ ├── 3.Advanced/ # Advanced topics (USD, complex scenes)
├── pyEEL/ # Python Elements Educational Library (Learning Hub)
│ └── notebooks/ # Jupyter notebooks
│ ├── CG/ # Computer Graphics fundamentals
│ ├── DL/ # Deep Learning fundamentals
│ ├── GATE/ # Geometric Algebra Transformation Engine
│ ├── SciCom/ # Scientific Computation
│ └── neuralCG/ # Neural Networks in Computer Graphics
├── docs/ # Documentation source files
├── tests/ # (Optional) Top-level tests
├── setup.py # Build and installation configuration
└── README.md # Project overview and instructions
For the current src/ project layout, the most reliable way to configure test discovery in Visual Studio Code is:
- Open
Python: Configure Tests - Select
unittest - Select the workspace folder
Elements - Use the pattern
test*.py
If you prefer storing the working configuration in .vscode/settings.json, the following setup matches the current repository layout:
{
"python.testing.pytestEnabled": false,
"python.testing.unittestEnabled": true,
"python.testing.cwd": "${workspaceFolder}/src",
"python.testing.unittestArgs": [
"-v",
"-s",
".",
"-p",
"test*.py"
]
}The equivalent command-line discovery command from the repository root is:
python -m unittest discover -s src -t src -p "test*.py"This makes unittest discover tests from the src/Elements/... tree correctly. If tests are discovered in the terminal but not in the VS Code Testing tab, first confirm that VS Code is using the same Python interpreter/environment as your terminal.
If you want to contribute to Elements, kindly check its WIKI for a list of potential projects and a contribution guide. A list of contributors can be found here.
If you have any questions or would like to learn more about our project, please don't hesitate to contact us.
If you are using the Elements project, please cite:
@inproceedings {Elements2023,
booktitle = {Eurographics 2023 - Education Papers},
editor = {Magana, Alejandra and Zara, Jiri},
title = {{Project Elements: A Computational Entity-component-system in a Scene-graph Pythonic Framework, for a Neural, Geometric Computer Graphics Curriculum}},
author = {Papagiannakis, George and Kamarianakis, Manos and Protopsaltis, Antonis and Angelis, Dimitris and Zikas, Paul},
year = {2023},
publisher = {The Eurographics Association},
ISSN = {1017-4656},
ISBN = {978-3-03868-210-3},
DOI = {10.2312/eged.20231015}
}