So I am giving a talk to young indie video game developers about 3D computer graphics; what OpenGL and DirectX and so on actually are doing below the hood. Now you may think that indie game developers may already know a lot about this but you would be surprised, a lot of indie developers only dabble with premade game engines such as Unity and don’t really understand everything the engine does let alone the graphic library that the game engines use, especially these young developers. They simply write scripts that make their game run. Not to mention that a lot of these young adults are not programmers; they are artist and businessmen. So I am going to inform them what makes their games possible!
I am going to try to present the concepts in a purely theoretical / mathematical way (aka as little as computer science as possible) so that the artist and businessmen can follow along a well.
However here is where I may need help; I am looking to get more “woah!” facts; facts that will make even the knowledgeable programmers interested in the presentation. What very interesting and/or mind twisting facts are in computer graphics that are not widely known? I put what I think are my current “woah!” facts in the line that start with bold text.
Here is my outline:
- Introduction about how “all you have to do” in a video game or any other computer graphic software is determine what pixels should be what color in order to deliver something understandable to the player/user
- Introducing the algorithm that determines if a ray intersects with a triangle in 3D space
- Point out how this family of algorithm is probably the most used/calculated-per-second algorithm there is, with about 200,000,000 computers at an given time computing this over 100,000,000 times per second.
- Talk about how we store the triangles in memory: a set a points
- Talk about how we use matrix multiplication to move the triangles/graphical objects around the camera
- Point out that technically the camera never moves, instead we are moving the entire world around the camera!
- Talk about the graphics pipeline:
- Specify the vertex
- Vertex shader: Moves the vertices
- <Probably skip Tessellation / Geometry shaders or bring it up later>
- Vertex Post Processing: Get rid of traingles that are not in the camera’s view
- Rasterization
- Fragment Shader
- End of the pipeline
- Talk about the Graphics Card: The difference between code that runs on the CPU and GPU (GPU is SIMD: Single instruction, multiple data)
- (This part is just for programmers) As so, how code that runs a graphics card is different (if statements pretty much don’t exist in shaders!)
- Finally, a brief mention of extreme forms of optimization, including: Fast inverse square root - Wikipedia