I created an explosion animation within Blender, something as shown in this video. To achieve this I used a particle-system, together with the "Explode" modifier.
This kind of animation (simulation) doesn't get exported to other file-formats though and I'd like to export the animation as FBX, so that I can use it in Unity. So I basically need some way to "bake" the animation to keyframes. I wonder if there's a way to achieve this?
After some testing I found out, that the only way the simulation gets exported is by writing a sequence of obj
files. So an answer on how to integrate/animate such a sequence of obj
files in Unity would also be welcome.
Side note: I also tried to get an answer to this over at the blender community.
Answer
After countless tests (and some coding) I was able to find two valid approaches to the problem. Both aren't optimal solutions, but apparently there is none (exporting a simulation from Blender to Unity simply doesn't work).
Approach 1: Export as obj sequence and swap meshes in Unity
Pretty straight-forward. Exporting a simulation using the obj
exporter generates a separate file for every frame of the animation (if the "Animation" option has been toggled in the export options). Drag all these files into your Unity project (eg. into Assets/Models/MyAnimation
). Then write a simple script to swap the mesh of the GameObject at runtime.
Pros:
- Animation is the same as in Blender
Cons:
- I haven't tested this with hi-poly meshes or multiple concurrently playing animations, but most likely it's going to have an impact on performance.
- It's really cumbersome to drag each mesh file separately onto the script component. Not really feasible for an animation with lots of frames. See image below (each
Element
in theMeshes
array is a file with the mesh for that frame):
Approach 2: Create the explosion procedurally within Unity
This approach is a mixture of the approach proposed by Jonathan Dickinson and the way the explode-modifier works in Blender. In Blender, the explode-modifier uses a particle-system to determine the movement of shards/shrapnels caused by the explosion.
I wrote a script that splits the mesh into triangles and uses a ParticleSystem
to animate the triangles.
Pros:
- Works with any mesh.
- Behavior/animation can easily be tweaked by modifying the particle-system. For best results, the simulation has to be in world-space and the particle-renderer should be turned off (see screenshot below).
Cons:
- Explodes into plain old triangles, which doesn't look very natural.
- With hi-poly meshes it hits the CPU hard when the mesh is being split into triangles. This could be optimized though.
Comparison
Here's a video that shows both types of animation in effect. The used scripts (both written in C#) can be found here:
Update: MetaMorph
Thanks to the Blender Community (especially the users chipmasque and enzyme69) I was pointed towards a third possible solution, which is MetaMorph. It's a Unity script and a Blender export addon which allows you to export shape-keys from Blender and play them in Unity. While there seems to be some issues with getting a shape-key animation from an explosion, it should work fine for other types of simulations and other shape-key driven animations (eg. facial animations/morphs etc.).
No comments:
Post a Comment