## A fact about how software-rendering is managed in practice, today.

People of my generation – and I’m over 50 years old as I’m writing this – first learned about CGI – computer-simulated images – in the form of ‘ray-tracing’. What my contemporaries are slow to find out is that meanwhile, an important additional form of CGI has come into existence, which is referred to as ‘raster-based rendering’.

Ray-tracing has as advantage over raster-based rendering, better optical accuracy, which leads to photo-realism. Ray-tracing therefore still gets used a lot, especially in Hollywood-originated CGI for Movies, etc.. But ray-tracing still has a big drawback, which is, that it’s slow to compute. Typically, ray-tracing cannot be done in real-time, needs to be performed on a farm of computers, and typically, an hour of CPU-time may be needed, to render a sequence which might play for 10 seconds.

But, in order for consumers to be able to play 3D games, the CGI needs to be in real-time, for which reason the other type of rendering was invented in the 1990s, and this form of rendering is carried out by the graphics hardware, in real-time.

What this dichotomy has led to, is model- and scene-editors such as “Blender”, which allow complex editing of 3D content, often with the purpose that the content eventually be rendered by arbitrary, external methods, that include software-based, ray tracing. But such editing applications still themselves possess an Editing Preview window / rectangle, in which their power-users can see the technical details of what they’re editing, in real-time. And those editing preview windows are then hardware-rendered, using raster-based methods, instead of the final result being rendered using raster-based methods.

## Understanding that The GPU Is Real

A type of graphics hardware which once existed, was an arrangement by which a region of memory was formatted to correspond directly to screen-pixels, and by which a primitive set of chips would rasterize that memory-region, sending the analog-equivalent of pixel-values to an output-device, such as a monitor, even while the CPU was writing changes to the same memory-region. This type of graphics arrangement is currently referred to as “A Framebuffer Device”. Since the late 1990s, these types of graphics have been replaced by graphics, that possess a ‘GPU’ – a Graphics Processing Unit. The acronym GPU follows similarly to how the acronym ‘CPU’ is formed, the latter of which stands for Central Processing Unit.

A GPU is essentially a kind of co-processor, which does a lot of the graphics-work that the CPU once needed to do, back in the days of framebuffer-devices. The GPU has been optimized, where present, to give real-time 2D, perspective-renderings of 3D scenes, that are fed to the GPU in a language that is either some version of DirectX, or in some version of OpenGL. But, modern GPUs are also capable of performing certain 2D tasks, such as to accelerate the playback of compressed video-streams at very high resolutions, and to do Desktop Compositing.

What they do is called raster-based rendering, as opposed to ray-tracing, where ray-tracing cannot usually be accomplished in real-time.

And modern smart-phones and tablets, also typically have GPUs, that give them some of their smooth home-screen effects and animations, which would all be prohibitive to program under software-based graphics.

The fact that some phone or computer has been designed and built by Apple, does not mean that it has no GPU. Apple presently uses OpenGL as its main language to communicate 3D to its GPUs.

DirectX is totally owned by Microsoft.

The GPU of a general-purpose computing device often possesses additional protocols for accepting data from the CPU, other than DirectX or OpenGL. The accelerated, 2D decompressed video-streams would be an example of that, which are possible under Linux, if a graphics-driver supports ‘vdpau‘ …

Dirk

## This Time, some Real Computer Achievement

Contrarily to how easy it was to set up my Joystick the other day, yesterday and today I have been busy with the laptop I name ‘Klystron’ that actually required some computer-skills on my part.

It was a subject of mine for a long time, how 3D Game Design works, and in particular, how the raster-based DirectX or OpenGL rendering works. To study that subject in my private time, I have always maintained a set of programs, that would in theory enable me to create a game.

In practice, creating any game decent enough to play, requires oodles of time and work. But I always felt that the software-tools involved should belong to my collection, even if I do not really put them to thorough use.

One software tools I have been pursuing, is the graphics rendering engine called “OGRE“. For several years I have been trying to custom-compile OGRE 1.10, just because that version offers better support for OpenGL 3, which should give game authors access to Geometry Shaders. But as it happens, I have ‘Mesa‘ drivers installed on that laptop, that do claim to create support for OpenGL 3, but that oddly, do not go so far as to offer Geometry Shaders. This is not a fault of the OGRE development team.

Also, there are reasons for which I do not simply ditch the Mesa drivers for ‘fglrx‘, the latter of which would give me OpenGL 4: I find it important enough, that the Mesa drivers allow hardware-acceleration of regular, high-def, 2D video streams. I would not want a real video stream / movie to become a burden to my CPU, and the fglrx do not GPU-accelerate that. So I stick with the Mesa drivers.

But then there was only one good way to get my OGRE install stable. I had to switch the Mercurial version of it I was subscribing to, down to OGRE 1.9, which is highly stable. The only issue with that remains, that OGRE 1.10 would have been my only game engine, which would have ever offered me full OpenGL 3. Which was just not stable on that box.

Now that the OGRE version on ‘Klystron’ is a sensible 1.9, that also means the engine has no extreme advantage over other game engines I possess. They all tend to be of the vanilla variety, that offer OpenGL 2 / DirectX 9c… – GL 3 would be equivalent to Dx 10, and GL equivalent to Dx 11.

Speaking of vanilla, I also installed the latest snapshot of Crystal Space on ‘Klystron': Version 2.1 ! I am amazed at how much better this latest build of Crystal Space seems, in terms of being stable when compiled, than earlier builds of it were.