A simple 3D raytracer written in Lua over a couple of weekends.
Some time ago I wanted to learn more about 3D raytracers, so I read these two books by Peter Shirley and then translated the C++ code from the books into Lua:
Note
I read version 3 of the books. There are newer versions now.
This raytracer is obviously not production-ready or really anything to be taken
seriously, but I had a lot of fun writing it!
I decided to use Lua because it's a very minimal and limited language, which
makes it even more fun, but it's obviously not the fastest language out there
so if you want to try it you'll have to clear your schedule. 😅
The final render seen below took almost a week to render...
Don't ask.
Sorry Planet Earth!
All the code is written by me, but I added a MIT license so feel free to use it however you like.
- LuaJIT 2.1 (highly recommended) or Lua 5.1 (newer Lua versions might work but not tested)
- If you use standard Lua you will also need the Lua BitOp extension, which is included in LuaJIT
Download the repository and then run any of the scenes using LuaJIT:
$ luajit ./scenes/<scene>.lua
For example, random.lua
is reasonably fast and showcases many of the
features:
$ luajit ./scenes/random.lua
After the rendering is finished, you can find the resulting PPM file in
./results/
.
To convert the PPM file to a PNG/JPEG file, I recommend using
GIMP or ImageMagick.