//Converts from the disk format to the human readable format public BlendshapeState Extract() { BlendshapeState bs = new BlendshapeState(); bs.name = name; bs.shapeIndex = shapeIndex; bs.frameIndex = frameIndex; bs.deltaVertices = new Vector3[deltaVerticesLength]; bs.deltaNormals = new Vector3[deltaNormalsLength]; bs.deltaTangents = new Vector3[deltaTangentsLength]; int j = 0; foreach (Vector3Cereal v in deltaVertices) { Vector3 vector = v.Get(ref j); bs.deltaVertices[j] = vector; } foreach (Vector3Cereal v in deltaNormals) { Vector3 vector = v.Get(ref j); bs.deltaNormals[j] = vector; } foreach (Vector3Cereal v in deltaTangents) { Vector3 vector = v.Get(ref j); bs.deltaTangents[j] = vector; } return(bs); }
//Converts the nice blendshape state into a serializable less human readable format public void Fill(BlendshapeState bs) { name = bs.name; shapeIndex = bs.shapeIndex; frameIndex = bs.frameIndex; Dictionary <int, Vector3> deltaVerticesDict = ConvertVectorArrayToCompressedDict(bs.deltaVertices, 0.0001f); Dictionary <int, Vector3> deltaNormalsDict = ConvertVectorArrayToCompressedDict(bs.deltaNormals, 0.0001f); Dictionary <int, Vector3> deltaTangentsDict = ConvertVectorArrayToCompressedDict(bs.deltaTangents, 0.0001f); deltaVertices = new Vector3Cereal[deltaVerticesDict.Count]; deltaNormals = new Vector3Cereal[deltaNormalsDict.Count]; deltaTangents = new Vector3Cereal[deltaTangentsDict.Count]; deltaVerticesLength = bs.deltaVertices.Length; deltaNormalsLength = bs.deltaNormals.Length; deltaTangentsLength = bs.deltaTangents.Length; int i = 0; foreach (int key in deltaVerticesDict.Keys) { Vector3 vector = deltaVerticesDict[key]; deltaVertices[i++].Fill(vector, key); } i = 0; foreach (int key in deltaNormalsDict.Keys) { Vector3 vector = deltaNormalsDict[key]; deltaNormals[i++].Fill(vector, key); } i = 0; foreach (int key in deltaTangentsDict.Keys) { Vector3 vector = deltaTangentsDict[key]; deltaTangents[i++].Fill(vector, key); } }