/renderer-cuda

CUDA version of my renderer (real-time raytracing!)

Primary LanguageC++GNU General Public License v2.0GPL-2.0

Generated in the renderer's raytracing mode, with reflections and refractions enabled.

Full blog post about this code is here (screenshots, history, etc)

This is a real-time raytracer, supporting .3ds, .ply (ascii) and .tri (binary) formats.

COMPILE/INSTALL/RUN

Under Linux

The code has 3 dependencies: You must install...

- OpenGL (with GLEW and GLUT)
- libSDL
- CUDA toolkit

If you are using Debian, the first two are covered with:

sudo apt-get install libsdl1.2-dev libglew1.5-dev freeglut3-dev mesa-common-dev

...and the second is also quite easy - add the contrib and non-free collections to /etc/apt/sources.list - that is, at the end of your distro's repository line. In my case, it looks like this after editing:

deb http://ftp.gr.debian.org/debian/ jessie main non-free contrib

...and then:

$ sudo apt-get install nvidia-cuda-dev nvidia-cuda-toolkit

$ dpkg -l | grep nvidia-cuda
ii  nvidia-cuda-dev      6.0.37-5  amd64  NVIDIA CUDA development files
ii  nvidia-cuda-toolkit  6.0.37-5  amd64  NVIDIA CUDA development toolkit

After installing the dependencies, a simple...

./configure && make && ./src/cudaRenderer 3D-objects/chessboard.tri

...will work.

Under Windows

Make sure you have the CUDA toolkit installed (I used version 6.0)

Then:

  1. Open the cudaRenderer_vc90.sln with your Visual Studio
  2. Compile in Release mode
  3. Right-click on "cudaRenderer" in the Solution explorer, and select "Properties"
  4. Click on "Configuration Properties/Debugging"
  5. In the "Command Arguments", enter "..\3D-objects\chessboard.tri" and click OK
  6. Hit Ctrl-F5 to run.

You should see a rotating chessboard...

Read below for keyboard control intructions, or just press 'H' for help.

Note: I used the free Visual C++ 2008 Express Edition, but this should work with the commercial one, too.

Keyboard controls

Use the following keys to navigate around the object:

  • Hit 'H' for help.
  • Hit 'R' to stop/start auto-spin (camera rotates around the object).
  • Fly using the cursorKeys/A/Z.
  • Rotate the light with W/Q.
  • S/F are 'strafe' left/right
  • E/D are 'strafe' up/down (strafe keys don't work in auto-spin mode).
  • F4 toggles points mode
  • F5 toggles specular lighting
  • F6 toggles phong normal interpolation
  • F7 toggles reflections
  • F8 toggles shadows
  • F9 toggles anti-aliasing
  • ESC quits.

Misc

Since it reports frame rate at the end, you can use this as a benchmark for CUDA cards. Just spawn with "-b" to request benchmarking: (Note: keys don't work in benchmarking mode)

./src/cudaRenderer -b 150 3D-objects/chessboard.tri

This will draw 150 frames and report speed back. With my GT240, it reports:

Rendering 150 frames in 8.117 seconds. (18.4797 fps)

You can also do this easily via:

make bench