This is a continuation of this question, and then this question, but now I'm onto the next step of the puzzle.

To recap, I have two different skulls in Blender, that I created as .stl's in a program called 3dSlicer from real CT-Scan data. I started by wanting to "average" them, and get a shape that represents the average shape of the two. Similar to the work done in this paper.

My original question asked how I could do that, possibly using shapekeys. Nobody was able to answer that at the time, but I knew that step 1 would probably be to make each skull have the same number of faces. By using the answer from this question and "shrinkwrapping" a skull shaped object around each skull, I was able to finally accomplish my original goal. Pictured here: enter image description here

It still needs some work as far as making sure I correctly shrinkwrap each skull to begin with, which will make my finished product look a little better, but at least the process works.

The process was:

  1. Shrinkwrap each skull with a "skull-like" mesh that had an identical number of faces
  2. Take these new skulls (the shrinkwrapped mesh) and use shapekeys to morph them halfway from one to the other.

So now my question is: I'm sure that some vertices move more than others during the morph. I would love to show that in a heat-map like way, similar to this:

enter image description here

I.e. vertices and faces that moved farther would be brighter, whereas faces that barely moved from one skull to another would be duller. Is this possible in Blender?

  • $\begingroup$ Bake unmorphed world space position to a texture ("wP1"). Bake morphed world space position to a texture ("wP2"). Subtract wP1 from wP2 (or vice versa) and measure the length of the vector. $\endgroup$
    – Nathan
    Commented Feb 11, 2021 at 21:04

1 Answer 1


that's a really similar problem I need to tackle, I know how to solve it , but I miss the programming skills to do it. first of all , you may start from an average, symmetric skull and you join as shapes the different "individuals" that you want to average. second, you add 50% of each individual and see the result. this to have a better looking final result because you start from a shape which is already harmonious . third, for the heat map , each vertex has an indices, and the shape key is the final position of each vertex. so you can create a simple vector per each vertex and compare the lengths to make a heat map . maybe creating a vertex group named "heat map" and assigning the vertex to the group based on the % of the distance of each vertex from the starting position , and using the longest distance as 100% value for comparison. you can refine the visualization by interpolating with the surrounding verticles because maybe you have an entire area translated all together and the vertex are not really too much further from the neighbors , but all they are maybe surrounded by a group of verticles which is heavily translated, carrying with them all the encircled ones.


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .