The conversion of a game asset in your project is a complex and detailed process comprised of many steps. The detailed description of the general process can be found here. However, it can also be helpful to follow the process from the perspective of a single game asset type—specifically, a model. This discussion focuses on one section (a horizontal cross-section, starting with the top asset group) of the Content DOM graphic, shown here.
Output from the Content Importer
The content pipeline content DOM represents an exported scene (from a modeling package) as a hierarchy of NodeContent objects. This means that a content importer designed to import a 3D scene or model must convert a 3D file into a NodeContent hierarchy containing a parent, a transform, and a collection of children. Some of these nodes will be of type MeshContent, derived from NodeContent. They represent the 3D objects in the scene with a mesh of triangles.
在XNA中,importer将art asset文件转成一个由NodeContent组成的层次结构。其实就是一个有节点组成的层级结构,和Ogre的现实对象组织方式一致。这个节点包括父节点和自己点等信息。
A MeshContent object is composed of a collection of GeometryContent objects. All triangles within a GeometryContent object have the same material applied to them. Their vertices contain the same type of per-vertex data, such as normals and texture coordinates. Since each GeometryContent collection is contained by a single MeshContent object, they share the same world transform.
1.MeshContent由GeometryContent组成。也很好理解,就是网格内容有几何内容组成。
2.所有的几何图形都可以由若干三角形来组成。
3.属于同一个MeshContent的GeometryContent都有同样的world transform。
Each GeometryContent object contains a VertexContent object (storing the values of all per-vertex data channels, and also indices into the shared Positions collection in the parent MeshContent) and an IndexCollection Class, containing indices into the VertexContent object.
The content pipeline content DOM represents a model material by the MaterialContent class. MaterialContent has two derived classes often used by the content pipeline: BasicMaterialContent and EffectContent. Think of BasicMaterialContent as the content pipeline equivalent of BasicEffect. In the same vein, EffectContent is the content pipeline equivalent of Effect.
详细解释了GeometryContent的组成。以后根据需要在学习好了。
可以看出来,通过importer处理之后,一个art asset从文件转换成了一组XNA可以处理的对象,例如,一个model文件会被组织成一组层级结构的NodeContent对象。这组对象将由processor进行处理。
Output from the Model Processor
The scene hierarchy (previously created by the content importer) is the input of the model processor (implemented by ModelProcessor) and is converted into a format usable by your game at run time. Optimization, such as reordering mesh triangles to maximize cache coherency, is also performed at this time. The conversion of content importer output to a run-time type or types, is the main goal of the model processor.
processor的主要目的就是将importer的输出转换成运行时的type。这里面会进行一些优化过程。
The types output by ModelProcessor are close to the final XNA Framework run-time types. For example, the ModelProcessor output type ModelContent corresponds to the XNA Framework run-time type Model Class. This class is similar to the run-time type but stores the model data as simple managed objects, rather than GPU data types. This approach avoids the instantiation of actual GPU objects during the XNA Game Studio Content Pipeline build process.
注意,processor处理后的输出并不似乎GPU可以处理的对象。因为XNA需要支持跨平台的开发,这里面就包括了XBox平台。
This is essential when building graphics for the Xbox 360 platform because instantiation of these types on the Windows GPU during the build process would not be feasible.
如果直接转换成GPU可以读取的对象,那么在XBox上就没法访问他们了。因为XBox没有GPU来读取。
Conversion of the scene hierarchy is broken down as follows:
The entire scene hierarchy, represented by a root NodeContent and its children, is converted to a ModelContent object.
在这个例子中,一个model的加载和处理过程如下:
1.Importer ->NodeContent
2.Processor -> ModelContent
![]() |
---|
Children of type NodeContent are turned into ModelBoneContent Class objects, and children of type MeshContent are turned into ModelMeshContent objects. |
All GeometryContent objects, containing the actual triangles, are converted to ModelMeshPart objects. As mentioned previously, a GeometryContent object contains a VertexContent, IndexCollection, and MaterialContent object. Although the ModelProcessor modifies the data in the IndexCollections, it does not change the type. The VertexContent object, received as input, has two corresponding output types: a VertexBufferContent Class, containing the optimized triangle data, and an array of VertexElement Structure objects, specifying the data contained in the VertexBufferContent Class.
The last step hands off any MaterialContent objects in the scene by chaining to the MaterialProcessor.