示例#1
0
        public override void Read(AssetStream stream)
        {
            base.Read(stream);

            if (IsReadLODData(stream.Version))
            {
                m_LODData = stream.ReadArray <LOD>();
            }
            if (IsReadIndicesUsage(stream.Version))
            {
                Use16bitIndices = stream.ReadInt32() > 0;
            }
            if (IsReadIndexBuffer(stream.Version))
            {
                if (IsReadIndexBufferFirst(stream.Version))
                {
                    m_indexBuffer = stream.ReadByteArray();
                    stream.AlignStream(AlignType.Align4);
                }
            }
            if (IsReadSubMeshes(stream.Version))
            {
                m_subMeshes = stream.ReadArray <SubMesh>();
            }

            if (IsReadBlendShapes(stream.Version))
            {
                Shapes.Read(stream);
            }
            if (IsReadBindPosesFirst(stream.Version))
            {
                m_bindPoses = stream.ReadArray <Matrix4x4f>();
            }
            if (IsReadBoneNameHashes(stream.Version))
            {
                m_boneNameHashes = stream.ReadUInt32Array();
                RootBoneNameHash = stream.ReadUInt32();
            }

            if (IsReadMeshCompression(stream.Version))
            {
                MeshCompression = stream.ReadByte();
            }
            if (IsReadStreamCompression(stream.Version))
            {
                StreamCompression = stream.ReadByte();
            }
            if (IsReadIsReadable(stream.Version))
            {
                IsReadable   = stream.ReadBoolean();
                KeepVertices = stream.ReadBoolean();
                KeepIndices  = stream.ReadBoolean();
            }
            if (IsAlign(stream.Version))
            {
                stream.AlignStream(AlignType.Align4);
            }

            if (IsReadIndexFormat(stream.Version))
            {
                if (IsReadIndexFormatCondition(stream.Version))
                {
                    if (MeshCompression == 0)
                    {
                        IndexFormat = stream.ReadInt32();
                    }
                }
                else
                {
                    IndexFormat = stream.ReadInt32();
                }
            }

            if (IsReadIndexBuffer(stream.Version))
            {
                if (!IsReadIndexBufferFirst(stream.Version))
                {
                    m_indexBuffer = stream.ReadByteArray();
                    stream.AlignStream(AlignType.Align4);
                }
            }

            if (IsReadVertices(stream.Version))
            {
                if (IsReadVertexData(stream.Version))
                {
                    if (MeshCompression != 0)
                    {
                        m_vertices = stream.ReadArray <Vector3f>();
                    }
                }
                else
                {
                    m_vertices = stream.ReadArray <Vector3f>();
                }
            }

            if (IsReadSkin(stream.Version))
            {
                m_skin = stream.ReadArray <BoneWeights4>();
            }
            if (IsReadBindPoses(stream.Version))
            {
                if (!IsReadBindPosesFirst(stream.Version))
                {
                    m_bindPoses = stream.ReadArray <Matrix4x4f>();
                }
            }

            if (IsReadVertexData(stream.Version))
            {
                if (IsReadOnlyVertexData(stream.Version))
                {
                    VertexData.Read(stream);
                }
                else
                {
                    if (MeshCompression == 0)
                    {
                        VertexData.Read(stream);
                    }
                    else
                    {
                        m_UV       = stream.ReadArray <Vector2f>();
                        m_UV1      = stream.ReadArray <Vector2f>();
                        m_tangents = stream.ReadArray <Vector4f>();
                        m_normals  = stream.ReadArray <Vector3f>();
                        m_colors   = stream.ReadArray <ColorRGBA32>();
                    }
                }
            }
            else
            {
                m_UV = stream.ReadArray <Vector2f>();
                if (IsReadUV1(stream.Version))
                {
                    m_UV1 = stream.ReadArray <Vector2f>();
                }
                if (IsReadTangentSpace(stream.Version))
                {
                    m_tangentSpace = stream.ReadArray <Tangent>();
                }
                else
                {
                    m_tangents = stream.ReadArray <Vector4f>();
                    m_normals  = stream.ReadArray <Vector3f>();
                }
            }
            if (IsReadAlign(stream.Version))
            {
                stream.AlignStream(AlignType.Align4);
            }

            if (IsReadCompressedMesh(stream.Version))
            {
                CompressedMesh.Read(stream);
            }

            LocalAABB.Read(stream);
            if (IsReadColors(stream.Version))
            {
                if (!IsReadVertexData(stream.Version))
                {
                    m_colors = stream.ReadArray <ColorRGBA32>();
                }
            }
            if (IsReadCollisionTriangles(stream.Version))
            {
                m_collisionTriangles = stream.ReadUInt32Array();
                CollisionVertexCount = stream.ReadInt32();
            }
            if (IsReadMeshUsageFlags(stream.Version))
            {
                MeshUsageFlags = stream.ReadInt32();
            }

            if (IsReadCollision(stream.Version))
            {
                CollisionData.Read(stream);
            }
            if (IsReadMeshMetrics(stream.Version))
            {
                m_meshMetrics    = new float[2];
                m_meshMetrics[0] = stream.ReadSingle();
                m_meshMetrics[1] = stream.ReadSingle();
            }
        }
示例#2
0
文件: Mesh.cs 项目: bmjoy/UnityRipper
        public override void Read(EndianStream stream)
        {
            base.Read(stream);

            if (IsReadIndicesUsage)
            {
                IsUse16bitIndices = stream.ReadBoolean();
                stream.AlignStream(AlignType.Align4);
            }

            if (IsIndexBufferFirst)
            {
                m_indexBuffer = stream.ReadByteArray();
                stream.AlignStream(AlignType.Align4);
            }

            m_subMeshes = stream.ReadArray(() => new SubMesh(AssetsFile));

            if (IsReadBlendShapes)
            {
                Shapes.Read(stream);
                if (IsBindPosesFirst)
                {
                    m_bindPoses      = stream.ReadArray <Matrix4x4f>();
                    m_boneNameHashes = stream.ReadUInt32Array();
                    RootBoneNameHash = stream.ReadUInt32();
                }
            }

            if (!IsIndexBufferFirst)
            {
                MeshCompression = stream.ReadByte();
                if (IsReadBoolFlags)
                {
                    if (IsReadStreamCompression)
                    {
                        StreamCompression = stream.ReadByte();
                    }
                    IsReadable   = stream.ReadBoolean();
                    KeepVertices = stream.ReadBoolean();
                    KeepIndices  = stream.ReadBoolean();
                }
                stream.AlignStream(AlignType.Align4);

                if (IsReadIndexFormat)
                {
                    if (MeshCompression == 0)
                    {
                        IndexFormat = stream.ReadInt32();
                    }
                }

                m_indexBuffer = stream.ReadByteArray();
                stream.AlignStream(AlignType.Align4);
            }

            if (IsReadVertices)
            {
                m_vertices  = stream.ReadArray <Vector3f>();
                m_bindPoses = stream.ReadArray <Matrix4x4f>();

#warning TODO:
                throw new System.NotImplementedException();
            }
            else
            {
                m_skin = stream.ReadArray <BoneWeights4>();
                stream.AlignStream(AlignType.Align4);

                if (!IsBindPosesFirst)
                {
                    m_bindPoses = stream.ReadArray <Matrix4x4f>();
                }

                VertexData = new VertexData(AssetsFile, MeshCompression);
                VertexData.Read(stream);
                CompressedMesh.Read(stream);
                if (IsReadLocalAABB)
                {
                    LocalAABB.Read(stream);
                }
                MeshUsageFlags = stream.ReadInt32();

                if (IsReadCollision)
                {
                    CollisionData.Read(stream);
                }
            }
        }
示例#3
0
        public override void Read(AssetReader reader)
        {
            base.Read(reader);

            if (HasLODData(reader.Version))
            {
                LODData = reader.ReadAssetArray <LOD>();
            }
            else
            {
                if (HasUse16bitIndices(reader.Version))
                {
                    Use16BitIndices = reader.ReadUInt32();
                }
                if (IsIndexBufferFirst(reader.Version))
                {
                    IndexBuffer = reader.ReadByteArray();
                    reader.AlignStream(AlignType.Align4);
                }
                SubMeshes = reader.ReadAssetArray <SubMesh>();
            }

            if (HasBlendShapes(reader.Version))
            {
                if (HasBlendChannels(reader.Version))
                {
                    Shapes.Read(reader);
                }
                else
                {
                    BlendShapes = reader.ReadAssetArray <BlendShape>();
                    reader.AlignStream(AlignType.Align4);
                    ShapeVertices = reader.ReadAssetArray <BlendShapeVertex>();
                }
            }
            if (HasBindPose(reader.Version))
            {
                if (IsBindPoseFirst(reader.Version))
                {
                    BindPose = reader.ReadAssetArray <Matrix4x4f>();
                }
            }
            if (HasBoneNameHashes(reader.Version))
            {
                BoneNameHashes   = reader.ReadUInt32Array();
                RootBoneNameHash = reader.ReadUInt32();
            }
            if (HasBonesAABB(reader.Version))
            {
                BonesAABB = reader.ReadAssetArray <MinMaxAABB>();
                VariableBoneCountWeights.Read(reader);
            }

            if (HasMeshCompression(reader.Version))
            {
                MeshCompression = (MeshCompression)reader.ReadByte();
            }
            if (HasStreamCompression(reader.Version))
            {
                StreamCompression = reader.ReadByte();
            }
            if (HasIsReadable(reader.Version))
            {
                IsReadable   = reader.ReadBoolean();
                KeepVertices = reader.ReadBoolean();
                KeepIndices  = reader.ReadBoolean();
            }
            if (IsAlignFlags(reader.Version))
            {
                reader.AlignStream(AlignType.Align4);
            }

            if (HasIndexFormat(reader.Version))
            {
                if (IsIndexFormatCondition(reader.Version))
                {
                    if (MeshCompression == MeshCompression.Off)
                    {
                        IndexFormat = (IndexFormat)reader.ReadInt32();
                    }
                }
                else
                {
                    IndexFormat = (IndexFormat)reader.ReadInt32();
                }
            }

            if (!HasLODData(reader.Version))
            {
                if (!IsIndexBufferFirst(reader.Version))
                {
                    IndexBuffer = reader.ReadByteArray();
                    reader.AlignStream(AlignType.Align4);
                }
            }

            if (HasVertexData(reader.Version))
            {
                if (!IsOnlyVertexData(reader.Version))
                {
                    if (MeshCompression != MeshCompression.Off)
                    {
                        Vertices = reader.ReadAssetArray <Vector3f>();
                    }
                }
            }
            else
            {
                Vertices = reader.ReadAssetArray <Vector3f>();
            }

            if (HasSkin(reader.Version))
            {
                Skin = reader.ReadAssetArray <BoneWeights4>();
            }
            if (HasBindPose(reader.Version))
            {
                if (!IsBindPoseFirst(reader.Version))
                {
                    BindPose = reader.ReadAssetArray <Matrix4x4f>();
                }
            }

            if (HasVertexData(reader.Version))
            {
                if (IsOnlyVertexData(reader.Version))
                {
                    VertexData.Read(reader);
                }
                else
                {
                    if (MeshCompression == MeshCompression.Off)
                    {
                        VertexData.Read(reader);
                    }
                    else
                    {
                        UV       = reader.ReadAssetArray <Vector2f>();
                        UV1      = reader.ReadAssetArray <Vector2f>();
                        Tangents = reader.ReadAssetArray <Vector4f>();
                        Normals  = reader.ReadAssetArray <Vector3f>();
                        Colors   = reader.ReadAssetArray <ColorRGBA32>();
                    }
                }
            }
            else
            {
                UV = reader.ReadAssetArray <Vector2f>();
                if (HasUV1(reader.Version))
                {
                    UV1 = reader.ReadAssetArray <Vector2f>();
                }
                if (HasTangentSpace(reader.Version))
                {
                    TangentSpace = reader.ReadAssetArray <Tangent>();
                }
                else
                {
                    Tangents = reader.ReadAssetArray <Vector4f>();
                    Normals  = reader.ReadAssetArray <Vector3f>();
                }
            }
            if (IsAlignVertex(reader.Version))
            {
                reader.AlignStream(AlignType.Align4);
            }

            if (HasCompressedMesh(reader.Version))
            {
                CompressedMesh.Read(reader);
            }

            LocalAABB.Read(reader);
            if (!HasVertexData(reader.Version))
            {
                Colors = reader.ReadAssetArray <ColorRGBA32>();
            }
            if (HasCollisionTriangles(reader.Version))
            {
                CollisionTriangles   = reader.ReadUInt32Array();
                CollisionVertexCount = reader.ReadInt32();
            }
            if (HasMeshUsageFlags(reader.Version))
            {
                MeshUsageFlags = reader.ReadInt32();
            }

            if (HasCollision(reader.Version))
            {
                CollisionData.Read(reader);
            }
            if (HasMeshMetrics(reader.Version))
            {
                MeshMetrics    = new float[2];
                MeshMetrics[0] = reader.ReadSingle();
                MeshMetrics[1] = reader.ReadSingle();
            }
#if UNIVERSAL
            if (HasMeshOptimization(reader.Version, reader.Flags))
            {
                if (IsMeshOptimizationFlags(reader.Version))
                {
                    MeshOptimizationFlags = (MeshOptimizationFlags)reader.ReadInt32();
                }
                else
                {
                    MeshOptimized = reader.ReadBoolean();
                }
            }
#endif
            if (HasStreamData(reader.Version))
            {
                reader.AlignStream(AlignType.Align4);
                StreamData.Read(reader);
            }
        }
示例#4
0
        public override void Read(AssetReader reader)
        {
            base.Read(reader);

            if (IsReadLODData(reader.Version))
            {
                m_LODData = reader.ReadAssetArray <LOD>();
            }
            if (IsReadUse16bitIndices(reader.Version))
            {
                Use16bitIndices = reader.ReadInt32() > 0;
            }
            if (IsReadIndexBuffer(reader.Version))
            {
                if (IsReadIndexBufferFirst(reader.Version))
                {
                    m_indexBuffer = reader.ReadByteArray();
                    reader.AlignStream(AlignType.Align4);
                }
            }
            if (IsReadSubMeshes(reader.Version))
            {
                m_subMeshes = reader.ReadAssetArray <SubMesh>();
            }

            if (IsReadBlendShapes(reader.Version))
            {
                Shapes.Read(reader);
            }
            if (IsReadBindPosesFirst(reader.Version))
            {
                m_bindPoses = reader.ReadAssetArray <Matrix4x4f>();
            }
            if (IsReadBoneNameHashes(reader.Version))
            {
                m_boneNameHashes = reader.ReadUInt32Array();
                RootBoneNameHash = reader.ReadUInt32();
            }
            if (IsReadBonesAABB(reader.Version))
            {
                m_bonesAABB = reader.ReadAssetArray <MinMaxAABB>();
                VariableBoneCountWeights.Read(reader);
            }

            if (IsReadMeshCompression(reader.Version))
            {
                MeshCompression = (MeshCompression)reader.ReadByte();
            }
            if (IsReadStreamCompression(reader.Version))
            {
                StreamCompression = reader.ReadByte();
            }
            if (IsReadIsReadable(reader.Version))
            {
                IsReadable   = reader.ReadBoolean();
                KeepVertices = reader.ReadBoolean();
                KeepIndices  = reader.ReadBoolean();
            }
            if (IsAlign(reader.Version))
            {
                reader.AlignStream(AlignType.Align4);
            }

            if (IsReadIndexFormat(reader.Version))
            {
                if (IsReadIndexFormatCondition(reader.Version))
                {
                    if (MeshCompression == 0)
                    {
                        IndexFormat = (IndexFormat)reader.ReadInt32();
                    }
                }
                else
                {
                    IndexFormat = (IndexFormat)reader.ReadInt32();
                }
            }

            if (IsReadIndexBuffer(reader.Version))
            {
                if (!IsReadIndexBufferFirst(reader.Version))
                {
                    m_indexBuffer = reader.ReadByteArray();
                    reader.AlignStream(AlignType.Align4);
                }
            }

            if (IsReadVertices(reader.Version))
            {
                if (IsReadVertexData(reader.Version))
                {
                    if (MeshCompression != 0)
                    {
                        m_vertices = reader.ReadAssetArray <Vector3f>();
                    }
                }
                else
                {
                    m_vertices = reader.ReadAssetArray <Vector3f>();
                }
            }

            if (IsReadSkin(reader.Version))
            {
                m_skin = reader.ReadAssetArray <BoneWeights4>();
            }
            if (IsReadBindPoses(reader.Version))
            {
                if (!IsReadBindPosesFirst(reader.Version))
                {
                    m_bindPoses = reader.ReadAssetArray <Matrix4x4f>();
                }
            }

            if (IsReadVertexData(reader.Version))
            {
                if (IsReadOnlyVertexData(reader.Version))
                {
                    VertexData.Read(reader);
                }
                else
                {
                    if (MeshCompression == 0)
                    {
                        VertexData.Read(reader);
                    }
                    else
                    {
                        m_UV       = reader.ReadAssetArray <Vector2f>();
                        m_UV1      = reader.ReadAssetArray <Vector2f>();
                        m_tangents = reader.ReadAssetArray <Vector4f>();
                        m_normals  = reader.ReadAssetArray <Vector3f>();
                        m_colors   = reader.ReadAssetArray <ColorRGBA32>();
                    }
                }
            }
            else
            {
                m_UV = reader.ReadAssetArray <Vector2f>();
                if (IsReadUV1(reader.Version))
                {
                    m_UV1 = reader.ReadAssetArray <Vector2f>();
                }
                if (IsReadTangentSpace(reader.Version))
                {
                    m_tangentSpace = reader.ReadAssetArray <Tangent>();
                }
                else
                {
                    m_tangents = reader.ReadAssetArray <Vector4f>();
                    m_normals  = reader.ReadAssetArray <Vector3f>();
                }
            }
            if (IsReadAlign(reader.Version))
            {
                reader.AlignStream(AlignType.Align4);
            }

            if (IsReadCompressedMesh(reader.Version))
            {
                CompressedMesh.Read(reader);
            }

            LocalAABB.Read(reader);
            if (IsReadColors(reader.Version))
            {
                if (!IsReadVertexData(reader.Version))
                {
                    m_colors = reader.ReadAssetArray <ColorRGBA32>();
                }
            }
            if (IsReadCollisionTriangles(reader.Version))
            {
                m_collisionTriangles = reader.ReadUInt32Array();
                CollisionVertexCount = reader.ReadInt32();
            }
            if (IsReadMeshUsageFlags(reader.Version))
            {
                MeshUsageFlags = reader.ReadInt32();
            }

            if (IsReadCollision(reader.Version))
            {
                CollisionData.Read(reader);
            }
            if (IsReadMeshMetrics(reader.Version))
            {
                m_meshMetrics    = new float[2];
                m_meshMetrics[0] = reader.ReadSingle();
                m_meshMetrics[1] = reader.ReadSingle();
            }
#if UNIVERSAL
            if (IsReadMeshOptimized(reader.Version, reader.Flags))
            {
                MeshOptimizationFlags = reader.ReadBoolean() ? MeshOptimizationFlags.Everything : 0;
            }
            else if (IsReadMeshOptimizationFlags(reader.Version, reader.Flags))
            {
                MeshOptimizationFlags = (MeshOptimizationFlags)reader.ReadInt32();
            }
#endif
            if (IsReadStreamData(reader.Version))
            {
                reader.AlignStream(AlignType.Align4);
                StreamData.Read(reader);
            }
        }