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); }