They have a paper somewhere that outlines some of the details, but I believe they do very simplistic rasterization to a 320x280 depth buffer (or something like that). It's heavily vectorized. If you own a core-I7 with AVX, I believe those can do 8-wide vector operations, which would speed up something like that heavily. I've considered writing an occlusion library that utilizes AVX and SSE instructions. I don't think anyone's really used AVX much yet in production (from my very limited viewpoint).
There isn't much use for them nowadays, to be honest. However, I think that as CPUs become more vectorized and parallel, there's potential to see a comeback, but as a supplement to the GPU rather than a replacement. For instance, DICE utilizes software rasterization to aid in occlusion culling, because reading back data from the GPU takes a while.
Which tonemapper are you using? I had a lot of trouble getting it to look right for my project, but the uncharted 2 filmic mapping method ended up looking great. The cause could either be the tone mapping algorithm itself, or just incorrect light values in your scene. From your screenshots, it looks like the tone mapper itself isn't set up right.
Without seeing your code, I can't really help much, but I think your intuition about updating left->right/top->down is on the right track. Fortunately, since you can easily reproduce the bug, you should be able to quickly set a breakpoint and see exactly what's going on with the lighting at that moment. I'd encourage you to try that, because you might find that it's a simple off-by-one sort of issue. Or it could be an edge case in your algorithm that you didn't realize.
1) That entirely depends on your primitive topology. http://msdn.microsof...4(v=vs.85).aspx Assuming you're referring to an indexed triangle list, which is the most sensitive to vertex ordering (in terms of vertex cache performance), then the answer is no. As long as your indices are in the correct order, the vertex buffer can be in any order. That's why optimization is important. If you're sending in indices like (1, 1049, 2, 510, 16, 53), the vertex cache isn't going to do you much good.
2) Like I said above, the vertex cache only helps you if you're taking advantage of temporal locality with your indexing. More simply put, make sure your index buffer references specific indices as much as possible before moving on in the buffer. It doesn't matter what your object rendering order is. Although the GPU will cull triangles eventually, it's not until late in the pipeline. It's much better to use coarse-grained methods like frustum culling for entire objects.
3) According to the MSDN docs, using multiple streams is a bit slower, in the usual case, but it can be a huge advantage in certain situations. For example, if you're rendering a depth pass for a shadow map or for deferred rendering, you don't want to pass in the entire interleaved vertex to a shader that only cares about the position. Using multiple streams in this situation allows you to just bind the position stream and use that, saving tons of bandwidth.
4. I use PIX, which is ok. I haven't delved much into the vendor specific tools yet.
Is adding a bunch of objects to a list every frame really going to cause performance issues? You don't need to allocate space for the array every frame, you could have an array that grows (like a variant of std::vector, or just use that). Besides, you could have one renderable for a set of instanced meshes if you're going to have tons of similar objects onscreen.
I guess it doesn't really matter how you implement the visual/logic aspects of your game, it's just a good idea to keep them separate. Since your example is a simple tic-tac-toe game, having a render function in the game engine that uses the data from your grid seems to me like a good solution. What you don't want is a render function on your grid class. That adds bloat to your class and defeats the purpose of an object oriented design.
In terms of larger scale projects, the big thing right now is entity/component systems. Basically, your entity is just a placeholder or id. Your components are the data, and you have separate "system" classes that perform logic on the component data. That logic can be anything: translating input into character movement, physics, rendering, etc. The components can communicate between each other, either by shared variables within the entity, or by just keeping references to each other (i.e. a render component needs a transform to use. The transform could be another component).
Also, don't get sucked in to the "I'm going to make a AAA RPG in 4 years!" mentality. Start small and save the big projects until you've learned some things. It's impossible to know the scope of a project until you're more experienced (believe me, I know).
If you really like C#, then I'd recommend Unity or XNA. As far as I know those are both great solutions and you'd learn a lot. If you're serious about getting into the industry though, make sure you branch out and learn some C++.
Just curious, but if it's a common question, why didn't you just go with one of the common answers?
Anyways, read this, it was written to answer exactly your question.
Your motives are a little dumbfounding, is your family actively saying you aren't capable of programming? Or are they saying you are wasting your time?
I am a bit confused too why at 15 you already state you wont get any formal education either; although frankly, you can still create a game without an education. Getting an industry job though, without a degree... not a good probability there.
Whatever, that's not what I meant, I shouldn't whine about things on the internet, They say both. I know that I wont get any formal education for game development, so I have to learn independently, I should have explained better. I've accepted I wont get a degree, my grades are terrible, I hate public school in general, the entire enviroment.
Don't shortchange yourself. It doesn't matter how "smart" you are, only how driven you are. I don't consider myself particularly brilliant--i.e., sometimes I'm a bit slow, but I'm driven and I work hard. Doing something to prove yourself is not a particularly good motive. If you stumble and fall you'll just end up doubting yourself and getting discouraged. A better motive is to pick a goal or something you want to achieve and then stay focused on that goal. If you look at all the successful and ambitious people in History, you'll see what I mean.
Like Serapth said, high school is quite a different environment from college. People go to high school because they have to. More often than not, people go to college because they want to. As a result, your peers tend to be more motivated (especially if they are paying for it themselves!). A bit of advice? You probably will not succeed in your dream unless you can train yourself to work hard in the midst of the crappy situation you're in right now. Game development is fun, but it's also really hard, and more often than not it requires some serious willpower to stay focused.
I got made fun of somewhat when I was starting, so I understand your desire to prove yourself. Ultimately though, this is about you, not what others think about you. You need to decide that you'll respect yourself enough to work hard in your studies before you can expect others to respect you. You're not "too far gone" in your education. One of my favorite films that shows this is October Sky. Homer Hickam is your average high school student with low grades and no drive in life. That all changes when he sees Sputnik flying across the sky. It's a great movie; you should watch it. It's one of my favorites because it encouraged me that if you work hard, anything is possible.
Doesn't the obj file format support quads as well as triangles? I've seen cases where there were four indices per face, but never more than that (I'm not saying they don't exist, just that I have never seen them). I believe you can export your models with triangles only.
If you want to be a software engineer, you need to learn how to do that one way or another. I found that the information and conversations on gamedev.net were incredibly valuable to get me pointed in the right direction. I also did an internship. Regardless of whether you are doing a post-graduate degree or have no degree at all it is the same question: how do you prove that you can do the job?
I think I understand you correctly. Sometimes graduate level work has a small enough code-base that you can get away with being sloppy. There's definitely a difference between writing a good algorithm and designing a system. I've spent a good deal of time thinking about how to design game engines, and it gives me headaches. It takes a different skill altogether to design the architecture of an engine than it does to code it.
I'm really trying to learn more about software design in general. I love seeing an engine that is well engineered and polished. It's really hard stuff for sure, and studying computer graphics and math won't help you get better at it.