Jump to content
  • Advertisement
Sign in to follow this  
  • entry
  • comment
  • views

Researching my Animation Pipeline



This is my first blog post.

I am making a videogame as a learning exercise, using SDL 2.0 as my framework (I can't call it an engine, but I'm using it as my game engine).

I opted to attempt a 2D Turn Based game.



I have followed SDL tutorials and am now familiar with [Textures] and [Rectangles] in SDL, necessary for animating characters in the game.  I wrote wrapper code to turn my sprite sheets into living characters.

Now that I have achieved animation implementation, I focused on getting a practical art asset pipeline (drawing the sprite sheets).

1)  I first tried Medibang.  I had to manually position the sprites in my sprite sheet, and the Surface Pro 4 (tablet) didn't work.

2)  I then tried using Graphics Gale.  I found out I'm a terrible pixel artist.

3)  I checked out Krita again.  It turns my tablet into an electric oven.  But I can draw without lag, it has animation support, exports a series of png files, and I can use texture Packer to create the sprite sheet.


Gif with 1 Boar was made with Medibang.

The 3 sprite men were made with Graphics Gale, and the three boars were made with [ Krita + Texture Packer ].


What did I learn?

Animation is expensive, took me way longer to draw 16 frames of animation than I would have liked.

I want to focus more on programming more features, and less on animating.  Although I do want to see how "pretty" I can push a game.

For now, I'll try to stick to easier character designs and shorter idle animations.



1 Comment

Recommended Comments


Art is definitely a tough point for a lot of programmers, I like your style though! :)

Share this comment

Link to comment

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
  • Advertisement
  • Advertisement
  • Blog Entries

  • Similar Content

    • By m5willmax
      Hi, sorry for my English. My comp specs are: Win 8.1, DirectX 11.2, Geforce GTX750 Ti with latest drivers. In my project I must use color blend mode max via SDL_ComposeCustomBlendMode which is supported in SDL 2.0.9 by direct3d11 renderer only. Changing defines in SDL_config.h or SDL_config_windows.h (SDL_VIDEO_RENDER_D3D11 to 1 and SDL_VIDEO_RENDER_D3D to 0) doesn't help. SDL says my system supports direct3d, opengl, opengles2 and software renderers. What should I do to activate direct3d11 renderer so I can use blend mode max?
    • By Nilmani Gautam
      Hello and welcome everyone. I am starting another complete new Tutorial on 3d modelling and animation on blender
      Please comment what types of chapter could i include to make it complete from very beginning to exper
    • By Programmer One
      I'm currently writing a 2D game engine from scratch for Android. The first iteration of the engine is just going to use the Android Canvas view for drawing. At some point, I want to support OpenGL ES - but not until I finish this first project (which is a very simply game based on this engine). Right now, I'm dealing with Sprites and I've encountered a design challenge that I'm not entirely sure which direction I should go.
      For the sprite bitmaps, I've decided to go down the sprite atlas route (as opposed to individual image files). I'm using Texture Packer and I've written a custom JSON exporter. I didn't really want to limit myself too much, so I decided I'd support sprite rotation and trimming in order to save as much space I can in the atlas. I backed off from supporting polygon trimming for now. If you're unfamiliar with Texture Packer, it's essentially a tool that will allow you to import individual sprite frames, organize them into folders and then have the application generate a sprite map and corresponding coordinate data file. This application supports trimming any blank (alpha) space around the sprite images in order to pack them closer together. It also supports rotation if it makes the image fit better.
      What I'm trying to figure out now is how to deal with loading the sprite image data. Currently, I'm at the point where I can deserialize the JSON map data into "Sprite Frame" objects. These objects contain information about each frame. My format allows grouping of sprite frames in order to organize frames that correspond to the same animation. In essence, the sprite frame object has:
      The original (untrimmed) size of the sprite image. The original position of the sprite image within it's bounding box. The rect of where the image is in the sprite atlas. A flag indicating if it had been trimmed. A flag indicating if it has been rotated (CW). This will give me all the information I need to draw the image onto the Canvas. If I didn't support all the other fancy features I want (packed rotation, trimming) and pre-transformation (i.e. mirroring a sprite so I can reuse it for things like changing the walking animation without having to pack in more sprites), then drawing the image from the sprite atlas onto the canvas would be as simple as a simple Canvas.drawBitmap([Source Bitmap], [Destination Rect], [Source Rect]).
      But, since the image I'd be drawing MIGHT have been rotated, trimmed or otherwise transformed, I can't just simply blit it onto the Canvas. I'd first would need to apply some transformations in order to "undo" changes that were done during packing. This means I would need to either:
      Slice out the child image from the sprite atlas into a new bitmap, and apply the "unpacking" transformations (i.e. rotate back, realign, etc). Apply a transformation to the Canvas itself. (I don't think I want to go down this road since I've read that transforming the Canvas tends to be rather slow). So, I'm probably left with having to create smaller bitmaps from the sprite atlas and then keep those in memory for as long as I would need them. So, for a single sprite character, I'd be looking at around 36 sprite frames (9 different animations, each with 4 frames). What I'm concerned about is memory consumption. So now I'm thinking:
      I should read in all the sprite bitmaps from the sprite atlas and shove them into an LRU cache. This means all the sprite image data is now in memory, all ready to go for whatever animation sequence and frame I want. Once I'm done with the atlas, I dispose of it and just work with what I have in memory. I can perform this caching when I load levels and then clear items from the cache that I no longer need. I should just keep the sprite atlas, blit directly from that onto the canvas, and get rid of the fancy packing features so that I don't have to process any transformations. The only problem with this approach is that I will also have to shelve shearing and rotation on the sprite object itself. TL;DR: Am I being overly memory conscientious or having a couple frames of sprite data in memory not a super big deal?
    • By GreenGodDiary
      Sup dudes and dudettes!
      I'm in the process of implementing an animation state machine and am currently making a 2D blendspace state for it.
      I think I've figured out how to blend the different clips together given an [x,y] coordinate but I have one problem I'm not sure how to solve; matching the different blended clips' animation speed.

      Say you have your run-o-the-mill twin-stick character locomotion blendspace, where max Y, zero X means running straight forward, and max Y, max X (in either direction) means running at an angle (thus blending run_forward with run_strafe).
      In this case the animations' speed probably match, so there's no worry. However, say I'm halfway up Y, meaning I'm "jogging", in the sense I'm halfway between walk_forward and run_forward, and my X is at some arbitrary point.
      How would I blend these animations together so that their speeds match? Would it be as simple as 'lerping' the animation speed of the walk towards the speed of the run and scaling the speeds of all the clips to match this speed?

      Sorry if the question is poorly written.
    • By Oleg Cherkasky
      I'm new here, I'm currently taking a 2 and a half year college course on programming. We're going through C algorithms, C# basics because we just began with C# and some Unix/Linux stuff. We're at the 2nd year of college, previously to that we mostly studied Linear Algebra, Boolean Algebra, and Statistics for the mathematical foundation of programming and we learned some C.
      At the end of the year, I'll have to have the final class project ready. I've decided to build my own 2d platform game from scratch, using only the C language and SDL2 to make the job easier. I'm a bit of a Mario fanatic, I have all of the Mario games available on the Nintendo 3DS I own so I'll want to make it similar to Mario.
      I'll be building it on Visual Studio community but I want the code to be portable enough to be easy to compile it on Linux and MacOS so as to expand on the project in the future.
      Can I get some advice on this, please? How do I start? I already know some C but I haven't done any 2d programming, closest I came was making lines and squares with an opengl library called glut.h at in a recent college course on graphics programming. It didn't involve SDL.
      Thank you,

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!