How could I create a dismemberment functionality?

I’m working on a project that has enemy dismemberment as a core feature. This would mainly be a melee weapon making contact with a bone and preferably having the bone break, the limb disappearing to show a decal underneath. I had set up a workaround to shrink the given bone down to almost nothing, and spawning a mesh of the limb with physics in its place, but I can’t use a modification of the bone for this as final.

Can someone point me in the right direction to get this feature off the ground? I appreciate it!

Just wondering if this question has been seen.

Hey,

In UDK days I did this using a feature called “bone break”. It did what it sounds like and disconnected two bones on your skeletal mesh allowing them to separate completely. I used sockets on the desired dismemberment locations and attached the ‘gore stump’ (as i like to call it) at the locations when the break occurs. Previously the separated limb also had physics, etc out of the door. Unfortunately it was a little odd to setup initially.

The downside to a method like this of course is that you have to plan ahead for any possible locations where the mesh can break and “pre slice” the model in these areas, so not ideal in my mind.

Here is an older link of how to do it with UDK here.

Honestly, I’m not even sure if this feature is in UE4 yet but hopefully that will give you at least a starting point and know a little better what to look/ask for.

Thanks for the reply! I am familiar with the idea of bone break from UDK. The project I’m a part of had this working in UDK, but as we transfer from that to UE4, we’re in search of a method that can at least mimic that functionality.

I’m not holding out hope there is a functionality for it, but I was hoping there was at least some workaround that might get the results we’re after.

I’ll be looking into this stuff soon enough so please report back if you find anything!

While we’re on the topic of dismemberment you should check out this GDC presentation by Valve on how they did their gore/etc in Left for Dead 2. Its pretty interesting. Check it out at this link

(Here as well if link didn’t work: http://www.valvesoftware.com/publications/2010/GDC10_ShaderTechniquesL4D2.pdf)

The gore related stuff is around page 55 I think. The other stuff is pretty interesting though as well about how they did texturing etc for zombies.

The benefit of their method is that you can remove any part of the body without having to model out each possible scenario ahead of time. The downside is that if you were to slice off an arm, it would not ‘fall off’ like in the UDK bone break system. Instead you would have to spawn an arm gib separately if you desired that.

I’m looking into trying out a method like theirs at some point as I like gore to be more dynamic and I don’t want to have to model each and every giblet as a single developer. It seems like its very doable in UE4 as well with the great material system.

Anyways, that article was really inspiring to me so I thought I would share it. Hopefully its useful for you as well.

Good luck and have a nice day,

Have you guys any news on this topic?

Hey Ixiguis,

I was about to come back to this post and ask myself, soon. I still am no closer to knowing how to do something like this in UE4. I hope we can get a response from the Epic team one way or another.

Well, they’ll likely do this in UT, so we could just wait and see how they’ll do it :slight_smile:

If you’re in a hurry though, I’d like to share my progress so far. I got to detect what bone was hit (in a ragdoll – call it from TakeDamage()) and the idea here is to hide the bone that was hit, then spawn an actor that’s a copy of the bone hidden (plus blood etc.). I only didn’t do the spawning part. I’ll wait and see if Epic implements BreakBone or similar; gibs aren’t a priority for me atm.

void AShooterCharacter::Gib(struct FDamageEvent const& DamageEvent)
{
	TArray<FName> BonesToBreak;

	if (DamageEvent.GetTypeID() == FPointDamageEvent::ClassID)
	{
		FPointDamageEvent PointDmg = *((FPointDamageEvent const*)(&DamageEvent));
		BonesToBreak.Add(PointDmg.HitInfo.BoneName);
	}
	else if (DamageEvent.GetTypeID() == FRadialDamageEvent::ClassID)
	{
		FRadialDamageEvent RadDmg = *((FRadialDamageEvent const*)(&DamageEvent));
		for (FHitResult Hit : RadDmg.ComponentHits)
		{
			BonesToBreak.Add(Hit.BoneName);
		}
	}

	for (FName BoneName : BonesToBreak)
	{
		GEngine->AddOnScreenDebugMessage(-1, 4.f, FColor::Red, BoneName.ToString());
		Mesh->HideBoneByName(BoneName, EPhysBodyOp::PBO_Term);
		//TODO: spawn the broken bits
	}
}

Obsidiaguy - did you manage to break bone?

Unfortunately, no. The project I needed bone break for has been put on hold, so I haven’t been actively researching an option recently. I am still very curious if there is some way to do this.

Hey, i know this is an old thread, but is there any news or info on how to do this now. Its been over a year so hopefully someone has some news.

Look into SkeletalMeshComponent->BreakConstraint . Its what we use.

Any news on this one?
Did anything in UT progress on that part?