For awhile I've wanted to make my own "thing" in UE4. I've been interested in the blueprint system for a while now. My brain likes visuals so carefully connecting logical spaghetti into spaghetti sounds like something I could learn to do.
I actually started making a 3rd person co-op game, where you have to switch between characters to solve puzzles and evade enemies, then quickly I then started to realise that I wou;d never finish it and thus RetroBlast was born!
Because RetroBlast is going to be heavily focused on learning UE4 and attempting to develop a small prototype I created a separate blog to document how I solve problems encountered during development, I'll post periodic updates here too.
Batman: Arkham Knight
First AAA title!
I was hired by Rocksteady to work Batman: Arkham Knight, due to my previous experience I was placed with the Player code team as their embedded QA.
I was tasked with covering Batman navigation, all the gadgets and gameplay interactions, the fear/predator takedown stealth system, freeflow combat, NPC/Vehicle AI and all the vehicular combat and navigation. As a result I gained a great deal of understating in regards to how gameplay features are designed and developed.
One of the most rewarding aspects of working with the player code team was learning how a single feature is developed by various departments simultaneously.
I was hired by Rocksteady to work Batman: Arkham Knight, due to my previous experience I was placed with the Player code team as their embedded QA.
I was tasked with covering Batman navigation, all the gadgets and gameplay interactions, the fear/predator takedown stealth system, freeflow combat, NPC/Vehicle AI and all the vehicular combat and navigation. As a result I gained a great deal of understating in regards to how gameplay features are designed and developed.
One of the most rewarding aspects of working with the player code team was learning how a single feature is developed by various departments simultaneously.
Darkstorm - Maya Skinning Tip
I finished building the rig which should be compatible with all our meshes.
Unfortunately when I started making the rig I had only a single mesh to approximate the location of the joints and with most approximates it turned out to be pretty good for everything expect one area.
The hip joints were slightly out of position, I repositioned the hips and spine to accommodate the change I needed to make this moved the knee bone out of place so I placed locators so I could snap the bone back into it's original place after making the bone adjustments.
I set up the project so that the Control Rig and Mesh are both referenced into a single file where the character can be skinned this
This way the character artist can make last minute tweaks/ work on the UVs while I work on the skinning.
But of course on moving the bones I broke the skinning for all of my characters.
After moving the hips this is what happened. Not so attractive, this mesh has pretty good skinning (Minus the now broken legs) on it already and I didn't want to lose the work have done skinning so far so I used a little trick.
Export skin weights.
In Maya, you have the ability to export out the skinning information on a vertex to a file with images.
If you're getting issues at the end, try exporting a larger size weight map (Done by clicking the little square next to export skin weights) there is a bug in Maya where the import File extension is set to one that isn't the same as the extension we used on exporting the skinweights, on import switch to "all" and select the .Weightmap file
After a few seconds (Or minutes if you have a large number of bones) of watching maya match vertex to bone, everything should be back to normal.
You have successfully moved bones and reimported skin weights!
Also as a little bonus. The .weightmap file can be opened in a text editor and edited.

This can be very useful in circumstances where a mesh has changed and old weight map will throw an error as the vertcount/uvw's have changed, delete the line associated the old verts with and bam! It works, meaning you can also import skin for specific areas.
Lets say somewhere along the line I skinned all the fingers perfectly but I mistakenly removed the skinning for the feet, well export that old weightmap, edit the file to remove the fingers, reimport and suddenly I can undo a mistake I made without noticing...
Unfortunately when I started making the rig I had only a single mesh to approximate the location of the joints and with most approximates it turned out to be pretty good for everything expect one area.
The hip joints were slightly out of position, I repositioned the hips and spine to accommodate the change I needed to make this moved the knee bone out of place so I placed locators so I could snap the bone back into it's original place after making the bone adjustments.
I set up the project so that the Control Rig and Mesh are both referenced into a single file where the character can be skinned this
This way the character artist can make last minute tweaks/ work on the UVs while I work on the skinning.
But of course on moving the bones I broke the skinning for all of my characters.
Export skin weights.
In Maya, you have the ability to export out the skinning information on a vertex to a file with images.
- Export your skin weights.
- Detach the skin from the control rig bones, this will remove the deformation caused by the bones moving.
- Add a basic skin bind
- Re import the skin weights.
If you're getting issues at the end, try exporting a larger size weight map (Done by clicking the little square next to export skin weights) there is a bug in Maya where the import File extension is set to one that isn't the same as the extension we used on exporting the skinweights, on import switch to "all" and select the .Weightmap file
After a few seconds (Or minutes if you have a large number of bones) of watching maya match vertex to bone, everything should be back to normal.
You have successfully moved bones and reimported skin weights!
Also as a little bonus. The .weightmap file can be opened in a text editor and edited.
This can be very useful in circumstances where a mesh has changed and old weight map will throw an error as the vertcount/uvw's have changed, delete the line associated the old verts with and bam! It works, meaning you can also import skin for specific areas.
Lets say somewhere along the line I skinned all the fingers perfectly but I mistakenly removed the skinning for the feet, well export that old weightmap, edit the file to remove the fingers, reimport and suddenly I can undo a mistake I made without noticing...
Darkstorm - Pipeline/Scripting
I've gotten to the stage on this project where some really basic placeholder animations need to be exported so the programmers can get a head start setting up the pawn in UDK. The process for exporting animation was
The other problem that popped up was trying to remove the reference from the scene without using names, I quickly found that
- Merge the reference into the scene
- Bake the animation on to the skeleton
- Delete the control rig
- Export all using a custom preset.
$boneList = `ls -typ joint`;
select $boneList;bakeResults -simulation true -t (`playbackOptions -q -min` + ":" + `playbackOptions -q -max`) -hierarchy below -sampleBy 1 -disableImplicitControl true -preserveOutsideKeys true -sparseAnimCurveBake false -removeBakedAttributeFromLayer false -bakeOnOverrideLayer false -minimizeRotation true -at "tx" -at "ty" -at "tz" -at "rx" -at "ry" -at "rz";select -all;duplicate -rr -un;loadUnloadReference(0, 0);select -r ctrl_MasterControl;Delete;Export;
A quick breakdown of the script.
- List then select all the bones.
- Bake Animation with the time set to the max and min of the time range (only on the translate and rotates)
- Select all the objects in the scene.
- Duplicate all the objects which converts them from referenced objects into scene objects
- Unload all the references
- Select the Nurb Master controller
- Delete the controller
- Open the export dialog.
1 Click Animation Exporting.
The hardest parts of making this was baking the animation based on the to the scenes current timeline and unloading the reference.
When using the command bakeResults you have to set a -t (time) attribute with the start and end frame listed. I read on autodesks site that it is possible to set time to -t ":" for it to specify all keys but mel spits back an error saying it must be set, after a quick search I found someone else had created a similar bake animation script and his work around was using the playbackOptions -min and -max functions which works!
When using the command bakeResults you have to set a -t (time) attribute with the start and end frame listed. I read on autodesks site that it is possible to set time to -t ":" for it to specify all keys but mel spits back an error saying it must be set, after a quick search I found someone else had created a similar bake animation script and his work around was using the playbackOptions -min and -max functions which works!
file -removeReference "Guard_Rig.ma";
Would remove a reference if you used the files name and that
file -unloadReference Guard_RigRN;
Would unload the reference if you used the namespace.
But as there are a few different characters I needed to find a way to remove any reference, after right clicking and removing a reference from the Outliner I found that the script editor was using the command loadUnloadRefence(0, 0) so I used that and it works!
The only things I would do to this script right now is create a proc for it, something like.


