{"id":13998151,"url":"https://github.com/schell/renderling","last_synced_at":"2025-04-04T15:07:56.852Z","repository":{"id":57659969,"uuid":"459326888","full_name":"schell/renderling","owner":"schell","description":"GPU driven real-time renderer, backed by wgpu and rust-gpu","archived":false,"fork":false,"pushed_at":"2024-10-18T02:13:29.000Z","size":41336,"stargazers_count":64,"open_issues_count":12,"forks_count":4,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-10-20T14:52:27.088Z","etag":null,"topics":["gpgpu","graphics","image-based-lighting","physically-based-rendering","rust","webgpu","wgpu"],"latest_commit_sha":null,"homepage":"https://renderling.xyz","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/schell.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["schell"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":null}},"created_at":"2022-02-14T21:11:26.000Z","updated_at":"2024-10-18T08:39:32.000Z","dependencies_parsed_at":"2024-02-10T21:23:32.340Z","dependency_job_id":"4b75f0bc-1b36-4992-b8fd-c7894b73bb9e","html_url":"https://github.com/schell/renderling","commit_stats":{"total_commits":85,"total_committers":1,"mean_commits":85.0,"dds":0.0,"last_synced_commit":"eb071be6e2b3c5bd785aae8c01ca41fadc086067"},"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schell%2Frenderling","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schell%2Frenderling/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schell%2Frenderling/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schell%2Frenderling/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/schell","download_url":"https://codeload.github.com/schell/renderling/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247198450,"owners_count":20900080,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gpgpu","graphics","image-based-lighting","physically-based-rendering","rust","webgpu","wgpu"],"created_at":"2024-08-09T19:01:25.931Z","updated_at":"2025-04-04T15:07:56.828Z","avatar_url":"https://github.com/schell.png","language":"Rust","readme":"# \u003cimg style=\"image-rendering: pixelated; image-rendering: -moz-crisp-edges; image-rendering: crisp-edges;\" src=\"https://github.com/user-attachments/assets/83eafc47-287c-4b5b-8fd7-2063e56b2338\" /\u003e renderling\n\nRenderling is an innovative, GPU-driven renderer designed for efficient scene rendering with a focus on leveraging \nGPU capabilities for nearly all rendering operations. \nUtilizing Rust for shader development, it ensures memory safety and cross-platform compatibility, including web platforms. \nThe project, currently in the alpha stage, aims for rapid loading of GLTF files, handling large scenes, and supporting numerous lights. \nDevelopment emphasizes performance, ergonomics, observability and the use of modern rendering techniques like forward+ rendering and \nphysically based shading.\n\nVisit \u003chttps://renderling.xyz\u003e to read the development blog.\n\n\u003cimg width=\"912\" alt=\"ibl_environment_test\" src=\"https://github.com/schell/renderling/assets/24942/297d6150-64b2-45b8-9760-12b27dc8cc3e\"\u003e\n\nThis project is funded through [NGI Zero Core](https://nlnet.nl/core), a fund established by [NLnet](https://nlnet.nl) \nwith financial support from the European Commission's [Next Generation Internet](https://ngi.eu) program. \nLearn more at the [NLnet project page](https://nlnet.nl/project/Renderling).\n\n[\u003cimg src=\"https://nlnet.nl/logo/banner.png\" alt=\"NLnet foundation logo\" width=\"20%\" /\u003e](https://nlnet.nl)\n\n[\u003cimg src=\"https://nlnet.nl/image/logos/NGI0_tag.svg\" alt=\"NGI Zero Logo\" width=\"20%\" /\u003e](https://nlnet.nl/core)\n\n\n## Warning\n\nThis is very much a work in progress.\n\n## What\n\n`renderling` holds entire scenes of geometry, textures, materials, lighting, even the scene graph itself - in GPU buffers.\nAll but a few of the rendering operations happen on the GPU.\nThe CPU is used to interact with the filesystem to marshall data to the GPU and to update transforms.\n\nShaders are written in Rust, via `rust-gpu`.\n\n## Why should I use `renderling`\n\n* Data is easily staged on the GPU using an automatically reference counted slab allocator that \n  provides access from the CPU.\n\n  Your scene geometry, materials, animations - all of it - live on the GPU, while the CPU has easy access\n  to read and modify that data, without borrowing - allowing you to send your data through threads to anything \n  that needs it. \n\n* Having everything on the GPU makes `renderling` very effective at rendering certain types of scenes.\n  \n  Specifically `renderling` aims to be good at rendering scenes with a moderate level of unique geometry,\n  (possibly a large amount of repeated geometry), with a small number of large textures (or large number of small textures),\n  and lots of lighting effects.\n\n* Tight integration with GLTF:\n  - Loading scenes, nodes, animations etc\n  - Includes tools for controlling animations\n  - Supported extensions:\n    * KHR_lights_punctual\n    * KHR_materials_unlit\n    * KHR_materials_emissive_strength\n* Image based lighting + analytical lighting\n\n* Good documentation\n\n## API Features\n\n* simple structs represent nodes, meshes, materials and lights\n* seamless GPU / CPU syncronization\n* headless rendering support\n  - rendering to texture and saving via `image` crate\n* text and user interface rendering support\n* nested nodes with local transforms\n* tight integration with glTF (cargo feature `gltf` - on by default)\n\nShaders are written in Rust via `rust-gpu` where possible, falling back to `wgsl` where needed.\n\n## Rendering Features / Roadmap\n\nRenderling takes a [forward+](https://takahiroharada.files.wordpress.com/2015/04/forward_plus.pdf) approach to rendering.\n\nBy default it uses a single uber-shader for rendering.\n\n- [x] texture atlas\n  - [x] automatic resource management (Arc/drop based)\n  - [ ] [BCn compression](https://www.reedbeta.com/blog/understanding-bcn-texture-compression-formats/)\n\n- [x] GPU slab allocator\n  - [x] automatic resource management (Arc/drop based)\n\n- [x] frustum culling\n- [ ] occlusion culling - in progress\n\n- [x] Built-in support for common lighting/material workflows\n  - [x] physically based shading\n  - [x] unlit\n- [ ] light tiling/light culling (in progress)\n- [x] shadow mapping\n  - [ ] shadow mapping from image-based lighting\n- [ ] ssao\n\n- [x] msaa\n- [x] bloom \"physically based\" up+downsampling blur\n- [ ] depth of field\n- [x] high dynamic range\n- [x] skybox\n\n- [x] image based lighting\n  - [x] diffuse\n  - [x] specular\n     \n- [ ] order independent transparency\n\n- [ ] entirely too much raymarching \n\n- gltf support\n  - [x] scenes\n  - [x] nodes\n  - [x] cameras\n  - [x] meshes\n  - materials\n    - [x] pbr metallic roughness (factors + textures)\n    - [x] normal mapping\n    - [x] occlusion textures\n    - [ ] pbr specular glossiness\n    - [ ] parallax mapping\n  - [x] textures, images, samplers\n  - animation\n    - [x] interpolation\n    - [x] skinning\n    - [x] morph targets \n\n- 2d (renderling-ui)\n  - [x] text\n  - [x] stroked and filled paths\n    - [x] circles\n    - [x] rectangles\n    - [x] cubic beziers\n    - [x] quadratic beziers\n    - [x] arbitrary polygons\n    - [x] fill w/ image\n\n## Definition\n**renderling** noun\n\nA small beast that looks cute up close, ready to do your graphics bidding.\n\n## Haiku\n\n\u003e Ghost in the machine,\n\u003e lighting your scene with magic.\n\u003e Cute technology.\n\n## Project Organization\n\n* crates/renderling\n\n  Main library crate.\n  Contains CPU Rust code for creating pipelines and managing resources, making render passes, etc.\n  Contains GPU Rust code of the shader operations themselves.\n  Contains tests, some using image comparison of actual frame renders for consistency and backwards compatibility.\n\n* crates/renderling/shaders\n\n  Contains **.spv** and **.wgsl** files generated by [`cargo-gpu`](https://github.com/rust-gpu/cargo-gpu).\n\n* crates/renderling/src/linkage*\n\n  Contains autogenerated `wgpu` linkage for the generated shaders.\n\n* img\n\n  Image assets for tests (textures, etc.)\n\n* test_img\n\n  Reference images to use for testing.\n\n* crates/example\n\n  Contains an example of using the `renderling` crate to make an application.\n\n## Tests\n\nTests use `renderling` in headless mode and generate images that are compared to expected output.\n\n### Running tests\n\n```\ncargo test\n```\n\n## Building the shaders\n\nThe `crates/renderling/shaders/` folder contains the generated SPIR-V files.\n\nTo regenerate the shaders, run:\n\n```\ncargo shaders\n```\n\nAnd to explicitly re-generate `wgpu` linkage, you can run: \n\n```\ncargo linkage\n```\n\n...but the `build.rs` script will do this for you, so it's not strictly necessary.\n\n## Building on WASM\n\n```\nRUSTFLAGS=--cfg=web_sys_unstable_apis trunk build crates/example-wasm/index.html \u0026\u0026 basic-http-server -a 127.0.0.1:8080 crates/example-wasm/dist\n```\n\n## 🫶 Sponsor this!\n\nThis work will always be free and open source. \nIf you use it (outright or for inspiration), please consider donating.\n\n[💰 Sponsor 💝](https://github.com/sponsors/schell)\n\n### Special thanks \n\n- James Harton ([@jimsynz](https://github.com/jimsynz/)) for donating multiple linux CI runners with \n  physical GPUs!\n\n### Related work \u0026 spin-off projects \n\nMany projects were born from first solving a need within `renderling`. \nSome of these solutions were then spun off into their own projects.\n\n- [`cargo-gpu`](https://githu.com/rust-gpu/cargo-gpu)\n  A shader compilation cli tool.\n- [`crabslab` and `craballoc`](https://github.com/schell/crabslab)\n  A slab allocator for working across CPU/GPU boundaries.\n- [`loading-bytes`](crates/loading-bytes)\n  A cross-platform (including the web) and comedically tiny way of loading files to bytes.\n- [`moongraph`](https://github.com/schell/moongraph)\n  A DAG and resource graph runner.\n- Contributions to [`naga`](https://github.com/gfx-rs/wgpu/issues/4489)\n  * Adding atomics support to the SPIR-V frontend (in progress)\n- Contributions to [`gltf`](https://github.com/gltf-rs/gltf/pull/419)\n\nSponsoring this project contributes to the ecosystem. \n\n## License\nRenderling is free and open source. All code in this repository is dual-licensed under either:\n\n    MIT License (LICENSE-MIT or http://opensource.org/licenses/MIT)\n    Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)\n\nat your option. This means you can select the license you prefer! This dual-licensing approach\nis the de-facto standard in the Rust ecosystem and there are very good reasons to include both.\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion\nin the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above,\nwithout any additional terms or conditions.\n\n## Notes \u0026 Devlog\nI keep a list of (un)organized notes about this project [here](NOTES.md).\nI keep a devlog at the official website \u003chttps://renderling.xyz/devlog/index.html\u003e.\n","funding_links":["https://github.com/sponsors/schell"],"categories":["Rust"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fschell%2Frenderling","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fschell%2Frenderling","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fschell%2Frenderling/lists"}