Description

Introduction This 3d skeletal animation shader (skinning shader) can be used to load bone-based animated 3d models into Game Maker Studio. 3D Skeletal Animation is a relatively simple concept which requires a list of bones and bone-weights to be stored on the CPU. Similar to Frame-Based animation it uses the CPU to interpolate between frames, but instead of operating on a per-vertex level it operates on a per-bone level. The end-result is faster than interpolated frame-animation, and uses less RAM.

Features:

  • Misfit Model 3D (MM3D) file importing
  • CPU-sided bone skeleton animating
  • GPU accelerated skeleton skinning
  • Custom per-joint offsets for dynamic transformations

How it works:

  • Loading a Misfit Model 3D (MM3D) model only imports the model data and parses it into our generic skeleton model format:
    • **To actually use the model, you'll need to create an animated instance of the model (limited to one animated instance per object).
  • An animated instance is a "wrapper" for our generic animated-model format and it makes it easy to render bone-based models in Game Maker Studio.
  • It works with a simple vertex shader. The shader takes in the 4 bone-weights and the 4 bone-indices. It multiplies each vertex by the bone matrix and the bone weight. The fragment shader is a simple passthrough shader.

Demo:

  • If you would like to see the extension in action before purchasing, check out the demo!

https://dl.dropboxusercontent.com/u/14457523/SkeletalAnimation3D_Demo.exe

Known Issues:

  • It does have one flaw; It isn't as fast as we would like it to be. Game Maker is terrible at iterating through data, and that is the main thing our skeletal system does. We've spent a long time optimizing it for most machines, and we can render about 100 animating models with 40-bones at above 60 fps under YYC. So, this may not be ideal for mobile gaming, but it's perfectly fine for desktop gaming with modern hardware.

End User Licence Agreement (EULA).

Version 2.0.0. Published August 11, 2016

Created with GameMaker: Studio v1.4.1757

Age Rating: 4+

Average Rating

Your review

You can only review assets you've bought.


Gravatar

Luis O 06 April 2017

Neat Tool; However...

I do think this tool also needs updating. I'm not sure if you're still around, but when I use it in my current version of GM, my only model's invisible. Like what below, Nahuel R said.

I we can't figure out what to do with this problem, this tool will become useless O_O;


Gravatar

Nahuel R 22 May 2016

Perfect, but...

I love it, but i think it needs support for more file formats, because .mm3d isn't very practical(Misfit Model 3D supports only like 4 or 5 model formats).
Also, in order to succesfully test this i had to use an older GM Studio version because it doesn't work with the newest updates.
Maybe i'm asking too much, but it would be cool if instead of having to load a model with all it's animations we could load a model and the animations separate.
And i found that for some reason, the models i make appear invisible......I tried loading and saving again the RiggedNPC.mm3d file and it appears invisible ingame too

This review was left for a previous version of this asset.


Gravatar

Gamedel G 11 April 2016

Nice asset

Author fellow. Everything works as it should.

This review was left for a previous version of this asset.


Gravatar

Collin W 08 January 2016

It works really well, but doesn't explain

It works great! I only wish Manta Games had included a tutorial on
1) How it works
2) How to use it
3) How to import your own models
4) How to make your own animations

I don't really know what I'm doing as I'm immediately barraged with advanced code and scripts that I have to sift through to try and soak up how it all works. Aside from that, it works really well as long as you don't plan on having hundreds of animating models at once!

This review was left for a previous version of this asset.


Gravatar

Troy B 23 September 2015

It works, but not optimized enough.

I wasn't able to reach the 100 objects 60fps that was claimed in the description, even when using YYC. Unfortunately even though this works really well it's simply not good enough on terms of how many animated models you can render simultaneously.

This review was left for a previous version of this asset.

Logo

Manta Games (Publisher) 23 September 2015

Hello, thank you for trying out the asset! Naturally performance will vary between computers, the benchmark of 100 was taken on a mid-high range gaming PC. There are multiple considerations to make when using this, including complexity of the model, how often you are updating the animations and how many animations you are simultaneously updating.
It is most likely that the performance slow down will come from the actual animating rather than the rendering of the models, though we have not tested on low-end GPUs. With regard to the animation process, there are a few things as a user that you can do. The animation update rate is totally yours to control, you don't need to run the updates every frame for every animating instance, for example far away objects can be updated every other frame.
Characters that cannot be seen shouldn't be updated at all.
If you have a scene with high enemy density, you could create a pool of say 10 animating models then assign one to each character.Regards


Gravatar

Aimes G 19 August 2015

Get this if you want to make a 3D Game.

The old way to animate models is terrible. I prefer this way because there's a lot of reasons why. It takes too long to get a good animation.

My questions is. I am making an anime based game (Sort of like Mabinogi) will I be able to have hair, clothes, etc to fit with the rig? I dunno. I am so happy though. Thank you. <3

This review was left for a previous version of this asset.

Logo

Manta Games (Publisher) 21 August 2015

Yes, using the attachment system, you can swap in and out certain items. This is useful for equips and other clothing items. If you want more advanced control, you can create multiple skeletal exports.

As it stands, the system simply works by taking a skeleton and a number of parts. If your model consists of multiple groups, it will render that model using a separate texture for each part. A group simply represents a model which represents a specific part of a model, and is bound to the skeleton. For example, clothing items would be in their own group.
So what you can essentially do is export each separate equippable item as a model bound to the same skeleton (you will have to rig each thing individually if you arent just having it as an attachment, but this is to be expected if you want equips to morph with the shape of the skeleton,). The skeleton is separate to the vertex buffer, so you can essentially just pass the skeleton into the shader once, and then draw the parts.

Package contents

Total size 362 KB

Skeletal Animation 3D.extension.gmx 6.88 KB Skeletal Animation 3D
Assets
Backgrounds datafiles Objects Rooms Scripts
animation_instance_create.gml 956 Bytes animation_instance_get_absolute_matrix.gml 253 Bytes animation_instance_get_animation_ratio.gml 293 Bytes animation_instance_get_current_animation.gml 31 Bytes animation_instance_get_current_frame.gml 31 Bytes animation_instance_get_previous_animation.gml 32 Bytes animation_instance_get_previous_frame.gml 32 Bytes animation_instance_get_source.gml 157 Bytes animation_instance_reset_joint_rotation_offset.gml 647 Bytes animation_instance_set_animation.gml 309 Bytes animation_instance_set_animation_ext.gml 589 Bytes animation_instance_set_animation_frame.gml 399 Bytes animation_instance_set_joint_rotation_offset_x.gml 289 Bytes animation_instance_set_joint_rotation_offset_y.gml 289 Bytes animation_instance_set_joint_rotation_offset_z.gml 289 Bytes animation_instance_step_animation.gml 1.7 KB animation_instance_update.gml 472 Bytes animation_instance_update_ext.gml 217 Bytes Array2DToMatrix.gml 241 Bytes array_copy.gml 263 Bytes buffer_read_string.gml 165 Bytes camera_draw.gml 984 Bytes camera_init.gml 535 Bytes camera_step.gml 2.47 KB d3d_transform_add_animation_instance_absolute_matrix.gml 404 Bytes InverseMatrix4.gml 6.99 KB MatrixToArray2D.gml 266 Bytes mm3d_get_interpolated_jointmap.gml 7.71 KB mm3d_interpolate_frames.gml 2.1 KB mm3d_setup_skeleton_tree.gml 719 Bytes se_mm3d_animate_child_joints.gml 1.67 KB se_mm3d_animate_joints.gml 2.52 KB se_mm3d_get_animations.gml 168 Bytes se_mm3d_get_animation_from_name.gml 354 Bytes se_mm3d_get_animation_looping.gml 206 Bytes se_mm3d_get_joints.gml 156 Bytes se_mm3d_get_joint_from_name.gml 386 Bytes se_mm3d_get_joint_name.gml 170 Bytes se_mm3d_get_keyframe.gml 856 Bytes se_mm3d_get_smooth_joint_matrix.gml 2.16 KB se_mm3d_get_triangles.gml 165 Bytes se_mm3d_get_triangle_vertex_1.gml 213 Bytes se_mm3d_get_triangle_vertex_2.gml 214 Bytes se_mm3d_get_triangle_vertex_3.gml 213 Bytes se_mm3d_get_vertex_x.gml 193 Bytes se_mm3d_get_vertex_y.gml 193 Bytes se_mm3d_get_vertex_z.gml 193 Bytes se_mm3d_get_vertices.gml 163 Bytes se_mm3d_import.gml 22.5 KB se_mm3d_import_finish.gml 6.06 KB se_mm3d_init.gml 5.84 KB se_mm3d_merge_keyframes.gml 481 Bytes se_mm3d_model_draw.gml 701 Bytes se_mm3d_model_free.gml 555 Bytes se_mm3d_render_joints.gml 728 Bytes se_mm3d_render_joints_bindpose.gml 745 Bytes se_mm3d_set_animation_loop.gml 318 Bytes se_mm3d_skinned_model_draw.gml 355 Bytes se_mm3d_sub_write_vertex.gml 1.6 KB
Shaders Sprites

What is the issue?

Back to Top