A threejs-like render engine based on wgpu
Project description
A python render engine targeting Vulkan/Metal/DX12.
[User Guide] [Example Gallery] [API Reference]
Installation
pip install -U pygfx glfw
To work correctly, pygfx needs some window to render to. Glfw is one
lightweight option, but there are others, too. If you use a different
wgpu-compatible window manager or only render offscreen you may choose to omit
glfw. Examples of alternatives include: jupyter_rfb
(rendering in Jupyter),
PyQt
, PySide
, or wx
.
In addition there are some platform
requirements, see the wgpu docs. In
essence, you need modern (enough) graphics drivers, and pip>=20.3
.
Status
We're currently working towards version 1.0
, which means that the API
can change with each version. We expect to reach 1.0
near the end of
2023, at which point we start caring about backwards compatibility.
This means that until then, you should probably pin the pygfx version that you're using, and check the release notes when you update.
Usage Example
Note The example below is designed against the
main
branch, and may not work on the latest release from pypi, while we're in beta.
Note A walkthrough of this example can be found in the guide.
import pygfx as gfx
import pylinalg as la
cube = gfx.Mesh(
gfx.box_geometry(200, 200, 200),
gfx.MeshPhongMaterial(color="#336699"),
)
rot = la.quat_from_euler((0, 0.01), order="XY")
def animate():
cube.local.rotation = la.quat_mul(rot, cube.local.rotation)
if __name__ == "__main__":
gfx.show(cube, before_render=animate)
Feature Highlights
Some of pygfx's key features are:
- SDF based text rendering (example)
- order-independent transparency (OIT) (example)
- lights, shadows, and physically based rendering (PBR) (example)
- event system with built-in picking (example)
- texture and color mapping supporting 1D, 2D and 3D data (example)
And many more! Check out our feature demos in the docs.
About pygfx
Pygfx is a ThreeJS inspired graphics library that uses WGPU (the successor of OpenGL) to provide GPU acceleration to rendering workloads. It is mature enough to serve as a general-purpose rendering engine (Yes, you can write a game with it.) while being geared towards scientific and medical visualization. Thanks to its low level of abstraction it is flexible and can be adapted to various use-cases. In other words, pygfx emphasizes on hackability and correctness while maintaining the level of performance you would expect from a GPU accelerated library.
License
Pygfx is licensed under the BSD 2-Clause "Simplified" License. This means:
- :white_check_mark: It is free (and open source) forever. :cupid:
- :white_check_mark: You can use it commercially.
- :white_check_mark: You can distribute it and freely make changes.
- :x: You can not hold us accountable for the results of using pygfx.
Contributing
We use a pull request (PR) based workflow similar to many other open-source libraries in the python ecosystem. You can read more about this workflow here; if you have previously contributed to open-source, a lot of this will look familiar already.
Development Install
To get a working dev install of pygfx you can use the following steps:
# Click the Fork button on GitHub and navigate to your fork
git clone <address_of_your_fork>
cd pygfx
# if you use a venv, create and activate it
pip install -e .[dev,docs,examples]
pytest
Testing
The test suite is divided into two parts; unit tests for the core, and unit tests for the examples.
pytest -v tests
runs the core unit tests.pytest -v examples
tests the examples.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file pygfx-0.1.15.tar.gz
.
File metadata
- Download URL: pygfx-0.1.15.tar.gz
- Upload date:
- Size: 988.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 169b695bd6f90ed286aa1a2c3ccbdb833232bc458460275b85e0a32d2d2336d6 |
|
MD5 | 488416367367a9ef5e29304e10933c3d |
|
BLAKE2b-256 | 0697978a9a7b1928253a6f5fa90f59c81def9e71f45651a0a9a79183c2f61866 |
File details
Details for the file pygfx-0.1.15-py3-none-any.whl
.
File metadata
- Download URL: pygfx-0.1.15-py3-none-any.whl
- Upload date:
- Size: 1.0 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 67f13ce0893d12ed0edb3005df5ad4677da5661ec5ab7b0a62d434af6a4034c9 |
|
MD5 | fe5f97a46aecba5cfa316c561f4088ca |
|
BLAKE2b-256 | 98b153f0c6413ed11218dbe515aac5b6d5a91407917018f285268e4da21237a2 |