MobileRT

MobileRT - A multi platform C++ CPU progressive Ray Tracer.


Project maintained by TiagoMSSantos Hosted on GitHub Pages — Theme by mattgraham

MobileRT: Mobile Ray Tracing engine

GitHub FOSSA Status Known Vulnerabilities Documentation Gitbook documentation

Unit Tests C++ Tests Android codecov Quality Gate Status

Maintainability Codacy Badge Copy Paste Status Docker Pulls

MobileRT: Android MobileRT: Linux

Run docker image

This C++ Ray Tracer is compatible with Android and Linux.

For Linux, if docker is installed, it is possible to try this ray tracer with ease by using the following commands to get the docker image and execute the container:

docker pull ptpuscas/mobile_rt:ubuntu-24.04
xhost +; docker run -it -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=${DISPLAY} ptpuscas/mobile_rt:ubuntu-24.04

or (still WIP)

xhost +; docker-compose -f deploy/docker-compose.yml up MobileRT

And a docker container should start and render the conference room model like the image above :)

Build docker image

For the most curious, this is the command used to build the docker image:

docker build -t ptpuscas/mobile_rt:ubuntu-24.04 -f deploy/Dockerfile.unix --no-cache=false --build-arg BUILD_TYPE=release --build-arg BASE_IMAGE=ubuntu:24.04 .

The docker image is in docker hub: https://hub.docker.com/r/ptpuscas/mobile_rt.

Compile Ray tracer

It is also possible to clone this repository and compile this ray tracer by yourself. To compile it, it is essential to install cmake and have a C++11 compiler. It is also needed the Qt4 or Qt5 library and the git control system to get the code from the repository.

sh scripts/install_dependencies.sh

Then, to finally compile this code, just create a build directory and compile in it, like for example:

mkdir -p build_Release
cmake -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_CXX_COMPILER=g++ -DCMAKE_BUILD_TYPE=release ../app/

Run Ray tracer

This ray tracer comes with a script with many functionalities useful to run static code analyzers and to benchmark the ray tracer itself. To execute the ray tracer just use the profile.sh shell script available in the scripts directory. The following command should start the ray tracer when executed in the root directory:

sh scripts/profile.sh release

Android

To try this ray tracer for Android just download the APK file available in the repository.

Models Wavefront OBJ

To get some OBJ models, just download some from here: OBJs. Then, it will just be needed to add some lights in the scene geometry, by using some modeling application like 3D Blender. One thing to have it in account is to make sure the light material has the light emission component (Ke) with some positive values in the ".mtl" file. Finally, add a camera file with the extension ".cam" that should contain a definition of a perspective camera, like for example:

t perspective #type of the camera
p 0 0 0 #position of the camera x y z
l 0 0 1 #look at of the camera x y z
u 0 1 0 #up vector of the camera x y z
f 45 45 #field of view of the camera u v

Third party frameworks / libraries used

Supported Operating Systems

OS Versions
Android 4.0.3
(API 15)
green
4.4
(API 19)
red
4.4W
(API 20)
red
5.0
(API 21)
green
10
(API 29)
green
13
(API 33)
green
14
(API 34)
red
MacOS 8
red
9
red
10.15
gray
11
green
12
green
13
green
14
green
Windows Server 2019
green
Server 2022
green
XP
red
7
red
8
red
10
red
11
red
Ubuntu 12.04
red
14.04
red
16.04
gray
18.04
gray
20.04
green
22.04
green
24.04
green
CentOS 3
red
4
red
5
red
6
red
7
red
8
gray
stream
green
Alpine 1
red
2
red
3.15
gray
3.16
gray
3.17
gray
3.18
gray
3.19
green
Arch Linux base-devel
green
Gentoo stage3:x86
green
Table:
green -> actively tested
gray -> tested
red -> not tested

Requirements

It's necessary the following SDKs in order to compile this project for Android:

For native Linux, MacOS and Windows support, the install_dependencies.sh script should download and install the necessary dependencies, by just calling:

sh scripts/install_dependencies.sh

Note that the script already supports multiple Linux distributions like:

It also supports installing dependencies in the following Operating Systems:

Note that these scripts are tested in Github actions pipeline only, so might assume that some tools were already installed. If the distribution you use is not supported, or it's missing the installation of some tool, you can always open an issue or even a pull request :)

Documentation

This project started as a Masters' dissertation.
Click here to check the features list that are supported.
Click here to check the code coverage and code duplication commands.
Click here to build and serve the documentation locally.
Click here for some basic Blender tips.
Click here to check the Doxygen codebase documentation.