IMRT (Immediate Mode Ray Tracer) is an engine developed as my engineering thesis, based on a path-tracing technique. Main goals set for the project were maximal interactivity with user and availability of implementations for many platforms, including one offering hardware accelerated path-tracing.
The application is divided into two layers implemented mainly in the object-oriented paradigm. The first one is responsible for drawing the window and interface, allows control over the interface and processes the rendered data. The second is a rendering layer responsible for rendering a scene defined by the user. Rendering is performed by one of 3 available engines: CPU, CUDA or OPTIX. Each of them communicates with the interface using shared data structures.
The scenes in the image below were generated using available engines. The number of generated frames for each engine is 100. Not all scenes were generated using each engine due to excessive rendering time. Render time depending on used scene and engine
CPU Engine | CUDA Engine | OPTIX Engine | |
---|---|---|---|
Scene 1 | 2s 759ms | 142ms | 207ms |
Scene 2 | 4s 845ms | 303ms | 517ms |
Scene 3 | 4s 658ms | 401ms | 548ms |
Scene 4 | 4m 43s 552ms | 19s 51ms | 662ms |
Scene 5 | - | 30m 14s 216ms | 1s 794ms |
Scene 6 | - | - | 7s 434ms |
- Texture and material system (probably based on some material definition language)
- More capable 3D model importer
- Instancing support
- CPU and CUDA BVH implementation