[Music] so today i'm going to be uh talking about animating the main villain in marvel spider-man or subtitled what i'm rigging how many legs uh so as you may have heard my name is sophie brennan i'm a character td and insomniac games uh this is actually our 25th year in the games industry 25 years as a company as a pretty big milestone for a company in this industry so go as thank you a little bit about myself character td rigger whatever you want to call me i've got about seven years experience i worked on marvel spider-man obviously um that's what i'm going to talk about today before that i worked at reddit dawn on loan echo for the oculus vr and then after that or sorry before that worked on the order 1886 as you might
have gathered from the little factoid before this talk i just want to get this clarified there will be spoilers uh i'm going to be talking about the main villain of spider-man so if you don't wish to be spoiled like you're out of luck no seriously leave now if you don't want to be spoiled you've got like 10 seconds uh the game's been out since september but let's be honest here who plays video games these days anyways so now you've been warned let's uh introduce our main villain uh there we go [Music]
so [Music] do [Music] [Music]
so as you might have gathered here's our main villain uh dr octopus or known as doc ock uh who is doc hawk he's actually octavius but i mean most people familiar with spider-man might recognize him but let's talk about our dock and spider-man uh for the ps4 so he's peers friendly and father-like mentor at first he starts off in the journey with pure intentions to help the world with his advanced aesthetics uh sorry advanced prosthetics research however his work combined with his own development neurological disorder slowly turns them into our main antagonist over the course of the game we are to show the evolution of our trusted friend and boss uh transform into our greatest foe so and this would have to be one that was strong enough to challenge and match the strength of spider-man himself so a signature feature of doc is these tentacles and we wanted to foreshadow these throughout the story
uh here you can see some earlier moments in in the game before all uh turns that hint his fame and then when he does turn uh you guys can see how it goes in this clip here wait where are the arms oh wow so cool but how did you intracranial neural network neurotransmission speeds under one nanosecond faster than signals travel inside the brain never mind to an external prosthesis we did it peter no one can take this away from us okay so um now you know a little bit about the character let's talk about how he went about creating him ah so let's take a step back
and let's talk about the rig itself so doc's reg is probably one of the most complicated rigs in our entire game uh bar the faces which by the way noah alzaire our fellow insomniac and character td is doing a talk on later this week if you can go see it it's called superhumans of new york managing the many faces in marvel spider-man it's uh it's here wednesday 5 p.m go see it uh but back to these they were really complicated it was like having four extra characters attached to the back of doc uh doc was the tentacles and without them he wasn't the formidable foe that he becomes uh so they were important uh and because of that i'm going to be specifically talking about them in this talk so uh what were they going to do in general well we knew they were going to grab they were going to reach they were going to stretch they're going to grow swipe attack and even climb buildings and we had to do this all real time and all in engine and all we have in the engine at the end of the day is a bunch of joints
so how do we make them so let's go over what we had at the end first right so it was i'm sorry an animator's nightmare okay we had four tentacles obviously 790 joints 552 of them alone in the tentacles over eight hundred thousand vertices and seven hundred thousand m of them were in the tentacles and of course this was all with the biped uh rig that he was attached to so initially i wanted to create one body and one tentacle right and then have the tentacle duplicated at runtime and attached to the body this way i don't have to pay the cost for one technical engine and then only have to uh maintain and update one technical two however this poses some problems because engine side we didn't have the ability to cheaply attach and detach uh the the tentacles so and also our animal which we animators use to view
gameplay animations couldn't support multiple models at once so it meant that if they wanted to view the animations they would have to view separate windows for the tentacles and for doc which at the end of the day uh wasn't very you know useful or efficient for them so because we had a tight schedule i mean the wreck had to be done in a matter of weeks uh we i decided to take an upfront course and instead go for plan b which was everything in the kitchen sink so just chuck all in there right uh good things about it would be less less error prone easier to debug animators could view it in tools and then also all of our mirroring which an engine and uh and our tools came for free right but the con to this was it was one big mess mega asset and it would be way harder to maintain because every time i needed to make a change to one of the tentacles i'd have to do it three times over so um our first challenge actually was also like when we're building a reg right you
need to know the specifications of it like how long were the technicals how you know we didn't know that how could we solve that so my idea was to work uh in layers and to work iteratively so i gave the animators the means to stretch the reg to whatever length they needed to with the promise that later down the line i'd bring on the text seamlessly that would make it look correct in game uh and this was all done via this layered system that i have here on the top layer we have our main shape controls our secondary controls and then we have a little rigging layer don't worry about that one uh and then below that we had animator tweak controls which honestly they never if ever like really touched it was just for like little tweaks to the shapes and then below that everything below that was free free-for-all that was free game for me i could play with that to my heart's content and not affect any of the animation which means i could increase resolution decrease resolution move joints and animators uh animations would be uh unaffected
so um another thing is how do we actually build it like so i said the tentacles where um 20 meters long in the end right so in the in our rigging tool set we have the ability to specify both bind pose and rig pose and that allowed us to give the animators the pose on the left which is obviously much more easy to work with but whenever i needed to go in and edit the reg itself with one button click i could snap it back to our bind pose and edit the tentacles at their full length and why did we need to do that well because i needed to build this which was our the ability to telescope the tentacles so the stretchy one is what the animators uh started to work with and the telescoping one is the more realistic correct version of that of the tentacle uh the animators also had the ability to slide the tentacles as well so they would position the series of controls and then with one attribute
they could press uh they could dial up and down the slide and have the tentacle slide through all the controls back and forward um and and then how did the animators pose it out so the concept was pretty simple i started with big to to small shapes so the big teardrop shapes are the main controls there's the end one and the middle one you position those first you'd move on to the bigger squares which would kind of get you your middle shapes and then you would finalize your s curves with the smaller shapes um due to the way i built the ribbon sling method which is what this rig use uses at one point we had to have a decision which was uh unfortunately when the animators began to twist the tentacle um the the tentacle would flip out and go crazy at points and that was because of the way i'd set up the skinning on the spline itself uh so we decided to forego the the nice
s cards that we used to get on the top players for free to get more stability so we sacrificed um more positioning more controls for the ability to make sure that the tentacles stayed stable when they were animating it because this thing went all over the place oh i don't know why it keeps doing that uh and as a finishing touch we added two types of sine waves on top of the tentacles so this was a setup we also use in our web rigs in the game and animators were familiar with it but they could just dial in you know their amplitude and wavelength whatever and then animate the offset and there you go you get some free wiggle in there last thing i had to do was uh support ik as i said they were walked on they held things um we actually had ik and fk in the rig but due to our 10 constraints i couldn't build a tool uh that would blend between the two effectively in time so the solution to that was basically
just hold the animators down and say please make sure you're using the right mode before you start animating it and i think they got the point uh so let's actually break down how the tentacle rig works so here are all our attributes that the animators can uh animate on it um we'll break it down from the top down so slide is how much the tentacle is sliding so zero is no sliding and n minus one is uh retracted fully there's a visual example for you we also had thickness uh start thickness and thickness and by the way we used these very sparingly this was just to play up to the camera if we needed to and also our stretch mode so that was what we uh talked about earlier which was whether or not the animators enabled telescoping or not
so here's equivalent of variables we're going to be using so this is i've written this out in a bit of pseudocode for you uh we actually use maya's node network but um the the logic is still the same so we have our slide our thickness scale our start thickness or end thickness and our stretch mode right and then we have some static parameters we've got to keep track of which is our total number of joints so say we have 55 joints in a tentacle which by the way is being a bit conservative here our start length which is the overall length of the ribbon before we start animating it and our joint number which is the joint we're actually tracking so this this quote i'm about to show you is uh duplicated for every joint that's in the rig and so say we're targeting joint 18 right now and then we have some done we have a dynamic value which is the current length so we need that current length to figure out the scalar value of the tentacle overall um so then we use all that to get our
joints positioned so this is before scaling slides so we first we work our incremental value which is one divided by number of joints plus one and to get our joint position in zero to one clamp space we times that bar joint number which by the way i said was like 18. uh to get a ribbon scalar value we take our start length of our ribbon and divide it by a current length and that gives you this so there it is chilling out on the surface right there but if you want to add some extra logic to this or stretchy chain logic or our telescoping logic we have to first get the current position scale which is our ribbon scalar value and times by our joint position then if we want to figure out slide which was another attribute you could animate as you saw a couple slides back uh we need our reverse joint position which is one negative uh current joint position scale and then finally we get our uv position by adding slide onto that which gives you this same thing for the
grow chain logic except miss the first line this is what it looks like in action so finally um we're actually running two concurrent logics uh for the tentacles under the hood we have our stretchy sling tentacle sorry and our telescoping tentacle so we have to figure out which one we've got enabled so we have our blender value which is we get that stretch node and we uh sorry we get one in negative the stretch mode from that and that's essentially a reverse node in maya and in that we feed a world space position i got these from motion paths but you can get them however you want and then that will tell you you know where it is depending on which technical you've or which setup you're using same thing for thickness as well because we need to find out the comparative thickness and it's different for whether it's stretchy or whether it's telescoping so we get that same value
and then we uh do some extra maths here which is given an arbitrary number of 0.05 just because maya does not like to divide by zero in fact really nothing does um and then so finally we have our thickness stuff uh thickness values here thickness start thickness and thickness uh we need to use all them to calculate the end thickness which is we get our thickness difference start thickness minus end thickness then we get our position thickness difference by getting our joint position zero at one which we got way back a few slides times that by the thickness difference we just got start thickness difference position we get by adding the previous value onto our start thickness value uh and then we get our joint scale thickness by getting the thickness scale uh and timesing that by our start thickness difference position that we just got finally we get our scalar value by getting the output uv uh which was another couple of slides back as well by that joint scale thickness we just calculated and that is
a lot to say by the way that's really difficult to talk through the reason skill why in this instance is actually because i used world space um joints and wall space numbers for this because it's much easier for all the nodes i was using so in the case of dock negative z was down the axis and you don't want to scaled any axes so let's move on to usability so the first thing i discovered is that speed matters a lot animators need to be able to block out the poses fast so as you might imagine the rig was slow due to the number of joints and skin viruses but one of our animators chris lally uh made a proxy rig and figured out that if you use boxes instead the rig ran faster and the less boxes he used the less joints it was calculating so you can see here we actually rolled that into the rig and gave them proxy tiers to work with so they could decide what level of visibility they needed to make the rig run faster when they needed to do that oops sorry
uh another usability issue was just the amount of noise on the screen so there was a lot of uh controls and obviously the tentacles so we added the ability to turn off the tentacles when they wanted to which meant that an animator could focus on one tentacle and also it would give them a speed increase in the scene so what kind of constraints did we hit or hurdles our first major one was vertex swimming so our engine tried to smartly calculate the bounding box of an object but because dock went up to 20 meters the engine kind of optimizes various positions to compensate for that and it would cause this result of things swimming um to fix that it was only really apparent in a couple of shots so we decided to fix it just on the spot for each thing and the solution to that was this is our cinematic editor on the right and a shot of dock on the left you can see
doc's multiple uh tr it has several tracks there three times and i'll give you a close-up of that there's one for his body which had all his body uh in it so we split it out and we turned off the tentacles on his body so the brown the box it drew was smaller and that meant that the area around his face and his collar and stuff didn't suffer from the vertex swimming uh the tentacles we just left as is because they were fine and the head and goggles uh we actually ended up putting the goggles on the head as well that helped with the vertex swimming issue and also um noah who rigged the face added a special um controls for the goggles to follow the face another thing was it was really expensive we had several look states which we used to determine like whether like damage states or whatever we had 42 individual vanity toggles you can see on the right hand side there and these included our damage states their vfx and the extendable tentacles and on top
of that we had three lod tiers so it was a really big asset and to drive that home um the maya file itself was over 300 megabytes there was 14 000 plus nodes in the tentacles alone which is by the way why i scripted them all and we had 520 animator controls but luckily uh we made a nice picker ui for the animators so they didn't all go insane so if that all squared up uh let's talk about our achievements um first of all we got a rig running up up and running sorry very fast like i had the rig in the animators hands within like a week and from to start from nothing to give them a full reg that was pretty awesome and it was actually usable for them uh this is partially due to our incredible in-house a rigging system and also because i knew that i could uh add more systems online later
and that leads into a second point features planned ahead planning ahead and knowing that i could uh iterate over the course of like months instead of blocking a huge block of time and potentially stopping animators working paid off in the end uh we had great animation thanks to the animators especially i would like to call out chris lally uh one of our animators there was a lot of back and forth where i would handle the technical rig and he'd hand it back and tell me how to change it and the first few weeks of doing that were key to making sure that the behaviors were what the animators needed and finally uh we actually had a single asset for both gameplay and cinematics so no cheating we didn't have any special shots of any special rigs the rig was built to cope and work in every scenario that we could think of so what can we do to improve it uh first thing i'd like to have is run time technical attachment tech also the ability to procedurally extend so that i wouldn't have to build 20 meters of of tentacle into the rig
and make animators cry whenever they load the scene uh faster rig to animators quicker so i uh the fact that chris had to find out how to speed up the rig uh i wish i'd done that sooner i wish i'd realized that the the time it was taken for him to animate this rig and that it was super super important to get something fast in his hands uh we'd be nice to support ikfd matching and uh as i said earlier we sacrificed the shaping of the tentacles so that we could get stability we we already have like um tests and rigs and house that can do that using like variations of this text so i know that's possible so let's sum it all up um we made a super versatile technical rig um that we have rolled into our wrecking toolbox internally and it's pretty awesome it's pretty awesome to to use that to inform future
tech we also made one of the best gaming superhero villains ever i mean i know that's a bit subjective but but people really digged it and i know i've probably spoiled a lot for you in this talk but if i'm not gonna spoil one thing it's the actual ending of the game if you haven't played the game please go play it people love the ending it's a fantastic performance um and the speaking of the performance was actually so good that we were nominated for a ves award specifically for doc and it was really cool because i actually was personally nominated as one of the nominees and i got to attend the ves award which um you know was one of the highlights of my career i got to wear a kill and drink some free booze you know all the good stuff uh with that i'd like to say thank you to all of our insomniacs uh without you the game would not be possible uh obviously all of our partners as well uh we try and stay humble insomnia i can
acknowledge each other as much as we can so with that you know i i talk a bit a lot about what i did but it's really what we did it wouldn't have been possible without the entire team and uh thanks to you guys for coming and listening to this talk uh speaking of great teams we are hiring if you if you like what you see you know there we have positions you can come talk to me uh my twitter is up there uh waffles uh my dms are open i will try to answer them in a timely manner [Applause] questions also thank you guys for being really gentle this is my first gdc talk so i'm like nervous as all hell right now
i've actually got another one tomorrow as well because there's something wrong with me all right got a question yeah just wait until you're ready um so first of all fantastic talk um a couple of questions if that's okay so when it comes to scene performance we generally get in 30 frames per second in your scenes um so the question was do we normally get 30 frames per second in our scenes first of all excellent accent i really dig it all right ditto a bit more authentic than mine by now i'd imagine but whatever uh i would say generally like that would be a question for the animators but i would err on uh with our proxy legs possibly but or maybe definitely in some of the lighter scenes in some of the heavier scenes i mean one scene in particular we had a crowd below of like 20 people at least i don't even know how many more actually and doc himself and i would say no in that instance um but we did devise
a lot of tools in-house to try and alleviate that we would have geocaching to cash out geometry and characters uh we had proxy reg stubborns for every single character of every different archetype so we and obviously we said to the animators please please please unreference things if you're not using them because that really helps too um we also the one problem we did have was like parallel mode we were just in 2016 in parallel mode in 2016 tended to crash with a lot of our skinned rigs so to to avoid that we just used rigs with direct parenting and um geo underneath them and that that got people working in parallel which honestly is one of the biggest speed increases you could get it's worthwhile noticing that the invisible invisibility evaluator maya is known to cause crashes as well just in case people are oh really yeah i think everything causes crashes in maya to be fair uh just one other thing did you reference the rigs as well
there'd be reference to rig zen the scenes yeah okay cool that's it perfect thanks cheers after you sir thank you um excuse me how do you manage uh when the when there's gameplay scenes and everything's kind of dynamic with the character's position and all the chaos breaking loose how do you manage the rig on those situations uh the question was how do we manage the regs and chaotic gameplay scenes yeah uh well i mean that's more on an animator's question really i mean we have a bunch of things in the rig to support that we have like sink joints and motion joints that are joints positions that animators can use to line up various actions in the game but in terms of reg staff apart from that and uh phase joints for i think footstepping and stuff like that there isn't it's more up to the animators to make sure that they um use all the tools available to them to make things sync up in game thanks cheers oh this is my last question make it a
good one pressure's on well first and foremost amazing work by the way sorry for shouting into the mic um so uh with a project like that with a rig that um first off amazing and complex what did you kee what was the first thing you were thinking about with in regards to management and building it up with trying to keep as many parts going at the same time and progressing forward what were you keeping in your mind when you were putting it the initial stages together so the question was what did i keep in mind when i was initially setting up or planning out rigs like that i mean the first thing you really gotta think about is as soon as you make something and release it into the wild people are going to run with it so you better make it like somewhat fill proof and you and know that um people are people are going to use it to generate content and you want to try and keep that content support that content
so i would say unless you're very secretly like in cahoots with one other person and you're passing back a file back and forth like uh i would make sure that whatever you release to the team uh can the work they do on it can be preserved for all the next upgrades that you do on the rig itself fantastic thank you cheers cool i think [Applause]
Auto-generated captions from YouTube — names and numbers may be misheard.
Distilling the key insights…
Game Developers Conference · 2026
Jason Schreier · 2026
Comments