Jump to content
  • Advertisement
Sign in to follow this  
EdCarden

Newbie looking for a high level explination of the systems that make up a modern 3d video game

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

If you intended to correct an error in the post then please contact us.

Recommended Posts

I am a DBA/Analyst by trade and I work within the Property Management industry.  Within this industry there are terms/phrases that have very different meanings outside of Property Management and so when seeking answers via search engines to questions specific to that industry it’s important to know/understand the jargon used in that industry else you may find too little or (just as worse) too much.  For example within the development world the term property or properties has a very different meaning than it does within my industry.  It is these differences between domains that makes it difficult for someone to seek answers to questions that are outside the domain they know. 

 

Knowing how to ask the question is as important (and sometimes as difficult) as knowing what to ask.  As a newbie to game development it’s difficult to know how to ask as well as what to ask so my first question or search for assistance in how to find the answers is…

 

How can a newbie to game development get a high level explanation of the parts of video game design such that they can best determine where to go next?  For example if I were an alien from another world with a fluent understanding of the English language and I had no concept of an automobile. After riding in one I decided I wanted to learn more about it so as to determine what I need to do to go about constructing my own vehicle where would I start?  I would think the first stop for this alien would be an over view of the automobile, how it works at the top level and its basic parts.  This would include a high level explanation the various systems that make up an automobile; transmission, body, electrical, engine, etc.  I wouldn’t need to know the intricacies of each system just the top level explanation of each so that I see the automobile as more then a black box machine that will go where I tell it based on the controls.

 

Once I had the basic understanding of the automobile I could then determine if I wanted to build one new from the ground up,  modify an existing base model or maybe just tweak a specific line.  Likewise with video game development where can I find a high level breakdown of the parts of a video game and those parts interact?  I assume that all modern 3d video games are based on a game engine consisting of a map (the game world), characters (both playable and NPC ) with flexible traits (i.e. skills), objects such as weapons and crafting/useable items and the ‘other items’ that are key components but may still be separate from the game world, characters and objects such as lighting and effects.  As a newbie I have no idea if the PBR (physical based rendering) is separate from the engine or not.

 

I know the above is rather lengthy but I am trying to convey as best as I can what I am looking for, where I’m coming from and why as a newbie to this industry it can be difficult to know how to ask and not just what to ask. 

 

Thank you

Share this post


Link to post
Share on other sites
Advertisement

Oh boy this is a fun question,  where do I start? 

 

To be honest a game is just a loop that runs continuously reading input from keyboard, mouse, and joysticks etc. Every time around the loop it decides how to act on that data and every time around the loop it draws how the display looks. It does this at least 30, preferably 60 times per second. It quits when it sees input that says to quit. Input is read without pausing, asynchronously in the same way you might read a database record set.

 

That's the simple explanation. 

 

It can be broken down further into subsystems as you say.  The bit I describe above is called the game loop. The bit that draws is called the renderer and the bit that decides what to do is called the gameplay logic.

 

There are lots of other terms such as a model or mesh meaning a 3d object, sprite meaning a 2d object.

 

You don't need a game engine in fact starting out I'd recommend to not use one. Look around the internet for examples of how to implement pong, space invaders etc.

 

Preferably you want an example in a low level framework such as monogame that abstracts the drawing but leaves the game loop etc for you to see as a sequence of simple events. If you're familiar with C# you'll be producing games in it in no time.

 

Generally these days games do all their rendering using hardware. Software drawing is like something from the stone age but there is still lots to be learned that's worth learning by reading up on how to draw your own straight lines and triangles (look up something called bresenham algorithm). 

 

There are some design patterns you can learn about that will help you on your way, for example entity component systems, which is the pattern many of the big engines follow right now. Also look up data driven design.

 

Things like pbr are usually part of the engine or more specifically the renderer. There are separate programs within the game called shaders which are run exclusively on the graphics card and decide how to draw triangles and pixels based on inputs. As they run on the graphics card they're designed to be heavily threaded and process many hundreds of pixels at once. Pbr is one of these systems and a very mathematically complicated one that is found in big engines. It is not something that comes 'for free' with for example directx or opengl, the two most popular graphics systems right now.

 

If you want to know more about shaders search for tutorials on hlsl or glsl (the first is for directx, the second for opengl) 

 

If you feel overwhelmed don't worry, as a programmer you'll probably pick all this up in no time.

 

Let me know if you have any questions or if this isn't too clear :)

 

Good luck!

Edited by braindigitalis

Share this post


Link to post
Share on other sites
Basically, a game is a complicated input/output function.
Remember your "print table of X" program? (type a number, and it prints a table for that number).

A game is similar, except the output is a long stream of slightly different pictures, which we perceive as animation.
The input is not a number, but commands like "go left", or "jump", by means of button presses.
Last but not least, there is a sort-of world, a game map, where the player, the enemies, and the treasure are stored. This world changes through time (or actions by the user or the enemies)

So in all, a game is an interactive video about the player character, a movie of a changing world, where the player element is controlled by the user.

From the stream of pictures follows the game loop (one iteration produces 1 picture, you want 30+ pictures / second), which is roughly

while not dead do
    scan for new input from the user;
    update the world;
    draw the world, and show it to the user;
end
You can program a game in pretty much any language, from general purpose like C/C++ to C# to Java to Python.
There are also dedicated programming languages and systems, often (but not always) dedicated for some sub-set of games.
These dedicated systems come in all shapes and sizes, with different aims.

Some are dedicated to a specific type of game (adventure authoring software), others try to reduce programming effort (game maker), game engines are generic frameworks aimed to handle all the generic things that are the same for many games, leaving you to do the non-generic parts.


As for making these games, the recommended approach is to start simple, and scale up as you get more experience. Edited by Alberth

Share this post


Link to post
Share on other sites

I recommend you get yourself a copy of Game Engine Architecture by Jason Gregory. It explains a lot of this stuff, overview at first, and dives into specifics later on.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!