GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - schell/renderling: GPU driven real-time renderer, backed by wgpu and rust-gpu

BranchesTags
Open more actions menu

Latest commit

 

History

412 Commits
412 Commits

Folders and files

NameName
Last commit message
Last commit date
.cargo
.cargo
 
 
.github
.github
 
 
.helix/snippets
.helix/snippets
 
 
blender
blender
 
 
crates
crates
 
 
fonts
fonts
 
 
gltf
gltf
 
 
img
img
 
 
manual
manual
 
 
test_img
test_img
 
 
.gitattributes
.gitattributes
 
 
.gitignore
.gitignore
 
 
AGENTS.md
AGENTS.md
 
 
CONTRIBUTING.md
CONTRIBUTING.md
 
 
Cargo.lock
Cargo.lock
 
 
Cargo.toml
Cargo.toml
 
 
LICENSE
LICENSE
 
 
NOTES.md
NOTES.md
 
 
README.md
README.md
 
 
clippy.toml
clippy.toml
 
 
rustfmt.toml
rustfmt.toml
 
 

Repository files navigation

renderling

Renderling is an innovative, GPU-driven renderer designed for efficient scene rendering with a focus on leveraging GPU capabilities for nearly all rendering operations. Utilizing Rust for shader development, it ensures memory safety and cross-platform compatibility, including web platforms. The project, currently in the alpha stage, aims for rapid loading of GLTF files, handling large scenes, and supporting numerous lights. Development emphasizes performance, ergonomics, observability and the use of modern rendering techniques like forward+ rendering and physically based shading.

Read the manual to get started.

Read the docs for more info.

Visit https://renderling.xyz to read the development blog.

ibl_environment_test

This project is funded through NGI Zero Commons, a fund established by NLnet with financial support from the European Commission's Next Generation Internet program. Learn more at the 2025 NLnet project page and the 2024 NLnet project page.

NLnet foundation logo

NGI Zero Logo

Warning

This is very much a work in progress.

What

renderling holds entire scenes of geometry, textures, materials, lighting, even the scene graph itself - in GPU buffers. All but a few of the rendering operations happen on the GPU. The CPU is used to interact with the filesystem to marshall data to the GPU and to update transforms.

Shaders are written in Rust, via rust-gpu.

Why should I use renderling

  • Data is easily staged on the GPU using an automatically reference counted slab allocator that provides access from the CPU.

    Your scene geometry, materials, animations - all of it - live on the GPU, while the CPU has easy access to read and modify that data, without borrowing - allowing you to send your data through threads to anything that needs it.

  • Having everything on the GPU makes renderling very effective at rendering certain types of scenes.

    Specifically renderling aims to be good at rendering scenes with a moderate level of unique geometry, (possibly a large amount of repeated geometry), with a small number of large textures (or large number of small textures), and lots of lighting effects.

  • Tight integration with GLTF:

    • Loading scenes, nodes, animations etc
    • Includes tools for controlling animations
    • Supported extensions:
      • KHR_lights_punctual
      • KHR_materials_unlit
      • KHR_materials_emissive_strength
  • Image based lighting + analytical lighting

  • Good documentation

API Features

  • simple structs represent nodes, meshes, materials and lights
  • seamless GPU / CPU syncronization
  • headless rendering support
    • rendering to texture and saving via image crate
  • text and user interface rendering support
  • nested nodes with local transforms
  • tight integration with glTF (cargo feature gltf - on by default)

Shaders are written in Rust via rust-gpu where possible, falling back to wgsl where needed.

Rendering Features / Roadmap

Renderling takes a forward+ approach to rendering.

By default it uses a single uber-shader for rendering.

  • texture atlas

    • automatic resource management (Arc/drop based)
    • BCn compression
  • GPU slab allocator

    • automatic resource management (Arc/drop based)
  • frustum culling

  • occlusion culling - in progress

  • Built-in support for common lighting/material workflows

    • physically based shading
    • unlit
  • forward+ style light tiling/light culling

  • shadow mapping

    • shadow mapping from image-based lighting
  • ssao

  • msaa

  • bloom "physically based" up+downsampling blur

  • depth of field

  • high dynamic range

  • skybox

  • image based lighting

    • diffuse
    • specular
  • order independent transparency

  • entirely too much raymarching

  • gltf support

    • scenes
    • nodes
    • cameras
    • meshes
    • materials
      • pbr metallic roughness (factors + textures)
      • normal mapping
      • occlusion textures
      • pbr specular glossiness
      • parallax mapping
    • textures, images, samplers
    • animation
      • interpolation
      • skinning
      • morph targets
  • 2d (renderling-ui)

    • text
    • stroked and filled paths
      • circles
      • rectangles
      • cubic beziers
      • quadratic beziers
      • arbitrary polygons
      • fill w/ image

Definition

renderling noun

A small beast that looks cute up close, ready to do your graphics bidding.

Haiku

Ghost in the machine, lighting your scene with magic. Cute technology.

Project Organization

  • crates/renderling

    Main library crate. Contains CPU Rust code for creating pipelines and managing resources, making render passes, etc. Contains GPU Rust code of the shader operations themselves. Contains tests, some using image comparison of actual frame renders for consistency and backwards compatibility.

  • crates/renderling/shaders

    Contains .spv and .wgsl files generated by cargo-gpu.

  • crates/renderling/src/linkage*

    Contains autogenerated wgpu linkage for the generated shaders.

  • img

    Image assets for tests (textures, etc.)

  • test_img

    Reference images to use for testing.

  • crates/example

    Contains an example of using the renderling crate to make an application.

Tests

Tests use renderling in headless mode and generate images that are compared to expected output.

Running tests

cargo test

Building the shaders

The crates/renderling/shaders/ folder contains the generated SPIR-V files.

To regenerate the shaders, run:

cargo shaders

And to explicitly re-generate wgpu linkage, you can run:

cargo linkage

...but the build.rs script will do this for you, so it's not strictly necessary.

Building on WASM

RUSTFLAGS=--cfg=web_sys_unstable_apis trunk build crates/example-wasm/index.html && basic-http-server -a 127.0.0.1:8080 crates/example-wasm/dist

🫶 Sponsor this!

This work will always be free and open source. If you use it (outright or for inspiration), please consider donating.

💰 Sponsor 💝

Special thanks

  • James Harton (@jimsynz) for donating multiple linux CI runners with physical GPUs!

Related work & spin-off projects

Many projects were born from first solving a need within renderling. Some of these solutions were then spun off into their own projects.

  • wgsl-rs Write WGSL shaders using a subset of Rust and run them on CPU and GPU
  • crabslab and craballoc A slab allocator for working across CPU/GPU boundaries.
  • loading-bytes A cross-platform (including the web) and comedically tiny way of loading files to bytes.
  • moongraph A DAG and resource graph runner.
  • Contributions to naga
    • Adding atomics support to the SPIR-V frontend
  • Contributions to gltf
  • cargo-gpu A shader compilation cli tool.

Sponsoring this project contributes to the ecosystem.

License

Renderling is free and open source. All code in this repository is dual-licensed under either:

MIT License (LICENSE-MIT or http://opensource.org/licenses/MIT)
Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)

at your option. This means you can select the license you prefer! This dual-licensing approach is the de-facto standard in the Rust ecosystem and there are very good reasons to include both.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Notes & Devlog

I keep a list of (un)organized notes about this project here. I keep a devlog at the official website https://renderling.xyz/devlog/index.html.

About

GPU driven real-time renderer, backed by wgpu and rust-gpu

renderling.xyz

Topics

gpgpugraphicsimage-based-lightingphysically-based-renderingrustwebgpuwgpu

Resources

Readme
License

Contributing

Contributing
Activity

Stars

252 stars

Watchers

4 watching

Forks

20 forks
Report repository

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.