Update!
I have been working on the hero asteroid meshes. The goal was to be able to use gpu particles for a fractured/destructible mesh. It turned out to be way more complicated than i thought but i managed to cobble it together. The first issue was that each mesh pivot was at the center of each piece, so when i spawned them as gpu particles, they all overlapped.
Here is what i did…
First in 3ds max I fractures each piece, then i centered the pivots to each piece.
Next i wrote a script that would output all the pivots of each mesh to give their local offsets from 0,0,0.
Inputting each one of these values manually for each mesh index would be a nightmare, HLSL to the rescue! I used scratchpad to be able to input each position and map it to the mesh index.
// === EXACT positions provided by user ===
static const float POS_DATA[] = {
//Paste X/Y/Z vectors here.
};
// Safety cap to avoid out-of-bounds if PosCount is wrong
static const int MAX_POS = 999;
// ========================================
// Niagara inputs: Index (int), PosCount (int)
// Niagara output: OutPosition (float3)
float3 result = float3(0.0, 0.0, 0.0);
int count = clamp(PosCount, 0, MAX_POS);
if (Index >= 0 && Index < count)
{
int baseIndex = Index * 3;
result = float3(
POS_DATA[baseIndex + 0],
POS_DATA[baseIndex + 1],
POS_DATA[baseIndex + 2]
);
}
OutPosition = result;
This gives each mesh the correct position based on their ID. Having it as an array of vectors i can simply copy/paste from my max script was a massive time (and sanity) saver. My test mesh has 25 pieces, but i made another one with 96 pieces and it still works great.
Next i wanted to be able to spawn multiple clusters based on parent positions so i used the attribute reader to set that up. I needed it to evenly distribute the particles across each parent particle. I also needed it to spawn one of each mesh index per parent particle so each parent would spawn the cluster.
Once that was working i wanted to be able to add random rotations to each cluster. This is where things got tricky. I first tried to base the cluster rotations off of the parent orientation but it was causing each particle in the cluster to orient randomly instead of applying the rotation to the entire cluster. I ended up passing the parent index into the custom HLSL and using that as a random seed value for each cluster and doing the rotations in the hlsl.
Now i can set how many clusters and locations by the parent particles. which make it easy to place things exactly how i need in the scene. Since i am also outputting the parent locations from the scratchpad i can link that to point forces to blast apart each cluster.
next i need to figure out how to trigger the point force on each individual cluster instead of affecting them all that the same time.
I plan to have lightning ribbons chain from one to another and link the point force to the lightning so each one blows up sequentially as the lightning jumps from one cluster to another. I might be able to use the plexus mini tutorial posted here to achieve that. 
Anyways, back to work! 