Student to AI Programmer

Recommended Posts

Mannirog    0


I am fully aware, especially based on previous topics, that AI programming is not an entry level job. Starting at gameplay programmer and working my way into a specialization seems to be the most popular bit of advice and I am taking that to heart. However, I do have a few more questions regarding AI programming and how to get there.

1. What are the best resources for me to get more familiar with this specialization? Something beginner for learning AI, that assumes you already are comfortable with programming. Is there a favored book on the subject?

2. What would be the best way to build my portfolio for this specialization? Is just having the blueprints or code generally good enough, or should I be building levels that can show off what my little buddies can do?

3. I have used behavior trees before. Should I move off of those and on to state machines? How do they compare in usefulness for medium to larger scale games?

Thank you!

Share this post

Link to post
Share on other sites
Kylotan    10002

1. The books you want are in this thread, but the formatting is broken, so I'll give a summary: "Programming Game AI by Example" by Mat Buckland, and "Artificial Intelligence for Games" by Ian Millington are good starter texts. "Behavioral Mathematics for Game AI" by Dave Mark is a good follow-up text. "AI Game Engine Programming" by Brian Schwab has some mixed reviews but Brian sure knows his stuff (disclosure: I worked for him for a short time), so maybe that's another good one once you already have the basics down. "Artificial Intelligence: A Modern Approach" by Russell and Norvig is an essential guide to the wider world of AI, some of which you'll see in games, some of which you won't. All the AI Game Programming Wisdom books are worth getting if you can, as they contain a bunch of individual hints, tips, tricks and techniques that can be used once you already know the basics. The same applies for the newer Game AI Pro books, the first 2 of which are available for free online.

2. What is best depends on your specific goals - different studios want different skills. If you want to cover all bases, you might want to show that you can use some built-in tools like UE4's Behaviour Trees or Unity's pathfinding, plus showing you can write your own algorithms where necessary (e.g. A* path-finding is a classic, or implementing a utility system), perhaps in a minimalist framework such as SDL to prove that you understand all the parts. Generally speaking people want to be able to see the behaviour as well as the code, and you're going to need to be able to test it anyway. So you can show them a prototype of your code running in a test map of some sort.

3. State machines are trivial compared to behaviour trees. But they are not mutually exclusive. You need to understand both, and the relationship between them, and the pros and cons of each. You also need to understand other concepts like graph search, pathfinding, steering behaviours, optimisation problems, utility systems, decision trees, planners, etc. It's not necessary to implement every single one of these from the ground up, but the more you do, the more chance you have of being able to show that you know the right tool for the job, and can implement it.


Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By hyyou
      I encapsulated Physics and Graphics with ECS successfully.
      Here is a simplified version :-
      Physics Rigid Body = Physic_MassAndInertia + Physic_Transform + Physic_Shape Graphic Polygon Body = Graphic_Transform + Graphic_Mesh I usually set their transform via :-
      findService<Service_PhysicTransform>()->setPosition(physicEntity,somePos); findService<Service_GraphicTransform>()->setPosition(graphicEntity,somePos); It works so nice, and there is no problem in practice, because I always know its "type" (physic/graphic).  
      However, I notice that Physic_Transform and Graphic_Transfrom are very similar and duplicate.
      For the sake of good practice and maintainability, I consider to group them into Generic_Transform.
      findService<Service_Transform>()->setPosition(anyEntity,somePos); //cool However, there is a little difficulty.  The physic transformation is quite complex for a child inside a compound body.
      Assume that a physic body B is a child of a compound body C.   In this case, B's transformation component currently has no meaning (by design).
      If I want to set the child transformation setTransformation(B,(x,y,45deg)), my current physic engine will not set the B's transformation directly - it will set C's transformation that make B's position match (x,y,45deg).

      Thus, it is not so practical to group them, except I code it like (ugly and worse performance):-
      class Service_Transform{ public: void setPosition(Entity B,Vec2 pos){ bool checkIsPhysic = .... //check if B is physic if(checkIsPhysic){//physic Entity compound = .... //find C ComponentPtr<Transform> cCompound = compound.get<Transform>(); cCompound->pos=pos*someValue; //calculate some transformation for C }else{//graphic ComponentPtr<Transform> cTransform=B.get<Transform>(); cTransform->pos=pos; } } } Should I group them  into 1 type of component?  
      I probably should not group them because its meaning and related implementation are very different, but I feel guilty ... I may miss something.
      Advice about other things are also appreciated.  Thanks.
      Edit: Hmm... I start to think that grouping component is OK, but I should still use 2 function (from different service/system).
      Edit2: fix some code (pointed out by 0r0d, thank)
    • By Outliner
      Consider how one makes terrain using marching cubes. By having a grid of floats we can represent a continuous field that marching cubes will interpolate and turn into a nice smooth isosurface for the player to walk around on. This is easy and excellent for creating mountains and valleys and so on, but what if we want more variety in our game? A game is not normally made of just grass and sky. Maybe some places should be sand, or water, or road. How could that be worked into the mesh that we're getting from marching cubes?
      The obvious approach seems to be to have multiple fields, so each point on the grid has a certain level of sand, soil, rock, water, and so on. Then we modify the marching cubes algorithm to look for transitions between materials, so it puts a surface between areas of mostly one material and areas that are mostly other materials. We'd also want to keep track of when these surfaces touch the air, because that's the only time when we'd actually want to triangulate and render the surfaces.
      Suddenly the delightfully simple marching cubes algorithm is looking a lot less obvious. Has anything like this ever been done? Does anyone have any tips? Is this the right approach?
      Edit: Embarrassing mistake! I didn't think of phrasing the problem as "multiple materials" until I went to post this question, but now that I have I see there are plentiful google results for marching cubes with multiple materials. I'm still interested in any tips and advice, but now I have other resources to help with this problem.
      From the Google results, this paper looks especially interesting: Automatic 3D Mesh Generation for A Domain with Multiple Materials
    • By Outliner
      I have a few key features that I want for my game's terrain mesh, but putting it all together into an terrain editor is becoming a headache. I need some advice from someone more experienced than myself. Perhaps there is some design pattern or object-oriented trickery to add some abstraction and turn this mess into something manageable.
      I am creating my terrain mesh as a problem of dynamic constrained triangulation. I start with a regular triangulation of a 2D plane into equilateral triangles, and then as I draw the game's map the existing edges and vertices are automatically removed to make room for the edges and vertices I'm drawing, and naturally the reverse happens when I erase. There are fairly simple algorithms for inserting individual vertices and edges into a triangulated plane. Using a half-edge data structure to represent the triangulation makes it quite manageable.
      Unfortunately there are a few additional important features. For one, a game map should be an infinite plane in all directions. The obvious solution to this is to break up the mesh into regular pieces, each one separately triangulated but sharing common points along their edges so that the multiple meshes fit together seamlessly in the game. The user should be able to draw map features across the boundaries of the map pieces seamlessly, without needing to care where one map piece begins and another one ends. An ordinary half-edge data structure doesn't have anything to deal with that and it would be nice if I could manage that complexity so it doesn't seriously affect my triangulation algorithms.
      Perhaps I'm asking for trouble, but I also want the terrain mesh to be able to change while the game is playing. I'm not so greedy as to try to implement animated terrain, but I would at least like to be able to remove a designated region of the map and substitute an alternative map of the same shape. We might think of it as having a hole in the map that can be filled by any one of several appropriately shaped meshes. Once we've got these meshes it will be trivial to pop them in and out during the game, but again it's another complication of the editor. Keeping the boundaries of the designated regions aligned with the rest of the map and allowing new edges to be drawn across that boundary is making the editor too complicated for comfort.
      What are the appropriate abstractions to use for this kind of situation? These seem like relatively simple features, but my design is turning into a tangled mess. What am I doing wrong? An ordinary half-edge structure doesn't seem to be the right tool for this job, but what would be the right tool?
    • By FotisK
      hi people!
      I'm trying to land a job in the video games industry (I don't mind if it's a low end mobile studio as long as it's a stable job)
      I have a BSc in CS, and some years of work experience in programming, graphics design and UI/UX design. I also have some game prototypes (art/animation/scripted by myself) and I'm hoping of doing 2D art (characters/environment) on video games. However I'm willing to put to use any one and all of my other skills if my character/environment drawing skills are not up to the task, whereas something else makes me a candidate. After all I need to get my foot through the door!
      I seriously lack industry insight, so it would be very helpful if you could have a look at my portfolio and come up with some feedback/critique and some suggestions on what job positions/company sizes should I be tailoring my search towards! Feel free to be blunt/honest, I am in serious need of a reality check :-)
      Thank you so much,
  • Popular Now