Ignis
                                
                                 Ignis copied to clipboard
                                
                                    Ignis copied to clipboard
                            
                            
                            
                        Device agnostic raytracing framework with shared codebase for offline and realtime rendering and for CPU and GPU
Ignis
'Ignis' is a high-performance raytracer implemented using the Artic frontend of the AnyDSL compiler framework (https://anydsl.github.io/) and based on Rodent (https://github.com/AnyDSL/rodent). The renderer is usable on all three major platforms (Linux, Windows, MacOs).

Gallery
Some scenes rendered with Ignis. Acquired from https://benedikt-bitterli.me/resources/ and converted from Mitsuba to our own format. Both images took roughly one minute to render. With an RTX 2080 Super you can even have an interactive view of the scene.


A sample scene from https://github.com/KhronosGroup/glTF-Sample-Models directly rendered within igview.

Dependencies
- AnyDSL https://github.com/AnyDSL/anydsl
- Intel® Threading Building Blocks https://www.threadingbuildingblocks.org/
- ZLib https://zlib.net/
Optional
Integrated
The following dependencies will be downloaded and compiled automatically. Have a look at CPM for more information.
- bvh https://github.com/madmann91/bvh
- Catch2 https://github.com/catchorg/Catch2
- CLI11 https://github.com/CLIUtils/CLI11
- Eigen3 http://eigen.tuxfamily.org
- imgui https://github.com/ocornut/imgui
- imgui-markdown https://github.com/juliettef/imgui_markdown
- implot https://github.com/epezent/implot
- nanobind https://github.com/wjakob/nanobind
- PExpr https://github.com/PearCoding/PExpr
- pugixml https://github.com/zeux/pugixml
- RapidJSON https://rapidjson.org/
- stb https://github.com/nothings/stb
- tinyexr https://github.com/syoyo/tinyexr
- tinygltf https://github.com/syoyo/tinygltf
- tinyobjloader https://github.com/tinyobjloader/tinyobjloader
- tinyparser-mitsuba https://github.com/PearCoding/TinyParser-Mitsuba
Docker Image
Ignis is available on docker hub with some preconfigured flavours! pearcoding/ignis
More information is available here docker/README.md
Branches
Ignis has multiple branches here on Github.
- masterThe main branch. Is quite stable, fingers crossed.
- developmentMain development branch. Most recent stuff. Can be problematic to build. Bugs and errors included for free.
- docsInternal branch used to build the documentation automatically.
- feature/*Some upcoming but isolated features.
- *Everything else. Might be features, bug fixes or other upcoming pull requests.
Building
Information about building Ignis is available in the documentation online or in the offline version of the documentation inside docs/
Frontends
The frontends of the raytracer communicate with the user and the runtime. Currently, four frontends are available:
- igviewThis is the standard UI interface which displays the scene getting progressively rendered. This frontend is very good to get a first impression of the rendered scene and fly around to pick the one best camera position. Keep in mind that some power of your underlying hardware is used to render the UI and the tonemapping algorithms. Switching to the UI-less frontend- igclimight be a good idea if no preview is necessary. Note,- igviewwill be only available if the UI feature is enabled and SDL2 is available on your system. Disable this frontend by setting the CMake option- IG_WITH_VIEWERto Off.
- igcliThe commandline only frontend is the same as- igviewbut without any UI specific features and no interactive controls. In contrary to- igview,- igclirequires a maximum iteration or time budget to be specified by the user. Progressive rendering is not that useful without a preview. (We might add progressive rendering back, but I need a convincing argument for that...)
- igtraceThis commandline only frontend ignores camera specific information and expects a list of rays from the user. It returns the contribution back to the user for each ray initially specified.
- Python APIThis simple python API allows to communicate with the runtime and allows you to work with the raytracer in interactive notebooks and more. The API is only available if Python3 was found in the system. You might disable the API by setting the CMake option- IG_WITH_PYTHON_APIto Off.
Use the --help argument on each of the executables to get information of possible arguments for each frontend.
Running
Run a frontend of your choice like this:
igview scene/diamond_scene.json
Documentation
All available components are documented in the docs/ folder. A documentation can be created with
cmake --build . -t ig_documentation
from the build/ folder.
A quite recent version of the above documentation is available at: https://pearcoding.github.io/Ignis/
Scene description
Ignis uses a JSON based flat scene description with instancing. Support for shading nodes is available via PExpr, image and procedural textures. A schema is available at docs/refs/ignis.schema.json
You might use the igutil to convert a Mitsuba scene description to our own format. Keep in mind that this feature is very experimental and not all BSDFs work out of the box.
You can also use rad2json to convert geometry used in the Radiance framework to our tool. Keep in mind that no BSDF and lights are mapped as the two raytracers are vastile different in these regards.
Ignis is able to understand glTF files. You can embed glTF files in Ignis's own scene description file or directly use the glTF file as an input to the multiple frontends.
A Blender plugin is available in scripts/blender_exporter/.
Extra tools
The tool igutil is able to convert between multiple formats like the Radiance favorite image format HDR to the advanced OpenEXR format and vice versa. Further it can output information embedded inside images.
This is useful to ease the transfer from Radiance to our raytracer, but you can disable them by setting the CMake option IG_WITH_TOOLS to Off.
How to use igview
The Ignis client has an optional UI and multiple ways to interact with the scene:
- 1..9number keys to switch between views.
- 1..9and- Strg/Ctrlto save the current view on that slot.
- F1to toggle the help window.
- F2to toggle the UI.
- F3to toggle the interaction lock. If enabled, no view changing interaction is possible.
- F11to save a snapshot of the current rendering. HDR information will be preserved. Use with- Strg/Ctrlto make a LDR screenshot of the current render including UI and tonemapping. The image will be saved in the current working directory.
- Rto reset to initial view.
- Pto pause current rendering. Also implies an interaction lock.
- Tto toggle automatic tonemapping.
- Gto reset tonemapping properties. Only works if automatic tonemapping is disabled.
- Fto increase (or with- Shiftto decrease) tonemapping exposure. Step size can be decreased with- Strg/Ctrl. Only works if automatic tonemapping is disabled.
- Vto increase (or with- Shiftto decrease) tonemapping offset. Step size can be decreased with- Strg/Ctrl. Only works if automatic tonemapping is disabled.
- WASDor arrow keys to travel through the scene.
- Q/Eto roll the camera around the viewing direction.
- PageUp/PageDownto pan the camera up and down.
- Notepad +/-to change the travel speed.
- Numpad 1to switch to front view.
- Numpad 3to switch to side view.
- Numpad 7to switch to top view.
- Numpad 9to look behind you.
- Numpad 2468to rotate the camera.
- Use with Strg/Ctrlto rotate the camera around the center of the scene. Use withAltto enable first person camera behaviour.
Funding and Cooperation
The project is funded by the Velux Stiftung and developed in cooperation with the Computer Graphics chair of the Saarland University, Fraunhofer Institute for Solar Energy Systems ISE and DFKI.
