SORT is a physically based renderer kept deliberately small by one author
Simple Open-source Ray Tracer
At a glance
- What is it?
- SORT, short for Simple Open-source Ray Tracing, is a standalone physically based renderer written by Jiayin Cao as a solo project in his spare time, and the README says outright that it is much simpler than its peers such as PBRT and luxrender. It ships Whitted, path, light and bidirectional integrators, a long list of BSDFs, subsurface scattering, volumetrics, and a Blender 2.8 plugin.
- Who is it for?
- Adopt SORT if you want a physically based renderer you can read end to end, or a Blender 2.8 era plugin that renders offline, and you are comfortable building it from source with CMake, make or make.bat. Do not adopt it if you need a production renderer with the breadth of PBRT or luxrender, since the README itself describes SORT as much simpler than its peers and says it is written for educational purpose with no warranty.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository last received commits 16 days ago.
- What is it written in?
- Mainly C++, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
A renderer whose author says it is simpler than its peers
The README sets the expectations early and honestly. SORT, short for Simple Open-source Ray Tracing, is described as the author's personal cross platform ray tracing renderer. It is a standalone ray tracing program, while it works well in Blender as a renderer plugin. Similar to other open source ray tracers like PBRT and luxrender, SORT is a physically based renderer, but since it is a solo project worked on in spare time, it is much simpler compared with its peers. That sentence is the whole positioning of the project. It is not trying to be PBRT with fewer features; it is a renderer where the reading distance between the source and a complete render is short enough for one person to hold in their head. The copyright header in the README file is even more explicit about the intent. It describes SORT as free software written for educational purpose, and adds that there is no warranty that all components are functional in a perfect manner. The audience is therefore learners and people who want to read a working physically based renderer end to end, plus Blender users who want an offline renderer inside the tool they already use. The project homepage is sort-renderer.com, and the README points there for further detail. The gallery in the README is curated from community assets, with credits to Alex Treviño, Morgan McGuire, rico cilliers, ScottGraham, MaTTeSr, Jay and a subsurface scattering dragon image, which is a reasonable indication of the kind of scenes it is used on.
Six integrators, from ray tracing to instant radiosity
The feature list groups the renderer by subsystem, and the integrator entry is the longest single group. The integrators implemented so far are Whitted ray tracing, direct lighting, path tracing, light tracing, bidirectional path tracing, instant radiosity and ambient occlusion. That set covers a real range of approaches rather than one technique with parameters. The progression is worth spelling out. Whitted ray tracing is the classic mirror and glass approach and is fast but limited. Direct lighting is what most real time renderers approximate. Path tracing follows light paths through the scene and handles global illumination properly at the cost of noise. Light tracing and bidirectional path tracing attack the same problem from the other direction, sampling from the lights or connecting the two sets of paths. Instant radiosity solves the diffuse interreflection problem as a set of virtual light sources. Ambient occlusion is the cheap approximation, useful for previewing. Having all of them in one codebase is unusual for a project of this size and it makes the codebase a reference for how these formulations relate to each other, which is the educational value the README claims. There is also a depth of field entry, and the renderer supports multi-thread rendering with SIMD optimisation using SSE and AVX. For a project that describes itself as simpler than its peers, that is a meaningful amount of machinery in the performance area, and it is the area where the author has clearly spent effort.
Six acceleration structures and an Embree integration
The spatial acceleration structure group lists OBVH, QBVH, BVH, KD-Tree, Uniform grid and OcTree, and then adds Embree integration. That list covers both families of approach. The bounding volume hierarchy variants, BVH and its optimised forms OBVH and QBVH, are the standard choice for triangle soups and are what a ray tracer usually reaches for first. The KD-Tree and the uniform grid are the classic spatial partitions that still win for certain scene types, and the OcTree is the recursive structure that handles dense geometry well. The Embree integration is the notable entry, because Embree is Intel's production ray tracing kernel, and an embedder of it is an endorsement of the alternative. Read together, the list says something specific about the design. SORT does not insist on one structure. It implements several, and integrates a third party library, which suggests the author wanted the comparison to be possible inside one renderer rather than across projects. That is an unusual position for a small project. Most small renderers pick a BVH, be done. The variety here means the renderer can be used to answer questions about structure choice rather than only to produce images, which is consistent with the educational framing.
A long BSDF list, and the material features built on top of it
The BXDF group is the longest list in the feature section, and it is a list of named scattering models rather than a general framework. The entries are Disney BRDF, Lambert, LambertTransmission, Oran Nayar, MicroFacet Reflection, Microfacet Transmission, MERL, Fourier, AshikhmanShirley, Modified Phong, Coat, Blend, Double-Sided, DistributionBRDF, DreamWorks Fabric BRDF and Transparent. Several of those names are worth pausing on. Disney BRDF is the principled model that the film and games industries standardised on. MERL is a measured data based reflectance model. Fourier is the famous model for retroreflective, slightly rough materials such as velvet and car paint. AshikhmanShirley is a refraction model that handles rough dielectrics better than the standard microfacet approach. DreamWorks Fabric BRDF is the model used for cloth, and the combination of Coats and Blend is the layered material system that most modern renderers expose. On top of the scattering models there are three whole material features: subsurface scattering, fur and hair, and volumetric rendering. Subsurface scattering in particular is a hard problem, because it requires solving diffusion inside the object rather than bouncing rays off a surface, and the gallery includes a subsurface scattering dragon image among the examples. The total surface area here is large for a solo project, and it is the one place where the simplicity claim starts to strain: supporting sixteen scattering models means supporting sixteen sets of parameters and edge cases.
Tiny Shading Language and the Blender 2.8 plugin
Two entries stand out from the feature list because they change how you work rather than what you can render. The first is the Tiny Shading Language, which links to a separate site. Putting a shader language inside a renderer means the material definitions are code rather than data, and the project lists it alongside the physically based features rather than as an afterthought. The second is the Blender 2.8 plugin. The README says SORT is a standalone ray tracing program, while it works well in Blender as a renderer plugin, and the repository layout backs that up with a blender-plugin/ directory at the root. Having both matters for how the tool is used. A standalone binary is what you render with when the job is a batch image and you want the renderer out of the DCC entirely. The plugin is what you use when the scene already lives in Blender and the artist wants to keep working there. The plugin version in the README is for Blender 2.8, which is an older Blender generation, so anyone trying this today should check compatibility against the current release. The repository root also carries a CMakeLists.txt, a GNUmakefile and a make.bat, which is the three build entry points you would expect for a cross platform C++ project that has to build on Windows, Linux and macOS.
Cross platform, GPL version 3, and no packaged releases
The cross platform claim is explicit in the feature list, which names Windows, Ubuntu and MacOS, and the build files support it. The licence is GPL version 3, which the README badge states and the file header explains in full. The header also carries the standard warranty disclaimer, including the absence of any implied warranty of merchantability or fitness for a particular purpose, and gives the URL of the GNU General Public License version 3. For a renderer distributed as source and used for education and experimentation, GPL version 3 is a coherent choice. It does matter if you want to link against SORT from a proprietary product, since the copyleft terms attach to derivative works. On distribution, the repository has no GitHub releases. There is no packaged binary to download, so the workflow is to clone and build. The scripts/ directory and the .github/ directory with a build workflow badge suggest that the build is exercised in CI. Activity is current. The last push was on 2026-10-07 and the repository is not archived. The file header dates the copyright as 2011-2023, which tells you the project has been running for over a decade, and the fact that a build workflow badge is live rather than stale suggests it is still built regularly. The main page at sort-renderer.com carries the detailed documentation that the README defers to, which is where you would look for the current state of the Blender plugin and the shading language.
Editorial conclusion
Adopt SORT if you want a physically based renderer you can read end to end, or a Blender 2.8 era plugin that renders offline, and you are comfortable building it from source with CMake, make or make.bat. Do not adopt it if you need a production renderer with the breadth of PBRT or luxrender, since the README itself describes SORT as much simpler than its peers and says it is written for educational purpose with no warranty. Before you rely on it, check the Blender plugin version against the Blender release you use, and read the GPL version 3 terms if you intend to link it into a proprietary product.
Frequently asked questions
What is SORT?
SORT, short for Simple Open-source Ray Tracing, is a cross platform physically based renderer written by Jiayin Cao as a solo project. The README states it is a standalone ray tracing program that also works well in Blender as a renderer plugin.
Which integrators does SORT implement?
The implemented integrators are Whitted ray tracing, direct lighting, path tracing, light tracing, bidirectional path tracing, instant radiosity and ambient occlusion.
What acceleration structures does SORT support?
The spatial acceleration structures listed are OBVH, QBVH, BVH, KD-Tree, Uniform grid and OcTree, plus an integration with Embree.
Does SORT work inside Blender?
Yes. The README says SORT is a standalone ray tracing program while it works well in Blender as a renderer plugin, and the repository contains a blender-plugin/ directory. The listed plugin version is for Blender 2.8.
What licence is SORT released under?
SORT is licensed under the GNU General Public License version 3, and the README file header states it is free software written for educational purpose with no warranty that all components are functional in a perfect manner.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/jiayincao-sort)Was this useful?