This is a post written by our talented 3D artist Denis Keman. We'll be publishing a series of posts by Denis, which will cover his creative process, and provide insight into how game models are made.
Who am I ?
Hey everybody, my name is Denis Keman. I am a 3D modeler and a 3d generalist. My YouTube channel (Denis Keman - "very creative i know") is all about 3d modeling. I was lucky enough to get a chance to work on the upcoming game Spy DNA. I was hooked on this project because of the old “Jagged Alliance” feel that it had. Then I met the awesome team at Shy Snake Games and we just hit it off instantly.
Now with that short intro out of the way, i would like to tell you a bit about my workflow. And what i use to do the things i do.
What do i use in my workflow ?
First things first, what you need to know is that 3D work is basically art. To understand it, you need to know the tools that were used.
In the field of 3D modeling you have a wide array of different tools like Blender, Maya, Rhinoceros, Max etc. All of these are 3D modeling packages, and the one that I use is 3DS Max. I created the high poly and the low poly models in 3ds Max, and texturing was done with Substance Painter.
If you are not a 3D modeler, you might ask what’s the difference between high and low poly model. Well it's basically two models with different levels of detail for the same thing. The idea is to get the high poly details onto the low poly model (the one you see in game). That way you get a good-looking model that doesn’t eat up all of your system resources when it’s rendered in-game. In order not to get too technical I will leave that for a future post.
The creative process
Getting from point A to point B is not always a straight line, especially in creative work. The first thing that needed to be modeled was the weapons that will be used in-game. The idea here wasn't to simply recreate an existing real-life weapon, but rather to design a unique one.
Base level preview
Wanting to take advantage of the great outdoors rendering capabilities of Lumberyard, we've "moved" the Spy DNA base to a small island, which can only be reached by sea or air. The island will also feature a helicopter landing pad and an extensive training facility for the Spy DNA agents to use between missions to hone their superhuman skills.
Here's a screenshot of the pier for you while we're working on the base level.
Spy DNA now has a Steam Greenlight Concept page
Folks, we've got some exciting news for you! Spy DNA now has its very own Steam Greenlight Concept page, where you can discuss it with other Steam users and provide your feedback to the team.
We watch the comments very closely and reply to questions and feedback as they come in.
So go ahead, visit Spy DNA on Steam and give us a thumbs up if you like what you see!
Animating with Lumberyard
We have been hard at work on animations and we finally have something to show. Getting to this point meant processing close to 400 animation clips (so far) and importing them into the engine. This is more than double the number we were previously using.
With Unreal we used in-place animation. What this means is our code would would move the character and select an animation to play when you give the character an order. While these activities were coordinated, they didn’t directly talk to each other. As a result you often get visual artifacts such as the characters feet slipping across the ground.
We chose in-place because it was proving difficult to get root motion working with the navigation system in Unreal. With Lumberyard we introduced our own motion controller that sits between the engine’s pathfinding code and the animation system. What this new motion controller does is turn the path into a series of animations that need to be played.
So now we are generating a sequence of animations. What root motion means is each animation we play tells the engine how much the character moved that frame. Because the animation is now the source of both movement and animation the places where the character contacts the world such as their feet are much more effectively kept in sync.
Now, even this system has limits. For example when you start movement we choose between nine animations to start the movement [straight ahead, left 45,90,135,180, and right 45,90,135,180]. This means we still need to make a minor adjustment to the character's path. We also make small adjustments while the character is moving to keep them on the path. Generally these are small enough to not be noticeable.
Before we ship we will probably have close to 1000 animation clips. As you can imagine picking the right one to play in every case is really tricky. With Unreal this was managed by creating a state machine which selected which animation to play based on the state of a character. For us this proved very difficult to make robust.
Lumberyard is driven by a database of animation tags. For example a tag state for the movement animation might be “stand”, “unarmed”, “jog”. When we ask the system to play an animation of type “move” it would search the database for an animation with the matching tags. This greatly reduced the work we had to do to manage the selection process.
Now it has not been all smooth sailing. Lumberyard makes it much more time consuming to import our animation clips. As a result we have only imported the most important animations so far. The Lumberyard team are working on improving the import process, so we will return to this later, when they finish their new .FBX pipeline.
The end result is we are rapidly converging on shipping quality for the animation system. In the next development update we will talk in detail about how we do procedural map generation.
Lumberyard
It’s been a really busy two months here at Shy Snake. We have made a few adjustments to the development of Spy DNA which we think will make for a better game. The big change is we have moved from Unreal to Lumberyard game engine. This also created an opportunity to make a few other smaller changes to the game.
We decided to move to Lumberyard because it allows us to make much more dynamic maps. Unlike other engines it doesn’t require us to pre-bake lighting to get good quality lighting on the maps. This frees us up to procedurally generate maps, allowing for a greater replay value and much more variety in missions. It also allows us to change the maps on the fly in response to player actions. This means a more destructible world.
We are mostly complete with the port of the game code to Lumberyard. AI is the last major piece left to do. At this point the UI is mostly complete, the game logic code is ported, animations are working, and we integrated the articy code for the dialog system. We are still on the same schedule as previously announced with a public demo / early access, possibly as early as December, but for sure in Q1 2017.
Animation is another area that was impacted by the change. We are switching from in-place animation to root-motion animation. What this means for the players is the characters should move in much more realistic ways. The characters’ feet should slip far less. Also we added start, stop, and turn animations so the beginning of movements will look a lot better.
The transition required us to re-import all of our art assets. We took this as an opportunity to replace our character models with higher quality models. To do this we switched character creation tools and are now using iClone Character Creator.
Same character created in Autodesk Character Generator on the left and iClone Character Creator on the right.
Now that we have worked with Lumberyard for almost two months, we have learned a lot about it. If fits very well with our code base. As we have settled in the level of productivity on our game, code is settling at a higher level that we achieved with Unreal. This means we will be able to put more effort into building a good AI for you, the player.
Now it’s not been all positive. On the art side things are going a bit more slowly. Lumberyard is an editor in transition which has created some overhead for us in making maps. In part this is offset by switching many maps to procedural generation. However, it will be a bit before we can show you the before / after of the player base. Yes, even though we can now procedurally generate maps, we can also still hand-generate them.
We will have much more on this going forward. I believe the engine transition will allow us to ship a game which is more in line with what our players expect. It allows us to generate a much larger variety of maps, allows you to have a larger impact on the map in terms of being able to destroy objects, and allows us to invest more heavily in AI making the gameplay more interesting.
Procedural maps in Spy DNA
Since shipping our pre-alpha demo, the pace of development hasn’t slowed here at Shy Snake. Even as we’ve been posting less on our blog, we’ve been working harder on Spy DNA. After reviewing the feedback from our play testers, we’re working to make the game even more engaging and intuitive to play in time for the Beta release.
What should you expect from Spy DNA when it goes to Beta? Well, for one, it will have procedurally generated maps.
This means that each time you start a mission, it’ll have a unique map, so that even if you’re replaying the level -- or the whole game even! -- you will have to work out the strategy each time you play.
You’ll encounter different buildings, different street and block configuration in cities, or different terrain and vegetation in rural areas. The items to be retrieved or civilians to be rescued will not be in the same spot either. There may be elevation changes, and the enemies may come from a different location.
Depending on the difficulty level, there may be less or more cover, and obstructions to line of sight, in addition to the competency level of your enemies.
All of this together will guarantee a unique experience each time you sit down to play Spy DNA, and it will take both Alex and Jason’s efforts to make it work.
That's a lot of boxes
Alex is already working to create architectural modules out of which the program will assemble all the buildings in the world of Spy DNA. The blocks will come in a variety of sizes and shapes to cover all kinds of structures, from family homes to military facilities and everything inbetween.
In order to make the different buildings look unique, we’ll be designing numerous materials that will change the appearance of the buildings’ surface. This way we can make our cities have all the kinds of buildings you’d expect, from residential houses with wood siding, to industrial brick structures, to stucco apartment buildings, and steel, glass, and concrete of the commercial and office complexes.
Look at that office carpet. Look at it.
When you load a level, the algorithm will combine the building blocks into complex maps depending on some pre-defined parameters, things like, is it a city or a forest? What kind of buildings if any, are there? What are the mission objectives?
If you have to restart a level, you can expect the general look and feel of the map to remain the same, while its topography changes. So if the first time you found yourself in a city, you can plan on the mission being set in an urban setting on each playthrough, but you may find yourself in what would feel like a different part of the same town.
Using procedural maps also will allow us to adjust difficulty level for each level with more nuance. If the map is static, the only “levers” we can adjust are enemy skills and numbers. With a procedural map, we can adjust pretty much every aspect of the level as needed. More cover for the party, more easily spotted objectives, helpfully positioned fire escapes for your sniper, less cover for the enemies, all this will contribute to the mission being easier to accomplish. Adjusted the other way, the terrain, vegetation, and building layout can all contribute to make the mission more challenging.
One final aspect of procedural maps is that on top of adding a lot of flexibility they also allow us to make better use of our expertise. Alex will be have more time to expand the story and create additional missions, adding to the amount of gameplay you, the player, get. We have a lot of mission ideas and now we will be able to include far more of them in the game.
We want to make Spy DNA a game that you can return to over and over, a familiar, but yet always engaging world, and procedural maps will help us achieve just that.
What do you like about procedural maps? What are your pet peeves? Tell us in the comments below. We read all of them!
Working on character creation
Character creation screenshot (work in progress): Talking to Dr. Britta Crotalus
Character creation is an important part of many games, especially RPGs, and it's a big part of Spy DNA. We're inspired greatly by Jagged Alliance here, a game that we think did the character creation really really well. In order to build a character that will be most enjoyable to play for each person, we need to figure out what the particular player's style is.
This is why after giving the player a chance to ask the good Doctor Crotalus some questions about the Spy DNA program purpose and history, we move on to a questionnaire that allows us to learn what kind of action the player is most likely to choose, and give their character a stat boost in those areas.
The screen shot above is still a work in progress, so the formatting as well as the questions and the stats balance etc. are all going to change, but not the intent: we want to make sure that you get the character that you'll enjoy playing.
What is that? Ah, yes, the perceptive reader is wondering why the screen shots appear to be in the first person perspective. That is because you haven't finished creating your character yet, and don't yet know what they look like. Once you pick your appearance, the game switches to third-person for good, but you still get to enjoy the character's view point through the body-cam on the bottom left.
Demo Complete!
We finished putting the final touches on the demo and are sending it out to a few testers tonight. Once they have had a chance to play with it and we address any issues, we will send it to a wider list.
We have also decided to make the demo available to anyone that has backed our Kickstarter campaign at Beta or higher. I.e. those that wanted an early look and were willing to put up with the limitations of early builds. It’s around 1.4Gb for the two demo levels.
One of the good side effects of working on the demo is it forced us to address some long standing bugs that we had been putting off.
Examples:
- Write a manual
- Add objectives to the maps
- Sort the dialog answers so “goodbye” was always at the bottom
- Put the status indicator over the character portraits
- Assign skills to the NPCs
We also added the end of mission screen which includes the status of the objectives, the party, and some statistics about the equipment used.
We also added an “event cam” to the game. It’s purpose is to highlight important events to make sure the player is fully aware of what is happening in the game. We will add settings for the final product so players can customize which events are highlighted.
Changes of note:
Added check marks to objective list
Made movement modes available to AI waypaths
Maps can now specify if the characters start with a weapon equipped
Hide shooter weapon in gunsight cam to avoid possibility that weapon would block view
Fixed bullet trails and sounds for some weapons
Enabled event cam for kill shots
Fixed AI bug that cause NPCs to sometimes empty the clip into a already down character
Taught AI to reload
Added medium and heavy combat armor
Fixed icons for armor
Tweaked ROF for a few rifles
Added new pistol models
Added descriptions to armor
Fixed bugs applying armor to hits
Added keyboard shortcut for previous and next target visible to selected character
Replaced generic sounds with per-character sounds
Removed occlusion check for muzzle flashes. Was causing flicker.
Greyed character portrait when stunned, unconscious, or dead
Set skills for all NPCs on demo maps
Replaced placeholder NPC models with correct models
Fixed bug causing turns for unconscious characters.
Reviewed max-texture sizes for small objects
Added post-mission summary and stats screen
Fixed bug with default aim point after a melee attack
Updated 3D queue overlay to fix bug with stuck targeting line
Fixed gun empty sound
Hide contact counts when character is unconscious or dead
Added sorting support to dialog answers
Changed default to show long answers rather than short summary
Fixed cursor hitbox for hud to resolve small dead-space area
Added skill check for spotting and rate limit spot checks