[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-5693":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":19,"compositeScore":20,"rankGlobal":10,"rankLanguage":10,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":22,"hasPages":22,"topics":24,"createdAt":10,"pushedAt":10,"updatedAt":25,"readmeContent":26,"aiSummary":27,"trendingCount":16,"starSnapshotCount":16,"syncStatus":19,"lastSyncTime":28,"discoverSource":29},5693,"kajiya","EmbarkStudios\u002Fkajiya","EmbarkStudios","💡 Experimental real-time global illumination renderer 🦀","",null,"Rust",5334,202,90,19,0,5,16,2,37.92,"Apache License 2.0",false,"main",[],"2026-06-12 02:01:14","\u003C!-- Allow this file to not have a first line heading -->\n\u003C!-- markdownlint-disable-file MD041 -->\n\n\u003C!-- inline html -->\n\u003C!-- markdownlint-disable-file MD033 -->\n\n\u003Cdiv align=\"center\">\n\n# 💡 kajiya\n\n**Experimental real-time global illumination renderer made with Rust and Vulkan**\n\n[![Embark](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fembark-open%20source-blueviolet.svg)](https:\u002F\u002Fembark.dev)\n[![Embark](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdiscord-ark-%237289da.svg?logo=discord)](https:\u002F\u002Fdiscord.gg\u002FdAuKfZS)\n[![dependency status](https:\u002F\u002Fdeps.rs\u002Frepo\u002Fgithub\u002FEmbarkStudios\u002Fkajiya\u002Fstatus.svg)](https:\u002F\u002Fdeps.rs\u002Frepo\u002Fgithub\u002FEmbarkStudios\u002Fkajiya)\n[![Build status](https:\u002F\u002Fgithub.com\u002FEmbarkStudios\u002Fkajiya\u002Fworkflows\u002FCI\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002FEmbarkStudios\u002Fkajiya\u002Factions)\n\u003C\u002Fdiv>\n\n_This project is no longer maintained._\n\nIt was a spare-time experiment by one guy who worked at Embark at the time (on non-rendering stuff). If you're looking to learn some artisanal hacks, this might be useful - just don't look too deep into the code 🐙\n\nJanky as it may have been, boy, did we render! 🪩🥳  _(Click for YouTube vids)_\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=_1g-XhlI_5A\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.youtube.com\u002Fvi\u002F_1g-XhlI_5A\u002F0.jpg\" width=\"45%\" alt=\"New global illumination in kajiya 0.2\">\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=e7zTtLm2c8A\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.youtube.com\u002Fvi\u002Fe7zTtLm2c8A\u002F0.jpg\" width=\"45%\" alt=\"New irradiance cache (kajiya renderer)\">\n  \u003C\u002Fa>\n\u003C\u002Fp>\n\n_Original README follows:_\n\n---\n\nIts general goal is to get as close as possible to path-traced reference at real-time rates in dynamic scenes, without any precomputed light transport, or manually placed light probes.\n\n`kajiya` does not currently aim to be a fully-featured renderer used to ship games, support all sorts of scenes, lighting phenomena, or a wide range of hardware. It's a hobby project, takes a lot of shortcuts, and is perpetually a work in progress.\n\nFor more context, check out our [announcement article on Embark's Medium](https:\u002F\u002Fmedium.com\u002Fembarkstudios\u002Fhomegrown-rendering-with-rust-1e39068e56a7). You'll also get to learn how `kajiya` connects to our rendering work, and the [`rust-gpu`](https:\u002F\u002Fgithub.com\u002FEmbarkStudios\u002Frust-gpu) project!\n\n![image (5)](https:\u002F\u002Fuser-images.githubusercontent.com\u002F16522064\u002F146789417-0cc84f60-157d-4a7d-99f5-79122c1fa982.png)\n_Ruins environment rendered in kajiya. [Scene](https:\u002F\u002Fwww.unrealengine.com\u002Fmarketplace\u002Fen-US\u002Fproduct\u002Fmodular-ruins-c) by Crebotoly_\n\n## Features\n\n* Hybrid rendering using a mixture of raster, compute, and ray-tracing\n* Dynamic global illumination\n  * Fully dynamic geometry and lighting without precomputation\n  * Volumetric temporally-recurrent irradiance cache for \"infinite\" bounces\n  * Ray-traced diffuse final gather for high-frequency details\n  * Ray-traced specular, falling back to diffuse after the first hit\n* Sun with ray-traced soft shadows\n* Standard PBR with GGX and roughness\u002Fmetalness\n  * Energy-preserving multi-scattering BRDF\n* Reference path-tracing mode\n* Temporal super-resolution and anti-aliasing\n* Natural tone mapping\n* Physically-based glare\n* Basic motion blur\n* Contrast-adaptive sharpening\n* Optional DLSS support\n* glTF mesh loading (no animations yet)\n* A render graph running it all\n\n## Technical details\n\n* [Global illumination overview](docs\u002Fgi-overview.md)\n* Repository highlights:\n  * HLSL shaders: [`assets\u002Fshaders\u002F`](assets\u002Fshaders)\n  * Rust shaders: [`crates\u002Flib\u002Frust-shaders\u002F`](crates\u002Flib\u002Frust-shaders)\n  * Main render graph passes: [`world_render_passes.rs`](crates\u002Flib\u002Fkajiya\u002Fsrc\u002Fworld_render_passes.rs)\n\n## Primary platforms\n\n`kajiya` currently works on a limited range of operating systems and hardware.\n\nHardware:\n\n* Nvidia RTX series\n* Nvidia GTX 1060 and newer _with 6+ GB of VRAM_ (slow: driver-emulated ray-tracing)\n* AMD Radeon RX 6000 series\n\nOperating systems:\n\n* Windows\n* Linux\n\n## Secondary Platforms\n\n`kajiya` has a rudimentary \"RTX Off\" mode which runs on a wider range of systems, but most of its visual features are disabled.\n\nHardware:\n\n* Older GPUs with support for Vulkan 1.2\n\nOperating systems:\n\n* macOS\n\n## Dependencies\n\n### (Some) Linux dependencies\n\n* `uuid-dev`\n* In case the bundled `libdxcompiler.so` doesn't work: \u003Chttps:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FDirectXShaderCompiler#downloads>\n\n### (Some) MacOS dependencies\n\n* `ossp-uuid` (`brew install ossp-uuid`)\n\n## Building and running\n\nTo build `kajiya` [you need Rust](https:\u002F\u002Fwww.rust-lang.org\u002Ftools\u002Finstall).\n\nOnce Rust is installed, open a command prompt in the project folder, then build and run the viewer app via:\n\n```\ncargo run --bin view --release\n```\n\nThis will compile a binary in the `target\u002Frelease` folder, and then run it.\n\nFor a list of supported command-line switches see `--help`. In order to pass it through `cargo` to the renderer, you need to separate the `cargo` arguments from `view` arguments using `--` e.g.:\n\n```\ncargo run --bin view --release -- --help\n```\n\n## Loading assets\n\n`kajiya` supports meshes in the [glTF 2.0](https:\u002F\u002Fgithub.com\u002FKhronosGroup\u002FglTF) format, and also has its own tiny [RON](https:\u002F\u002Fgithub.com\u002Fron-rs\u002Fron)-based scene format which can refer to multiple glTF 2.0 meshes.\n\nTo load either, simply drag-n-drop the `.gltf`, `.glb`, or `.ron` file onto the window of the `view` app. See the `assets\u002F` folder for a few bundled examples.\n\nThe first time a mesh is loaded, it is converted to a runtime format: the vertices are packed, and textures are compressed. The next time the same mesh is used, it's loaded from the `cache\u002F` folder.\n\nPlease note that only the roughness-metalness workflow in glTF is supported. In Blender that corresponds to _Principled BSDF_.\n\n`kajiya` can also load image-based lights ([examples](http:\u002F\u002Fwww.hdrlabs.com\u002Fsibl\u002Farchive.html)). To do so, drag-n-drop an `.exr` or `.hdr` file onto window of the `view` app.\n\nThe loaded assets can be manipulated in the `Scene` section of the UI. The app state is persisted in `view_state.ron`.\n\n## Controls in the `view` app\n\n* WSAD, QE - movement\n* Mouse + RMB - rotate the camera\n* Mouse + LMB - rotate the sun\n* Shift - move faster\n* Ctrl - move slower\n* Space - switch to reference path tracing\n* Tab - show\u002Fhide the UI\n\n## Resolution scaling\n\n### DPI\n\nFor the `view` app, DPI scaling in the operating system affects the physical number of pixels of the rendering output. The `--width` and `--height` parameters correspond to _logical_ window size **and** the internal rendering resolution. Suppose the OS uses DPI scaling of `1.5`, and the app is launched with `--width 1000`, the actual physical width of the window will be `1500` px. Rendering will still happen at `1000` px, with upscaling to `1500` px at the very end, via a Catmull-Rom kernel.\n\n### Temporal upsampling\n\n`kajiya` can also render at a reduced internal resolution, and reconstruct a larger image via temporal upsampling, trading quality for performance. A custom temporal super-resolution algorithm is used by default, and [DLSS is supported](docs\u002Fusing-dlss.md) on some platforms. Both approaches result in better quality than what could be achieved by simply spatially scaling up the image at the end.\n\nFor example, `--width 1920 --height 1080 --temporal-upsampling 1.5` will produce a `1920x1080` image by upsampling by a factor of `1.5` from `1280x720`. Most of the rendering will then happen with `1.5 * 1.5 = 2.25` times fewer pixels, resulting in an _almost_ 2x speedup.\n\n## Technical guides\n\n* [Using DLSS](docs\u002Fusing-dlss.md)\n* [Working on Rust shaders](docs\u002Frust-shaders.md)\n* [Using `kajiya` as a crate](docs\u002Fusing-kajiya.md)\n\n## Known issues\n\n* Vulkan API usage is extremely basic. Resources are usually not released, and barriers aren't optimal.\n* There are hard limit on mesh data and instance counts. Exceeding those limits will result in panics and Vulkan validation errors \u002F driver crashes.\n* Window (framebuffer) resizing is not yet implemented.\n* Denoising needs more work (always).\n\n## Acknowledgments\n\nThis project is made possible by the awesome open source Rust community, and benefits from a multitude of crates 💖🦀\n\nSpecial shout-outs go to:\n\n* Felix Westin for his [MinimalAtmosphere](https:\u002F\u002Fgithub.com\u002FFewes\u002FMinimalAtmosphere), which this project uses for sky rendering.\n* AMD, especially Dominik Baumeister and Guillaume Boissé for the [FidelityFX Shadow Denoiser](https:\u002F\u002Fgpuopen.com\u002Ffidelityfx-denoiser\u002F), which forms the basis of shadow denoising in `kajiya`.\n* Maik Klein for the Vulkan wrapper [ash](https:\u002F\u002Fgithub.com\u002FMaikKlein\u002Fash), making it easy for `kajiya` to talk to the GPU.\n* Traverse Research and Jasper Bekkers for a number of highly relevant crates:\n  * Bindings to the DXC shader compiler: [hassle-rs](https:\u002F\u002Fgithub.com\u002FTraverse-Research\u002Fhassle-rs)\n  * SPIR-V reflection utilities: [rspirv-reflect](https:\u002F\u002Fgithub.com\u002FTraverse-Research\u002Frspirv-reflect)\n  * Vulkan memory management: [gpu-allocator](https:\u002F\u002Fgithub.com\u002FTraverse-Research\u002Fgpu-allocator)\n  * Blue noise sampling: [blue-noise-sampler](https:\u002F\u002Fgithub.com\u002FJasper-Bekkers\u002Fblue-noise-sampler)\n* Troy Sobotka for guidance and mind-bending discussions about color.\n\n## Contribution\n\n[![Contributor Covenant](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fcontributor%20covenant-v1.4-ff69b4.svg)](..\u002Fmain\u002FCODE_OF_CONDUCT.md)\n\nWe welcome community contributions to this project.\n\nPlease read our [Contributor Guide](CONTRIBUTING.md) for more information on how to get started.\nPlease also read our [Contributor Terms](CONTRIBUTING.md#contributor-terms) before you make any contributions.\n\nAny contribution intentionally submitted for inclusion in an Embark Studios project, shall comply with the Rust standard licensing model (MIT OR Apache 2.0) and therefore be dual licensed as described below, without any additional terms or conditions:\n\n### License\n\nThis contribution is dual licensed under EITHER OF\n\n* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or \u003Chttp:\u002F\u002Fwww.apache.org\u002Flicenses\u002FLICENSE-2.0>)\n* MIT license ([LICENSE-MIT](LICENSE-MIT) or \u003Chttp:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT>)\n\nat your option.\n\nFor clarity, \"your\" refers to Embark or any other licensee\u002Fuser of the contribution.\n","kajiya 是一个使用 Rust 和 Vulkan 开发的实验性实时全局光照渲染器。其核心功能包括混合渲染技术，结合了光栅化、计算着色和光线追踪，支持动态场景下的全动态几何体与照明，无需预计算。它采用体积时序递归辐照度缓存实现无限次反弹，并利用光线追踪来处理高频率细节以及柔和阴影。尽管该项目已不再维护，但作为一个探索实时渲染前沿技术的研究案例，它非常适合对图形学有浓厚兴趣的技术爱好者学习参考，特别是那些希望深入了解基于 Rust 的 GPU 编程和先进渲染算法的人士。","2026-06-11 03:04:45","top_language"]