mirror of
https://github.com/visgl/luma.gl.git
synced 2026-01-18 14:03:42 +00:00
181 lines
8.7 KiB
Plaintext
181 lines
8.7 KiB
Plaintext
# Overview
|
|
|
|
luma.gl is a modern GPU toolkit for the Web, focused on processing and visualization of big data.
|
|
|
|
<center>
|
|
<a href="https://www.w3.org/TR/webgpu/">
|
|
<img
|
|
style={{height: 80, marginRight: 30}}
|
|
src="https://raw.githubusercontent.com/gpuweb/gpuweb/3b3a1632ff1ad6a573330a58710e341bb9d65576/logo/webgpu-horizontal.svg"
|
|
/>
|
|
</a>
|
|
<a href="https://registry.khronos.org/webgl/specs/latest/2.0/">
|
|
<img
|
|
style={{height: 80, marginRight: 40}}
|
|
src="https://raw.github.com/visgl/deck.gl-data/master/images/whats-new/webgl2.jpg"
|
|
/>
|
|
</a>
|
|
<a href="https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html">
|
|
<img
|
|
style={{height: 80}}
|
|
src="https://raw.github.com/visgl/deck.gl-data/master/images/gltf.png"
|
|
/>
|
|
</a>
|
|
</center>
|
|
<center>
|
|
<i>luma.gl supports the latest web GPU standards from W3C and Khronos.</i>
|
|
</center>
|
|
|
|
|
|
|
|
<center>
|
|
<a href="https://openvisualization.org">
|
|
<img
|
|
style={{height: 80}}
|
|
src="https://raw.github.com/visgl/deck.gl-data/master/images/logos/openjsf-color-textg.png"
|
|
/>
|
|
</a>
|
|
</center>
|
|
<center>
|
|
<i>luma.gl is an OpenJS Foundation / Linux Foundation project.</i>
|
|
</center>
|
|
|
|
|
|
|
|
This documentation describes luma.gl **v9.0**. See our [**release notes**](/docs/whats-new) to learn what is new.
|
|
Docs for older versions are available on github:
|
|
**[v8.5](https://github.com/visgl/luma.gl/blob/8.5-release/docs/README.md)**,
|
|
**[v7.3](https://github.com/visgl/luma.gl/blob/7.3-release/docs/README.md)**,
|
|
**[v6.4](https://github.com/visgl/luma.gl/blob/6.4-release/docs/README.md)**.
|
|
|
|
## Highlights
|
|
|
|
luma.gl is a modern GPU toolkit for the Web, created to facilitate processing and visualization of big data.
|
|
|
|
- **Portable GPU API** - for working with GPUs in JavaScript.
|
|
- **TypeScript** - All APIs are rigorously typed.
|
|
- **Pluggable backends** - for WebGPU and WebGL .
|
|
- **Engine-level classes** - `Model`, `Transform` and `AnimationLoop`, as well as scenegraph support.
|
|
- **glTF** support.
|
|
- **Shader management system** - supports shader modules, dependencies, injection, transpilation etc.
|
|
- **Shader module library** - Pre-optimized moduls for compute, visual effects and post processing.
|
|
|
|
For 3D math and data loading, luma.gl uses companion framworks:
|
|
|
|
- [**loaders.gl**](https://loaders.gl) - wide range of 3D and geospatial data format standards.
|
|
- [**math.gl**](https://uber-web.github.io/math.gl/docs) - a variety of high precision geospatial and 3D math logic.
|
|
|
|
luma.gl is intended to be a foundation on top of which to build higher-level GPU frameworks. The primary example is
|
|
|
|
- [**deck.gl**](https://deck.gl) - geospatial GPU visualization and compute via a high-performance functional programming API.
|
|
|
|
## API Philosophy
|
|
|
|
Many 3D / GPU libraries provide portable, higher level "3D engine" type abstractions
|
|
that shield the user from the details of how the GPU works. This is great for
|
|
many use cases but not always ideal.
|
|
|
|
In contrast, luma.gl is designed to give developers full access to GPU programming and
|
|
allow you to work directly with shaders and GPU data structures.
|
|
luma.gl offers APIs that are similar to the underlying WebGPU and WebGL APIs.
|
|
This maximizes knowledge reuse, as well as your understanding of what is actually happening under the hood.
|
|
|
|
For more information, refer to [luma.gl API philosophy](/docs/api-guide/background/api-design).
|
|
|
|
## Supported Environments
|
|
|
|
luma.gl supports recent versions of the most commonly used evergreen browsers (i.e. Chrome, Firefox, Safari, Edge).
|
|
|
|
- **Mobile browsers** should be supported (assuming the mobile browser is an updated evergreen browser), though CPU and GPU memory limits will be lower.
|
|
- Pre-chrome **Edge** is not supported, and IE11 is absolutely not supported.
|
|
- Running on top of **software emulated GPUs** is possible but known to have occasional issues. Check your Chrome settings to make sure you are not using the SwiftShader.
|
|
- Running in **virtual machines** is not officially supported. It may or may not work.
|
|
- Running under **Node.js** may be possible if your Node.js environment can create WebGPU or WebGL contexts. Note that additional work may be required to load images into textures etc.
|
|
|
|
Most luma.gl development is done on desktop Chrome on MacBooks.
|
|
In case you think you have found an issue and want to check if it is specific to your environment,
|
|
it could be worth testing if you can reproduce your issue on Chrome before you report the bug.
|
|
|
|
If you have a confirmed bug that affects a supported environment, feel free to [open an issue](https://github.com/visgl/luma.gl/issues).
|
|
However, if you are not yet sure, please help us keep issue noise down and start in the [discussions](https://github.com/visgl/luma.gl/discussions).
|
|
If you can provide a fix, you are welcome to open a pull request. It often makes sense to discuss before surprising maintainers with a big PR.
|
|
|
|
## Showcases
|
|
|
|
Some examples of applications built on top of luma.gl:
|
|
|
|
| <img style={{width: 250, height: 250}} src="https://deck.gl/images/showcase/kepler-gl.jpg" /> | <img style={{width: 250, height: 250}} src="https://deck.gl/images/showcase/avs.jpg" /> | <img style={{width: 250, height: 250}} src="https://deck.gl/images/showcase/viv.jpg" /> |
|
|
| :-----------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------: |
|
|
| <center><b>kepler.gl</b><p><i>open source geospatial analysis tool for large-scale data sets</i></p></center> | <center><b>AVS / streetscape.gl</b><p><i>A visualization toolkit for autonomy and robotics data</i></p></center> | <center><b>VIV</b><p><i>Visualization of cellular biological samples</i></p></center> |
|
|
|
|
- [kepler.gl](https://kepler.gl/) ([GitHub](https://github.com/keplergl/kepler.gl))
|
|
- [deck.gl](http://deck.gl/#/) ([GitHub](https://github.com/visgl/deck.gl)) a WebGL-powered framework for visual exploratory data analysis of large data sets
|
|
- [avs.auto](https://avs.auto/#/) and [streetscape.gl](https://github.com/uber/streetscape.gl)
|
|
|
|
## Open Governance
|
|
|
|
luma.gl is provided under MIT license and is under open governance as a part of:
|
|
|
|
- The [OpenJS foundation](https://openvisualization.org).
|
|
- The [vis.gl framework suite](https://vis.gl).
|
|
|
|
## Learning Resources
|
|
|
|
To learn more for learning and discussions.
|
|
|
|
- check out the [vis.gl Medium blog](https://medium.com/vis-gl).
|
|
- join the community in the [OpenJS Slack workspace](https://www.openvisualization.org/#get-involved)
|
|
If you wish to contribute in a structured way, beyond isolated PRs, or join the open governance activities,
|
|
start by joining the forums above and introduce yourself.
|
|
|
|
## Primary Contributors
|
|
|
|
luma.gl is developed and maintained by the vis.gl community but has benefitted from the support of various companies:
|
|
|
|
- From 2021 onwards, luma.gl has been developed and maintained by [**Foursquare**](https://location.foursquare.com/products/studio/).
|
|
- From 2019-2021, luma.gl was developed and maintained by [**Unfolded**](https://unfolded.ai).
|
|
- From 2015-2019, luma.gl was created and developed by [**Uber**](https://uber.com).
|
|
|
|
<p style={{marginTop: -60, marginBottom: -20, marginLeft: 30}}>
|
|
<a href="https://location.foursquare.com/products/studio/">
|
|
<img
|
|
style={{height: 160}}
|
|
src="https://raw.github.com/visgl/deck.gl-data/master/images/logos/foursquare.png"
|
|
/>
|
|
</a>
|
|
</p>
|
|
|
|
<a href="https://unfolded.ai">
|
|
<img
|
|
style={{height: 50, marginLeft: 20}}
|
|
src="https://raw.github.com/visgl/deck.gl-data/master/images/logos/unfolded.png"
|
|
/>
|
|
</a>
|
|
|
|
|
|
|
|
<a href="https://uber.com">
|
|
<img
|
|
style={{height: 100}}
|
|
src="https://raw.github.com/visgl/deck.gl-data/master/images/logos/uber-black.jpg"
|
|
/>
|
|
</a>
|
|
|
|
|
|
## History
|
|
|
|
luma.gl was originally created at Uber in 2015 as an open source project to support deck.gl.
|
|
|
|
- 2022: luma.gl was accepted into the OpenJS foundation together with the vis.gl framework stack.
|
|
- 2019: Uber put luma.gl under open governance in the Linux Foundation.
|
|
- 2015: luma.gl started out as a fork of the [PhiloGL](https://github.com/senchalabs/philogl) WebGL library.
|
|
|
|
## Roadmap
|
|
|
|
luma.gl keeps evolving based on the needs of vis.gl frameworks and applications.
|
|
We share information about the direction of luma.gl in the following ways:
|
|
|
|
- **[Blog](https://medium.com/@vis.gl)** - We use the vis.gl blog to share information about what we are doing.
|
|
- **[Github Issues](https://github.com/visgl/luma.gl/issues)** - The traditional way to start or join a discussion.
|
|
- **[RFCs](https://github.com/visgl/luma.gl/tree/master/dev-docs/RFCs)** - RFCs are technical writeups that describe proposed features in upcoming releases.
|