Jump to content

  • Log In with Google      Sign In   
  • Create Account


Member Since 10 Jan 2011
Offline Last Active Yesterday, 11:52 PM

#5176052 Software rendering tutorials/examples

Posted by ZBethel on 25 August 2014 - 01:30 PM

I wrote a fully featured software rasterizer as part of my senior project at school.




It's not the most elegant codebase, but you might find it useful.


#5004964 What can software rasterizers be used for today?

Posted by ZBethel on 28 November 2012 - 08:09 AM

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).

#5004957 What can software rasterizers be used for today?

Posted by ZBethel on 28 November 2012 - 07:55 AM

I wrote one. It's great fun! :)

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.

#4973416 HDR + Tonemapping + Skylight = Fail?

Posted by ZBethel on 26 August 2012 - 12:39 AM

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.

#4962368 Tile based Lighting Question

Posted by ZBethel on 23 July 2012 - 03:14 PM

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.

#4962320 Few question about DirectX 11

Posted by ZBethel on 23 July 2012 - 12:30 PM

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.

#4961820 AUTO_PTR issue.

Posted by ZBethel on 21 July 2012 - 07:28 PM

You could use std::shared_ptr instead?

#4961763 Hovercraft Physics

Posted by ZBethel on 21 July 2012 - 02:42 PM

The term you're looking for is spring damping.

http://www.myphysicslab.com/spring1.html (more useful, IMO)

Basically you need to apply a friction force against the oscillating spring force that you're applying to the hovercraft.

#4960755 Register renderables every frame?

Posted by ZBethel on 18 July 2012 - 07:28 PM

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.

#4957428 Abstracting Draw Code: Am I on the right path?

Posted by ZBethel on 09 July 2012 - 03:55 PM

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).

Take a look at Artemis framework for a good example of this: http://gamadu.com/artemis/

For something like tic-tac-toe, don't go overboard trying to engineer a good design. No solution is perfect. For what it's worth, I think you're on the right track for what you're trying to do.

#4957426 Looking for advice on learning game programming

Posted by ZBethel on 09 July 2012 - 03:44 PM

The current industry standard language is C++, with C# for tools development (typically), and Python/Lua for scripting. It would be in your best interest to learn all of those languages. The best way to learn that I can recommend is to buy books and read them. There are lots of entry level game development books online that will help you. It might be a good idea to try using an existing engine like Unity (which I believe you can script with C# or Javascript) if you want to get results quickly while you learn. Building things from scratch is *very* hard, and I only recommend it if you enjoy pain and suffering or just really love learning about every little detail that goes into game engines. :)

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++.

That's just my 2 cents.

#4902368 A common question, where to begin?

Posted by ZBethel on 13 January 2012 - 09:41 AM

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.

Hope that helps!

#4900084 Wavefront Obj format

Posted by ZBethel on 05 January 2012 - 01:59 PM

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.

#4891933 Any PhD's in the house?

Posted by ZBethel on 08 December 2011 - 03:05 PM

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.