This week was the last time we could spend energy on the class project hand out because our production simulation constraint #2 is now underway (which is as of now decoupled from the Academia contest). We will thus have two big projects to do at once. As a priority, I had to polish the animations and do the particle effects that would be triggered by functional mechanics in game. In the end, I ended up doing many more tasks than I had predicted. We had a lot to do in very little time and we knew that our programmers would not be helping us (except one that works very fast) because of exams on their side. We braced for impact and started working. We knew that to progress fast, we needed to be together at every single steps and that's what we did. We totaled around 30 hours of Skype connection with our programmers to get the back and forth between art and functionalities super smooth, keep track down the list of priorities and get the little time consuming problems out of the way.
Skinning
I didn't realize it until last week but the skin was horrible on both new hi-res meshes. I had made a big mistake when skin wrapping and managed to salvage some of the intact remains to save a couple hours of additional skinning. The end result is okay but the shoulder area clearly could have been better in arms-up poses.
I had asked Ian to make a nice spear as designed that would replace the ugly cylinder placeholder some time after.
I had asked Ian to make a nice spear as designed that would replace the ugly cylinder placeholder some time after.
Animation polishing
It was the last week and the animations were still in blocking-in stage so it was the first thing on the menu. Even given my animator status, I wanted to spend minimal time on the animations because the game as a whole was still in embryonic stage and awesome animations were not going to pay off more than other critical features. Basically I animated what was not animated and tweaked what was horrible. It was sad to bring the quality to a lower level than I'm used to but I had to cut the meat somewhere and tagged the rest of the animation pipeline as non-essential.
NOTE: Untouched animations are not in this video.
NOTE: Untouched animations are not in this video.
Animator
The amount of animations I had to retouch made me realize how much of them were actually not implemented in the blend tree itself (aka the Mechanim Animator). I had set up a basic animator on the first week of production but had no clue how much work I could do that didn't need a programmer. I asked an animator from another team for guidance on how it worked, spent some time on tutorials and skyped with the programmer in charge of the anim implementations. I told him all that I could do for him and he told me how not to break his existing code and to understand it in return. I never played with blend trees before so this was a very fun and satisfying part.
Toward the last hours, I realized that the death and spawn animations (basically the animation system loop) was not triggered in game yet but I needed to see them in game nonetheless. Our programmer then faked the triggers to a keyboard shortcut that will later in production be replaced when the player actually dies and re-spawns for real because the main data structure that manages player states/network/skills was still in testing stage.
Toward the last hours, I realized that the death and spawn animations (basically the animation system loop) was not triggered in game yet but I needed to see them in game nonetheless. Our programmer then faked the triggers to a keyboard shortcut that will later in production be replaced when the player actually dies and re-spawns for real because the main data structure that manages player states/network/skills was still in testing stage.
Shading and particles
Most of the time spent here was to build-up the shader for the particles still to do. I built a multi-textures UV system that could select a quadrant of a UV so that for example 4 different particle diffuse variations would be called from a single 2X2 quadrants texture for a single RGBA channel. This way, a total of 16 texture variations could be obtained with a single 2X2 texture tile. But we only had time to do 4 variations for now on one channel. The possibilities become endless if you think of 8X8 textures...
Once the shaders where done, I designed the particle effects on paper and quickly realized the amount of work required to make them work. We knew that only direct attack spells would be enough for the presentation so I did not spend time on designing Area of Effect or Special spell effects. I then asked Ian to help me out because I had to do the materials and would not have time to build the particle systems after. I showed him how Xffect worked and pointed him at some tutorials while I built the materials for each effect layers: Fire, Air, Earth and Water. The programmer in tandem made them work in game and sent us discrepancies when problems occurred.
Then had to make a list of all the parameter names and values that controlled the color of the characters so that we could differentiate both the team of the player (cloth color) and its elemental class (crystal, skin and eyes color). I sent the values to Ian and he placed them in the newly scripted object that accessed them. Speed was in our favor!
Toward the end when all the level dressing was done, I asked Antoine to do the terrain texture that would be separated in 6 diffuses so that they were ready when I would be done assigning/tweaking materials to all assets. It was basically my job to set the colors and mood of the whole level. Such as it was for lighting up the scene as well...
Then had to make a list of all the parameter names and values that controlled the color of the characters so that we could differentiate both the team of the player (cloth color) and its elemental class (crystal, skin and eyes color). I sent the values to Ian and he placed them in the newly scripted object that accessed them. Speed was in our favor!
Toward the end when all the level dressing was done, I asked Antoine to do the terrain texture that would be separated in 6 diffuses so that they were ready when I would be done assigning/tweaking materials to all assets. It was basically my job to set the colors and mood of the whole level. Such as it was for lighting up the scene as well...
Lighting
I spent some time to light up the scene's shadowy areas along with their crystals and faked an "in game" moment where both teams had captured the 3 map center control points (2 blue - 1 red). I wanted to make sure that no matter the player's location on the map, you knew which team controlled what control point based on this lighting, even if the control point itself was out of sight. The map center height fog would inherit the team capture state as well. This step improved the overall look of the map tenfold! The deferred lighting rendering helped keep performances to a surprising speed.
I sadly learned that ShaderForge did not support deferred rendering and its pixels are forward rendered instead. Even worse, it officially breaks the transparent shaders that have a LOT of Z-sorting issues. Since particles are just that, we will see them through any geometry without culling. It will be our choice whether to spend time converting the level to forward rendering and build lightmaps at the cost of spending time on gameplay features or to keep rendering method as is and present at Ubisoft a prototype with visual glitches. Early renderer conversion testing is in order to probe the feasibility of either choices.
Menu
I spent half an hour adding the menu's background, post-effects, lighting and character shading. This time was well invested but surprisingly had set a mood that was not present in the game and disappointed some. Further improvement of the level's visuals and art direction should smooth out this transition.
Cutting the meat
We were so deeply focused on little details at one point that we didn't realize how crowded the level dressing had become. We couldn't even move around the map freely anymore without hitting an object collision here and there or preserve the possibility to do spell alignment combos for lack of space. It took our programmer a scream of surprise on his scene update to realize it. It was hard for me to tell Antoine to delete 3 hours of his placement work just before the handout. But it was worth it in the end and we all acknowledged it.
As a final gesture, I compiled the final build, made sure that the final build would be stable enough and helped test it on all computers in class for the presentation.
As a final gesture, I compiled the final build, made sure that the final build would be stable enough and helped test it on all computers in class for the presentation.
In the future
Things I did wrong:
- I did not ask around for ways to improve my animations.
- Attention to shaders was too much compared my official animation tasks.
- I blamed Unity's for lack of useful functions when they actually existed (ex: multi-material managing, windows duplication/docking/locking navigation).
- Task scope estimations was way off. Everything was patched up very fast and no true polishing time was spent at all. This was expected in a 3 artist team.
Things I have learned:
- I learned how Unity works overall and in combination with perforce's VERY weird integration.
- ShaderForge shading system and Xffect particle system.
- A little bit of C# scripting
- Game animations and real-time blending was completely new for me and eye opening.
- I had forgotten how colleagues from other teams can help you out on expertise you have remote knowledge of. Colleagues are gaining experience on their specialization faster and faster, so they become a GREAT time saver!
- I did not ask around for ways to improve my animations.
- Attention to shaders was too much compared my official animation tasks.
- I blamed Unity's for lack of useful functions when they actually existed (ex: multi-material managing, windows duplication/docking/locking navigation).
- Task scope estimations was way off. Everything was patched up very fast and no true polishing time was spent at all. This was expected in a 3 artist team.
Things I have learned:
- I learned how Unity works overall and in combination with perforce's VERY weird integration.
- ShaderForge shading system and Xffect particle system.
- A little bit of C# scripting
- Game animations and real-time blending was completely new for me and eye opening.
- I had forgotten how colleagues from other teams can help you out on expertise you have remote knowledge of. Colleagues are gaining experience on their specialization faster and faster, so they become a GREAT time saver!