# Best Resource for learning modern graphics techniques

This topic is 3115 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

What is the best resource, whether it be an academic journal, online resources, books, etc for getting up to speed with modern graphics programming and theory? You can assume that price is not a concern although free materials are obviously welcome, and also that I am very comfortable with math and have had some exposure to basic elements of 3d computer graphics math like projection matrices and whatnot. Ideally I'd like some code samples, especially for the more fundamental techniques. I see a lot of talk of different methods of culling, for example, but rarely does any of the literature I read this in include any code samples. I've looked through the past few years of siggraph proceedings and ACM TOG and I think I don't even have the pre-requisites for understanding the pre-requisites yet. There's Foley et al but I feel it might be somewhat outdated now. The closest I could find to a modern equivalent is Pharr's book Physically Based Rendering, but not sure if that assumes too much of the reader. For the time being, I'm more interested in going the D3D route than the OGL route, so I'd be hesitant (although not *completely* unwilling) to use any reference material that depends heavily on OGL. Thanks

##### Share on other sites
You could check out our free online D3D10 book - it covers the basic API, and also covers quite a few different topics and has code samples throughout. If you take a look, I'd like to hear any feedback that you might have too... The link is in my signature below:

##### Share on other sites
The biggest problem with this is that I don't have easy access to a box with Windows Vista :( So I've been learning D3D9 temporarily. Planning on buying a new computer in October or so, and then I was planning to switch over from 9 to 10. Hopefully there's some overlap so my time learning 9 hasn't all been wasted.

I do have a license of VMWare Workstation though, do you know if D3D10 plays well on VMWare?

##### Share on other sites
My favorite resources are

the GPU gems series which is free online online at

http://developer.nvidia.com/object/gpu_gems_home.html

The shaderX series, so of the books are free at

For something easier to digest, you can also try XNA, there are tons of code samples for it

http://msdn.microsoft.com/en-us/xna/default.aspx
http://www.ziggyware.com/articleCats.php

##### Share on other sites
Quote:
 Original post by cache_hitThe biggest problem with this is that I don't have easy access to a box with Windows Vista :( So I've been learning D3D9 temporarily. Planning on buying a new computer in October or so, and then I was planning to switch over from 9 to 10. Hopefully there's some overlap so my time learning 9 hasn't all been wasted.I do have a license of VMWare Workstation though, do you know if D3D10 plays well on VMWare?
The last I heard was that you don't get hardware acceleration through a VM, but that was a while ago. I guess there is always the reference rasterizer...

##### Share on other sites
Quote:
Original post by Jason Z
Quote:
 Original post by cache_hitThe biggest problem with this is that I don't have easy access to a box with Windows Vista :( So I've been learning D3D9 temporarily. Planning on buying a new computer in October or so, and then I was planning to switch over from 9 to 10. Hopefully there's some overlap so my time learning 9 hasn't all been wasted.I do have a license of VMWare Workstation though, do you know if D3D10 plays well on VMWare?
The last I heard was that you don't get hardware acceleration through a VM, but that was a while ago. I guess there is always the reference rasterizer...

Thanks, I suppose I'll take a look at it. If windows vista can run on VMWare, then I suppose it must have some support for d3d 10. I'll just see what happens when I try to attach to the hal device.

My first comment regarding the book would be to put Next / Back buttons on the pages so I don't have to click my browser back button and then find the next section in a chapter. :)

##### Share on other sites
Quote:
 Original post by cache_hitThe biggest problem with this is that I don't have easy access to a box with Windows Vista :( So I've been learning D3D9 temporarily. Planning on buying a new computer in October or so, and then I was planning to switch over from 9 to 10. Hopefully there's some overlap so my time learning 9 hasn't all been wasted.I do have a license of VMWare Workstation though, do you know if D3D10 plays well on VMWare?

Side note: At that point in time, just scrap 10 and go directly to 11. Do not pass GO, do not collect $200, etc. 11 is pretty much a superset of 10 and has a very comparable interface and API, new shader stages aside. In regards to the thread purpose, there are a number of good resources available. The GPU Gems series is an excellent reference for a number of advanced/very interesting techniques, though I wouldn't go quite so far as to say they're a good general introduction to all the aspects of real-time 3D. The (also excellent) ShaderX series also has a similar set of advantages/drawbacks. Generally, I would recommend reading those once you have the basics of primitive drawing and the programmable pipeline down cold, as just jumping into them headfirst is a recipe for headache. I speak from personal experience there. The samples in the DirectX SDK are very well put together, IMHO, though wading through DXUT can also be overwhelming. I think the samples on HDR, skinning, motion blur and postprocessing are some of the most directly applicable, though it's been a while since I've done much with the DX9-level examples. All the techniques presented are fairly simple and implemented with a minimum of cruft, not counting the aforementioned train wreck that is the DXUT code organization. Additionally, there's a lot of buzz surrounding spherical harmonics and their many uses. Unfortunately, I find many articles/tutorials on the subject are rather vague on the how and why and give little coverage of how the reconstruction actually works in a proverbial step-by-step fashion, instead just throwing out wads of rather opaque summations and integrations along with rather unhelpful pictures of final rendering results. I *think* I understand how it works, and certainly grasp the process at a conceptual level, though it is also my understanding that many others suffer similar problems. YMMV. #### Share this post ##### Link to post ##### Share on other sites Quote: Original post by InvalidPointer Quote:  Original post by cache_hitThe biggest problem with this is that I don't have easy access to a box with Windows Vista :( So I've been learning D3D9 temporarily. Planning on buying a new computer in October or so, and then I was planning to switch over from 9 to 10. Hopefully there's some overlap so my time learning 9 hasn't all been wasted.I do have a license of VMWare Workstation though, do you know if D3D10 plays well on VMWare? Side note: At that point in time, just scrap 10 and go directly to 11. Do not pass GO, do not collect$200, etc. 11 is pretty much a superset of 10 and has a very comparable interface and API, new shader stages aside.

In regards to the thread purpose, there are a number of good resources available. The GPU Gems series is an excellent reference for a number of advanced/very interesting techniques, though I wouldn't go quite so far as to say they're a good general introduction to all the aspects of real-time 3D. The (also excellent) ShaderX series also has a similar set of advantages/drawbacks. Generally, I would recommend reading those once you have the basics of primitive drawing and the programmable pipeline down cold, as just jumping into them headfirst is a recipe for headache. I speak from personal experience there.

The samples in the DirectX SDK are very well put together, IMHO, though wading through DXUT can also be overwhelming. I think the samples on HDR, skinning, motion blur and postprocessing are some of the most directly applicable, though it's been a while since I've done much with the DX9-level examples. All the techniques presented are fairly simple and implemented with a minimum of cruft, not counting the aforementioned train wreck that is the DXUT code organization.

Additionally, there's a lot of buzz surrounding spherical harmonics and their many uses. Unfortunately, I find many articles/tutorials on the subject are rather vague on the how and why and give little coverage of how the reconstruction actually works in a proverbial step-by-step fashion, instead just throwing out wads of rather opaque summations and integrations along with rather unhelpful pictures of final rendering results. I *think* I understand how it works, and certainly grasp the process at a conceptual level, though it is also my understanding that many others suffer similar problems. YMMV.
I'll agree with the statement about D3D11 - I'm currently converting over to D3D11, and you can use it on down-level hardware too. However, it has the same limitation as D3D10 - it requires Vista or Win7 to use...

##### Share on other sites
Realtime Rendering is maybe what you're after in a book.

##### Share on other sites
Appreciate all the suggestions. I might pick up a copy of RTR, it looks like it fits the bill. It's a shame there's no exercise, I always have a subtle distaste for technical books that provide no exercises. With a book containing a carefully crafted set of exercises, you can literally be an expert on the subject by the time you finish the book, although it might take you a year as opposed to a month to finish the book. But it looks good anyway.

Is the material in ShaderX and ShaderX2 outdated, or is much of it still relevant? I suppose the same question applies for GPU Gems.

And am I to understand that once Direct3D 11 goes RTM, Direct3D 10 will be completely obsolete? In the sense that you could take a program written for D3D10, #define all the functions, interfaces, and structures to contain the number 10 instead of the number 11, and it would behave identically? Does this require Direct3D 11 compatible hardware, or is it safe to code only for the Direct3D 11 interface and as long as you don't use any features that are new in D3D 11, it will work on all D3D-10 compatible hardware?

##### Share on other sites
A big thing in modern graphics is shaders, and the orange book covers Glsl. Cg is also great.
I Would check out the Cg tutorial (that's the name of the book) on nvidias website and also download the toolkit.
Also get OpenGL sdk 10 on their site. you should be able to use most of those. If your up for a great challenge check out geometry shaders. Also d3d 10 is the old new, d3d 11 and tesselation is the new coolness.

EDIT: Was using my iphone, made the corrections haha.

[Edited by - AverageJoeSSU on August 17, 2009 1:04:36 AM]

##### Share on other sites
Quote:
 Original post by cache_hitAppreciate all the suggestions. I might pick up a copy of RTR, it looks like it fits the bill. It's a shame there's no exercise, I always have a subtle distaste for technical books that provide no exercises. With a book containing a carefully crafted set of exercises, you can literally be an expert on the subject by the time you finish the book, although it might take you a year as opposed to a month to finish the book. But it looks good anyway.Is the material in ShaderX and ShaderX2 outdated, or is much of it still relevant? I suppose the same question applies for GPU Gems. And am I to understand that once Direct3D 11 goes RTM, Direct3D 10 will be completely obsolete? In the sense that you could take a program written for D3D10, #define all the functions, interfaces, and structures to contain the number 10 instead of the number 11, and it would behave identically? Does this require Direct3D 11 compatible hardware, or is it safe to code only for the Direct3D 11 interface and as long as you don't use any features that are new in D3D 11, it will work on all D3D-10 compatible hardware?
No, that's not quite right. There are some functional level changes that alter the way you do things (like using a rendering context now instead of only a device). However, you can run on the D3D10 hardware via the D3D11 runtime - essentially letting you use the D3D11 API to target all of the previous level hardware down to D3D9. Even so, using D3D11 is still pretty close to D3D10 if you aren't doing multithreaded work, so whatever you learn in 10 is probably applicable 11.