Physic Material Friction Combine Mode lack of documentation?

Tested stuff:

There were 2 objects with different Physic Materials: A, B

A moved on B acting as ground

In each case only!! the Friction Combine Mode was changed

FCM - Friction Combine Mode

DST - distance travelled over time T

The combine modes in order(the numbers between the parentheseses below correspond to these):

  1. Average
  2. Multiply
  3. Minimum
  4. Maximum

  1. A.FCM = Multiply(2); B.FCM = Multiply(2) | DST = DST1
  2. A.FCM = Average(1); B.FCM = Multiply(2) | DST = DST1
  3. A.FCM = Multiply(2); B.FCM = Average(1) | DST = DST1
  4. A.FCM = Average(1); B.FCM = Average(1) | DST = DST2

    // DST changed => Multiply(2) overwrote Average(1) in case 2. and 3.

  5. A.FCM = Minimum(3); B.FCM = Multiply(2) | DST = DST3

    // DST changed => Minimum(3) overwrote Multiply(2)

  6. A.FCM = Multiply(2); B.FCM = Minimum(3) | DST = DST3
  7. A.FCM = Minimum(3); B.FCM = Minimum(3) | DST = DST3

I sincerely think I'm right that the cause is the combine modes' order where later ones have higher priority and thus overwrite the ones with lower priority and the friction value used as the friction value for the friction between the 2 colliding objects is determined by this single combine mode.

My problem is that I haven't heard anyone mention this and the bigger problem is that even now after a quick(too quick) googling I didn't find any mention of this.

To make it so that noone may say that this should've gone to the forum instead let me make a few simple questions out of all this.

Am I right? Why haven't I found any mention of this phenomenon? Should one know this off the cuff?

This is undocumented functionality.

From my tests, the friction combine mode used uses the largest PhysicMaterialCombine in the PhysicMaterialCombine enumeration of the two materials.

The enumeration is something like:

enum PhysicMaterialCombine {
    Average = 0,
    Multiply = 1,
    Minumum = 2,
    Maximum = 3
};

and the combination function for let's say dynamic friction would be something like:

var dynamicFriction : float = object1.collider.material.dynamicFriction;
switch((PhysicMaterialCombine)
        Mathf.Max(object1.collider.material.frictionCombine,
                 object2.collider.material.frictionCombine)) {
    case PhysicMaterialCombine.Average:
        dynamicFriction += object2.collider.material.dynamicFriction;
        dynamicFriction /= 2.0;
        break;
    case PhysicMaterialCombine.Multiply:
        dynamicFriction *= object2.collider.material.dynamicFriction;
        break;
    case PhysicMaterialCombine.Minumum:
        dynamicFriction = Mathf.Min(dynamicFriction,
                                    object2.collider.material.dynamicFriction);
        break;
    case PhysicMaterialCombine.Maximum:
        dynamicFriction = Mathf.Max(dynamicFriction,
                                    object2.collider.material.dynamicFriction);
        break;
}

I believe it is also the same for the bounceCombine.

Hey, we’ve just done some testing for our Game Physics Course, and we think the order of precedence is Max, Mult, Min, Average in decreasing order. Hopefully this table below will help…