Voxel Software Rendering Feasibility

Started by
7 comments, last by MrJoshL 12 years ago
If a program renders volumetric data, for example of the quality of Atomontage, could this be implemented with software rendering techniques as opposed to hardware acceleration? I have recently seen a software renderer (polygons) of the following quality: [media]
[/media] . Would it be possible to implement something like this in software rendering using volumetric data? Would there be additional graphics API's required such as the Windows GDI in the Windows API?

C dominates the world of linear procedural computing, which won't advance. The future lies in MASSIVE parallelism.

Advertisement
Voxel rendering's bottleneck isn't the rendering per se, it's the voxel storage. If you have all your voxel data in low-latency memory, arranged in a nice acceleration structure, you can render it in software quite efficiently. Problems start when your voxel data gets bigger than your available memory and starts to spill onto the hard drive and you have to fetch it while hiding latency as best as possible.

So, yes, software voxel rendering is feasible. What library/API you choose to implement it with is, of course, up to you.

“If I understand the standard right it is legal and safe to do this but the resulting value could be anything.”

This also depends on the quality you want to render with and the screen resolution.

For low quality look into raycasting methods. They often rely on single sampling and are extrmely fast with the right algorithms, but their quality with a single sample per pixel is often low. If you want to go that route look into 3DDDA and octree traversal algorithms. They are rather easy to thread. Look at Laine's papers on SVO traversal. Note with some tweaks this method looks very nice.

For medium quality look into cone tracing.

For higher quality (or "perfect" rendering) look into beam tracing.

For naive rendering look into polygon rasterization. In any case read the Larrabee article as it comes up sometimes for things like octree frustum culling. (Similar algorithm).

For handling the framebuffer look into pixeltoaster. Also this goes without saying, but work on your algorithms from a high level and optimize down. When you think you have things right start switching over to SIMD instructions.

Also if you render volumes front to back don't use source alpha minus one blending. It doesn't model volumes. This algorithm does.
beside OpenCL and Cuda version, I've also a CPU version of my voxel tracer. The problems that you get are similar to those of a raytracer, the higher the resolution, the slower it gets.
With some smart memory management, it actually scales better on CPU than on GPU, as your GPU is just dependent on raw memory bandwidth, and having a lot of diverging ray paths, results in cache trashing between rays in the same warp/wavefront. On cpu, you can organize rays to travel coherent through memory, to maximize the cache usage.

Atm my GPU version is usually faster (quadcore intel Penryn vs NVidia GTX460), but with more complex models and some compression, the GPU version is faster (in smaller resolutions).


you can check out some voxel renderings in my gallery: http://twitpic.com/photos/michael_hpp , sometimes I state which version I've used, I think the bottom most picture with the animated imp was CPU.
you can check out some voxel renderings in my gallery: http://twitpic.com/photos/michael_hpp , sometimes I state which version I've used, I think the bottom most picture with the animated imp was CPU.


Nice pictures! Kind of off topic but where is this scene from: http://twitpic.com/8iohd5/full Is it a freely available test scene or something you aquired privately?

Nice pictures! Kind of off topic but where is this scene from: http://twitpic.com/8iohd5/full Is it a freely available test scene or something you aquired privately?

That's actually one of the model's in Laine's SVO papers also. It's Marko Dabrovic's Sibenik Cathedral model. You can find it in a lot of places online. One of them is here.
Ah, I recognise it now :-) Because of the cars I though it was a museum or something. They must have been added seperatly.

Ah, I recognise it now :-) Because of the cars I though it was a museum or something. They must have been added seperatly.

Wait a second. I spoke too soon since I just took a quick glance. That doesn't look like that model at all. I've never seen that model he linked with the cars. Now I'm curious also.

you can check out some voxel renderings in my gallery: http://twitpic.com/photos/michael_hpp , sometimes I state which version I've used, I think the bottom most picture with the animated imp was CPU.


Wow, those are IMPRESSIVE. Are any of those done in real time with software rendering? How big are those voxel models in file size?

C dominates the world of linear procedural computing, which won't advance. The future lies in MASSIVE parallelism.

This topic is closed to new replies.

Advertisement