Some questions about my use case in unreal engine

78 views
Skip to first unread message

Chrille

unread,
Jun 14, 2021, 3:14:13 PM6/14/21
to Atoms Crowd
Hi! I am thinking about picking this up but was hoping to find out it will work for my project.

I got a project that connects to twitch and give every viewer of the stream a customizable avatar/actor. They will be very simple so my first question is: 
1: Do you have support for skeletal meshes without limbs and single digit amount of bones?

2: Can I give a ID for every spawned actor and change how they look/act when they spawn based on different variables?

3: Can I change behavior, trigger animations and change material settings on only the actor based on ID and get information from that actor like world transform and socket data?

4: Can I attach things like particle systems to them like I am used to?

5: Is it possible to use the ragdoll system and then go back to normal behavior? 

6: If we just think about the actors standing around with a simple idle animation and nothing else going on how many should I realistically be able to have? I was aiming for 5000-10000 before with a system that switched between static and skeletal meshes but I am hoping this could be a better solution.

Ty in advance!

Daniele Federico

unread,
Jun 15, 2021, 5:16:11 AM6/15/21
to Atoms Crowd, Chrille
Hello Chrille,
thanks for  your message.

To reply to your questions:
  1. Yes, of course. Atoms does not care about which skeletons you feed into its system. Atoms skeleton are abstract with the only option that you can have legs and pelvises for terrain adaptation and foot locking. 
  2. Yes, you can with C++ or Blueprint. Atoms already gives an unique ID to each new generated agent, but you can also attach your own metadatas to the agents.
  3. Atoms does not support sockets, but you can attach static meshes to joint.  You can also do everything else that you mentioned. 
  4. You can attach cascade emitters so you can actually emit particles from each agent. If you want to use Niagara, you could use a blueprint to move the Niagara emitters based on the agent positions.
  5. Unfortunately Atoms does not support a recovery system yet, so you can't do that.
  6. It depends from a bunch of factors, what is your target hardware? Having skeleton like the one you mentioned will help performances  a lot, the other important thing to consider is to keep the number of skeleton meshes to a minimum so that are less draw calls to send to the GPU. How many variations do you want to have? or you want to replicate just a single character?
Thanks,
Daniele

Chrille

unread,
Jun 16, 2021, 3:40:28 AM6/16/21
to Atoms Crowd, Daniele Federico, Chrille
Ty for the quick answers! I have some follow up questions for what you said. 


"Atoms does not support sockets, but you can attach static meshes to joint." 
Can I do this at runtime?

"You can attach cascade emitters so you can actually emit particles from each agent. If you want to use Niagara, you could use a blueprint to move the Niagara emitters based on the agent positions."
Will it be possible to do the same with niagara in the future? Will have to test but I think moving them through blueprint will be too heavy. Also is the same true for other things? like adding text over their heads in a performant way. 

"Unfortunately Atoms does not support a recovery system yet, so you can't do that."
Is this because they are "killed" and replaced with a ragdoll mesh or because you don't have a animation system to make them stand up again? Since my actors are so simple and basically balls I just need to rotate them to stand up.

"It depends from a bunch of factors, what is your target hardware? Having skeleton like the one you mentioned will help performances  a lot, the other important thing to consider is to keep the number of skeleton meshes to a minimum so that are less draw calls to send to the GPU. How many variations do you want to have? or you want to replicate just a single character?"
 I am targeting fairly high end pc hardware but I want it to be as lightweight as possible so I am hoping to cheat in all the ways I can find. simple sphere collisions, blob shadows(or no shadows at all) and so on. 
Right now the plan is that 99% of them will be using the same character using only one skeleton mesh and the customization will be things like different material settings and hats with fully static meshes or static meshes with simple vertex animations. 

For smaller streams with less viewers I am hoping to have this lightweight enough to run in the background while they play other games but if someone with 10 000 viewers is using it I want it to be able to display a ton of actors but still be performant enough for them to do simple commands like walk to this spot or jump around once in a while.

Alan Stanzione

unread,
Jun 16, 2021, 4:34:48 AM6/16/21
to Chrille, Atoms Crowd, Daniele Federico
"Atoms does not support sockets, but you can attach static meshes to joint." 
Can I do this at runtime?
No it is not possible to do it at runtime with the current setup since the static mesh asset are added to the agent type definition. If you want attach them at runtime you need to create an actor and then update it's position at each tick getting the transformation from the agent joint you want attach to.


"You can attach cascade emitters so you can actually emit particles from each agent. If you want to use Niagara, you could use a blueprint to move the Niagara emitters based on the agent positions."
Will it be possible to do the same with niagara in the future? Will have to test but I think moving them through blueprint will be too heavy. Also is the same true for other things? like adding text over their heads in a performant way. 
It is not possible to do the same thing with Niagara. Since Niagara compute everything on GPU. It is more efficient to create multiple emitters and move them at each tick query the agent joint that drives them. This can be done easily with a custom behaviour module.

"Unfortunately Atoms does not support a recovery system yet, so you can't do that."
Is this because they are "killed" and replaced with a ragdoll mesh or because you don't have a animation system to make them stand up again? Since my actors are so simple and basically balls I just need to rotate them to stand up.
There is no automatic blend system that blends the ragdoll pose to the animation pose, but you can create or delete ragdolls at runtime.

"It depends from a bunch of factors, what is your target hardware? Having skeleton like the one you mentioned will help performances  a lot, the other important thing to consider is to keep the number of skeleton meshes to a minimum so that are less draw calls to send to the GPU. How many variations do you want to have? or you want to replicate just a single character?"
 I am targeting fairly high end pc hardware but I want it to be as lightweight as possible so I am hoping to cheat in all the ways I can find. simple sphere collisions, blob shadows(or no shadows at all) and so on. 
Right now the plan is that 99% of them will be using the same character using only one skeleton mesh and the customization will be things like different material settings and hats with fully static meshes or static meshes with simple vertex animations. 
I suggest to use a hybrid system between atoms and Niagara, Even if the agent pose is not computed, the gpu could takes a lot of time to skin that number of agents depending of how many number of joints do you have and how many influences. Usually the best workflow is to have a mid ground handled by atoms agents, where you want better animations and AI behaviours, while on the background using Niagara with vertex animations.

For smaller streams with less viewers I am hoping to have this lightweight enough to run in the background while they play other games but if someone with 10 000 viewers is using it I want it to be able to display a ton of actors but still be performant enough for them to do simple commands like walk to this spot or jump around once in a while.
On a side note. If you need to replicate those agents over the network you need to take care which agents are synchronized at every frame. Usually you are able to synchronize at every frame 2-300 hundreds of agents maximum.

Best regards

--
You received this message because you are subscribed to the Google Groups "Atoms Crowd" group.
To unsubscribe from this group and stop receiving emails from it, send an email to atoms-crowd...@toolchefs.com.
To view this discussion on the web visit https://groups.google.com/a/toolchefs.com/d/msgid/atoms-crowd/312f7500-2af2-47c9-8d14-e850c9855fc9n%40toolchefs.com.


--
Alan Stanzione | CTO - Co-Founder

Toolchefs LTD
86-90, Paul Street,
London, EC2A 4NE


LTD Company registered in England & Wales # 09345032

Chrille

unread,
Jun 21, 2021, 3:57:26 AM6/21/21
to Atoms Crowd, al...@toolchefs.com, Atoms Crowd, Daniele Federico
Ty again for the answers!
I ended up buying it but I am struggling with finding info on how to spawn single agents with specific settings and look in blueprints. I found this "https://toolchefs.atlassian.net/wiki/spaces/ASD/pages/1764884623/Creating+agents+with+Blueprint" but unless I am missing something I would have to make a agent type for every variation. Also I am not entirely sure how to set metadata on spawn of agents. 

For example if I wanted to spawn a agent with a selected weapon in one hand, selected shield in other hand and a selected helmet. and then having 10 different options for each would make things quickly get out of hand.
Is there a more flexible way of doing this without adding several static static meshes for each agent at runtime and moving them on tik? feels like that would eat up performance.

Alan Stanzione

unread,
Jun 21, 2021, 10:18:55 AM6/21/21
to Chrille, Atoms Crowd, Daniele Federico
Hello Chrille,
in your case you can use a single agent type and multiple agent variations. Please have a look here:

the video is a bit old since there wasn't yet the attachment. But if you use the last AtomsUnreal build you can add the static mesh as an attachment to a single agent variation.
Then when you need to spawn your new agent you can set directly the variations after the initialize new agent node like this:

image.png

Thanks
Alan
Reply all
Reply to author
Forward
0 new messages