MaaassParticle
A UE5 plugin that renders large-scale crowds through Niagara and can control them via state management. This is the Epic project deliverable from Krafton Game Tech Lab 1st Generation Team 2.
Install / Use
/learn @DevDingDangDong/MaaassParticleREADME
MaaassParticle Plugin Documentation
Navigation
Overview
The MaaassParticle plugin
Features
Mass Entity + Niagara Integration
We have improved the performance of the existing Mass Entity system by implementing rendering through Niagara.
By integrating values calculated through Mass Entity—such as location, velocity, orientation, and anim state—with Niagara, we achieve real-time rendering effects.
At the same time, all existing Mass Entity functionalities remain fully available!
BAT + LOD + Blending
By applying BAT technology to the static meshes rendered in Niagara, we enable animation playback.
We provide dynamic LOD functionality within a single static mesh, which was difficult to implement with Unreal's existing AnimToTexture system.
Supports BAT-based CrossFade and Frame Blending. These can be selectively enabled or disabled per LOD level, allowing for optimization by applying animation blending only to nearby meshes.
Trigger Volume Interaction System
A runtime, level-based interaction event system integrated with MassStateTree is provided in the form of a component.
When an entity enters or exits a trigger volume, individual events can be sent to each entity using configurable GameplayTags.
All registered volumes are managed using a hierarchical hash grid.
At runtime, each entity's position is evaluated to detect entry or exit from volumes, and the corresponding events are dispatched to the MassStateTree system.
Tutorials
MaaassParticle: Make BAT Tutorial https://youtu.be/byckCPl0pgo
MaaassParticle: Make Spawner Tutorial https://youtu.be/KUVYJl429o0
MaaassParticle: Trigger Volume Tutorial https://youtu.be/ZxyAyNVwVhQ
Installation
Requirements
- Unreal Engine 5.6
- Windows operating system
Installation Steps
Usage
Overall Usage
- BAT Static Mesh & BAT Data Asset
- Mass Data Asset & State Tree Data Asset Setup
- MP Spawner Placement and Configuration & Zone Graph Placement
Basic Usage
Create BAT Asset
Overall Process
-
Prepare Mesh & Material for BAT Before Baking
-
Create BAT Asset
-
Configure Material for BAT After Baking
Detail Process
0. Open EUW Maaass Particle Widget
<img width="227" height="418" alt="OpenEUWMaaaassParticleWidget" src="https://github.com/user-attachments/assets/9e1c7328-f487-4542-bf54-574223a7306f" />Tools → MaaassParticle Widget
1. Set Package Path and Asset Name
<img width="733" height="600" alt="Image" src="https://github.com/user-attachments/assets/1922c1cc-0a1a-4d8c-ac3b-f765243a3af7" />
By default, the Output Path is hidden until a Skeletal Mesh is assigned.
Once you assign a Skeletal Mesh Asset, the following output settings will appear. The Output Path and Asset Name are automatically populated based on the name of your selected Skeletal Mesh.
- Output Path: This defines the destination directory for the baked assets.
Default Path: It automatically defaults to a new subfolder named after your asset within the main directory: /Game/MaaassParticleBAT/[SkeletalMeshAssetName]/.
Custom Path: To specify a different location, right-click your desired folder in the Content Browser, select Copy Path, and paste it here. - Asset Name: This serves as the base name for the generated files. Standard prefixes and suffixes will be added automatically.
(e.g., an Asset Name of MyAsset will generate files like SM_MyAsset and MyAsset_BAT).
Overwriting and Updating Assets
Using the same Output Path and Asset Name for an asset that already exists will overwrite the previous version. This is useful for iterating and live-updating assets already in use.
Example:
Imagine a Spawner is already placed in your world, playing a baked animation. If you re-bake the asset with a different animation and overwrite the original file, the Spawner in the world will automatically update to play the new animation.
Workflow Summary
- To update an existing asset (e.g., to use a new animation with the same Skeletal Mesh): Use the same Output Path and Asset Name.
- To create a new, separate asset: Use a different Asset Name (e.g., MyAsset2).
2. Prepare Mesh & Material for BAT Before Baking
2-1. Prepare Mesh & Material for BAT Before Baking (AutoMatic)
<img width="730" height="657" alt="Image" src="https://github.com/user-attachments/assets/21e6f09b-285b-4f19-a00f-f746fad70a95" />
- Drag and drop the Skeletal Mesh you want to process into the designated field.
- Click the Duplicate & Replace & BAT Material button.
Clicking this button triggers the following automated sequence:
- Creates a Directory: A new folder named [AssetName]_BAT is created at the specified Package Path.
- Duplicates Assets: It creates copies of the original Skeletal Mesh and its Material, appending the _BAT suffix to their names.
- Configures Material: The required Bone Animation Node is automatically connected within the newly created _BAT material.
- Updates UI: The tool's UI fields are automatically updated to reference the new _BAT assets. You can verify this change by checking that the asset names in the UI now include the _BAT suffix.
Result
<img width="883" height="255" alt="Image" src="https://github.com/user-attachments/assets/f46cbc31-ca47-45e2-9298-2e75d863857f" />
If you need to bake a different animation for the same Skeletal Mesh later, you do not need to repeat the initial setup. Follow this simplified workflow:
- Drag and drop the pre-existing [AssetName]_BAT Skeletal Mesh into the tool.
- Change the Animation to your new target animation.
- Proceed directly to the baking step. Do not click the Duplicate & Replace & BAT Material button again.
The automated setup process (Duplicate & Replace & BAT Material button) is not compatible with materials that use Material Attribute Layers. The automation will fail if such materials are present.
2-2. Prepare Mesh & Material for BAT Before Baking (Manual)
Not Use Material Attributes
- Click the red button in the Widget to copy the material nodes and paste them into the target material.
- Connect the Normal and WorldPositionOffset Texture value to the Input of MF_Bone Animation.
- Connect the output Normal and WorldPositionOffset from MF_Bone Animation to the Final Material Output. <img width="730" height="53" alt="Image" src="https://github.com/user-attachments/assets/ee71bc59-0983-4add-ae3a-ad29defa3f25" />
Use Material Attributes
- Click the red button in the Widget to copy the material nodes and paste them into the target material.
- Connect the Material Attributes Result to the Input of MF_Bone AnimationAttribute.
- Connect the output Material Attributes from MF_Bone AnimationAttribute to the Final Material Attributes. <img width="730" height="53" alt="Image" src="https://github.com/user-attachments/assets/3827afa1-436e-40d2-bc41-8017292948d3" />
3. Create BAT Asset
Enter the information into the EUW Maaass Particle Widget and click "Create Static Mesh & AnimTextures & DataAsset.
3-1. Setting Animation
<img width="731" height="827" alt="Image" src="https://github.com/user-attachments/assets/4e2b0615-628e-4443-a79d-17b273aa5407" />
- Is Loop : When checked, the animation will play in a continuous loop.
3-2. Setting AnimToTexture Info
<img width="731" height="827" alt="Image" src="https://github.com/user-attachments/assets/f59e37ff-3c6c-4c05-b121-20d182e057f8" />
- Num Driver Triangles: The number of driver triangles used for skinning, affecting the detail of the deformation.
- Sigma: A smoothing factor for the skinning weights; higher values result in smoother, more blended deformations.
- Enforce Power of Two: Forces the output texture dimensions to the nearest power of two, which can improve performance and compatibility.
- Precision: Sets the bit depth of the texture data (e.g., 8-bit or 16-bit), trading between memory usage and deformation accuracy.
- Num Bone Influences: The maximum number of bones that can affect a single vertex, balancing performance against animation complexity.
If you experience flickering or jittering in the animation, increase the Precision setting and bake the animation again.
3-3. Create BAT Result
<img width="1154" height="251" alt="Image" src="https://github.com/user-attachments/assets/876135b5-bbe9-49df-9225-c1386fb95506" />Texture:
- Bake the animation into Bone Animation Textures: Position, Rotation, and Weight.
- Generate the Weight textures for each LOD.
Static Mesh:
- Convert the Skeletal Mesh to a Static Mesh.
- Apply the Material (which includes the pre-configured Bone Animation Layer) to the Static Mesh.
- In the Material's Bone Animation Layer, apply the Bone Animation Texture for each LOD.
Data Asset:
- Information about Skeletal Mesh, Static Mesh, Animation, Bone Animation Texture
4. Configure Material for BAT After Baking
4-1. Material Instance Assignment by LOD
Assign the appropriate Material Instance to the Sections of each LOD in the generated StaticMesh.
<img width="787" height="198" alt="image 5" src="https://github.com/user-attachments/assets/dd9c70c1-65f2-423f-8ef8-cc216451af35" /> <img width="784" height="187" alt="image 6" src="https://github.com/user-attachments/assets/e5036c46-c394-Related Skills
node-connect
340.5kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
84.2kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
340.5kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
84.2kCommit, push, and open a PR
