为什么在3D游戏中我们需要将一个material分离成那么多的纹理用于一个静态物体?

Why in 3D game we need to separate a material into so many textures for a static object?

也许问题不太对,纹理应该说是一种通道?虽然我知道它们最终会在着色器中混合。

我知道各种纹理的知识很重要,但也有点难以完全理解。

据我了解:

  1. 漫反射 - 'real' 不涉及光的物体的颜色。
  2. light - 适用于静态对象。预先将光效渲染到纹理中。
  3. specular - 有直接反射的区域。
  4. ao - 为物体的不同区域吸收间接光。
  5. alpha - 'shape' 对象。
  6. 自发光 - 自发光。
  7. normal - 处理光线的像素法向量。
  8. bump -(不知道法线贴图之间的确切区别)。
  9. height - 存储 Z 范围值,生成地形,修改顶点等

下面的项目应该与我不熟悉的 PBR material 有关:

如有误会请指正。 但无论如何,我的问题是为什么我们需要将这些纹理分开以获得 material,而不只是将它们一起渲染到直接用于静态对象的漫反射贴图中?

如果有一些例子(尤其是PBR),将不胜感激,非常感谢。

I can beforehand bake all things into the diffuse map and apply to my mesh, why I need to apply so many different textures?

可重用性:

大多数游戏重新使用纹理来减小游戏的大小。如果将它们组合在一起,则不能。例如,当你有两个相似的物体但你想随机化它们的外观(老化效果)时,你可以让它们共享相同的颜色(反照率)贴图但使用不同的 ao 贴图。当有数百个对象时,这一点变得很重要,您可以在相似对象上使用不同的纹理贴图组合来创建独特的对象。如果你把它合二为一,就不可能与其他类似的物体共享,但你要稍微做出不同的样子。

可自定义:

如果将它们分开,您将能够更改每个纹理将应用于对象的效果量。例如,标准着色器的金属插槽上的滑块。其他地图插槽上有更多此类滑块,但它们只会在您将纹理插入插槽后才会出现。当您将纹理合并为一个时,您不能这样做。

着色器:

标准着色器无法做到这一点,因此您必须学习如何编写着色器,因为您无法使用一张图像来获得使用标准着色器使用所有这些纹理贴图所能达到的效果。需要自定义着色器,您需要一种方法来读取有关组合着色器中贴图的信息。

这似乎是一个合理的起点:

https://en.wikipedia.org/wiki/Texture_mapping

A texture map is an image applied (mapped) to the surface of a shape or polygon. This may be a bitmap image or a procedural texture. They may be stored in common image file formats, referenced by 3d model formats or material definitions, and assembled into resource bundles.

我要补充一点,形状或多边形不必像人们想象的那样属于 3d 对象。如果将两个三角形渲染为矩形,则可以 运行 进行各种计算并将其存储在 "live" 纹理中。

Texture mapping is a method for defining high frequency detail, surface texture, or color information on a computer-generated graphic or 3D model. Its application to 3D graphics was pioneered by Edwin Catmull in 1974.

这个细节代表的是一些约定的格式来表示一些 属性,(例如在某些 BRDF 模型中 "roughness"),如果您使用某种引擎,您会遇到这种情况。

或者如果您正在编写自己的引擎,则无论您决定该细节是什么。您可以决定存储任何您想要的东西。

您会注意到 link 中提到了不同的 "mapping" 技术,每种技术都有自己的页面。这是某个人的结果,或者是做了一些研究并提出了一篇详细介绍该技术的论文的人。其他人采用它,这就是他们进入引擎的方式。

没有规定不能合并。