protected override SkinnedMeshRenderer Deserialize(ref BinaryReader reader, Object parent, SerializerFactory serializer)
        {
            Stream stream = null;

            if (StoreInline)
            {
                stream = reader.BaseStream;
            }
            else
            {
                //TODO: write relative file path
                throw new NotImplementedException("Cannot read meshes from a separate file yet");
            }

            var skin = (parent as Transform).gameObject.AddComponent <SkinnedMeshRenderer>();

            var boneCount = reader.ReadInt32();
            var bones     = new Transform[boneCount];

            for (int i = 0; i < bones.Length; i++)
            {
                var boneID = reader.ReadInt32();
                bones[i] = serializer.ReferenceMap[boneID] as Transform;
            }

            var materialCount = reader.ReadInt32();
            var materials     = new Material[materialCount];

            //todo: serialize materials
            for (int i = 0; i < materialCount; i++)
            {
                materials[i] = serializer.InternalDeserialize(ref reader, skin) as Material;
            }

            var quality = (SkinQuality)reader.ReadInt32();
            var bounds  = reader.ReadBounds();

            var mesh = UnityMeshFile.Read(stream, meshConfig);

            skin.sharedMesh  = mesh;
            skin.bones       = bones;
            skin.quality     = quality;
            skin.localBounds = bounds;

            return(skin);
        }