关于创建图的更多信息

在今天的帖子中,我将更深入地探讨 创建图 系统 我在4月份的时候讲过,更多 特别是与纹理和材料等典型的游戏引擎资产相比,它们是如何工作的. 这将是一个简短而高级的职位但不管怎样,我认为这非常重要 掌握它,因为它是构造数据时要考虑的核心概念之一 项目布局.

In 机械 没有这样的东西 纹理 or 材料 资产,相反,我们只有 创建图表. 每个创造图最终都会变成 单项资产,但这取决于 图形输出,它可以包含任意数量的缓冲区,图像和/或编译着色器(材料).

此外,它还可以包含图形处理器工作负载的形式绘制和计算调度调用,如 以及其他系统可以使用的CPU工作负载和数据.g. 绑定卷.

所以基本上,创建图让用户能够定义资产粒度 一个项目. 在这种情况下,可以将图形设置为只输出单个图像或单个材料 你拥有与今天任何游戏引擎中所看到的相同类型的资产粒度. 但 没有什么能阻止你从图表中输出更多的数据,给你一个策马奔腾的资产 粒度.

让我们看一个简单的例子-从DCC资源导入一个带有纹理的网格. 我们将开始 在一个典型的设置中,每个图代表一个单一的资产. 当我们处理纹理的时候, 材料,网格,我们需要三个图:

1. 导入存储在DCC资产中的单个图像.

1. 导入存储在DCC资产中的单个图像.

2. 从DCC资源中导入材质属性,并将其绑定到一个简单的着色器. 由图1创建的图像通过DCC Material节点上的纹理槽暴露出来.

2. 从DCC资源中导入材质属性,并将其绑定到一个简单的着色器. 由图1创建的图像通过DCC Material节点上的纹理槽暴露出来.

3. 从图2中导入结果并将其作为着色器绑定到输出的draw调用中, 也从DCC资产导入和绑定网格几何, 以及为淘汰系统输出一个边界体积.

3. 从图2中导入结果并将其作为着色器绑定到输出的draw调用中, 也从DCC资产导入和绑定网格几何, 以及为淘汰系统输出一个边界体积.

现在,如果用户更喜欢,她可以选择设置网格,包括它的材质和 纹理输入,作为 单项资产 通过在相同的创造图中设置所有内容:

上面所有的创建图合并成一个超级图.

上面所有的创建图合并成一个超级图.

这是一个假设的例子,它可能没有多大意义来组织你的 基本的DCC资产管道围绕这些类型的超级图,因为它通常是更好的 可跨多个对象共享的不可变资产(如导入的图像和材料). 但 在其他上下文中,肯定有一些用例,在这些用例中,unique与 缓冲数据和GPU工作负载,一些例子是:

  • 各种雕刻和绘制与地形相关的地图.
  • 由数据管道生成的额外顶点数据,如uv -unwrap.
  • 在特效系统中保持粒子状态的缓冲区.

通过建立在创建图形系统之上的能力,它可以自由地允许用户 以他们选择的任何方式将工作负载和资产结构到子创建图中,这就成为可能 开始创建一些非常高级的功能. 由技术美工创建和定义的功能, 可以跨多个gpu和cpu核调度的输出工作负载,甚至可能 跨多台机器. 它可以是任何东西,从自定义数据管道到各种绘画工具,到 成熟的视效系统.

最后,大多数游戏引擎功能只是一些数据转换链 用户界面在顶部. 我看不出我们有什么理由要假装这不仅仅是一件事 复杂得多. 当然,当创建时,创建图可能会变成巨大的面条汤 更复杂的东西,但我认为作为程序员的我们可以通过监控痛苦来缓解 点,并公开适当类型的帮助节点,以降低图的复杂性.

另外值得一提的是,与任何对象类型 的 真理, 创建图可以通过我们调用的继承机制来组成 原型 (a.k.a. “预制件”),这意味着你可以将任意数量的图层叠在其他的上面 父图,并且只重写和调整图的一部分而不丢失连接 父. 当许多特性以 图.

我们的目标是创建一个鼓励实验的引擎,让用户感觉他们 可以创建任何. 理想情况下不会错过太多的性能,而不是更多 硬编码特性,希望不需要程序员参与,即使想尝试 提出了一些非常疯狂的新想法.

最近有人问我,我是否仍然不确定这是否是一个好主意(正如我在我的 最后发表 在这个问题上). 答案是否定的,在今天 我确实认为这是正确的方向,但这并不意味着我不害怕,我 am! 但我也很兴奋,非常兴奋! 如果你想要创造一些与众不同的东西,那是有的 只是重新发明轮子的一点,即使这需要更多的时间,让你感到害怕 不时地.

by 托拜厄斯皮尔森