This article discusses the workflow of exporting 3ds Max's Populate characters to Stingray.
Setting an animated “Idle” character in 3ds Max
When planning to export Populate characters to Stingray, it is best to process them individually and without any other props in the scene, even if your ultimate goal is to place them in specific spots in your world, on a bench, near a bus stop etc...
If you were to place them in specific spots, then their location would be somewhat bound to that spot based on the current scene, and the location will be therefore offset from the center of the world. This can present a problem in Stingray with skeletons, previews, display culling and other factors.
Creating an idle Populate character in 3ds Max is quite easy, you simply use the Populate tab available in the ribbon. There are three standing positions available and one for sitting characters. Here we start in a blank scene and with a simple circular idle area. As you click and drag to place it in the center of the world, blue and/or pink gender identifiers appear. Let’s settle for just one character for now.
Once that’s done, you’re ready to generate the character and its motion. By default, the simulation is calculated for 300 frames. The longer it is, the larger it is on the hard drive and the more taxing it becomes for computing. We’ll use only 100 frames for this example.
After a brief computing moment, a character is generated and animated for 100 frames. If you run the animation, you’ll notice a significant jump in the motion between the last frame and the first frame as the animation is not looping seamlessly. More on that in a moment.
More characters can be created similarly, but also by adjusting parameters, namely favoring gender or groups of people chatting and shooting the breeze.
There is also a Create Seat option that lets you define a male or female character in a seated position. A reference box makes it easy to adjust the placement and rotation of a character. Simply make sure it is close enough to the center of the world.
If you don’t like a character’s appearance, whether they are seated or upright, there are a few ways you can change that. The simplest way is to select that character and use the Regenerate button on the ribbon.
3ds Max’s Populate characters are pretty low-res. This is by design, so that the scene remains manageable when you create dozens of such characters. However, you do have the option to switch a selected character to a high resolution version using the appropriately-named “Switch Resolution” button on the ribbon. The first time you do this, you will be prompted to download and install a free package to activate that option.
From there, you can switch between high-res and low-res characters with the click of a button. It is also worth noting that the bitmap associated with the character switches from a low 256x256 pixels to a higher 1024x1024 pixel resolution.
Similarly, if you don’t like the animation itself, you can re-simulate it by selecting the character and using the appropriately named Resimulate button on the ribbon. With each click you get a different motion until you hit one that you like.
Baking the Animation
Once you have settle on the character’s looks and motion, you then need to bake the animation onto the character’s skeleton in order to export it to Stingray. Be aware that once you bake the animation, you won’t be able to change it, or even change a character’s appearance and resolution settings.
To bake a Populate character’s animation, you simply select that character and then use the Bake Selected button in the ribbon. This makes the skeleton visible in the viewport and you can expand the skeleton’s hierarchy in Scene Explorer.
The topmost parent that contains animation information is the xxxCOM1 object in the skeleton’s hierarchy. If you were to select that object or any of its children, you will see the associated animation keyframes on the timeline.
Scrub the animation and notice that the character’s pose at the first frame is quite different from the last frame.
You can use Stingray to force a transition between these two poses to prevent a jump in the motion as the animation loops through. You can also make that kind of correction inside of 3ds Max before exporting to Stingray. We’ll take a look at both these workflows here.
Exporting the Animated Character
To export the animated character to Stingray, you need to select the character’s mesh and its animated skeleton. To select the skeleton, use Scene Explorer to select the topmost animated bone, usually xxxCOM1, and then right-click that bone in the Explorer and choose “Select Child Nodes”. This basically selects all the skeleton hierarchy. Do not forget to hold Ctrl and also select the character’s mesh in the viewport.
You can then use the Stingray menu to send the selection to Stingray. Assuming Stingray is running on your system, you can ensure the Connect function is enabled and then use the Send Selection function to connect the two apps.
You will be prompted to give the exported file a name and a location to save it to. You can save it into your current Stingray Project Folder.
You are then prompted for input options. Most importantly in this case, you want the Animation and Skeleton option enabled. The newly created skeleton is based on the exported file name and you want to ensure the Import Clips option is enabled. Optionally, you can choose to create a separate Animation folder.
The first thing you want to check in Stingray is display culling issues. Locate the Female_Seated unit thumbnail and double-click it to open the Unit Editor.
There, select the FemalexxxSkin_xxx entry and switch the Culling mode to Disabled. Save and Exit the Unit Editor.
Save the changes and update the thumbnail.
At this point, the character is still static. To animate it using the imported animation data, you first need to add an animation controller to the skeleton. This is done by right-clicking the skeleton thumbnail and choosing “Create Animation Controller”.
Once you confirm, a new thumbnail appears with the same name already shared by the skeleton and the character’s geometry. By double-clicking the new animation controller thumbnail, you can now edit the behavior of the motion.
By default, there is an empty animation clip. Delete it and replace it with the animation clip that was imported from 3ds Max.
In the bottom left corner of the dialog, click the Save and refresh preview button to analyze the results. You can see the animation running in the preview window and by default, it is set to loop. This is fine except for the fact that the discrepancy between the first and last frame make the animation jump in a bad way.
Make sure the Female_Seated motion clip is selected. In order to better control the loop and its transition, start by disabling the Loop option altogether. Again, save the changes and note this time that after running through the basic motion, the animation of the character stops.
To induce a loop that you can control, drag the center of the motion clip to the right until you create a transition that loops back to that same clip. As a condition, you want the transition to happen at the end of the animation itself.
Again, save the changes to analyze the motion in the preview window. This time, a transition ensures a linear passage from the last frame back to the first one. By default, the Blend Duration is set to 0.2 but you can change that to fit the current situation. Try a value of 1 to see the effect. Again, remember to save the changes in order to see them in the preview window. Exit the dialog when done.
All that’s left to do is to insert your newly animated character into the scene and place it appropriately. Note that when you now select the animation controller or the character’s unit thumbnails, you can see the animation running in the preview window. Of course, this is also true with viewport behavior once you place the character in the scene.
This transition method worked pretty flawlessly here because the character was seated with both feet on the ground and well planted. If the position of the feet changes between the first and last frames, then there may be a bit of sliding involved. Depending on how you’re planning to use the scene, this may not bother you too much but if it does, then you can do a bit more prep work in 3ds Max before exporting your model and its animation.
Let’s take a look at the lady standing up. If you followed the same procedure you did earlier, you’ll be able to bring her into Stingray but after processing the character, you’ll notice a significant slide between the end and (re)start of the animation.
So how do you remove or at least minimize that annoying effect? You do so by ensuring the start and end frames are exactly the same or at least close enough to minimize the sliding effect. One way of achieving this is by creating a ping-pong effect, by duplicating and reversing the animation so it doubles back on itself.
In 3ds Max, this is done by ensuring all needed objects are selected, in this case all the bones with animation keyframes on them. You also want to extend the animation to give yourself some room to copy and reverse keyframes. If the animation is currently set to 100 frames, you want to at least triple that. You can always readjust it later. You also want to make sure the Show Selection Range in active on the timeline, you will need that to reverse the animation.
Select all the keyframes and note that you can slide them using the selection range bar.
By holding Shift you can click and drag any of the selected keyframes to make a copy of the whole set.
Drag the selection range left handle to swipe it to the right. Keep an eye on the bottom left corner to ensure that the scaling remains at 100% so as to not affect the speed of the animation.
You can then slide back the reversed set so that it starts right after the original set. You can also stretch out the keyframes at the beginning, middle and end for slower transitions.
What’s mostly important though is that this time around, the animation data is exactly the same on the first frame as it is on the last frame and the individual bone position and rotation is such that the animation will loop flawlessly. You can in fact play it back in 3ds Max before you sent it to stingray.
Select all the bones and the character’s geometry and send the selection back to Stingray, overwriting the existing Female_Standing file. Lo and behold, the scene is updated and the standing character is now looping beautifully.
Creating Smart Assets
Still, you had to do a fair amount of work bringing this character from 3ds Max into Stingray, adjusting culling properties, adding animation controllers, adjusting animation clips and transitions and so on. The beauty of it is that once you have done all this work, you can export your animated character in such a way that you can very easily use it in a different scene.
By right-clicking the unit’s thumbnail, and choosing Export Assets, a dialog appears showing all dependencies linked to that scene unit, from the unit itself to the animation clip and controller you have adjusted, right down to the materials and textures associated with the character.
When you export that content, you are creating a smart asset that is stored to disk as a .zip file. From that point on, you can simply import that same zip file in any other Stingray project to get the same animated character in the new scene. This way of working becomes a great vessel for distributing smart assets, where other people simply need to import a single zip file to get compelling results in their various projects without having to create them on their own.
As you can see, exporting animated populate characters from 3ds Max to Stingray is quite easy and requires very little effort. Transitions can be controlled on both ends, and the ability to compile smart assets in Stingray makes it a breeze to re-use your characters in various projects, as well as share them with friends and clients.
If you feel like experimenting on your own and would like to use the scenes shown in this article, you can download them here. You will need 3ds Max 2017 or higher and Stingray 1.4 or higher to open and use the scene files.