#gameplay-ai

1 messages ยท Page 174 of 1

ocean wren
#

I really want to show some of that ship location data being used though.. Maybe some shipping lane data.. I guess I could pull it out of some real world data stream

misty wharf
#

just put a lot of american flags on it so nobody will dare to say it's bad lol

ocean wren
#

This is for the UK unfortunately.. they'll get a bit sniffy if I add the US flag ๐Ÿ™‚

misty wharf
#

haha

#

pictures of Boris? alex

opal crest
#

Add Eagles^H^H^H^H^H^H Puffins and Boids and a sloganizer = profit???

ocean wren
#

Yeah, just a picture of boris in his stupid goddam harness waving a pathetic goddam flag ๐Ÿ˜‰

#

Looks like I'll have to figure out where to get some AIS data for a few weeks of ship movements

misty wharf
#

too bad the russians turned off their superyacht tracking systems

ocean wren
#

Thats exactly what I wanted to show ๐Ÿ™‚

ocean wren
#

Good old americans, turns out I can get AIS data for murica at least!

zinc creek
#

Hi everyone, was wondering if anyone has done AI for voice commands in game? Meaning I wanted to do simple voice commands in game like โ€œAlexa, what time is it?โ€ And the game would respond with the local timeโ€ฆ just simple commands for now

ocean wren
#

Yeah, I've done it

mint terrace
#

we all thought the voice assistants would become skynet, but it'll be Zoombalexa

zinc creek
ocean wren
#

voice commands for generative content in VR is a thing ๐Ÿ™‚

#

I'm trying to convince my colleagues about the future of generated content and how voice prompt guided generators (and similar) will be the future.

#

given large language models like DallE2 are so powerful at images.. its not hard to imagine the same for 3D content and then extrapolate that to behaviour and video etc.

#

generating 3D meshes from a text prompt

#

and of course, speech-to-text -> 3D mesh

charred lava
#

About EQS. With EQS I find a cover Point, but sometimes the path to that cover point isn't good. The AI walks past the target to reach the cover point. I rather want him to take a longer path where he avoids line of sight with the Player. So maybe writing a MoveTo Task that chooses a fitting path? But also, I would like the EQS check to consider if there are available "good" paths and if not, invalidate the context item.

misty wharf
#

You would probably need a more elaborate setup to determine whether the point is valid so it doesn't pick those, or have a second query which determines what kind of path to take to the point

charred lava
#

Aren't there resources for validating Navigation Paths? x) I probably manage, but I hoped that there is something available already.

ocean wren
#

No, there's not ๐Ÿ˜ฆ

#

part of the problem is that EQS can provide you a point that isn't visible to an enemy alright, but doesn't have anything to do with pathfinding, so the pathfinder would have to be implemented to take into account that same visibility

charred lava
#

okay thanks you two

ocean wren
#

Personally, I'd munge the recast navpoly's to have visibility scores and then use that in the A*

#

But its not a quick fix ๐Ÿ™‚

twin hornet
#

I have navmesh with some modifiers placed in level, is there any event on when the AI enters a modifier?

twin hornet
#

basically I have a LowHeight modifier and I need the AI the crouch when they enter that modifier

twin hornet
#

well, I figured that out, so to anyone interested this is the code that allowed me to access the area class of the path that the AI is currently in

UPathFollowingComponent* pathFollowingComp = OwnerComp.GetAIOwner()->GetPathFollowingComponent();
int32 currentPathElement = pathFollowingComp->GetCurrentPathElement();
FNavMeshPath* path = pathFollowingComp->GetPath()->CastPath<FNavMeshPath>();
TArray<FNavPathPoint>& pathPoints = path->GetPathPoints();
ARecastNavMesh* navMesh = Cast<ARecastNavMesh>(path->GetNavigationDataUsed());
const UClass* areaClass = navMesh->GetAreaClass(navMesh->GetPolyAreaID(pathPoints[currentPathElement].NodeRef));
misty wharf
#

Nice :)

#

I had a hunch it might be something in the path following comp but wasn't sure of the specifics

ocean wren
#

Doesn't that code just scream "easily understandable" ๐Ÿ™‚

#

C++ is such a pain in the arse ๐Ÿ™‚

opal crest
# charred lava About EQS. With EQS I find a cover Point, but sometimes the path to that cover p...

I've done this. The basic technique I used was to:
a) Write a context that returns the set of actors we want to avoid exposing ourself to -- I used a sphere catch to gather anything 'hostile' within a given radius)

b) write a custom EQS test in C++, get the path using FindPathToLocationSyncronously, and then, here's where it can get expensive depending how you tune this:

For each path segment, subdivide it into test points. For each actor we want to avoid who is facing the path (there's a ton of ways to do this: I used cone-line-segement intersection) do a line trace from the test point to the actor. If it hits the actor, fail the test.

c) use this test in your EQS. Ideally, the rest of your design has filtered down the number of candidate paths here, so you don't have to do the expensive test too often.

twin hornet
#

also there isnt public on segment finished event so now Im overriding path following component to override its OnSegmentFinished virtual function

severe tangle
#

I use Move To task node in Behavior Tree, and when AI is doing this task it's not registering any AddForce events, do I need to pause this movement then add force and reenable it? Or is there some more convenient solution?

misty wharf
#

Physics based force or on the character movement comp?

severe tangle
#

Yes I forgot to mention that

#

Character movement comp

misty wharf
#

Hmm

#

I'm not 100% sure but it seems like CMC forces should still apply if moving like that because the CMC itself just uses forces to move around - have you tried giving it a really large force just to see?

severe tangle
#

Yes I t ried simple line trace and on hit add large force but it was ignored until AI reached its target location and wait node triggered, then the force was applying

#

The only force that is being applied correctly is at Z axis

charred lava
opal crest
ocean wren
#

Personally, I'd go the "lets modify the navmesh cost" route.. you could theoretically just spam navareas to bias the pathing, but that's pretty nasty

#

Basically, just intersect all the navpoly's with the enemy visibility cones, or do a centroid of the navpoly dot product with all the enemies vision

polar furnace
#

hey folks
in ai character can we multicast some event?

ocean wren
#

also, don't forget that you can do navmesh raycasts pretty quickly

ocean wren
ocean wren
#

FMessageEndpoint is a pub/sub message passing mechanism, I've found to be really handy

#

But then I've made message based architectures for maaaany years now ๐Ÿ™‚

polar furnace
#

should work right ?

ocean wren
#

oh blueprint? no idea ๐Ÿ™‚

polar furnace
#

i will test it now

ocean wren
#

That's more of a networking thing, not an AI thing

polar furnace
#

for me at least

ocean wren
#

Well, usually you only do AI on the server anyway, so no need for replicating anything

#

so you'd RPC from client to server, do the logic on the server and that'd automatically propagate to clients

#

through playersstate or the like

polar furnace
polar furnace
ocean wren
#

no it runs on both

polar furnace
#
void APCSAICharacter::BeginPlay()
{
    Super::BeginPlay();
    // Debug
    UE_LOG(LogTemp, Warning, TEXT("%d"), HasAuthority())
}
ocean wren
#

HasAuthority is only true on the server

polar furnace
#

mb mb

#

its ok now xd

#

23 line above it print 1

#

my eng is soo bad sry

ocean wren
#

no problem

#

so's mine ๐Ÿ™‚

opal crest
ocean wren
#

You basically just want to approximately find "hidden" polygons and make sure their path cost is lower than "seen" ones I think

#

don't want to make a hard limit or anything

#

then let the A* do its thing

opal crest
#

Yeah, that could be a lot more efficient than what I'm doing now.

#

Thanks!

#

Worst case I just need to trace to the center of each polygon in the vision cone to mark visible or non visible.

low galleon
#

Hi, does anyone know the difference between the Pathfinding and Pathfinding Batch Tasks in EQS? The only difference I could see on the documentation was the "Scan Range Multiplier"

green wing
#

How can I expand the navmeshbounds to actually connect and go closer to the walls? Doing this for the VR pawn.

#

Oh, I think I got it figured out

mint terrace
#

since there's nothing else going on in here, that problem above was almost certainly solved in these settings:

keen crow
#

Is it possible to swap behavior trees for AI controller and completely preserve the execution and blackboard state of previous tree? Like for example I want to be able to start a dialogue with an NPC that is sitting on a bench and I don't want to neither make the NPC abort current interaction nor bother myself with saving the state of interacting in component or controller. Instead, I'd like to just run a separate BT for dialogues and after the dialogue is over to just switch it back to the routine BT so that the execution continues from the last task which was the interaction with an actor

ocean wren
#

You could run a subtree in your main tree for dialogue

keen crow
#

but then I'd have to run a task for this and in my current implementation the interaction (i.e. playing montages) stops after the task is finished. I mean currently I am running a subtree anyway, it doesn't solve the issue of preserving the interaction state

#

or do you imply that I should split starting and ending interaction into separate tasks and put them in a selector and have the logic to control whether the interaction should begin or end?

ocean wren
#

Well, it sounds like the dialogue is simply as higher priority task in your BT

harsh storm
#

Still waiting for zoombapup's "Not Epic's BT"โ„ข๏ธ plugin

ocean wren
#

Yeah, got paying projects to do right now ๐Ÿ™‚

#

Those damn people and their damn money

harsh storm
#

Absurd.

ocean wren
#

Absolutely

#

Rude even

#

The main difference would be that mine would be implemented as a treeview like the statetree editor.. and it would run proper parallel nodes and evaluate from the root every update

#

or rather, evaluate from a stack, but allow you to traverse from the root every update

#

rather than use Epic's "lets try to be efficient by only changing on events" kind of thing

keen crow
# ocean wren Well, it sounds like the dialogue is simply as higher priority task in your BT

it is, but running it as a higher priority subtree is hard in my case because my "interact with actor" task is latent (it returns EBTNodeResult::InProgress) so getting out of routine branch will abort this task and I'll have to handle it, which I am currently doing. I get it that I could split start and finish interaction into separate tasks, but I was just wondering maybe there was a way to completely put one BT on hold in AI controller and start another BT and then after some time resume the initial BT in the very same execution spot it was before swapping

misty wharf
#

I don't think that's possible at least easily

#

the behavior tree component holds a bunch of state for it I think so you would need two of those

haughty edge
#

Hey guys! I'm checking out smart objects recently and in the docs it says that it will also support players as well.
Is that a planned feature for the future? because I can't seem to find Player Behavior that was mentioned in the docs.

keen crow
#

After tinkering with smart objects a bit I think they are pretty ai independent. It is the ai module that has some support for smart objects

ocean wren
#

I can't see why you'd want smart objects for non AI stuff, those are just "objects"

#

the point of smart objects is to allow the object to direct the AI for usage

#

I guess if you stretch the metaphor a bit, you could say its just a "usable object" that accepts both AI and player

#

But the point of the "smart" in smart objects came from the fact that they had logic to inform the agent (sims agent) how to use the object itself

haughty edge
#

Yeah, but I think the claiming system would be nice for both players and AIs so I can sit on a smart bench and the AIs won't sit on that spot

misty wharf
#

I guess it depends on how your game works

#

For example if you have a button which triggers an animation to play that presses it or something

#

that could be the same for both player and AI in theory

haughty edge
#

I was just wondering how would a player use a smart object that's all because I can't find the Player Behavior thingy :P

#

and the quick start doesn't include a player section atm

haughty edge
keen crow
# haughty edge Does a player trigger the Gameplay Behavior as well?

Not exactly. I haven't implemented it for the player yet but the way it works for AI seems to be controller independent. There I call the UGameplayBehaviorManager method which starts my gameplay behavior. And the gameplay behavior just gets a component from the pawn (1 abstract and 2 derived component classes with virtual methods) and calls a method to start the montage

#

this code is mostly based on the epic's BTTask_FindAndUseSmartObject

haughty edge
#

I see, I should look into that, thanks!

#

another weird question, can a smart object move during runtime?

keen crow
# haughty edge another weird question, can a smart object move during runtime?

I'm inclined to say no, not out of the box at least. you'd have to implement adjustment of interactor position to stay at the smart object slot location. and I believe the way you'd do it be different for an NPC and the player character since GameplayBehaviors don't tick and they are not even directly connected to smart objects. So for AI you'd have to use MoveTo task and for the player... idk, perhaps interpolate the character's location to the slot. This is one thing I haven't figured out yet

haughty edge
#

Yeah, I think it might cause issues for the spatial query, but then I would like a vehicle to be a smart object of some sort as well

keen crow
#

hmm maybe you can attach the character itself to the car

ocean wren
#

Yeah, usually you'd warp the character to a starting location relative to the car in car-space

#

same as you'd do for a door

haughty edge
#

Oh I'm talking if a smart object moved, how would the spatial query react to it

keen crow
opal crest
#

Yeah, if they are storing an Octree to optimize the query, who knows if it gets updated.

haughty edge
keen crow
#

ah, i see. this thing?

haughty edge
#

Yeah

#

Maybe we can update it manually somehow? Currently not in front of my computer so I'm just talking out loud

keen crow
#

idk, I'm not doing any big cities yet so I'm using EQSs to find actors for interaction

#

is this octree thing something worth to get into?

haughty edge
#

It's really nice for actors that don't move that's for sure

misty wharf
#

btw the EQS actors of class generator just uses TActorIterator

#

which suggests to me it's quite likely other "find x" functions are also similarly naive in their implementation

umbral stream
#

How does AI work with world partioning? Is it still able to function if the world is "not loaded" to the player? I'm looking at some kind of sim game but if I'm working with a large terrain I would like to still have units doing stuff in the background

misty wharf
#

I've not used WP in particular, but if it unloads the actors that are within that partition, then it would also prevent them from doing any logic

umbral stream
#

Yeah that's what I assumed, I'm wondering what are some common design patterns for simulation games like this - assuming you wanted NPC permanence (and not just AI crowd generated when you get near)

misty wharf
#

you'd probably use some kind of lighter simulation for the AI when they're not in world

celest python
#

mass

ocean wren
#

Definitely mass

umbral stream
#

mass?

celest python
raw lichen
#

Is there any way to ask the navigation system a set of navigable points for a given cost?

#

i suppose it might be doable with eqs but that seems inefficient

celest python
#

You mean path cost of something custom

raw lichen
#

more like just for the default navigation system, given a set cost what is the set of points I could reach. Like for a turn based strategy system say like divinity or fire emblem

celest python
#

You can place NavAreas and define costs if I understood your question correctly

#

Pathfinding logic will evaluate them and try to select lowest cost

raw lichen
#

err hmm i think i am doing a bad job explaining lol

#

i mean show a preview of what points are navigatable for a given cost

celest python
#

I'm also not a native speaker, dont blame yourself ๐Ÿ˜‚

raw lichen
#

im trying to boot up an example in a project i made with my own navigation system a while back ๐Ÿ˜„

celest python
#

Ah, I see. Probably that'll require some custom system in C++

#

There isnt a straightforward way I think

raw lichen
#

yeah i think you're right. :X i made this in my own navmesh system in c++ but it's not integrated with unreal's navigation system at all

#

unreal's builtin stuff has so many features so i thought id maybe ask if anybody knew anything ๐Ÿ˜„

celest python
#

FSMs are already confusing enough even without much nodes ๐Ÿ˜ฎโ€๐Ÿ’จ

#

What I didnt like most is you have to use delegates literally on every transition node to determine if system should evaluate the next transition. It'd be nice to set evaluation gate open/close at state node class instead

mint terrace
#

that would be nice

#

what is that fsm variety? is that new vanilla stuff? or is this anim bp, or logic driver, or

#

I know there's new state machine stuff but I thought it was just the state tree thingy

#

which is not exactly what I'd hoped for

celest python
#

LogicDriver

#

(expensive af)

mint terrace
#

I have it

#

logic driver is very nice, would love for that sort of thing to go vanilla

#

I used it to build a dynamic music system

celest python
mint terrace
#

well you don't have to set up delegates to make transition rules

#

if that's what you mean

#

I thought your point was that it'd be nice to move that transition logic into the node class

#

actually now that I think of it, you can put the transition logic into the node class iirc

celest python
#

From what I can see transitions are being evaled instantly after first tick of state class

#

So to prevent them from swtiching to another one you have to disable eval and enable it back when your conditions are ready

#

and that means creating transition class for each node class - i.e. if you have a generic move to state you have to listen for move to end delegate and enable evals after that

mint terrace
#

ohhhh

#

i think i know what you mean

#

let me dig into what i made

#

ok so what i did

#

is to use Set Can Evaluate to disable states

#

which sounds like what you are doing

celest python
#

yeah

mint terrace
#

because yes --- it will just fly through it if you dont control for it

#

i think i raised this on the logic driver discord

#

that it would be nice to have a better way of controlling it

celest python
celest python
#

which doesnt make sense to not have same logic on state nodes

mint terrace
#

i guess i was wrong, i didnt raise it

#

im too much of a "solve it without asking" guy

celest python
#

haha, probably I'll raise it soon then

mint terrace
#

ping me, im in there

#

yeah logic driver is so powerful but there is definitely a little bit of a "wait why isnt this just a little bit more open"

celest python
mint terrace
#

^^ an example music piece

celest python
#

nice just_right

mint terrace
#

i was talking in #audio with dannthr about how to move this to metasounds + maybe state trees

#

i dont think state trees is the way id want to do it

#

but metasounds might be interesting -- i just had to understand how looping worked

celest python
#

surprisingly creating a music manager is way difficult than I imagined at the first glance

mint terrace
#

the key is delayed triggers

#

the hard part though is scheduling, but Quartz has that solved

celest python
#

and shared his setup on twitter

mint terrace
#

oh really, interesting

celest python
#

data asset based music manager etc

#

with layers

mint terrace
#

just found siliex on there, but no idea where that tweet is

celest python
#

uhh, it was a while really

#

before march?

mint terrace
#

ill just ping them when its a more reasonable time

#

so what do you think of state trees as an alternative to logic driver though?

#

in theory, it should be able to replace it i think

celest python
#

It has a different use case

#

What it do is basically running state machines under BT's selectors

#

And its state machine logic is not powerful as other tools in terms of UX

mint terrace
#

yeah

#

but it is a generic state machine system -- could be applied to any number of use cases

#

the first time thats been the case in unreal

#

i just think that node graphs makes a heck of a lot more sense for a music system imho?

#

i dunno

#

the UX itself is where im skeptical

celest python
#

I think for a music manager state tree would be better

#

but if you want to add layers and fadeouts etc.

#

selectors probably wont allow you to do that when switching to other composites

#

because you dont have any control, it instantly switches

#

what you can do is, if statetree allows you to, you can just call fadeout function on audiocomponent on exit

#

if selector aborts the state machines

mint terrace
#

i would just consider things like fadeouts to be async tasks in the state tree

celest python
#

when I mean layers, its lowering the volume of a specific music and keep playing other one on higher volume. you'll see what I'm talking about with siliex's example

mint terrace
#

as for layers ----- i dont recall if logic driver can support multiple active states with independent transitions

#

i think it does

celest python
#

it does for pro version

mint terrace
#

no idea if state trees can do that

celest python
#

but you dont have to do that in graph

#

TMap<FGameplayTag, TArray<USMInstance*>>

#

run multiple sm instances and manage their volumes by index

#

and sort them to create priority

mint terrace
#

mmm yeah but ideally it could be done in a single state machine with a single graph

#

and yeah of course Pro version. Lite is free ๐Ÿ™‚

celest python
#

but you wouldnt have a selector logic in that case

#

fgameplaytags stands for as a workaround there

mint terrace
#

i think by layering we're thinking of slightly different things

#

goal for layering on my end would be using independent variables to add independent layers to the same piece of music

#

ideally it would all be authored in one graph

celest python
#

ah, I see

mint terrace
#

so you could have multiple wave files playing at once

#

or whatever

celest python
#

yeah logic driver would be the way totally in that case, imo

mint terrace
#

i do have some infrastructure for this already but ive not fully tested it

#

a notion of "channels"

#

ie a main channel for the main piece, with perhaps a "health critical" channel to add some orchestra hits alongside the music if you are about to die, whatever

#

one of the fun challenges is not just allocating a new sound component every time you play a new section of audio

#

implemented a pool to manage and reuse them

celest python
#

Looks well planned

rain otter
#

hey, I still have not found any tips, how should I start creating an AI which can move on floor, wall, ceiling jumping between them ( like xenomorph movement) . Is there any new plugin maybe in unreal 5 which can help in this ?
Thanks for any help ๐Ÿ˜‰

mint terrace
#

well, as far as I know detour/recast can only operate on X/Y (ie the floor, or possibly a ceiling if you using a terrible hack)

#

you could build your own navigation system which supports that and insert it into the engine as the default navigation system so that things like AI Move To / behavior tree etc can still work but that would be a lot of work

#

im fairly doubtful that modifying detour/recast to support it would be a good idea unless there's already something in there

mint terrace
opal crest
#

I guess you could lie to recast (flip the axes in the input or something?) but then you'd probably have to make sure that everything involved understood the exact nature of the lie.

mint terrace
#

yeah and how would you handle navigating from one surface to another

#

cause i thought you could maybe use a custom navigation data (navmesh generator) to feed detour and just put the walls / ceilings in some other unused part of the coordinate space, but then the transitions between surfaces that connect are not going to work

#

i guess maybe you could generate links between all of the individual grid cells but ugh

opal crest
#

Yeah, I assume links, because you're going to want to change a bunch of things (like movement mode) at the same time.

mint terrace
#

yeah true

#

it would be rather cool to see that system in action though with a visualization of where the agent is (ie where detour sees it)

tardy wolf
#

I'm trying to get my characters to follow a "squad" actor, an invisible marker that determines their general location and their engagement zone.

#

Characters are using the "Move To" task in the tree that comes with the engine, set to the squad's location, but they seem to be getting stuck on corners and that causes them to get separated. Any ideas what might be causing this issue?

#

Squad is the radius sphere just to the right.

#

Okay forgot to add, the characters have a slight offset for formations. Its just adding a small x/y offset to the squad's location.

#

But even setting the offsets to 0 they still seem to get stuck at places

opal crest
#

Two things come to mind to look into:

  1. Looking at the navmesh, I'm not sure your agent radius is large enough. See how close it cuts the corner on the nearby wall.
  2. Are you using any sort of Avoidance? RVO has been known to cause actors get stuck outside the navemesh. Detour is better this way.
tardy wolf
#

Agent for the character or the squad? Or both?

#

Squad is 512 though its a floating pawn and changing that value doesn't appear to do anything.
Character is 1, don't recall why I put it so low.

opal crest
#

For the character: It really helps if the agent radius is at least as large as the capsule. Otherwise you get caught on objects due to collision.

tardy wolf
opal crest
#

From that angle it seems better?

tardy wolf
#

Set the squad to something ridiculously high and its still hugging the wall. Character is 32 and its touching right on the edge of the navmesh.

#

In fact the squad's centre doesn't seem to be on the navmesh at all.

opal crest
#

Characters will frequently hug the very edge of the navmesh. That's often the shortest path.

misty wharf
#

If they don't get stuck when there's only one of them following the squad actor then it's almost certainly some issue where they get stuck on each other

tardy wolf
#

Good point.

misty wharf
#

but if they do get stuck when it's just one, the issue is something else

tardy wolf
#

Zomg, any way to ensure they don't block each other's paths? I have them not colliding but not sure what to do for the nav agents there.

misty wharf
#

if they can't collide with each other then it shouldn't make any difference for navigation

#

the pathing ignores everything that isn't affecting the navmesh

tardy wolf
#

Okay making the nav agent larger seemed to help while offset is zeroed out.

#

I'm going to try giving it formations again and see how they handle it.

#

My intention is that if they can't path-find to their offset then they should default to the squad's true location.

misty wharf
#

make sure they're not trying to navigate to a point that's outside the mesh.. that is likely to make them behave strangely :)

tardy wolf
#

Either partial path or its returning some huge distance to the squad implying its through a wall or something.

#

Aye Zomg that's the plan. If its not a valid location they go to squad.

misty wharf
#

yep

#

project to navmesh might also help

tardy wolf
#

Okay judging from the name, that takes a location and puts it to the closest valid point on navmesh?

#

That's.... new?

#

Task for updating the location is this

opal crest
#

Might have failed to project?

tardy wolf
#

They all ran into the corner too, but a few stayed there like they were stuck.

#

Possibly. I can do a print off the return vlaue.

opal crest
#

Create an extent that's larger than 0, 0, 0 too. That basically how far it'll look for a point in the navmesh.

tardy wolf
#

Got stuck in the tight corridor sooner and they were printing failed.

#

Extent is current 8,8,8

#

Make larger?

opal crest
#

Yeah, that's cm;s. Try 50 or 100.

tardy wolf
#

Would it help to set it to the capsule size for the character? That's 34.

#

Or is that a different unit?

opal crest
#

That should be the same unit.

tardy wolf
#

Okay I'll try that.

opal crest
#

I'd base it on how far your formation can offset. (assuming your squad marker stays on the mesh)

#

You can also just use your original fallback moveto -> the squad marker.

tardy wolf
#

Nah still catching on the wall.

#

Though with that project I suppose I could use the fail state and it move to the squad marker true instead?

#

That should work for my original intention?

opal crest
#

That's probably not perfect, but it sounds like it would keep them in bounds.

tardy wolf
#

Okay along the straight path, they'd hit the wall and then instead of stopping they'd just push to the middle of the formation.

#

Not a great look but it works and this environment is just stress testing at this point.

#

But they're still getting stuck on the corners and not moving at all.

#

Gonna try widening the extent some more.

opal crest
#

That is probably collision. For prototyping you could turn off wall->pawn collision.

tardy wolf
#

Possibly. Would that not cause them to walk through it?

opal crest
#

No, they'll stay on the navmesh.

#

But then check things, like "is my skeletal mesh colliding" and "is my skeletal mesh sticking out of the capsule"

tardy wolf
#

Good point. They are A-posing so they're likely catching.

opal crest
#

It's often some fussy collision detail like that.

tardy wolf
#

Just realised I should probably be using a project to navigation even in the failstate right?

#

So if it can't get to its offset, it will first check that the squad is valid position before trying.

#

Because it does seem like its getting stuck while the squad is right up on the edge of the navmesh.

#

Still getting caught on the corner. First projection is the offset, second is squad location.

#

I'll do collision stuff.

worldly flame
#

is there a way to debug AI's path to target? The AI is seems to be going around the target instead of straight to the target half the time

tardy wolf
#

That's what I'm working through now. If I recall there's no way to really draw a debug "path" like you would with seeing the navmesh though.

#

If you use the "Find Path to Location Synchronously" node however you should be able to pull off the navigation path object from that.

#

Then you can select the path-points. Style of debugging there is up to you, draw raytraces, decals, splines, whatever.

#

Actually sort of wondering why I never bothered to use linetrace for that purpose.

worldly flame
#

let me try that ๐Ÿค”

tardy wolf
#

Excuse the spaghetti but

#

Path start is actor location, path end is the destination. Ignore the "set formation" its not relevant here.

#

Its somewhat bundled with the movement mechanic too but basically

#

It calculates the path in the first screenshot then tries to loop through moving to each point in that path in the second screenshot.

#

The "Create Nav Path" just clears and redraws the path based on how many nodes through the path it is.

#

Actually I'll try to write up a nicer looking one.

#

@worldly flame still need help with a linetrace solution? Just made something that works (though it runs on the ground)

worldly flame
#

oh nice

#

let me try it out

#

thank you!

tardy wolf
#

Basically it uses that same "Find Path to Location" thing before. The path it gives out has an array of all points on it.

#

Then draws linetrace between each.

#

Seems to loop because the final point connects back to the first. It will probably register as colliding though.

#

Anyways @opal crest I have... some kind of progress if you're still here?

opal crest
#

I'm around ๐Ÿ™‚

tardy wolf
#

I've managed to force the characters to "follow" the squad location... sort of. But I've run into another snag.

#

I'm using particles to display what their current destination is and

worldly flame
tardy wolf
#

Also hid the wall they were getting stuck on. Still physically there just not rendered. Anyways.

#

...there's navmesh inside the wall?

opal crest
#

@worldly flame For debugging paths, you can also get the current path from the AI controller on tick, and draw debug points. That'll be the actual path that the controller should be following.

tardy wolf
#

Which would explain why they sometimes will walk on the wrong side of it despite the path cost meant to be super high.

tardy wolf
opal crest
tardy wolf
#

Would that be the same object that gets returned from the Pathfind to Location node?

#

because damn this might be much easier

opal crest
#

That I'm not sure of.

tardy wolf
#

I'll take a look

#

Anyways I'm getting sidetracked. Why is there navmesh inside the walls?

opal crest
#

There often is.

tardy wolf
#

๐Ÿ˜ฆ

opal crest
#

It just usually doesn't matter, since it's not reachable.

#

You can test if the point you get from projecting is reachable.

worldly flame
tardy wolf
#

Aye but I think the problem here is that they're trying to reach it, and the closest point they can get to is on the wrong side of said wall.

opal crest
#

Yeah, that sounds right.

tardy wolf
#

Any solution to that?

opal crest
#

You're getting these points by projecting, so you could test if the point is reachable from the current location of the actor, and if not try a fallback point?

worldly flame
tardy wolf
# opal crest

@worldly flame this returns the same thing I suggested before, use this instead.

worldly flame
#

because i dont see any path ๐Ÿค”

tardy wolf
#

Uh, no idea what the "enable debug drawing" thing is.

opal crest
#

Ooh, I've never seen that node before. I'm not sure.

tardy wolf
#

Looks like an AI task for behaviour tree?

#

I think you can put the solution Epigraph gave directly onto the pawn.

#

I'm testing it now.

worldly flame
#

how do you get the vector out of this navigation data?

tardy wolf
#

Drag off and "path points"

worldly flame
#

oh

#

nice

tardy wolf
#

Same as what I said for the Find Path node. Both return the same object.

#

Should be that though I've not run it yet

#

Wait one while I watch my CPU cry

opal crest
#

Apologies for the mess. This is some spagjetti from a project where I am doing this ๐Ÿ™‚

tardy wolf
#

hoookay that's a lot of errors. Ignore my code.

opal crest
#

This just draws the points, the other lines are feeding a spline that I'm keeping up to date with the current path (which can also be nice for visualizing)

tardy wolf
#

Apparently "get current path" is returning null. Weird.

tardy wolf
#

No wait

#

The first projection is sometimes working as intended and sometimes projecting into the wall which is why they sometimes walk down the wrong side.

opal crest
#

Exactly.

tardy wolf
#

The fallback is the squad's true position.

#

But because the projection is valid, its not getting to that fallback.

#

How can I test the path distance from the offset to the true position?

#

That isn't just a vector distance check?

opal crest
#

Your current path should have a length.

tardy wolf
#

Since that would probably not factor in navigation.

#

Is that not the number of points in the path's array?

opal crest
#

Sorry, there's a way to get the path length (which is the length in units of the path, not number of points).

tardy wolf
#

I think that's what I'm after.

opal crest
#

Nodes don't always line up with C++ API's so I'm googling a bit here ๐Ÿ™‚

tardy wolf
#

Alright, I appreciate it.

worldly flame
tardy wolf
#

Yeah I didn't understand that either, sorry.

#

I'd probably just use the Find Path node on tick but I have noooo idea how bad that would be for performance. Guess if its for debugging you can probably accept that loss though.

opal crest
#

GetPathLength on a NavigationPath object will retun what you need.

#

Super bad ๐Ÿ™‚

#

Find Path Synchronously isn't that bad, I wouldn't do it on tons of actors.

tardy wolf
#

I really want my game to push how many characters can be on at once

#

But also I'm struggling with making meta humans not be too highly detailed.

opal crest
#

๐Ÿ˜„

tardy wolf
#

Yeah they're still trying to get inside the wall.

#

Its only when the squad gets to the very end and the inside of the wall stops being a valid point for them to run towards that they turn about.

#

They really like this wall ๐Ÿค”

opal crest
#

In BP, I think the only way to test if a point is reachable is FindPathToLocationSynchronously. If "Is Partial" return true, it couldn't find a way there.

#

You could then use GetRandomReachablePointInRadius, to get a valid, random target location.

#

Feels a bit hacky.

tardy wolf
#

@opal crest Is Partial seems to have worked perfectly.

#

At least from my testing so far.

ocean wren
#

Quick suggestion for you Cy, turn off collision for your guys, it causes a world of pain, instead use steering forces to keep them apart (if you're using DetourCrowd it should do it already)

#

Makes it easier to get them through doors if they can't block each other, then you just have to clean up edge cases where they're passing through each other

cobalt palm
#

2 questions:

I have a game I am creating where you are a store manager and are able to hire stockers to stock the shelves for you. I got the stocker system working however I want it to be better. As of right now, when there is no shelf to stock, the AI will just roam around getting a random point near it, however, I would like it so that the stocker is rather patrolling in front of the shelves so that the AI isn't just aimlessly wandering into the checkout lanes or leaving the store.

Also, in the game there is a placement system that I will be adding stuff to in the future (Ex: walls, flooring, etc). How would I go about testing something that relies on this placement system so that I don't have to keep manually placing the items every time I want to test something?

misty wharf
#

for the first one just have them check if there's no valid task and assign them to patrol the shelves or something

#

for the second part, it's a bit of a more complex thing, but you can build your system so that in addition to placing them at runtime, you can allow placing them during level editing

#

this way you can have a level where the item you want to test is already placed and set up in the way you need it, and you just load it and play it to test it

cobalt palm
cobalt palm
misty wharf
#

Possibly, you could also have the registers and other non-desirable areas have a different navigation area type which would be more expensive to navigate through, so the nav system would naturally avoid going through them unless it has to

#

and no I don't think there's really any tutorials for it but it's not that complicated to do

#

for example if you have a box that you can place, you would spawn the box actor and put it into the location the player is pointing at (or something along those lines)

#

so since you have the box actor you just put it into the level yourself

#

my video rental store simulator game has a system like that

#

although as a player the building system is slightly more complicated, as you place down a placeholder, attach parts to it, and then you get the finished object - but the placeholder just destroys itself when all parts are in place, and spawns the finished object actor

#

so if I want to test something I simply place the finished object directly into a level

cobalt palm
#

I see. Luckily I made a function in my plot manager BP so that I can a function to spawn the plots so I know where the grid is. I'll have to take a look at that. Thanks

misty wharf
#

If it's difficult to allow placing them you can also just do it through level BP

#

although generally you'd want to avoid using level BPs, I think it should be ok if you're making something which is just for testing purposes

cobalt palm
ocean wren
#

If you're placing things on a grid, then why not use the grid based pathfinder or write your own? then you can add stuff into the pathfinder to suggest places for the AI to go, stuff like influence map data on "last visited" values etc.

ocean wren
#

Don't limit yourself to whatever Epic gives you

cobalt palm
#

Ill have to take a look at that

tardy wolf
#

Related question; what exactly determines the "cost" of a path? I know for A* its distance and you can determine some areas to be "more expensive", but assuming no special ground is crossed and its a straight line what would the relationship between straight distance and path cost be?

#

Mostly just asking because I think I have a solution for them wandering off to the wrong side of a wall.

{
  // Unit has wall between it and squad
}
#

I know its probably going to have its own issues doing that, say if there's more expensive terrain in the squad's formation (partially over water or something) then it'll always say its more expensive but still.

#

Point is, if there's a wall between their offset in the formation and the squad's true position then that pathing cost should be significantly higher?

ocean wren
#

Why don't you just raycast from your squad target location to get your offset locations? there's a navmeshraycast you can use that will stop at the edge of the navmesh

#

If you're getting offsets through walls, you should be raycasting to them

flint trail
#

hmm.. Somehow navigation invokers don't work in my project :/

pure trench
#

Stupid question: how dumb of an idea is it (performance-wise) to have an AI's routines run in regular blueprint as opposed to using a behavior tree, if I want the behaviors to run at a specific timing?

celest python
#

its an unnecessary work to save nanoseconds from CPU time

#

BT are extremely optimized and default nodes written in C++

#

for example normal AI Move To node in BP is a latent task and more expensive than BT's move to node

pure trench
#

Hmm. Okay. Mostly I'm just looking for a (convenient) way for the BT to call functions on a particular blueprint without needing to use an interface for it.

celest python
#

dont use interfaces anyway

#

they are very popular among BP users but its an abuse of interfaces most of the time

#

just have a base class for your characters, use inheritance intelligently and cast to your characters in BT tasks

#

its also fine to create character-specific nodes in BT

pure trench
#

Noted.

#

Guess I'll just do it the way I know I should, then, lol. Thanks for the info.

celest python
#

Np blobthumbsup

mint terrace
flint trail
#

thanks

#

I figured what the issue was

mint terrace
#

by the way the player component automatically is a nav invoker if I remember correctly

#

nice

flint trail
#

I didn't have nav mesh volume

mint terrace
#

yeah that's a gotcha

#

you still need a nav mesh bounds volume in the area you want nav

flint trail
#

somehow I thought when using invokers, volume is not needed

mint terrace
#

I am looking for how to skip that but so far it is unavoidable

#

also be aware of navigating large distances where the nav is not yet generated, it should mostly work but it can be a bit weird sometimes

#

works best for nav that happens within the radius that you ask it to generate

flint trail
#

aye, thanks

celest python
#

@mint terrace I think I managed to love the idea LogicDriver only allows you to determine transitions inside transition nodes without letting state decide on something

#

Though the fact it doesnt generate properties on the nodes when I create them in C++ triggers my OCD severely ๐Ÿ˜‚

celest python
#

For example when playing a root motion animation you call SetAllowTransitionClassEvals(false); and it can not switch to another state

#

SetAllowTransitionClassEvals(false); calls some generic delegate you created in base abstract classes and your custom transition class listens to it

#

but when you are just lurking around etc you can set it to true, so it's basically going to become something you can decide if behavior is interruptable at any state or not

#

and.. if you like to confuse yourself enough you can also add tags into system and create states inside states ๐Ÿ˜‚ like transition classes and only eval while specific tag(s) are added or not

mint terrace
celest python
#

sadly there isnt any

mint terrace
#

Paaatrriiicckkk

celest python
#

from what I can see from source code it only gathers BP properties

#

no idea why, but some Kismet compilation is happening

#

probably its related

mint terrace
#

specifically the only part

celest python
#

When parallel nodes and different transition classes and conduits come into play they are actually useful

#

You can allow switching to a specific state node but disable to another one

#

total control

mint terrace
#

i guess you just mean you dont miss defining transition logic on the state node

#

which is fair

celest python
#

yeah, only issue is using delegates to do that feels so unstructural in terms of design

#

it requires at least two delegates

#

root motion, or running GAS ability etc. calls a delegate to state node

#

then state node calls the delegate to transition class

#

then it allows evals etc.

mint terrace
#

do you need to use delegates because the decision to allow transition is async?

#

this override lets you control it synchronously at least

celest python
#

no, not because of that

#

its because node class can not access to its transitors directly

mint terrace
#

even though i actually didnt use this transition class for anything except for checking its type at runtime

celest python
#

since it can vary, it might not even exist etc.

#

so transition classes has to listen for delegates of states

#

they can both access next and previous nodes

#

i.e. where they come from and which node they are pointing to

mint terrace
#

i see

#

a state (node class) can access its available transitions, but its true they cannot access the state transition that is selected

#

for my use cases i just used the transition types themselves to determine to enable/disable them

#

thats what Early Transition is doing---

#

oh also the one from Any State there

#

normally i disable all transitions because the state node isnt done playing out yet

#

but i leave the Early Transitions available

#

the "fiya" nodes transitions there

#

i love that we are not in #audio just because we came upon this discussion here in #gameplay-ai

#

tbf logic driver is super useful to ai devs

#

and making a music system in it is probably not necessary

#

and also your use case is AI

celest python
#

early transition allows you to run both of the nodes?

mint terrace
#

early transition doesnt run any nodes

#

theres a current state, and then i just control the flood gates on what transitions can happen

#

its not going to be useful for your use case

#

just reflecting on what ive figured out in logic driver i guess

#

in my case transitions still do not mean that the music suddenly changes

#

thats simply because im scheduling the actual change via quartz

#

i enable transitions based on what the upcoming quartz scheduler interval is going to be

#

early transitions can be Beat or Bar

#

i always enable Beat but i only enable Bar in the preceding beat before the end of a Bar

#

if its not an early transition, it is only enabled when we approach the end of the scheduled audio file

#

which is what the state nodes represent

#

i mean i guess the same sort of logic could be applied to any kind of asynchronous action, but i dont think its very scalable

celest python
#

ah, I see now

#

sorry btw my connection has issues since a few days

#

I cant react quickly ๐Ÿ˜„

celest python
#

while FlowGraph exists and free, its completely unnecessary and more work

mint terrace
#

I wrote a web app for dialogs

#

I load them from json at runtime

#

siliex has a dialog system I want to check out

#

nice part about the way I did it is that dialogs are fully authorable without the editor

celest python
#

I'm working on a special dialogue system too

#

Based on Valve's AI driven dialogue GDC

#

But it's one of the most difficult things I tried to implement so far

#

Querying, sorting, finding bazillions of criterions and contexes etc

mint terrace
#

yeah dialogs are hard

#

obsidian has a gdc talk about their system

#

it's insightful

celest python
#

the Unity game?

mint terrace
#

the studio

celest python
#

in my case my dialogues are more like barks, and they depend on the criterion count sorting

mint terrace
celest python
#

i.e. you send Event.CharacterSawShadow and tons of params like Time=Night, Who=James, Ammo=LessThan30, HasNearbyAllies=true etc. and if Event.CharacterSawShadow has a dialogue binded to it with more params its being selected. So dialogue becomes more contextual with more params

mint terrace
#

so it's not so much conversation as conditional response

celest python
#

yeah, its basically like Lyra's message system but system tries to find the dialogue relevant with event tag you sent with the most params

mint terrace
#

conditional selection of dialog trees is super core to a good dynamic conversation system

#

but if you can get by without it being per dialog node then things get a fair bit easier

celest python
#

there isn't any nodes actually in bark based systems

mint terrace
#

yeah that matches what I was thinking

#

more like a rules engine with a data asset per rule

#

with some text and a sound file

celest python
#

yeah, exactly

#

when you say rules engine they actually have an engine inside the shipped game

#

evaluates all of these things

#

and provides a script (dialogue, animation, ai task etc.) in runtime

#

I'm trying to make a minimalistic version of it, by using tags and two FNames only. TMap<FName (who), TMap<FName (map), FCriterionQuery>>

#

FCriteironQuery is basically an fgameplay tag and holds all the relevant params but only drawback is you cant calculate anything

mint terrace
#

would it not be way better to have structs

#

not nested tmap

celest python
#

using maps helps to partition the lookup

#

if event is relevant with a specific character you end up just searching its data

#

rather than querying every characters possible dialogues

#

and some dialogues only happen at specific maps

#

2nd map helps on that

#

and FCriterionQuery is all possible generic dialogue options + map specific options

mint terrace
#

ok I guess for the main character bark set and customization per map, that makes sense

#

and then under that, put the rest of your conditionals

celest python
#

so I found a silly workaround by just sorting gameplay tags by parents

#

event.gotdamaged.insomearea.withsomefriendsnearby.haslowammoetc.

#

tag with most parent wins and its dialogue get executed

#

but it reduces the contextual dialogue efficiency

mint terrace
#

0.002ms the first time you need to check something

#

you can cache that

#

unless you have 5000 params the query can check

celest python
#

I'm trying to find an efficient way for that

#

you basically loop all FProperties in your UClass* and map them to do the caching operation

mint terrace
#

either gather everything into fast storage and check the queries against that or make a cache map

celest python
#

what is a fast storage?

mint terrace
#

I just mean do the reflection exactly once and then evaluate the bark options against the stored results of the reflection

celest python
#

ah, I see

mint terrace
#

or, do the reflection on demand if the query calls for it

#

and cache the result, so that any other query that needs to check that value can reuse it

celest python
#

gotcha, thanks

#

that was insightful

mint terrace
#

web dev gonna cache ยฏ\_(ใƒ„)_/ยฏ

ocean wren
#

WEB DEV!!!!!??? outrage! ๐Ÿ™‚

#

this is NOT AI ๐Ÿ™‚

#

I think an AI is producing all these web dev tech stacks though, there are so many of them

misty wharf
#

We have a browser based wysiwyg design tool and it would be interesting to see if we could use AI to do basic designs in it

#

but nobody really has the time or expertise to try it

ocean wren
#

Aye, there's definitely fertile ground in looking at ML based tool automation

#

Got a funding pitch event on tuesday for that.. ML based PCG stuff for UE

#

Hopefully get some small funds to work on it

#

Also got a couple book chapters to write before the end of summer and a demonstrator to produce for satellite visualization

#

Busy times ๐Ÿ™‚

celest python
#

TL;DR state machines allowing only transition classes to decide on the flow of the SM

ocean wren
#

Thats the usual pattern.. generally you have enter/update/exit and the update allows transitions. I can see an implementation where you have a conditional base class that allows transitions by returning true and you update your logic and then check all transitions

#

Not sure how the plugin you're using does it, but traditional state machines have some logic in the update that checks if the transformation should occur

#

The reason why that's such a pain, is that as the number states goes up, the transitions become exponentially more.. so you need to partition, usually using heirarchy

#

BT's came about so you can avoid explicit transitions

hallow flint
hallow flint
#

A few months back there was a nice conference where several studios and researchers presented ai/ml based methods for various tasks

#

All in the domain of game development

#
#

There was some cool stuff, where the researcher created ai assistants for asset placement in level design tasks

#

A lot of PCG stuff I've seen has mostly been done with tools like Houdini, I assume you're doing something else?

granite pewter
#

help i can no longer acces these options cause the drop down doesnt exist?

misty wharf
#

Your senses config array is empty

granite pewter
#

oh...

hallow flint
#

It's not flickering it's just executing that branch in your BT over and over. Remember that BTs are being constantly evaluated based on the specified rate, if you want it to not flick as much considering slowing down the tick rate of the BT or adding a delay node after your moveTo if your intention is for the AI to wait before going through the tree again and thinking of its next move

granite pewter
#

i mean it found the player it should move to but it wont move

#

ill try the delay on move to

#

and after

misty wharf
#

it'll do that when the move fails or completes immediately, since it has nothing else to do after it

#

if you pause you can use the stepping function in the BT editor to see where the execution goes

granite pewter
#

what if the ai is too close to the player thats why it cant move?

#

so it counts as a succes

#

i have the radius set to 100 is that much lol

misty wharf
#

If it's supposed to move to the player then most likely that would immediately just cause the move to succeed

#

100 unreal units is 100 cm, so 1 meter

hallow flint
granite pewter
#

nope thats not the case

#

loweing it to 1 same thing

hallow flint
#

Try printing out the vector it's trying to move to

#

See if it's actually updating like you think it is

granite pewter
#

the timer nodes didnt work

#

ai still wont move to player

#

print vector good idea

hallow flint
#

Show how you're assigning the blackboard key for the position it should move to

granite pewter
#

ill print character vector in red and ai move to vector in purple

#

or smth

#

um how can i print the blackboard vector value?

hallow flint
#

Just print the output of your RandomLocation

#

Right where you showed that screenshot

#

Make sure that's updating

granite pewter
#

hmmmm

#

it seems the vecor doesnt update on character hmm

hallow flint
#

Did you set the property of that Vector struct to editable like shown here

#
granite pewter
#

yes i did

hallow flint
#

Hmmm I usually rely on the other method of assigning blackboard values, where you specify the string name of your blackboard variable

granite pewter
#

i cant set my vectors values in details tab

#

i wanna set this value to expose on spawn but i cant cause i dont have the fkn details tab

#

and it says its enabled but its clearly lying

hallow flint
#

Lmao

hallow flint
#

I haven't tested this in ue5 yet, maybe someone else knows?

granite pewter
#

nah ue5 ui is so inconvenient and annoying to work with

#

so many extra clicks needed

#

shame

hallow flint
#

But if you want this to work try.

Getblackboard->setvalueasVector, and type in "Vector" on the keyName input

#

Should probably change that variable name to something else though, it might get confusing

#

Call it playerLocation or something

granite pewter
#

i cant have 2 vectors

#

what would fix my issue is just having a player charcater vector loaction

#

but no i can only set 1 vector

#

why wont it let me be spesific?

hallow flint
granite pewter
#

well yea it allows me do it there but not in the blueprint editor

#

how am i gonna set vector 2 when it only has set vecotor value its like setting all of them or smth

#

its jsut so stupid i cannot set induvidual values in the blurprint

#

let me set difrent vectors reeeeee

hallow flint
#

let me open up unreal real quick

#

this is how i do it

#

So this also works

#

but you said your details panel isn't showing up peepoShrug

granite pewter
#

wstill same bug :<

hallow flint
#

wait, that didn't work, the ai is still not moving?

granite pewter
#

um could it be my casting isnt working?

hallow flint
#

Did you try printing out GetActorLocation and making sure that changes while your character is moving inthe world?

granite pewter
#

it only updates once ai sees me or unsees me

hallow flint
#

Try get player pawn instead of getplayercontroller on your second image

granite pewter
#

hm yes casting good now its updating constantly

#

but ai still no moves

#

ok i manged to make it move

#

just had to change from vector to player

hallow flint
#

oh nvm, i see that on find_Player, you're setting the output key to player

#

got it

granite pewter
#

i made another vector called player

#

yes thanks for helping me troubleshot this

hallow flint
#

no problem ๐Ÿ‘

granite pewter
#

what would be the easiest way to set a timer for lost sight? i need to make smth that makes ai keep following me for a second even if it loses line of sight

hallow flint
#

I believe that's already available as part of the AI_Sense stuff

#

max Age should be the param you're looking for setting the time before an AI stops searching you when out of range

#

playing with the values on there should get you what you need

#

And try out some of the AI debuggign tools to make sure the behavior is expected as you play with the different values

ocean wren
#

Essentially, we use ML to build a model of the world, then use that to populate it

#

But do it in a way that allows for "prompts" for editing

#

I've been inspired recently by a lot of the NLP based generative art

hallow flint
#

do you have to fine tune the model for the given world that you are generating, or is there some sort of existing model that takes as input some video and generates some output that you can use

#

ohhh

#

NLP

#

prompt-based generation?

ocean wren
#

We train on a bunch of movies.. or rather, on the output of pre-trained models on a bunch of movies (Movienet dataset but expanded)

#

So this project is to explore a bit the idea of prompts for the immersive space

#

i.e. we might need voice guided generation

#

or image guided (select an image similar to what you like)

hallow flint
ocean wren
#

But also, the idea of keeping some things and generating only partial scenes is a key thing

hallow flint
#

transformers, CNNs?

ocean wren
#

its actually whats called an ensemble model.. so we use a load of off-the-shelf models to output specialist data, then accumulate that using a graph neural network

hallow flint
#

huh

#

that's pretty cool

ocean wren
#

specifically a spatio-temporal graph neural network

hallow flint
#

what's the actual output of these models?

#

a full-on 3d world?

ocean wren
#

its a scene graph description

#

that then gets parsed into the 3D world

hallow flint
ocean wren
#

basically the GNN predicts the probability of specific graph node expansions

#

the temporal stuff comes as movies change scene information over time.. characters enter shot and leave etc

hallow flint
#

do the nodes serve as object entities (chairs, walls, decoration) etc?

ocean wren
#

so we model the difference in scene over time

ocean wren
#

yeah, basically, nodes are objects and edges are relations, like "on top of" or "loves"

hallow flint
#

huh

#

that is a pretty neat idea

#

very cool

ocean wren
#

so we have this sort of high-level description of scenes by assembling it from dozens of pre-existing specialist models

#

and then learn on that

#

of course one limitation currently for this approach, is that some of the pre-trained models aren't great, especially on films which are outside of their training set

#

So we aggregate predictions across a range of similar models to help a bit

#

i.e. get N number of models to predict the same thing, aggregate their predictions

hallow flint
#

are you guys going to have to some additonal labeling or data collection for the pre-trained models?

#

i don't even know how movie datasets are annotated lol

ocean wren
#

no, most of that is just pretrained stuff.. you can download the movienet dataset and see examples in action

hallow flint
#

i would hope it's not on a per-frame annotation of what objects are in a given frame haha

ocean wren
#

yeah, thats exactly it

hallow flint
hallow flint
#

lol

ocean wren
#

a sparse graph of changes for per-frame predictions

#

the key is that most of the time the graph won't change, so we only store changes and then have "keyframe" graphs every N steps to help

#

bit like video

hallow flint
#

So this approach seems very computational heavy to train, you guys have some sort of training cluster or using cloud services to do this kind of training

ocean wren
#

Well, one limitation for existing models, is that they only sample the video every 5 seconds or something.. you would never catch the really subtle timing stuff

ocean wren
#

Yeah, I'm doing a lot of it in a kubernetes cluster

hallow flint
ocean wren
#

cloud

hallow flint
#

have you gotten any results or still training?

ocean wren
#

well, technically, its a mix

#

its all in-progress right now

#

I'm actually going for funding so I can buy another PC to actually work on ๐Ÿ™‚ all mine are busy ๐Ÿ™‚

hallow flint
#

hahaha

#

that's awesome

#

what industry are you in if you don't mind me asking

ocean wren
#

I work as a senior lecturer at a university

hallow flint
#

US-based?

ocean wren
#

UK

hallow flint
#

ahh okay

ocean wren
#

University of Lincoln

hallow flint
#

i'm in defense, we do a lot of ai/ml for different applications

ocean wren
#

Yeah, I'm literally surrounded by defense guys ๐Ÿ™‚

hallow flint
#

is your research mostly focused on PCG?

ocean wren
#

We are smack in the middle of most of the UK's air defence command

#

drones and the like

hallow flint
ocean wren
#

No, my research is more on behaviour understanding and generation

hallow flint
#

Ahh got ya, things related to Explainable AI. I assume you do some RL stuff too?

ocean wren
#

Having my students make a simulation to train drone ML next semester.. seemed like a fun thing

ocean wren
#

Yeah, RL, imitation learning

hallow flint
#

that's awesome

ocean wren
#

Not sure yet.. I've played with airsim, but to be honest the drone isn't really the important bit.. this is a graphics class for postgrad students

#

so I'll probably just mockup a drone for them

hallow flint
#

Ahh got ya, airsim had some nice example for training RL agents using stable-baselines3 which makes it very easy to just try out different algos and change up reward function for different behavior

ocean wren
#

the point is to get them to explore the code/graphics for optimizing a crowd.. but from the top down ๐Ÿ™‚

hallow flint
ocean wren
#

Yeah, I have a student who just finished a Unity based RL project.. turns out their ML agents codebase isn't great

hallow flint
ocean wren
#

Not sure I'm able to say why.. but its a defense requirement ๐Ÿ™‚

#

And it seemed cool

hallow flint
#

ahh got ya

#

lol

#

i understand

ocean wren
#

You can imagine though, drones.. crowds ๐Ÿ™‚

hallow flint
#

yeah nodders60fps

#

lol

ocean wren
#

Some interesting little specific features they wanted

#

Should make for a great assessment for MSc graphics guys

#

So they can explore the mass, control rigs, shaders etc.

#

We should have the mocap space up and running by then.. should be fun!

hallow flint
#

yeah that's pretty cool, what is the class you teach called?

ocean wren
#

I teach a bunch.. mostly graphics, pcg and game programming

#

but also cloud, big data etc. more CS stuff

hallow flint
#

yeah that's a lot of topics, cool stuff

ocean wren
#

Way too much this last year, covering for other people.. it damn well better be less next year ๐Ÿ™‚

hallow flint
#

haha

#

were you teaching remotely?

ocean wren
#

But my main thing is basically programming tech stuff, ML, AI, Cloud, Unreal etcf.

#

No, most of it is face-to-face again now

#

only one I did mostly remote is cloud.. because its cloud ๐Ÿ™‚

hallow flint
#

haha

hallow flint
#

except i don't teach im just a research engineer lol

ocean wren
#

Yeah, cloud and defense probably hard to get together ๐Ÿ™‚

#

Yeah, I kind of wish I'd gone the research engineer path myself these days

#

so much cool tech to play with

#

Way too much politics in academia for me

hallow flint
ocean wren
#

Yeah, we teach mostly agnostic, but I do rely on azure

hallow flint
ocean wren
#

But if I were in defense, I'd focus on on-prem ๐Ÿ™‚

hallow flint
#

what's on-prem?

ocean wren
#

I really need to find somewhere to work for where they have an unlimited supply of GPU's ๐Ÿ™‚

#

on-prem = on premisis, basically onsite ๐Ÿ™‚

hallow flint
opal crest
#

Hah, write a crypto-based grant ... profit?

ocean wren
#

Yeah, I was talking with people trying to build an open source Imagen/DallE2 copy

hallow flint
#

im from a small company so a big issue is have enough training data, but FAANG companies suffer from the opposite, too much data hahaha

ocean wren
#

I mean, that training is not a joke.. 300k gpu hours?

hallow flint
ocean wren
#

yeah, new image/text pair datasets are 5 billion images big ๐Ÿ™‚

#

But goddam if these diffusion models haven't given me a real kick to get this video stuff to the same level ๐Ÿ™‚

#

Our cluster is teeny tiny compared though ๐Ÿ™‚

hallow flint
#

does the university give funding for the compute resources you're using or did you kinda just have to slowly build to what you have through grants?

ocean wren
#

If you're struggling for training data, synthetic is the way to go ๐Ÿ™‚

hallow flint
#

oh yeah we heavily rely on synthetic data

#

lol

ocean wren
#

I've had to cobble it together with tiny grants here and there

hallow flint
#

you should get some of the defense guys to give you funds

ocean wren
#

Frustrating because I'm surrounded by agri-robotics guys ๐Ÿ™‚

hallow flint
#

lol

ocean wren
#

Yeah, I'd love that, but without a large research group, its difficult to secure

hallow flint
#

so idk how it works in the UK

#

but for us

#

we've had professor give presentations at our companies

#

professor that want to partner up and get some of that peepoMoneyRain

ocean wren
#

And the worst part is that there are SO many projects we could do, but a lot of my colleagues are very much against the defense sector collaborations

hallow flint
#

kinda share their research and we go 'hey we could use some of that!'

opal crest
#

Grant life is weird compared to corporate. Back when I was a research assistant we'd have years where we were practically duct taping systems together. Then there was the year the prof had us spec a quarter million dollars worth of hardware because if we didn't the money would evaporate.

hallow flint
#

My understanding is that, that decision is up to the given professor, no?

granite pewter
ocean wren
#

Yeah, we have a regular meeting with defense guys, but there's only a small number of us

#

Yeah, definitely a personal thing

hallow flint
#

or can the university say 'no you can't partner with defense'

ocean wren
#

Well, Lincoln is heavily in with the Navy weirdly, given we're surrounded by air force ๐Ÿ™‚

#

I'm basically a "I'll work with anyone on stuff that's cool" mindset

hallow flint
ocean wren
#

Yeah, I've had that too, basically your budget gets eaten by the Uni if you don't spend it

#

so I spent it ๐Ÿ™‚

#

on VR kit ๐Ÿ™‚

hallow flint
#

oh peepoYikes

#

we have same issue

#

if i dont use the budget company takes it and i won't get any of it lol

ocean wren
#

Yeah

#

We basically get it paid into our academic accounts

hallow flint
ocean wren
#

and it gets hoovered up if we don't spend quickly

#

Most of the defence sector is VR based training and simulation to be fair, which is why I like it

#

Its really goddam cliquey though.. all the air force guys know each other ๐Ÿ™‚

hallow flint
#

simulated training for defense personnel

ocean wren
#

I keep trying to get my undergrads that its the perfect games job ๐Ÿ™‚

#

stable and cool tech

hallow flint
#

i know!

#

that's what i always tell myself

ocean wren
#

They won't listen ๐Ÿ™‚

hallow flint
#

whenever i have to use unreal for work

#

"im getting paid to make games"

#

lol

ocean wren
#

They'd rather work as a wage slave for activision or something

hallow flint
#

yeah it's a real shame, i thought about joining the gaming industry

#

but the lower wages and extra work hours made it a no for me lol

ocean wren
#

Although, to be fair, I had a grad come to me at his graduation last month? and say he got a job doing Unreal sim stuff ๐Ÿ™‚

hallow flint
#

I like not working extra and getting paid decently lol

hallow flint
ocean wren
#

I'm a games guy by background, but the industry is a bit of a shitshow to be honest

hallow flint
#

unreal is seeing a lot of use in tons of industries nowadays

ocean wren
#

He was doing simulations for automated driving if I recall..

#

Yeah, I keep pushing that narrative "learn games, go and work anywhere"

#

I can point to films, training, defense, simulation, modelling etc

#

The skillset is massively valuable

hallow flint
#

right!

#

I know

#

i always tell people

#

instead of writing 'i make games' write 'i build simulation environments'

#

instantly get more eyes on your resume

#

lol

opal crest
#

Yeah. Work in non-games, spend time working on games as a hobby, and you'll earn more, have more vacation + free time leftover.

hallow flint
#

haha

#

that's exactly what i do

#

lol

ocean wren
#

And hopefully have professional management that don't try and treat you like crap

opal crest
#

Hah! I think that's a good slice of this discord ๐Ÿ™‚

ocean wren
#

Seriously, if there's one thing I've taken away, its that management can have a huge impact, positive or negative. I've worked with some real asshats ๐Ÿ™‚

#

Just genuinely clueless, or even semi-evil people who had no right to be managing anyone, never mind seasoned programmers

opal crest
#

Don't undersestimate good mgmt. I am happily moderately underpaid at my current company because the culture is too good.

ocean wren
#

Yeah, its worth a lot to work with management you trust

hallow flint
#

yeah that's insane, i have been lucky enough to have good managers. i'm not really that many years into the industry but here's to hoping i don't come across a bad one ๐Ÿคž

opal crest
#

Well, now that you've had good managers, you'll see the red flags faster than most.

hallow flint
#

haha good point

ocean wren
#

I was in the games industry while it was growing up.. the growing pains were real

hallow flint
#

were you working indy?

ocean wren
#

people who were in position because they were there the longest etc..

#

I worked for Team17 on the worms games mostly.. plus a few others before and after

#

So indie company of around 100-200 ish

hallow flint
#

ohh nice!

hallow flint
ocean wren
#

Went from like 40 people, to 200, back to 80, up to 140 ๐Ÿ™‚

hallow flint
#

or sometimes they don't give you the compensation you deserve just because you haven't been there long enough, problems goes both ways

hallow flint
#

can't imagine the stress of not knowing whether the downsizing would leave you out of a job

ocean wren
#

Yeah, that's an issue in academia too.. often people get blocked from career progression because some boss doesn't like them..

opal crest
#

Oof. I've been through that. 80 people world wide, up to 1k, back down to 250? Slowly climbing back up after.

ocean wren
#

Well, I once led a workers revolt and demanded we all got sacked as long as our "manager" went too ๐Ÿ™‚

hallow flint
#

hahaha

hallow flint
ocean wren
#

They got rid of the manager in question

opal crest
#

Yeah.

#

We went public, and that got us a lot of funding, but then we got skewered by some market trends (our margins tanked).

ocean wren
#

They'd put this idiot in charge, who had a PhD in astrophysics.. the git would literally suggest a new game every morning..

opal crest
#

We found investors that bought the company, took it private and that stopped the bleeding, and gave us time to find new markets.

ocean wren
#

markets demand growth at all costs

opal crest
#

Yep. We were still generally viable, but when you are public and not growing, you bleed money fast.

hallow flint
#

wow

ocean wren
#

Well, investors and markets demand returns right? not making %age? you're gone

#

I'm still looking for the Unicorn gig, where I get to work on cool stuff, but don't have idiotic management or funding/accounting guys to deal with ๐Ÿ™‚

#

I did a startup a few years back.. that was eye opening

opal crest
#

It always seems like you're in that zone from the outside looking in.

ocean wren
#

We were doing a thing called StoryBricks, which was an AI for storytelling

hallow flint
ocean wren
#

Eventually sold the tech to Sony Online Entertainment for Everquest Next

#

But we did a whole bunch of pitches and investor meetings.. so I learnt a ton about what I hate about it all ๐Ÿ™‚

hallow flint
ocean wren
#

Like meeting with investors who had worked at EA and realizing they were treating games like tinned goods ๐Ÿ™‚

hallow flint
ocean wren
#

Nah, Sony shitcanned the whole SOE thing

hallow flint
#

i assume it is the same for you when you have to apply for grants

ocean wren
#

We sold out just in time I think

#

the CEO went on to be a tech VC etc

hallow flint
#

ohh nice timing

ocean wren
#

Yeah, my grants are tiny because its just me and occasionally a few others

#

So I have to scramble for anything I can get