QuadRay engine is a realtime raytracing project aimed at full SIMD utilization
on ARM, MIPS, POWER and x86 architectures. The efficient use of SIMD is achieved
by processing four rays at a time to match SIMD register width (hence the name).
The rendering core of the engine is written in a unified SIMD assembler
allowing single assembler code to be compatible with different processor
architectures, thus reducing the need to maintain multiple parallel versions.
At present, Intel SSE/SSE2/SSE4 and AVX/AVX2/AVX-512 (32/64-bit x86 ISAs),
ARMv7 NEON/NEONv2, ARMv8 AArch32 and AArch64 NEON, SVE (32/64-bit ARM ISAs),
MIPS 32/64-bit r5/r6 MSA and POWER 32/64-bit VMX/VSX (little/big-endian ISAs)
are mostly implemented (/w horizontal reductions) although scalar improvements,
wider SIMD vectors with zeroing/merging predicates in 3/4-operand instructions
are planned as extensions to current 2/3-operand SPMD-driven vertical SIMD ISA.
See README file.
Features
- ======= RooT demo features =======
- Move/rotate camera with W,A,S,D + arrow keys
- Print state (to dump) of all objects in the scene (on F1/'I')
- Runtime toggling of antialiasing (on F2/'2')
- Runtime cycling through cameras (on F3/'3')
- Runtime saving (to dump) of BMP screenshots (on F4/'4')
- Runtime toggling of FPS logging (on F5/'L')
- Runtime switching of SIMD targets (F6/'6', F7/'7', F8/'8')
- Runtime scene selection (F11/'1'), hide nums (F12/'5')
- Multi-threading support with core-count (df: 120 threads)
- Multi-group affinity for Windows threading (> 64 threads)
- Fullscreen support on Linux, macOS and Windows (-w 0)
- Offscreen rendering support for benchmarking (-o or '0'/'O')
- Pause mode (-p or 'P'), update/render stages (-u n or '9'/'U')
- Quake mode (-q or 'Q'/'T'), frames in update (-m n or 'E'/'Y')
- Refer to VERSION file (section 0.6.7) for cli options
- ======= QuadRay core features =======
- Full set of plane + quadric solvers
- Custom clipping (with surface), boolean ops
- Full geometry transform (hierarchical)
- Basic RGB texturing for planes, no UV-mapping yet
- Ambient + diffuse + specular + attenuation lights
- All lights are colored points with infinite range
- Hard shadows (opaque) from all light sources
- Reflections/refractions + translucency, Fresnel (df: off)
- Fullscreen 2x/4x antialiasing, Gamma correction (df: off)
- Tiled scanline rendering, custom tree-like accelerators
- Statically-linkable data format (C/C++ structs)
- Programmable animators for all objects (below root)
- 8 registers deep SIMD rendering pipeline (core/tracer)
- Preliminary support for path-tracer with SIMD buffers
- Written in UniSIMD assembler