Sunday, November 15, 2009

You want to become a Graphics Programmer ...

I regularly receive e-mails with the question what kind of books I recommend if someone wants to become a graphics programmer. Here is my current list (maybe some of you guys can add to this list?):
First of all math is required:
- Vector Calculus
- Vector Calculus, Linear Algebra, and Differential Forms I have the 1999 version of this book
- Computer Graphics Mathematical First Steps
- Mathematics for Computer Graphics

For a general knowledge in programming the CPU:
- Write Great Code Volume 1: Understanding the Machine

For a better knowledge on how to program the GPU:
- DirectX documentation
- NVIDIA GPU Programming Guide
- ATI GPU Programming Guide

To learn about how to program certain effects in an efficient way:
- ShaderX - ShaderX7
- GPU Gems - GPU Gems 3
- GPU Pro and GPU Pro Blog

To start learning DirectX 10 API + Shader Programming:
- Introduction to 3D Programming with DirectX 10
- Programming Vertex, Geometry and Pixel Shaders

To start learning OpenGL & OpenGL ES:
- Khronos group

For general overview:
- Real-Time Rendering
- Fundamentals of Computer Graphics (this one also belongs in the math section)

To get started with C:
- C Programming Language

To learn C++
- C++ for Game Developers
- C++ Cookbook
- there is a long list of more advanced C++ books ...


triton said...

Do yourself a favor and don't buy Peter Shirley books if you are a beginner. Get "Interactive Computer Graphics: A Top Down Approach" by Angel. And "Realtime Rendering" rocks. :D

I also liked "3D Math Primer".

Unknown said...

"Real-Time Rendering" is in the list -> list is complete. :)

Jasper said...

I like "Essential Mathematics for games & interactive applications" by Van Verth and Bishop. It has some good, easy to read explanations of a lot of graphics topics.

Also, I think every programmer regardless of specialty should read "The Pragmatic Programmer" by Hunt & Thomas and "Code Complete" by McConnell.

pregnancy said...

I have a deep knowledge in the object oriented programming languages like C++, Java, Python etc. I don't want to become a graphic programmer.

Anonymous said...

Nothing on Win32 or other ways of interfacing with the OS? (Qt/Gtk/WxWidget/etc...?)

Wolfgang Engel said...

You are right, we could also name a few books here although I can't think of any of those in my hands for more than a decade.

Unknown said...

I would add some books on painting and learning to draw. Heinrich Wölfflin's introductory essay on Dürer for example, and some minimal understanding of photo/cine lighting, because cg - REAL cg -- is about using complex processes to make colors to make pictures.

Unknown said...

Speaking of books, is ShaderX8 set for release next month?

Any particular article title you could single out? hehe

Wolfgang Engel said...

It is now called GPU Pro and in full-color and it will be released before GDC. You can read up already on the GPU Pro blog ... link is mentioned above.

Unknown said...
This comment has been removed by the author.
Unknown said...

For the mathematical part I can only recommend "Geometric Tools for Computer Graphics" as a thorough reference

allingm said...

Introduction to 3D Game Programming with Direct X 9.0c: A Shader Approach

Me and several students (20+) at my school, DigiPen, have used this book to get introduced to Direct X 9. The book is simply an intro to Direct X, but it works great.

Costas said...

Both books Introduction to 3d games programming (dx9 and dx 10) from Frank Luna are very good (excellent reference and samples inside with a lot of basic interesting hlsl stuff)

also Game graphics programming from Allen Sherrod is a very good book
cause it has examples in opengl/dx9 and dx10
Now if opengl is your flavour
there is (more opengl programming by DAvid Astle) which is an excellent book
covering opengl 2 and glsl
plus some model and bsp/portal stuff

Andy Firth said...

when i get asked this question... it is almost invariably by people who are not yet programmers.

learn to be a programmer first

then specialize.

Alex Meka said...

Hi Wolfgang,

has it a sense, in your opinion, to code graphics in "simple" C (instead of C++)?

Wolfgang Engel said...

This is still quite common. The C99 standard added a lot of good C++ features to the C language. Unfortunately I believe Visual Studio is still not C99 compatible. I used Pelles C for a while and it is a pleasure to work with C99.
You keep your port more portable this way. For some environments, C is still the way to go.
C# is for tools programming and for spare time programmers that don't care about being restricted to Microsoft Windows environments.

C code is also easier portable to the iPhone. Obj-C++ does not support many C++ features.

Giorgio said...

I've not read RTCD in the list --> the list is incomplete!

(Real Time Collision Detection)

Wolfgang Engel said...

This is a great book. I use it quite often. If you define graphics programming very narrow, than what you do is program the graphics card. Collision detection is traditionally handled on the CPU and is also now in the content of Physics engine packages. Therefore I would consider it a great candidate for a list of books named "You want to become a more experienced Graphics Programmer ...".

Giorgio said...

I think that the math in that book is necessary to became an advanced Graphics Programmer ;)

Txkun said...

I remember when I used to suggest just "Computer Graphics by Foley, van Dam".
A lot of time ago and for me that was THE book.
Eheh, I'm getting nostalgic ;)

jmoons said...

Thank you for taking the time to write about wanting to be graphics programmer. I found some of these books on my own and working through them. It is nice to see I am moving in the right direction.
Thank you

Paulomat said...

This is all focused on interactive graphics programming. But there are still people taking their time to get more photo-realistic images. So here is some literature listing about offline rendering books.

First - to get going:

- Shirley & Morley, Realistic Ray Tracing
- Suffern, Ray Tracing from the Ground Up
- Jensen, Realistic Image Synthesis using Photon Mapping

If you want it all put together nicely in literate programming and in depth theory:

- Pharr & Humphries, Physically Based Rendering

Looking at all the bunch of GI algorithms:

- Dutré et al., Advanced Global Illumination

And don't forget about realistic material models:

- Rushmeyer et al., Digital Modeling of Material Appearance

Some classics, still in print:

- Glassner et al., An Introduction to Ray Tracing

- Sillion & Puech, Radiosity and Global Illumination

- Cohen & Wallace, Radiosity and Realistic Image Synthesis

- Ward et al., Rendering with Radiance

- Ebert et al., Modeling and Texturing - the Procedural Approach

- Apodaca & Gritz, Advanced Renderman

Get the free PDF+code for:

- Ashdown, Radiosity - a Programmer's Perspective

For some in depth details about implementing solid irradiance caching:

- Krivanek et al., Practical Global Illumination with Irradiance Caching

Some older textbooks about the fundamentals, beside Shirley etal.:

- Watt, The Computer Image

- Watt, 3D Computer Graphics

- Watt & Watt, Advanced Animation and Rendering Techniques

Don't buy them all, they are quite redundant. Look for what is right for your level, topic interests and learning style.

Anonymous said...

check to learn CG programming.

MikeR said...

"Write Great Code" was superb, thanks for recommending it!

Wolfgang Engel said...

My pleasure!