• Advertisement
Sign in to follow this  

Software rendering tutorials/examples

This topic is 1248 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I've been looking around for a few software rendering projects: simple engines, tutorials or even some examples. I managed to found this highly portable, but outdated, engine called Yeti3D: http://sourceforge.net/projects/yeti3dpro/

 

I'm looking for modern approaches or alternatives, or even tutorials on this topic. Any tips? :)

Share this post


Link to post
Share on other sites
Advertisement

Not even a book? sad.png

 

Your best bet is sifting through the source of some old school demo. Might not be the best structured code but gives ideas about clipping etc. The best of class parallel rendering systems that rival or give hardware renderers a good fight is the half-space, grid or tile-based (threaded), a la Nick Capens pixel drawers (don't know what to call them really as they don't do scan line rasterisation, really a bastard version of ray casting). I think his system was bought up by some VCs and later commercialised?

 

 

PS - (speculative) His web history has been wiped clean not to give too many hints about the tech behind. I guess due to the patenting or other issues.

 

PS2 - I might be right after all :-)  http://transgaming.com/swiftshader

Edited by jbadams
Restored post contents from history.

Share this post


Link to post
Share on other sites

 

I've been looking around for a few software rendering projects:

Why? Do you think it'll render faster?

 

 

Obviously, no. It's a curiosity thing. I'm a big fan of Quake 1's software renderer and wanted to implement something of my own.

Share this post


Link to post
Share on other sites

then your first source of information should be the Quake1 source code.

beside the assembler version, there is also a c version that you could experiment with.might be the best way to learn it :)

Share this post


Link to post
Share on other sites

ok.  you can make your whole game greyscale,   then have a material id,  and then its just colour operations on r g and b, and i bet you all the latest crazo games do it.

Share this post


Link to post
Share on other sites

i dont suggest to study these outdated technologies like the q2. those optimization tricks will not work any more, and keep in mind that we have superscalar cpu-s now. also remember that you will need an agressively multithreaded code to achieve fast speed with nice quality. just write your renderer, and if you find a part that is too slow, then meditate/study/doodle that practicular problem.

 

http://geri.comeze.com/darktower/

 

my last (software rendered) free game, done for a game competition. it uses ray tracing, runs playable in 320x160.

Edited by Geri

Share this post


Link to post
Share on other sites

Fabian Giesen also touches upon the same technique that I mentioned in my first post, that is rendering with half spaces. It's the approach best suited for a software renderer and is used in top of the class software driver implementations. To approach software rendering today with a scan line rasteriser is fun as a hobby project but will lead nowhere as the real speed comes with multi-threading and therefore from a binning or tiled based approach.

Edited by jbadams
Restored post contents from history.

Share this post


Link to post
Share on other sites

software rasterizer combined with gpu availability check is the best engine I can think of. And also, you can make software rasterizing into gpu SIMD, though bypassing general gl/dx vendor tweeks will mostly lead to lesser performance, it is possible to (out)perform it- or more correctly, have better operatibility available. Imagine you could alter triangle rasterization ruiles, so that you will process also pixels with its center out of edge but partialy touching edge, then you could do ++ best antialiasing on any surface or, particular draw call. It is for sure very worthy to implement rasterizing on software, wheather for learning, or for possible usage in the future.

Share this post


Link to post
Share on other sites

JohnnyCode: i disaggree. maybe in *theory*, you can get the biggest performance, but using gpgpu would so much limit the number of compatible systems and would make so many extra work and compatibility issue, it would basically double the required work, and would make the whole thing almost unsellable, becouse there is a limited number of users with proper computers to run it. maybe such minor works like antialiasing, and other various filters effectively can done with gpu in this case, but that would not significantly boost the rendering ,,pipeline'', and should be maked with the possibility to disable it and use the software fallback.

Share this post


Link to post
Share on other sites

There is a tutorial series by David Rousset:
http://blogs.msdn.com/b/davrous/archive/2013/06/13/tutorial-series-learning-how-to-write-a-3d-soft-engine-from-scratch-in-c-typescript-or-javascript.aspx

When it comes to ray-tracing (and since PBRT was already mentioned) I would suggest you have a look at Ray Tracing from the Ground Up by Kevin Suffern as, in my opinion, more beginner-friendly.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement