static public UnityEngine.Matrix4x4 FromMatrix(GfMatrix4d gfMat)
        {
            // Note that USD is row-major and Unity is column-major, the arguments below are pivoted
            // to account for this.
            UnityEngine.Matrix4x4 ret = new UnityEngine.Matrix4x4();
            double[] tmp = UsdIo.ArrayAllocator.Malloc <double>(16);
            gfMat.CopyToArray(tmp);

            ret[0, 0] = (float)tmp[0];
            ret[1, 0] = (float)tmp[1];
            ret[2, 0] = (float)tmp[2];
            ret[3, 0] = (float)tmp[3];

            ret[0, 1] = (float)tmp[4 + 0];
            ret[1, 1] = (float)tmp[4 + 1];
            ret[2, 1] = (float)tmp[4 + 2];
            ret[3, 1] = (float)tmp[4 + 3];

            ret[0, 2] = (float)tmp[8 + 0];
            ret[1, 2] = (float)tmp[8 + 1];
            ret[2, 2] = (float)tmp[8 + 2];
            ret[3, 2] = (float)tmp[8 + 3];

            ret[0, 3] = (float)tmp[12 + 0];
            ret[1, 3] = (float)tmp[12 + 1];
            ret[2, 3] = (float)tmp[12 + 2];
            ret[3, 3] = (float)tmp[12 + 3];
            UsdIo.ArrayAllocator.Free(tmp.GetType(), (uint)tmp.Length, tmp);
            return(ret);
        }