/ElevenRender

A GPU-CPU SYCL 3D Rendering engine with it's own formally specified shading language "ASL"

Primary LanguageC++

Elever Render

A multi-platform vendor independent photorealistic rendering engine

alt text Scene rendered with Eleven. 1000 samples and denoised

Eleven Render is my personal project. It's a unidirectional C++ path tracing rendering engine, where compatibility prevails over other aspects. Thanks to SYCL, it's possible to compile it for almost any GPU/CPU. It also seeks for broad compatibility with 3D Model software thanks to ASL, a shading language I'm working on, which allows other shading languages (like OSL), to be converted to it.

At the moment, Eleven is a WIP, and features like ASL are just proof of concepts.

Releases

The only way to use Eleven Render right now is through Blender, thanks to the ElevenBlender plug-in Download the last ElevenBlender release here: There's no releases yet.

Features

  • Compatibility with both GPU and CPU (vendor independent)
  • Normal recalculation with Vertex Weighted algorithm (so if your model has broken normals you won't have to worry about)
  • MIS (BRDF, Environment, PointLights)
  • Denoising (Open Image Denoiser)

Build

Disclaimer At the current moment, there's not a builiding guide which will allow you to build Eleven flawlessly. I plan to release a Linux one, and to solve some compilation issues.

I'm also working on installing Boost libraries automatically, but there's some compatibility issues with Windows, Intel DPC++ and Boost

Windows (VS2022) - CUDA

Dependencies:

  • Python v3.11.0
  • CMake v3.25
  • Visual Studio 2022
  • Ninja v1.11.1
  • CUDA toolkit v11.8

The rest of the dependencies are downloaded by the building script.

Instructions:

Install Boost 1.80.00 on the system (C:\Program Files\boost\boost_1_80_0), and compile it following the step 5 from the linked instructions. Ideally you must compile it with clangw16 toolset.

Currently, the 16 version of Clang, is not available on Visual Studio, so if you want to avoid the mess to setup Visual Studio for clangw16, you can apply this quick dirty patch1: You need to override the BOOST_LIB_TOOLSET variable, located in C:\Program Files\boost\boost_1_80_0\boost\config\auto_link.hpp to "clangw16", for example by typing #define BOOST_LIB_TOOLSET "clangw15" in the line 227.

Run build.bat. It will download automatically the rest of the dependencies, including the DPC++ Intel's toolchain.

Finally add "\build_deps\sycl_llvm-src\build\bin" to %PATH% and "\build_deps\sycl_llvm-src\build\lib" to %LIB% Environment variables

Docs

ASL

Eleven Render runs a custom formally specified shading language called Abstract Shading Language. ASL tries to unify shading languages, acting as middle step between other shading languages and Eleven.

Graph2OSL is a python tool I'm writting in the Eleven Blender's repo to convert Blender's shading node graph to OSL serialized shadergroup following the OSL specification serializing proposal.

OSL2ASL is a syntax converter I'm plannign to code, to convert OSL code to ASL code

ASL2LLVM is a formally correct compiler I'm writting as a part of my Master's thesis. The output is LLVM-IR code which can be compiled through some LLVM backend to almost any GPU/CPU architecture.

The compilation steps for a blender OSL material, are shown in the diagram below.

alt text Compilation steps for blender materials

Third party libraries used

Disclaimer

Eleven Render is the result of my Bachelor's Thesis and now my Master's Thesis. The way I worked on it was, to get the most features, in the smallest possible time, so most of the code is messy and unorganized. I'm working on modernizing the code and cleaning it up, as well as documenting it. Most of features are incomplete. The shading is giving me issues, so the implementation is probably not correct. The efficiency is also not the best and it's full of memory leaks. I hope to have all this sorted out in the following months, but for now, this is the render's state.

License

Footnotes

  1. I was not able to compile Boost with the Intel's DPC++ toolchain, because it doesn't support Windows SEH exceptions, which are being used in the Boost::asio library. To solve it, I made a quick patch by compiling Boost manually and renaming some of the library files. I'm working on being able to compile Boost with CMAKE, meanwhile, that's the solution.