Over the last couple of days, I’ve been experimenting with setting pathfinding characters roaming within buildings. What follows is not intended to be definitive, but more a case of what I’ve found so far. Until there is more up-to-date documentation from LL on setting-up pathfinding, this was very much thumb-in-the-air stuff, and as ever, YMMV. I’m still fiddling with things, and may add a further article later.
Characters with Impact
For the test, I used a basic pathfinding script to animate a cube (which I called “Charlie”). It was simple and was enough for the basic task. One thing to bear in mind with pathfinding characters is that they’ll have a land impact of 15. This is related to the character’s physics weight, and will not change as a result of adding / removing prims (a 1-prim character will still have a land impact of 15 as will a 30-prim character), although other factors (such as streaming cost) may raise the LI.
People may find the idea of a 15 LI character “harsh” (esp. if the prim count is lower). For my part, I don’t think it is that bad; it still allows for a fair few NPCs in a role-play region without significantly impacting prim counts.
Setting-up a building in which pathfinding characters can roam requires setting the correct pathfinding attributes. During my tests, I wasn’t trying for anything sophisticated like setting-up paths; rather, I wanted to see how a simple character (like a pet or animal) would roam and interact with its surroundings.
Pathfinding attributes, as outlined in my pathfinding overview, are set via the Linkset floater. There are a few points that need to be noted prior to doing this:
- Only one attribute can be set for a linkset, so if your structure includes walls and floors within the same linkset, you cannot set one attribute for the floor, another for the walls, and so on
- It is possible to set pathfinding attributes against NO MOD builds, as pathfinding attributes are not the same as object permissions. However, there are caveats to this – such as whether or not the build includes things like scripted doors (see the following bullet point)
- Attributes which affect navmesh calculations (e.g. Walkable, Static Obstacle, Exclusion Volume, Material Volume), should not be set against linksets with scripted moving objects (such as doors). Doing so will prevent the scripts in the objects working as intended
- If you have a structure which includes things like doors, these must be unlinked first and their attribute left as moveable obstacle
- Obviously, in the case of NO MOD builds, this potentially limits your choices as to how you enable pathfinding within a building and in ensuring pathfinding is suitably optimised.
To set an object’s pathfinding attribute:
- Right-click on the linkset for the object and select Show in Linksets
- Select the required attribute from the drop-down list
- Apply the attribute to the linkset
- Use the Rebake Region button which will appear at the bottom of your screen to update the region navmesh.
Broadly speaking, the following options are available when creating walkable areas in a building:
- Set the entire structure to Walkable. This works reasonably well, however:
- For modifiable builds, all scripted moveable elements must be configured as linksets separate to the main structure, as noted above
- This option should not be used for NO MOD buildings with scripted moveable elements integral to the structure
- If the building’s floor areas are already an independent linkset, set that linkset to Walkable
- If the building is modifiable, unlink the floor areas and then re-link them as an individual linkset which can be set to Walkable
- Create your own floor “overlays” from prims, position them over the existing floors and then set their attribute to Walkable (useful in NO MOD builds which include scripted moving elements).
Which of these options you use is down to the building you have and personal choice. I found that setting an entire building to Walkable (after taking care of the door linksets) worked perfectly well for the most part.
Note you can set the Walkable attribute for the floor prims prior to positioning them, but you’ll have to run a region rebake once you’ve done so. You can “hide” the floor prims by making them transparent.
I should also note that in terms of furnishings, I left anything set with the Movable Phantom attribute alone, and anything set to Movable Obstacle to Static Obstacle (this did not “break” any scripts for sitting, etc.).
To give better control over characters roaming inside a building you might wish to set additional attributes against individual elements in a building. For example, in setting an entire building to Walkable and with Charlie moving at the default character speed, I found he would periodically “pass through” a wall or window and continue roaming around outside. I stopped this by setting the walls of the building to Static Obstacle. As well as potentially helping with character behaviour, setting additional attributes for linksets and objects helps optimise pathfinding for the entire region in which it is being used.
Use the page numbers below left to continue reading
3 thoughts on “Pathfinding: playing inside buildings”
As an aside, it probably wouldn’t be too hard to rig doors with a listen script for a pathfinding character to broadcast to when they want it to open; it’s just not *automatic*. (Or, alternatively, the door object waits for something to bump into it.)
I didn’t get that far in fiddling around, but one of the things on my “to do” list is to see how a character interacts with a local collision volume for a door.
The Land Impact seems pretty fair to me. It was very obvious that the old-style methods, used for Zombies and Breedables, could put a heavy load on a sim. (It didn’t help that, in one Zombie-maze, the owner insisted that everyone use a rather antique freebie shotgun, which didn’t take advantage of half-a-decade of weapons scripting experience, and suffered badly from bullet-warping[*] when the physics frame rate plummeted).
A minimum LI of 15 suggests that Pathfinding is hugely less load on the sim. (It won’t make the guns any better.)
[*] All moving objects jump from point to point, frame by frame. Small objects moving quickly can go through objects because their collision boxes never intersect. Physical bullets can easily move a couple of metres per frame, so they have to be long rods to reliably hit anything, and not go through walls. This shotgun fired small spheres…
Comments are closed.