Models and Meshes / 模型与网格
用 FileModel 节点可以从文件加载模型。支持这些文件类型:
.fbx;.dae;.3ds;.gltf;.glb;.obj;.blend;.x;.md2;.md3;.dxf;.ply;.stl;.stp
加载好的模型可以接到 ModelEntity 上,用某个材质把它渲染出来。
材质、贴图、动画和骨骼目前还不能自动加载,以后的版本会加上。例子见帮助文档 Load Assets from File,里面还演示了怎样给一个模型指定多个材质。
模型也可以从 Stride 游戏项目里加载。这样做的好处是你可以在 Stride 编辑器里把模型连同材质一起配置好。见 Stride 手册里的 Assets(英文)和 Animation(英文)。另见帮助文档 Load Stride Project 和 Modify Entities from a Stride Project。
Difference between Model and Mesh / Model 与 Mesh 的区别
Model
Model 是个高层的类,把几何(网格)和外观(材质)组合在一起,还可以选配一副用于动画的骨骼。所以简单模型(一个网格加一份材质)能表示,带动画的角色这类复杂 3D 物体也能表示。
在场景图里,一个模型必须被指派给某个 Entity 上的 ModelComponent。见渲染。
Model 的数据结构
拼一个模型的数据:简单情形(一个网格加一份材质)用 MeshModel 节点,多个网格和材质用 MeshesModel。把单个模型接进场景图用 ModelEntity 节点 —— 内部已经替你把 entity 和 component 配好了。
Mesh
Mesh 是模型的一部分,它装着几何信息,以及一个指向模型材质列表中某份材质的序号。
Mesh 的数据结构
真正的几何数据存放在一个叫 MeshDraw 的类里,它持有绘制几何时要用的索引缓冲和顶点缓冲这些 GPU 资源。具体来说,MeshDraw 有 IndexBufferBinding 和 VertexBufferBinding 两个参数,各自持有相应的缓冲,外加一些给图形管线用的信息。所以从模型到第一个顶点缓冲的完整路径是:Model.Meshes[0].Draw.VertexBuffers[0].Buffer。
顶点缓冲里存的顶点可以带不同的字段,比如法线、纹理坐标等等。为了让取顶点数据这件事更顺手,你可以用 MeshSplit 这组节点,见帮助文档 Split a mesh into its components。
Dynamic Mesh / 动态网格
DynamicMesh 和 DynamicMesh (Indexed) 这两个节点,能从顶点数据和/或索引数据造出一个网格。
把单个网格接进场景图用 MeshEntity 节点 —— 内部已经替你把 entity 和 component 配好了。网格也可以走底层工作流,用 MeshRenderer 渲染,细节见渲染。帮助文档 Dynamic Mesh 是一个搭建并渲染网格的例子。