I've always wanted to write my own ray tracer but it was really a hassle trying to do in the C++. With my foray into the Python world I finally set out to build a distributed raytracer. It's amazing how easy it is to code in Python a simple raytracer with the following features,
In the below we show a rendering of a scene with two interlinked toruses with multiple light sources.
We also hook up the realtime raytraced image updates to display in the Ipython notebook.
The full source code for the raytracer can be downloaded here. The scene files ( *.json ) are also included in the source pack.
from io import BytesIO
from ipynb_utils import ImageWrapper
from matplotlib.pyplot import imshow
import numpy as np
import raycast
from raycast import SceneFile, Renderer, TracerOptions
from IPython.display import HTML, display, clear_output, Image as IPImage
from PIL import Image
%matplotlib inline
options = TracerOptions( 'scene2.json', fast=True )
raycast.options = options
pil_im = Image.new('RGB', (320, 200), 'gray' )
image_wrapper = ImageWrapper( pil_im )
scene_file = SceneFile( options.scene_file )
renderer = Renderer( scene_file.camera, scene_file.scene_graph, image_wrapper )
renderer.render()