[Music] [Applause] hello everyone as they've said my name is Eric Martel I've been a leader i programmer at Ubisoft Quebec for 28 years and well thanks for giving me the opportunity to talk a bit about vehicle AI and NPC I more specifically towards the usage of vehicles and video games so just to talk a bit about my credentials I started in 2001 at a small company in Montreal called meteoroids there I developed Siberia postmortem and Siberia - those are all quantum kick adventure games then in 2004 I was fortunate enough to join the Ubisoft Montreal where I developed Far Cry instincts which is the port of the well-known PC game far cry on the first Xbox and then I was truly blessed to
work on the initial title of the Assassin's Creed franchise in 2008 I joined the ADA's Montreal where I had the opportunity to work on the Keith reboot and more recently in 2013 I joined mists of Quebec where I was able to work on unity and more recently syndicate this talk will be mostly about syndicate also I was fortunate to work with Matt Buckland on the programming game AI by example I was a technical reviewer on this I published in the AI game programming with some three the Far Cry anchor system it's basically smart objects if you guys need some it's an interesting article and more recently I published in game AI pro a system out to build third-person camera systems as you might know the the game AI books are now
open source for the first one so you can easily go check it out and see the articles for trip back to the our main topic Assassin's Creed syndicate Assassin's Creed syndicate can be defined by five core pillars first you have navigation which includes parkour I would say that Assassin's Creed is probably the best game in the industry if you talk about parkour the player is allowed to climb almost anywhere perform any work or tricks there's also a big part of it that's about fight fight and our case includes assassinations we support many types of assassinations we have a big part of the game that's about the story we try to be history relevant so we take a time period and we try to adapt it and tell a great story with some historical elements it's also about explorations the cities are usually very
huge and it allows the player to to explore the environment and reusing the navigation in parkour it allows us to give a great challenge to the player there's also the stealth part which is basically a hiding and it goes again with the assassination by using a stealth mechanics the setting for our game decided by the creative direction was to go with the Victorian London we were reusing a lot of the code from Assassin's Creed unity and we decided to reuse the road system and add sidewalks and traffic for vehicles basically our goal was to allow to have a civilized City where people are following traffic rules and work on site and walk on sidewalks we also wanted the crowd to integrate fully with vehicles so as 12 a
living and breathing world where NPCs just move freely on the streets and NPCs from the sidewalks can also interact with the vehicles and use them if required luckily for us Assassin's Creed the Assassin's Creed syndicate is the first Assassin's Creed where the time period is after the intention of the camera so we add some footage of what it looked like in London back in the day it confirmed to us that the vehicles and crowd needed to blend together in order to give the player a great experience the objectives for us were to support various types of carriages if you played the game you can see that there are many types of carriages some are more for passengers well for driving people around some are for the police firefighters etc so the all have different number of horses wheels some of the cargo section some of
doors they're all at different heights they also follow the traffic rules so given the wrong system we were able to give the level designers tools to create lanes where the vehicles follow and stay on the right side of the lanes which is hard for us North American it's on the left side and not the right way we also gave NPCs tools to navigate using vehicles so any any NPC whether it is scripted or systemic can just hop on a vehicle to go to his objective if the level designer given the rights to do so we also wanted to integrate the fight on the vehicles and also using vehicles since you saw some of our pillars include navigation we thought it would be interesting to allow the players to get on the vehicles and then fight the play the NPC's and it's not only
characters we also supported trains because we thought it would fit very well with the Victorian era and we have boats on the Thames River as for the prerequisite like I said we wanted to have a road network which was edited by level designers to create basically it was bound to the visual measures of the streets I'll come back to it a bit later all of our vehicles or physics-based so for the first time in Assassin's we had a very physical world where rigid bodies move around so we had to take proper proper precaution for the NPCs to handle the handling of rigid bodies moving around we also had to reward the navigation mesh system because we wanted to be able to detect that blocking whenever a vehicle would stop in an alleyway or in front of an objective we
reworked the steering system and we definitely had to change that the decision-making to take into account vehicles lastly we'll talk about the virtualization of NPCs which is basically allowing NPCs to live for longer than their usual lifetime in this presentations it's in it's quite short I'll be mostly talking about the navigation changes the TV role changes and the virtualization a lot more which required but obviously with the time we have I cannot talk about it but feel free to come ask me if you have more specific questions as for the navigation changes it's not per se ve cool ai that's tackled here but it's prerequisites in my opinion to have NPCs use property vehicles so that's why I will look into it this is a debug
display of the road network if you're interested in knowing more about this system there will be a talk at Thursday from 4 to 5 called Assassin's Creed syndicate London wasn't built in one day by tommy investing so feel free to go see it you'll be explaining a bit the tools that we developed for level designers in order to build London which is quite a big achievement so going back to our vehicles our vehicles are built in many parts starting with the horse the horses are a bit like a tractor in a Freightliner so it's pulling the carriage into the direction that's being given by the player we have various types of carriages beam's on the sides and that's doors it's very varied but it's all based on historical vehicles that were in London like that most of our vehicles that are
joined in the middle which you'll see a bit later makes it a bit more complicated for steering theaters in our case it allowed the player to move the horse freely laterally and be able to go in whichever direction he chooses to without relying on wheel system like on a vehicle on on a car sorry and then we have to to move six seats in our vehicles allowing NPCs to just sit at these positions we then added some bones to the meshes to be able to guide in pieces to specific places on the ground to then be able to interact and play a proper animation to either get on the vehicle or fight the player so navigation is matching what's batching basically patching is technology where we punch a hole in the navmesh using the the rigidbody size of the vehicle this way the triangles are altered and NPCs
at the navigation level at a pathfinding level or able to know whether the path is blocked or not most other games with simpler vehicles could have simply used steering behaviors to achieve that when in our case since the tractor as a joint it was possible to create concave areas where NPCs could get stuck using only steering behaviour whenever a patch is applied where we go through all the NPCs that are in the surrounding area and if they have a path that's we using one of the triangle that's being patched we simply cancel the path and ask the Pathfinder to recompute a new path for that NPC here's what it looks like it's debug display again which should give you an idea as soon as the vehicle will stabilize you'll see that the triangles are recomputed and the grayer areas where NPCs are not allowed to walk so if we get a better
review of it we start with the the shape of the rigid bodies we then define that whatever's outside of this is walkable and then we triangulate it's very simplified but yes you're an idea since navigation mesh patching is obviously quite expensive to do we tap the number of vehicles that are able to patch every frame so in our case we were satisfied with only a single vehicle given that most of them are always in movement we had the great results with only patching one vehicle we also prioritize them by distance so obviously whatever's closer to the player gets patched first and then it disperses in the environment the size of our characters allowed the player to step on the top of the vehicle since navigation is a big pillar in
Assassin's Creed we thought that would be interesting to have NPCs go there as well so we reuse the same technology for a navigation on the ground and applied it on the rooftop of vehicles the same technology is used also on trains and boats we're using the exact same algorithm so it's symmetric navigation that's possible on the ground is possible on any of the vehicles we also added whisper links because we we thought that it would be more interesting for players to have interactions between the navigator the dynamic navigation meshes and the static ones so we use some cat like whiskers surrounding the vehicles to find connections between a dynamic math mesh and a static one as soon as the vehicle patches we run the algorithm and determine which whiskers should connect and we create jump links using these whiskers so going back to the two previous graphics we can see that we can
create whisper links on on all three sides and they connect the dynamic mesh to the static one dynamic Latin evenings were also added to have credible gameplay these were specific to trains and boats I'll explain the reason our dynamic links were meant to connect to moving Nath Nicias together and allow jumps from one to the other the big technicality years is since our sins with carriages were so dynamic we couldn't rely on a path being valid for from the point where it was requested to the one at the point where it was executed so since we wanted to have the paths valid at all times we only applied them on vehicles of similar velocity this meant that two trains growing next to each other or two boats going next to each other could be jumped from one to the other we also modified the steering
theaters for historical reasons the steering in assassin's creed was radius based we it works great for characters and for especially bipeds because their width is pretty much the same master length but in our case the carriages were much too long too for for it to work so we to avoid paths that were really not realistic we went for a different method so here's an example if you compute the smallest radius that can encompass the entire vehicle you get something like this and NPC steer very far away from the vehicle which doesn't really look good doesn't look realistic either so we went with the context hall steering so basically from our vehicles since they were not rectangular we had to build some sort of envelope around the rigid bodies in order to allow NPCs to use a convex shape for dynamics
avoidance so yeah we're trying to get rid of the concave shapes the shape is being modified by the different type of tractors we have some vehicles have one horse some have to vehicle with two horses can lose a Norse and still be valid vehicles can still be in movement even though they don't have any more horses so we had to adapt to these variations in run time we also add a few steering method that were used in some cases to go from outside of the country a convex shape to outside sometimes to go in and sometimes to go up hey here's a quick example we start from the rigid bodies of the vehicle and then by exploring all of the edges we try to find an intersection between the two rigid body contours once we get one
we said when we switch the iteration of the edges on the other one and we continue computing this results in the contour of the vehicle given the contour we then explore all of the edges in a clockwise manner and whenever the projected angle the projected edge on the right vector of the previous edge results in a negative value it means that we're going outside of our shape therefore creative creating a concave shape so we pop this vertex and go back and continue the process until we looped to our initial point the the main point that we were trying to avoid with the the drawing I showed you before with the huge radius in this case as you can see if we do a collision check with the the path and the concave shape we can see
that we can move much closer to the vehicle without any issue if the destination were to be on the other side of the vehicle we then minimize the angle of the NPC we minimize the direction change allowing us to compute a path going through one of the vertex that's the the on the outside of the vehicle that gives the least angle change some could have taken taken into account the velocity of the vehicle the turning whatever but in our case since the situation was so dynamic it proved to be good enough to simply go to the nearest vertex whenever an npc is trying to interact with a moving vehicle it needs to go from outside to the inside so in this case we use the outside to outside the steering method until to the raycast is allowed to cross the contour across
the complex all without intersecting with the contour which is an orange giving us a straight path that will not go through a collision then inside to outside is a bit the same thing it's basically when an NPC is getting off the vehicle that's still in movement and wants to come out we basically find the closest edge where there's no collision with the kanpur we go in straight line and then we applied the outside to outside the steering either changes we'll cover some of the behavior changes but obviously a lot of work was put into it to allow the pieces to properly support vehicles so I'll try to keep it simple and show some interesting examples but if you want to talk more about it feel free to come see me first local positions since we had a fully dynamic world we had to take into account that position that's computed by an NPC needed to be in local space - its
referential what I'm what I mean by that is that trains and boats were big enough to have an NPC perform a full search through and if they were computing positions like oh I should go search at XYZ position every frame the the boat or the train is moving so that pre computed position wasn't valid anymore so since we wanted to reuse most of the legacy behaviors from previous titles we had to adjust that code this code was specific to moving platforms so whenever an NPC was standing on something dynamic we would a little extra operation to bind the position or direction to the entity on which you are standing we call them anchored vectors and anchored directions and basically by changing the interface of most function calls we were able to trap all of the of the cases where world
space vector was being used and passed it as a local vector for a combat that we had to support the combat throughout the game by adding new behaviors for NPCs on foot to fight a target that's on a vehicle and to implement a full combat loop on the vehicles here's an example it's the take out the target so whenever you get on the people and in PCs allowed to come to you and take you up this is done by reusing the bones that I showed before on each side we can do a test for an education on each of the bones so for example in that case if there was an obstacle in my right PC would have been able to use a symmetric animation on the other side and interact with me and pull me out from the other side this allows the player to be fighting the NPC's most of the times on the foot where he has his
full fight skills then some players will simply stand on these vehicles and since they're big enough we wanted to support and PCs to be able to climb on in that case since the the surface of the vehicle is quite small we had to reduce the the set of fighting machines that we were using but it also allowed us to use a bit more often what we called this part a kick where you simply kick an NPC of the vehicle which looks great on trains by the way this is a debug build so there might be some glitches so sorry about that we also allowed them pcs to take you out of the driving position and fight on the roof while I'm not very good at the game
so you might see me get quite a lot of damage I didn't go with a load so here as you can see I try to see the guys and the grab me - by the neck and brought me back up on the vehicle again following back on our white pillar where this is allowed to use all of its items and here we'll see an example of shooting we try to use the shooting with the same as this is our ground so basically they don't fire too often they follow specific clues as to what's the percentage of chances that they will hit you but in our case they were also able to shoot your horses and as you can see the shooting allows the NPC's to also handle the target that's on the foot where you'll stay on this vehicle and simply shoot me from there until I get far enough where you'll start chasing me again if I stay too long on the ground
next to him I'll simply get off the vehicle and start fighting me and melee the ramming is one of the most interesting aspect of the running is used by the player and by the NPCs and it's also linked to your damage on the vehicle so as you could see I destroyed the vehicle of the previous guy and then other NPCs are trying to come and ran me through destroying my vehicle this allowed us to showcase that at the ejection system in our game leading to a player recovery most NPCs simply die when they get objected then one of my favorite feature that we develop is the boarding it basically allows the PC - why - own carriage and jump on yours and come fight you again in my opinion it's cause of the critical pillars that we described in the
beginning it's a mix of navigation it's a mix of fight sorry about the camera there we also want to add the virtualization virtualization the process that we developed to allow NPCs to live a bit longer despite being on spawned in arguing for most of the NPCs were using what we called a loading bubble which describes the area in which NPCs are living it's basically player centric so whenever the players moving the bubble follows them which means that if you're escaping at a high velocity people that are left behind are likely to be on spawned we had the issue where the player could be on a vehicle and getting to conflict with an NPC on foot obviously the NPC on foot has no way to to to chase you very fast so you will have to use a vehicle if you go full speed right away he's very likely to get on spawn which would result in no
challenge because the player is simply cancelling any conflict as soon as as he owns the NPC so NPCs were also not cheating so the app to navigate to a vehicle and then interact with it which led to a bit of time making them on spawn a bit too often so we decided to add virtual vehicles we used virtual vehicles by creating fake entities that were not living in the world but living in a virtual space in which NPCs were grouped living in these fake vehicles they're the reason why we're grouping in pieces is we wanted to avoid if you want spawn five NPCs to have five vehicles responding and then chase the player this way if then pieces are sharing a faction they can be grouped in a virtual vehicle and then only a single spawning request will be executed all of the NPCs versus their
health their visual and the tart at the target this way the player can recognize that the end pieces that he left behind are still living and breathing when they respawn we also added simply simplified virtualized behaviors in our case for the the conflict was the the chase basically then pieces are reusing the road network that you said before and this network is loaded at all times in London so an NPC even if he is really far away from the player you can simply query a path from A to B and chase a player without even existing in the world we also added the simplified search which basically let the NPCs roam around the streets this is not really visible for a player other than on the mini-map because the NPCs are not spawned so you cannot see the actions that the NPCs are doing but you can see basically the path that they are following and you can also hire allies that will follow you everywhere in the
in the map and they will try to rely as much as possible on the road network the virtual is AI D Church well as AI lysing sorry about that and is whenever the NPCs are coming back to the loading bubble they would simply respond we do a simple analysis of the traffic system around the player and we try to find a spot that's not visible where there's enough room to spawn the vehicles we also combine the spawning so of the in pieces and the vehicle get spawned at the same time resulting in a full entity with all of its components available at the same time unfortunately this is a fourth talk so I'll have to wrap up in my opinion adding vehicles and Assassin's Creed syndicate was mostly an avocation problem we decided to empower our existing systems and build on top of it so we reuse the fight we used we we reuse the searches and we
try to adapt Olivera chemically loops to the new vehicles well so worked around our entrance limitations without getting rid of the baby at the same time as the bathwater we simply found out the specific points where we needed to tackle and this meant that we added the virtual behaviors there will not be time for questions here unfortunately but if you want to talk to me there's a wrap up room which I was told is unfortunately far away so if you want just join me at the back of the yeah and the hall otherwise you can email me or talk to me on Twitter and tomorrow I'll we'll be at the ubisoft lounge from 11:00 to 12:00 so if you guys are looking for new challenges or have any questions come see me I'll gladly help you and I'd like to quickly thank people in Quebec City they this is
a very short list of the people who worked on the vehicles but there's quite a lot of work involved and all of these people work as programmers on the vehicle system or the dai system and unfortunately I didn't have enough room to thank the designers the animators the mission designers there's a lot of people who worked on it so thanks for your time and I think my times up
Auto-generated captions from YouTube — names and numbers may be misheard.
Game Developers Conference · 2026
Jason Schreier · 2026
Comments