SimulationLOD in Mass Framework

Published on

How does SimulationLOD work in Mass Framework? Mass Framework is a ECS for managing crowds and traffic in Unreal 5.0 and above.

Platforma

SimulationLOD with MassGameplay built-in resources

  • SimulationLOD Trait

    • Built-in MassGameplay.
    • Trait located At UE5/Engine/Plugins/Runtime/MassGameplay/Source/MassLOD.
    • SimulationLOD trait shares the same Trait file with LODCollector.
    void UMassSimulationLODTrait::BuildTemplate(FMassEntityTemplateBuildContext& BuildContext, const UWorld& World) const
    {
    	BuildContext.<mark>RequireFragment&lt;FMassViewerInfoFragment&gt;</mark>();
    	BuildContext.<mark>RequireFragment&lt;FTransformFragment&gt;</mark>();
    
    	FMassSimulationLODFragment& LODFragment = BuildContext.AddFragment_GetRef&lt;FMassSimulationLODFragment&gt;();
    
    	// Start all simulation LOD in the Off 
    	if(Params.bSetLODTags || bEnableVariableTicking)
    	{
    		LODFragment.LOD = EMassLOD::Off;
    		BuildContext.AddTag&lt;FMassOffLODTag&gt;();
    	}
    
    	FMassEntityManager& EntityManager = UE::Mass::Utils::GetEntityManagerChecked(World);
    
    	FConstSharedStruct ParamsFragment = EntityManager.GetOrCreateConstSharedFragment(Params);
    	BuildContext.<mark>AddConstSharedFragment(ParamsFragment)</mark>;
    
    	uint32 ParamsHash = UE::StructUtils::GetStructCrc32(FConstStructView::Make(Params));
    	FSharedStruct SharedFragment = EntityManager.GetOrCreateSharedFragmentByHash&lt;FMassSimulationLODSharedFragment&gt;(ParamsHash, Params);
    	BuildContext.<mark>AddSharedFragment(SharedFragment);</mark>
    
    	// Variable ticking from simulation LOD
    	if(bEnableVariableTicking)
    	{
    		BuildContext.AddFragment&lt;FMassSimulationVariableTickFragment&gt;();
    		BuildContext.AddChunkFragment&lt;FMassSimulationVariableTickChunkFragment&gt;();
    
    		FConstSharedStruct VariableTickParamsFragment = EntityManager.GetOrCreateConstSharedFragment(VariableTickParams);
    		BuildContext.<mark>AddConstSharedFragment(VariableTickParamsFragment)</mark>;
    
    		uint32 VariableTickParamsHash = UE::StructUtils::GetStructCrc32(FConstStructView::Make(VariableTickParams));
    		FSharedStruct VariableTickSharedFragment = EntityManager.GetOrCreateSharedFragmentByHash&lt;FMassSimulationVariableTickSharedFragment&gt;(VariableTickParamsHash, VariableTickParams);
    		BuildContext.<mark>AddSharedFragment(VariableTickSharedFragment)</mark>;
    	}
    }
    
Vrealmatic consulting

Anything unclear?

Let us know!

Contact Us