How the GPU revolutionized the 3D Visualization and Gaming Industry
The not boring version; a concise guide for the ones not looking to fall asleep (I hope).
Let's experiment further and see who appreciates niche science put in a simple way. Since my kind of science keeps me in front of a computer all day long, to the point where even the closest people to me are saying that I am estranged, let me bring you something about my other work.
You must know by now that I am working in the Aviation Industry, and that sounds cool, I take it. But most of my work is not necessarily myself working in-between aircraft, but rather coding something new or standing with my eyes glued to the computer screen comparing milliseconds between programming methods.
Rendered car using a shader and textures. Source
So how are things displayed on a screen?
In the past, each game developer would create sprites and display them by telling the CPU (central processing unit) to draw them pixel by pixel. Because the sprites were relatively small, a few pixels by a few pixels each, representing a very small character walking in a two or three step succession of images, the time that the CPU was spending to draw this pixel by pixel was small. But this meant that all the sprites needed to be coded and their animation needed to be written on a per case job. Some character would even reuse the same animations with different colors, for faster production time.
We are talking about these times, the 1980's, the times of the first arcade games and the first consoles:
The problem was obvious. Having to draw each frame on its own was utter nonsense and it would keep the CPU from doing other tasks, more closely related to gameplay. The consoles started to be popular and the developers wanted to offer more. The competition between consoles was harder and the manufacturer who offered simpler developer tools was the one to win. Teams of developers usually consisted of very few unspecialized teenagers in their own garages.
So the first console makers started integrating specialized hardware, a Graphical Processing Unit or a GPU. At first it was very small and would only allow a limited acceleration of the sprites, but soon after the involvement of Nvidia, the first real GPU came out with the GeForce 256.
The difference between CPU and GPU
The CPU is not made to support parallelization. Although the latest CPU's are now multicore and the technology advances with each new generation, so are the software needs that come with the new version software. These being said, the CPU can only offer us a limited number of threads like 8,16 or maybe even 28 in some next-gen models, while a GPU, which was designed to run things in parallel can boast up to
A little more than a CPU, right? :D
Faster and easier to write software for GPU's? Take my money!
How do you get to the GPU then?
We have this simple schema to keep you in the loop:
Block diagram of a GPU. If you can't follow it, you can relax, it took me a while to get it, just now.Source
Let me try a simpler way to explain it.
Let's say you software needs a visualization. You need to integrate a 3D graphical engine. This is a pre-written set of tools which accesses the GPU in a streamlined and efficient way. To choose a 3D engine, you can choose one of the many free,open-source or free for indie producers, especially if you don't plan on making a very successful game from the first try. Pricing options can be a little steep on some graphical engines but they are usually next-gen (state of the art technology).
A game engine's basic tools to create a simple "car" resource. Source
Then you need a 3D resource creating software like 3ds max or Maya or another solution, in which you need to create the 3D resources,distribute and set up the rendering techniques and assign the texture units on models.
Programming aditional effects or post processing
The effects are usually added via shaders, which can be pixel or vertex shaders. Shaders are small computer programs usually written in a specialized programming language, two of the most usual being Cg (C for Graphics) and (HLSL - High-Level Shader Language). They are very fast to be executed and do not even require compilation before running as everything is sent to the GPU straight away. Pixel shaders are a lot more intensive, especially at higher resolutions because every pixel needs to be colored after the image has already been rendered, while vertex shaders are much faster but they do require a lot of geometry being modeled by a 3D modeler, in order to apply all the transformation to each vertex.
Again you see the difference of tasks being split between the CPU and the GPU. Source
Developing a 3D visualization or a game is not that hard of a task as it was in the past. Creating amazing resources is much easier now, GPU's are more advanced and allow for less and less work for creating next-gen graphics.
Latest GPU's are now even more advanced with Intel, a non-contender in the past, joining the fight and taking away from the big players like AMD and Nvidia's markets.
Creators are now free to choose from a plethora of solutions of game engines, shaders, programming languages and forums to guide them, resulting in what we see as an explosion of next-gen games released by small studios and the fact that the gaming industry has overtaken the Hollywood Box Office.
If you are interested in more information about game engines, programming languages or creating resources for 3D Games or Visualizations, then tell me in the comments below and I can answer your questions. Do you want a more in-depth technical article involving the pipeline? Can do that too if there is interest.
https://dl.acm.org/citation.cfm?id=1406887 - oldie but goldie, this was what taught me most of what I needed to know to start the 3D project I am working on for 10 years.
Don't forget to drop by #SteemSTEM, the place where science is being done daily. Don't be a stranger to science and we will always listen to what you have to say! And if you want to contribute with original ideas, we'll even help you do it. Ask me and I will answer every single one of you how to improve your blogs here.
Convenient Delegation Links:
I also didn't forget my friends @TheSteemEngine.
Cheers to everyone following and reading! Engage more on Steem and your opinion will get voted and your account will get noticed. Everyone likes articulated people :D