【问题标题】:Entity Component System - Rendering approach实体组件系统 - 渲染方法
【发布时间】:2018-09-03 15:01:27
【问题描述】:

我目前正在处理一个使用 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

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

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

方法2

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

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


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

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

【问题讨论】:

    标签: c++ game-engine directx-12


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-05-10
      • 2018-01-05
      • 2012-12-03
      • 2021-05-10
      • 2016-01-23
      • 2011-07-15
      • 2016-11-05
      • 2018-08-13
      • 2012-02-11
      相关资源
      最近更新 更多