1

我目前正在使用 ECS 和 DirectX12 进行一个小型项目,并想就是否有“首选”方式或替代方式来解决我的问题获得一些建议。

让我给一个可以渲染的实体一个非常基本的布局

<entity  name = "Cube">
  <component = Transform ..blah blah>
  <component = Mesh = "cube.txt">  // holds data about verts/indicies etc.
  <component = Materials = "Mat1"> // holds data about the materials etc.
</entity>

方法一

加载实体时,它将加载每个组件。它到达网格组件,现在将加载网格数据并创建所需的缓冲区并将它们存储在渲染系统中(通过能够从世界中获取渲染系统)。

假设下一个实体出现并且也想要相同的网格,它会检查渲染系统以查看它是否已经存在,因此不需要再次加载它,而只需为该实体创建一个新副本。

方法二

在加载实体之前,渲染系统将预先加载一个网格列表(这意味着每次要将新网格包含到系统中时都需要更新一些列表)。

现在,当实体被加载时,它们可以有一个标签来匹配渲染系统中网格上的标签。


当我开始使用方法 1 并发现网格组件处理加载时,我不太确定最好的方法是什么,这似乎是一种简单直接的方法,但是我之前没有做过类似 ECS 方法的事情,我想得到建议,因为我可能忽略了一种更有效的更受欢迎的方法。

对于稍后要完成的工作,我要记住的问题是能够使用相同的网格类型 PSO 等处理批处理对象。

4

1 回答 1

0

如果您发现第一种方法现在适合您,我会说继续使用它,直到您需要用可以处理新功能的系统确定地替换它。

第二种方法听起来确实像“正确”的方法,因为在商业游戏引擎中,首先在引擎启动时加载资产列表,此后的大多数操作都是在假设您需要的网格资产已经存在的情况下进行的(显然不包括诸如程序生成之类的东西)。

于 2018-03-31T00:40:00.463 回答