Next we rasterize, or project surfaces of the 3D model onto a 2D surface to get it ready to send to the screen. That requires knowing what is in front of what, which is based on information in a z-buffer. It records numbers for parts of the model indicating how far they are from the viewpoint. Lower numbers are closer; higher numbers, further, and we drop the surfaces that will be hidden behind something or facing away from the viewer. Again, that means we won’t waste time on processing them any further.
That gives us something quite similar to a picture like one would see in a colouring book, but with the paper being light or dark based on the scene’s lighting. So let’s colour the picture. We add textures: colour patterns that make the object look a certain way. The surfaces of a shiny metal object would have one set of textures, a dirt road would have another, human skin, alien skin, so on and so forth.
Send the picture to the monitor, and you’re done. Send sixty of them (frames) per second, and you have smooth real-time video for gaming. Getting all of these things happening that quickly takes a lot of hard work by a lot of very clever hardware engineers, programmers, and artists.
The hardware has to deal with things very quickly, the programmer has to know how to get the most out of the API and the hardware, and the artist doesn’t just draw something and scan it in. They have to create textures that can be used almost like wallpaper and just get stretched over a shape.