Volume Rendering on the PSP

Hypertexture and volume renderer (~1.5 seconds)

I’ve long been active in PSP development and decided to have some fun with graphics on the PSP. I had the university to order two PSP dev systems and I got to work porting my ray tracer to the PSP. As a team effort with three other graphics enthusiasts, we decided to accelerate hypertexturing on the PSP using the VFPU. We ended up with a ray tracer, hypertexturer, and volume ray caster working on the PSP capable of displaying a 64x64x64 voxel volume at a rate of a frame every ~1.5 seconds.

Before porting the ray tracer, my buddies and I made a few little graphics demos using the Sony framework (very similar to OpenGL), and then tried some procedural graphics writing directly to the frame buffer and bypassing the Sony framework entirely. We started with the Mandelbrot set, but for some reason, writing to the frame buffer just wasn’t getting the speed we wanted, so we decided to use the Sony framework for display. After porting the ray tracer we started optimizing by converting doubles to floats, compiled with -O3, reduced the number of objects in the scene and removed shadows. With that done, we moved onto hypertexturing. To get more speed there, we did a number a sphere hit function optimizations, as much precomputing as possible, centered the sphere at the origin and placed a bounding sphere around the hypertexture. After all that, I still wanted more speed, so I precomputed all the normals and stored them in a voxel grid. This reduced the calculations to a sphere hit test, simple ray march, a lookup in the voxel grid, and phong shading on the normal. We then limited the render target 64×64 pixels (given the size of the volume), and then used the fast Sony framework to zoom and filter to full screen. All these optimizations got us a 600x (60,000%) improvement over the initial implementation.

Mandelbrot set (~20 seconds)

Raycaster (~120 seconds, no performance optimizations)

Raytracer (~20 seconds)

Hypertexture and volume renderer (~1.5 seconds)

Hypertexture and volume renderer (~1.5 seconds)

Hypertexture and volume renderer (~1.5 seconds)

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>