# Windows Warp3D - Game Engine, Level Editor & Model Editor

Discussion in 'Work in Progress' started by Joe Ellis, Mar 12, 2018.

1. ### Micah_DSMember

Joined:
Jul 19, 2016
Posts:
454
Oops, I've been lurking a bit, but I'm very interested, so guess I should finally say something, lol.

It looks very well-featured and I'd love to use it for a game in the future, but I'm currently making a 3D game in GMS2 which could not make use of this, mainly due to my unorthodox needs in animation and some rules with my graphical style.

I think that the more 3D assets that get out there, the more we'll see an interest in making 3D games with GameMaker. Especially with something like this, if it is as fully-featured as it seems to be. I do feel like some people might have missed this topic, or perhaps they saw the first post and only skimmed over the text and saw the one screenshot which may not look impressive at first glance. Perhaps you could edit the first post and use bullet lists for features, showing screenshots in spoilers which demonstrate the various shaders, editors, animation, etc.?

I look forward to your work on this. It's looking and sounding pretty fantastic.

Joe Ellis likes this.
2. ### YanBGMember

Joined:
Jun 25, 2016
Posts:
569
Looks awesome, more people will learn about it with time i guess, by new program do you mean stand-alone?

Joe Ellis likes this.
3. ### Joe EllisMember

Joined:
Aug 30, 2016
Posts:
744
Thanks guys,
@Micah_DS I'm hoping over this next week or so to get most of it up and running, after that I'll be able to make alot more screenshots, and I'll update the first post with these, thanks for the suggestion with the bullet points, I'll do this.

@YanBG No it's just an extension that runs inside your project when you run it, I did plan for it to be stand-alone at first but I realized several advantages of it being run inside a project, as it allows you to use the project's resources (objects, scripts etc). and test them in levels in realtime. I've made a play\pause\stop button which can be used while editing a level, where all the objects get activated\deactivated (or frozen in mid air if paused) I like the idea of this cus you can test loads of things as your making them and don't have to recompile the project every time.

Micah_DS and slojanko like this.
4. ### slojankoMember

Joined:
Jun 20, 2016
Posts:
113
There's quite a few that I know of but don't bother posting on the forum frequently.

orange451 and Joe Ellis like this.
5. ### Joe EllisMember

Joined:
Aug 30, 2016
Posts:
744
I wanted to do something fun to break the monotony of coding a complicated program, so i had a go at volumetric lighting
The result I've come up with, I'm not sure if it's technically volumetric lighting, but it uses 3d volumes \ models and renders them with transparency that gets thicker as the object does
I'm happy with the results I've got today, but I'm also looking forward to trying other things out with this type of technique, like translucency\sub-surface scattering, and also wanna test this out with a human model to see if it'd make a good ghost.

Nux, slojanko, lolslayer and 4 others like this.
6. ### lolslayerMember

Joined:
Jun 23, 2016
Posts:
651
Nice, did you make a model with a lot of layers or diid you make a shader that makes the light volume thicker the more of the volume you see?

Joe Ellis likes this.
7. ### Joe EllisMember

Joined:
Aug 30, 2016
Posts:
744
With a shader, I used 2 depth maps, one with the model's faces the wrong way, so when you turn culling on, it gets rendered so you can see the inside of it, render the depth of this, then turn culling off, get the depth of the front faces and compare the two, the more difference, the more alpha

Last edited: May 2, 2018
Micah_DS and Zek like this.
8. ### KentaeMember

Joined:
Sep 24, 2016
Posts:
98
Okay, after reading this full thread I must say I'm quite intrigued
I have a couple of questions though.

1. (This is just to clearify as I can bearly believe what I've just seen)
Is it really possible to export an animated model from, say, Blender 3D as an FBX and get it into GMS 1.4 using this? :O
Cause that'd be a total gamechanger for me.

2. If so is it also possible to do som sort of blending/interpolation between animations using this?

Other than that, great work! ^^
(think it's kind of funny how it looks a bit like an old windows programme xD)

Joe Ellis likes this.
9. ### lolslayerMember

Joined:
Jun 23, 2016
Posts:
651
Hehehe I thought that you would be doing that if you were using shaders

While it being an absolutely amazing system, it doesn't work with hollow objects or two objects behind each other with a significant distance, but for light shafts as those it does look very good

Joe Ellis likes this.
10. ### Joe EllisMember

Joined:
Aug 30, 2016
Posts:
744
Yeah, that's all totally possible With interpolation, it just uses frame_pos (0 - 1) and blends between the two frames using this.
With skeletal animations it's also possible to blend between more than one animation, as the animations just control the bones, so all kinds of mixing several frames with ratios\weights is possible.

Yeah I'm a big fan of the old windows look, plus, as I'm not a ui designer, and am having to do it all myself, this is the best look I've come up with so far, in terms of functionality and being easy to follow.

Speaking of importing fbx models, and the ui, this is the current design I've got for the importer
the layout needs a few tweaks but its got all the features needed, and is pretty straightforward to use (I think)

Thanks, yeah I was trying to get it to allow overlapping parts but I don't think it's possible with just 2 depthmaps, You'd probably need an extra 2 per overlapping object, but there's only so many times you could do that. But yeah, it's good for light shafts and glow effects I turned the threshold up and it makes a nice retro glowing crystal effect, looks like the one on crash 2.

Last edited: May 3, 2018
CMAllen likes this.
11. ### KentaeMember

Joined:
Sep 24, 2016
Posts:
98
Well now you've got me real excited I'm gonna have to try this out ^^
If I can get this working the way I want it it'll be huge for my projects

Last edited: May 3, 2018
Joe Ellis likes this.
12. ### Joe EllisMember

Joined:
Aug 30, 2016
Posts:
744
Good to hear, it feels really great how people are getting excited about this (including me) my aim from the start has been to let people be able to make a game in the normal gamemaker way.. but 3d, just the thought of it sounds super fun.
But no there's no download link yet, I was planning on testing the collision soon, with a rolling boulder bouncing around a spyro level, I'll put that up to test as a preview, but the actual program needs several things finishing before it can work as a whole, there's not much left to do, but you wouldn't be able to make a working game yet cus of the bits missing.
I will release it as soon as it's ready, but it won't be free, the price I'm thinking of is £50 \ $70. I wanna hear people's opinions about this. I think its very reasonable for the amount of things you get, and affordable by pretty much anyone, plus my aim from a business point of view is to make a small income from something I really enjoy doing. Last edited: May 3, 2018 13. ### KentaeMember Joined: Sep 24, 2016 Posts: 98 Well, if this can do all that I want it too I'd easly say that it would be worth that price. (not that I can afford it right now but hopefully I can by the time it's released ^^) By the way, I've come up with a few more questions. Will I have to create my full game, so to speak, in this programme? Or is it just for preparing assets that you then load into a normal GMS project? Assuming it's the latter; Can I add shader effects to an animated model in Blender and have those effects follow the model into my project in GMS using your programme? Or will I have to sort of rebuild the effect in GMS? (Not that this is a problem for me at this point and it sort of brings me to my next question) Can I import an animated model to my project and add my own custom shaders to it there? Just trying to figure out what my workflow will be like if I decide to get this ^^ And I think that's it for now ^^ Can't wait to see some more updates on this, hopefully soon Joe Ellis likes this. 14. ### Joe EllisMember Joined: Aug 30, 2016 Posts: 744 Well there's 2 main editors, the map editor which is like a 3d replacement for the room editor, and the model editor, which is completely optional whether you wanna use it or just use blender etc. You can import a model and add the shader effects after you've imported it, the editor has full control of all the uniforms and samplers in each shader (It basically reads the shader file and interprets it, finding each uniform) You can import the materials from the fbx, however this only imports each material, the attributes and the values, and the outcome of how they look all depends on the shader and which uniforms the values are mapped to. So this option could be useful in some cases if you've set up a very complex and precise \ fine tuned material, but in most cases you may aswell just import the model and set the shader up inside the editor, as you can see exactly how it's gonna look in the game with the particular shader you've chosen. --side note, you can also import a model split into meshes if you need several different materials. The shader settings can also be altered per object, rather than per model, meaning each object using the model can have different settings for the uniforms & textures, and also work per vertex buffer, if the model has several. The game's levels need to be made in the map editor, and consist of 8 main object types: • Entities - which use a standard gamemaker object with a 3d model, shader settings and a list of variables (which can be set in the map editor) • Points - Simple coordinates that are built into the map and can be accessed any time by name or index, useful for spawn points or places a character should walk to. They can also contain rotation and scaling values for instance making a character face a certain direction when it's spawned. • Areas - basically a cuboid (that can be irregular) that entities get logged into when they enter it, (not all entities, you get to choose which ones are checked) this can be used for activating events when an entity enters a certain place, like a trigger. • Tracks - these are basically 3d paths, I would've used the word path but gamemaker already has loads of functions for this so track was the next best thing lol • Cameras - these are optional, you can use an entity to do the same thing, but most of the time, you want a camera to just have one function and follow the player in some way, so with these you can set the step event, make them follow a track, and also which "render_state" they use. • Render States - this is basically a list of stuff that gets rendered in the draw event, render states allow you to choose exactly what you want to be rendered at what time, so they make stuff like ignoring invisible places really easy, and rendering only the current place the player is in, which I don't need to say is gonna be so much better for performance. They're also incredibly quick to switch between, as they're all pre-compiled during the map loading process. • Render Targets - this is a fancy word for rendering to a surface, they automatically set the surface up for you, allow you to assign a camera to render to it, and also allow you to set it as a texture in a model. Many juicy things are possible with these, deferred rendering, render to texture like cctv cameras, water refraction \ reflection, mirrors, shadows, the light shaft thing, ambient occlusion, sub surface scattering, you name it • Lights - these just contain lighting properties for the light, direction, radius, color, brightness, and get compiled into a uniform array, which can then be read in a particular shader, there are several different formats, revolving around the shaders that read the arrays, but I've(or will) write all these shaders and indicate which format each shader uses. All of the objects' actual ai and stuff is meant to be coded in gml as you normally would do, and you simply assign the object to the "entity", just the same as you assign a model. I'm gonna include alot of starter scripts and templates like a 3d platformer, first person, topdown, vehicles and lots of rendering examples. Most of the 3d model handling and rendering side of things is automatically handled within the engine, so you don't actually need to code any of that, you just use the ui and menus to define everything. There are a few functions which are intended to be used in "game code" that control things like switching animations, models, shader uniforms, aswell as collision scripts which all revolve around the system I've built for "collision meshes" which are attatched to each model. These include: • Spherical collisions, where an entity is the sphere, colliding with the mesh, very precise and can return the angle \ normal of the collision, the surface normal and the up vector which can be used for making the entity bounce at a realistic angle or slide along it. • Lines intersecting triangles, useful for vehicles, and things that are rectangular \ rigid, there'll be a few combo methods with this, for say a rectangle or cuboid consisting of several lines. • Getting points on a triangle, for instance the place an object would land on the floor, or the triangle it's facing. • And several others that work primarily in 2d, but use the z axis \ coord, as there are several situations where this is all that's needed, and is alot quicker than the full 3d methods All the collision meshes are split into cells, which makes the checking process fast as it only needs to check a few triangles at a time. Shader uniforms can also be controlled in realtime by entities, by linking a uniform to an entity's variable, this makes animated uniforms possible, like switching colors, flashing lights and animated textures. I think I've covered every possibility with the system I've built, allowing multiple materials per model or object, the only thing that is restricted is using more than one shader per object, for that you'd need to make 2 objects that render in the same place, but this is pretty easy to do and that rare that its ok to have to do that now and again. It just didn't make sense to have this as a standard feature as the whole system would've had to be built differently and would be less efficient when rendering objects without multiple shaders per model. Wow, that was alot of information, just wanted to be thorough and here's some pics of the actual gui: Nux and Nocturne like this. 15. ### KentaeMember Joined: Sep 24, 2016 Posts: 98 Wow! I'm just blown away here, can't wait to test this ^^ The collision system you're talking about here, will that work well with, say, an open world game? Like one where the world is fairly large. And one final question, and this is probably the most important... Have you set a release date yet? Joe Ellis likes this. 16. ### Joe EllisMember Joined: Aug 30, 2016 Posts: 744 No but I'm hoping for a June release Yes, the collision system would work well for this, cus all the collision meshes are per entity, which have a bounding box check first before the 3d collisions start, so you can easily split the map into several pieces of terrain, or use area triggers that set certain parts of the level to be checked at a time 17. ### zendrawMember Joined: Jun 20, 2016 Posts: 1,317 wow your also working with 3d, and what a great jobe you have done! as im also trying to work with 3d im very intrested in this project of yours. so far i havent seen a download link. what are your plans for this project? the things you mention are very desireable for 3d users in this community, 3d animating being the most wanted. best regards! Joe Ellis likes this. 18. ### lolslayerMember Joined: Jun 23, 2016 Posts: 651 Well, if you really want to be try hard, you could first make one model of all the light shafts, then split it up into convex shapes, and then draw those shapes one by one on the two depthmaps and immediately calculate and store the results on another surface before another convex shape draws on the two depthmaps But then again, you really need to be a try-hard to do that Also, what animation formats does your system support? Joe Ellis likes this. 19. ### Joe EllisMember Joined: Aug 30, 2016 Posts: 744 Thanks, I'm planning on releasing it on the marketplace as soon as its fully backwards compatible, so that new updates wont affect users' project files. The updates would mainly be extra tools, effects and optimizations. Oh thanks, I hadn't though of that. That would be useful Animations can be skeletal, vertex keyframe (merging between vertex buffers) and vertex texture fetching. Vertex and skeletal animations can be created and edited in the model editor, you basically edit the model or skeleton and "capture" that state as a frame. Currently only skeletal animations can be imported from FBX, but these can be baked into vertex buffers in the model editor. You would be able to import each frame of a model and merge them into an animation, provided that the vertex and triangle layout is exactly the same with just the vertex positions being altered. I haven't developed many things with texture fetching yet but the function is there that allows you to set and read textures in the vertex shader, so theres all kind of effects possible with that if you blend between images or color channels, like moving terrain, water, wobbling jelly, even mapping each vertex to a pixel would be possible, to build different frames into images and pass them in, but this feature probably won't be out in the first version, I'm not sure, I know how it'd be done, I just don't want to prolong the initial release. Nocturne likes this. 20. ### zendrawMember Joined: Jun 20, 2016 Posts: 1,317 do you plan on releasing it free or paid? and if paid about what sum are you thinking of to charge the customer? 21. ### Joe EllisMember Joined: Aug 30, 2016 Posts: 744 I said earlier in the thread, but it's probably hard to find it amongst all the other stuff lol, I'll put it on the original post. £50 \$70. I wanna hear people's opinions about this. I think its very reasonable for the amount of things you get, and affordable by pretty much anyone, plus my aim from a business point of view is to make a small income from something I really enjoy doing.

Nocturne likes this.
22. ### zendrawMember

Joined:
Jun 20, 2016
Posts:
1,317
well i dont think it wuld be affordable for every1, not for me atleast.
my personal oppinion is it wuld be a struggle if you want to profit from it, atleast in this community. plus you have a competition that gives his 3d tool for free.

Joe Ellis likes this.

Joined:
Aug 8, 2017
Posts:
215
$70 seems a bit much, at least for me. Would it be a one-time purchase? Or a monthly/yearly subscription that you have to pay for every time? Joe Ellis likes this. 24. ### Joe EllisMember Joined: Aug 30, 2016 Posts: 744 Thanks, I will take your opinions on board. It will only a one time payment, and you'll get new updates free forever, but I might release it for £30 \$40, I don't really wanna go any lower than this for the amount of time I've put into it, and if you paid a contract programmer to do this, you'd be paying him like 1 cent an hour for that price

Nocturne likes this.
25. ### Micah_DSMember

Joined:
Jul 19, 2016
Posts:
454
£50 \ \$70 seems very reasonable to me, especially if things are optimized nicely, well-featured, and properly documented.

Joe Ellis likes this.
26. ### lolslayerMember

Joined:
Jun 23, 2016
Posts:
651
NP

And thanks for the info, sounds very interesting

Joe Ellis likes this.
27. ### TheSnidrHeavy metal viking dentistGMC Elder

Joined:
Jun 21, 2016
Posts:
450
You've made an FBX importer? That's amazing! I've looked around on the webs, but haven't found a proper format specification yet. Only people attempting to decode it, and posting half an interpretation of it
Does it support the ASCII version or the binary version? Or both?

28. ### Joe EllisMember

Joined:
Aug 30, 2016
Posts:
744
It supports all the format versions from 6.1 to 7.5, both binary and ascii work from what I've tested.

I didn't make it myself, I paid a programmer I know to do it, @dphsw
He gave me the dll which includes around 100 functions to import & export all the different types of data contained in an FBX file

I just own distribution rights, so it's not my place to decide whether it could be released online for free, (if it were to be included in your program)

So I'd get in touch with him if your interested.

TheSnidr likes this.
29. ### Joe EllisMember

Joined:
Aug 30, 2016
Posts:
744
The skeleton builder is up & running, and I'm really happy with how easy to use it is,

It works with standard xyz euler angles, and I've made rings that show you where the bone will move to when rotated.

You're able to rotate the angles using the arrow keys (by default)

up\down = y rotate (pitch\elevation\)
pageup\pagedown = x rotate (roll\twist\bank)

You can also press + & - to control the length of the selected bone \ distance from the parent

All of these functions will also be controllable with the mouse by clicking & dragging on each element.

I'm also planning on making a mirror function where you copy a strand of bones, like the shoulder and arm, then transformations apply to both sides, this'll be really useful with getting the bind pose to be equal.

Now it's time to get this thing animated!

I'll upload a demo of this soon..

30. ### YanBGMember

Joined:
Jun 25, 2016
Posts:
569
Looks great! Reminds me of 3d modeling software.

31. ### Joe EllisMember

Joined:
Aug 30, 2016
Posts:
744
Yeah I could actually that's a good idea, I'll make several template skeletons & animations that you can load into models.

Abdur Olajuwon and orSQUADstra like this.
32. ### Joe EllisMember

Joined:
Aug 30, 2016
Posts:
744
No screenshots this week, it's been hard to make any cus the engine is currently down due to adding some improvements

Here's a list of new things that have been added:
• The rendering system has been improved to support several shaders per model, one per vbuffer, and improved overall performance
• The model format has been improved and made saving and loading faster and smaller file sizes
• Added materials, which work as shader uniform & texture presets, which can be assigned to any mesh per model

There isn't a whole lot left to do now, things that still need to be completed are:
• Skeletal animation & rigging editor
• Fbx importing of skeletons and animations
• Model editor tools need finalizing and primitive shapes: Prism, ramp, sphere
• Lightmapping
• The Manual
• Example\Template projects & object presets

33. ### lolslayerMember

Joined:
Jun 23, 2016
Posts:
651
How did you get it to be async?

34. ### Joe EllisMember

Joined:
Aug 30, 2016
Posts:
744
By async I meant that the file gets loaded gradually and the game won't freeze while its loading, so its just done with an object that measures how much frame time is left and works until there is no time left, I know that async normally means completely not in sync with the rest of the program, but most of the async functions in gamemaker, like buffer load async, are actually synchronous and perform the task gradually, so the name ties in with these

hamdrax24 likes this.

Joined:
Jun 23, 2016
Posts:
651
Very nice

36. ### Joe EllisMember

Joined:
Aug 30, 2016
Posts:
744
This is sort of a last moment thing.. but does anyone have any particular requests that they'd want to be included in the first version, cus release is imminent.. lol

37. ### lolslayerMember

Joined:
Jun 23, 2016
Posts:
651
Give us a full list of what the first release will support first so that we won't request an existing feature

38. ### cccooldeanMember

Joined:
Nov 30, 2016
Posts:
5
I've lurked on these forums for a long time, but I just gotta say.
Oh my god, the 3D community around gm is way bigger than I thought it was,
and also, you are my favorite person now.
Thanks for being the first person to finally try this gargantuant task! I can't wait to see more!
sO EXCITED

Joe Ellis likes this.
39. ### AmonMember

Joined:
Sep 13, 2016
Posts:
192
£50 is a great price. Let us know when it is released. It is for sure a definite purchase.

Joe Ellis likes this.

Joined:
Sep 13, 2016
Posts:
192
Bump

41. ### The-any-KeyMember

Joined:
Feb 2, 2017
Posts:
1,477
I would like to take the step into 3D, again. (Been working on 2D when I started with GM but coded in 3D in Macromedia Director)
But I have not found any good 3D extension on the marketplace that can handle import or create object, collision, animation, camera following fast enough in GM, yet

Last edited: Jun 3, 2018
Joe Ellis likes this.
42. ### KentaeMember

Joined:
Sep 24, 2016
Posts:
98
For as long as I am able to rig and animate in blender 3D, export as FBX and convert the file into something GMS is able to understand.

Attach object (like weaponary or armour) to bones via GML code.

And interpolate between animations, also via GML code.

I'm absolutely fine ^^ Can't come up with any more functions that I personally need at the moment ^^

Really looking forward to testing it out

Joe Ellis likes this.
43. ### ½ a cupMember

Joined:
Jun 5, 2018
Posts:
17
Amazing work! You'd be crazy not to charge a premium price for this.

Does this work on all exports or is it custom DLL based?

Joe Ellis likes this.
44. ### Joe EllisMember

Joined:
Aug 30, 2016
Posts:
744
It uses 3 dlls:
• Non-sandboxed file handling
• The fbx importer
I'm gonna look into converting them to other platforms, but only the texture dll is actually needed for a final game, and it'd be easy to bypass this and just use textures from sprites or backgrounds instead, but it's alot more handy using this dll so I'm definitely gonna try and convert it. I'll hopefully get this sorted in an update but the initial release will be windows only.
I'm especially interested in getting Warp3D games to be exportable to the nintendo switch. I don't know if the nintendo switch exporter converts dlls or not, I hope it does, or is easy to convert them

I made a function for doing this: bone_attatch(bone_index, instance_id)

If you call this within an character that has a skeleton, it'll attatch another instance "instance_id" to the bone,
it gets the bone's current absolute transform matrix for that frame ei. its position from the current frame of animation just before it gets multiplied with the bind matrix and sent to the shader, and multiply it with the calling instance's transform matrix, then set "instance_id"'s transform matrix to this.

Example use:

In character step event:
Code:
right_hand = bone_get_index("Right Hand")

bone_attach(right_hand, obj_sword)
There are other functions to do it in other ways but this is just a direct and handy combo function.
To do it from the sword's step event you'd need to get the character's right hand position with bone_get_absolute_matrix(instance_id(character), bone_index)

eg.
Code:
bone_index = skeleton_get_bone_index(character.skeleton, "Right Hand")

transform = bone_get_absolute_matrix(character_id, bone_index)
This way would be more problematic though cus if the sword's step event gets executed before the character's the sword would always be one frame behind, so you'd have to make sure its in the sword's end step and the character's animation is run in the normal step.

Alternatively you can do it in this one line:

sword.transform = matrix_multiply(character.transform, character.bone_absolute_matrix[right_hand])

But that's gonna be confusing for beginners to remember which is why I made the other functions

Last edited: Jun 5, 2018
Kentae likes this.
45. ### Carl NylanderMember

Joined:
Jul 21, 2016
Posts:
212
This looks amazing, sign me up!

Joe Ellis likes this.
46. ### Joe EllisMember

Joined:
Aug 30, 2016
Posts:
744
Had some fun playing around with the model editor now its back up and running.
These pics aren't anything special, I need to get better at modelling,
but I do like how easy it is to make low poly stuff,
which was the original plan for the model editor, and its almost working exactly how I imagined it

FROGANUS, TheSnidr, ½ a cup and 4 others like this.
47. ### YanBGMember

Joined:
Jun 25, 2016
Posts:
569
I like them, the textures look good too. Getting better is just putting more time and making it high-poly. Although i am using models for 2d and i'm not sure how heavy it will become for 3d engine.

Joe Ellis likes this.
48. ### Joe EllisMember

Joined:
Aug 30, 2016
Posts:
744
Thanks, I like the style, this is the style I'm going for in one of the games I'm gonna make, abit like rayman 2 and spyro, I want it to look alot better than this in the end, but I'll just keep practicing and pick up techniques to hone the style
The textures are all from bitgem, I wanna end up making my own with similar style to these

A few more pics here:

Zek and hamdrax24 like this.
49. ### jake12345andwdMember

Joined:
Sep 30, 2016
Posts:
14
Would you be able to use the models and animations without all the other parts, so you could have your own path finding or collision detection, because having an easy to use animator designed for GameMaker has already sold it to me (although the other stuff sounds amazing too).

Joe Ellis likes this.
50. ### Joe EllisMember

Joined:
Aug 30, 2016
Posts:
744
Yeah it should be pretty easy to just use certain parts, once you load a model using: model = model_load(filename), it returns the model data structure to the variable you chose and you can then assign the model to any number of objects you want and if the model has animations these are contained inside the model and its just one line to set which animation each instance uses.