Rendering everything with the (general-purpose) CPU has the main advantage that it is not restricted to the (limited) capabilities of graphics hardware, but the disadvantage is that more transistors are needed to obtain the same speed.
Offline rendering is used to create realistic images and movies, where each frame can take hours or days to complete, or for debugging of complex graphics code by programmers.
The earliest texture mapped real-time software renderers for PCs used many tricks to create the illusion of 3D geometry (true 3D was limited to flat or Gouraud-shaded polygons employed mainly in flight simulators.)
One of the first games architecturally similar to modern 3D titles, allowing full 6DoF, was Descent, which featured 3D models entirely made from bitmap textured triangular polygons.
16 bit consoles gained RISC accelerator cartridges in games such as StarFox and Virtua Racing which implemented software rendering through tailored instruction sets.
While early graphics cards were much faster than software renderers and originally had better quality and more features, it restricted the developer to 'fixed-function' pixel processing.
Since the adoption of graphics hardware as the primary means for real-time rendering, CPU performance has grown steadily as ever.
As a result, there are a number of general-purpose software packages capable of replacing or augmenting an existing hardware graphical accelerator, including: Contrary to real-time rendering, performance is only of second priority with pre-rendering.
Even though commercial real-time graphics hardware is becoming higher in quality and more programmable by the day, most photorealistic CGI still requires software rendering.