RayTracer : Differentiable Ray Tracing in Julia

RayTracer.jl is a library for differentiable ray tracing. It provides utilities for

  1. Render complex 3D scenes.
  2. Differentiate the Ray Tracer wrt arbitrary scene parameters for Gradient Based Inverse Rendering.


Download Julia 1.0 or later.

For the time being, the library is under active development and hence is not registered. But the master branch is pretty stable for experimentation. To install it simply open a julia REPL and do ] add RayTracer.

The master branch will do all computation on CPU. To try out the experimental GPU support do ] add RayTracer#ap/gpu. To observe the potential performance gains of using GPU you will have to render scenes having more number of objects and the 2D image must be of reasonably high resolution.


Only rendering is currently supported on GPUs. Gradient Computation is broken but will be supported in the future.

Supporting and Citing

This software was developed as part of academic research. If you would like to help support it, please star the repository. If you use this software as part of your research, teaching, or other activities, we would be grateful if you could cite:

    title={{RayTracer.jl: A Differentiable Renderer that supports Parameter Optimization for Scene Reconstruction}},
    author={Avik Pal},

Contribution Guidelines

This package is written and maintained by Avik Pal. Please fork and send a pull request or create a GitHub issue for bug reports. If you are submitting a pull request make sure to follow the official Julia Style Guide and please use 4 spaces and NOT tabs.

Adding a new feature

Adding a tutorial/example

julia> using Literate

julia> Literate.markdown("examples/your_example.jl", "docs/src/getting_started/",
                         documenter = false)



Getting Started Tutorials

API Documentation