为什么在3D游戏中我们需要将材质分成如此多的纹理以用于静态对象?

时间:2018-04-16 14:54:55

标签: unity3d three.js textures babylonjs

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

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

根据我的理解:

  1. 漫反射 - 没有光照的物体的“真实”颜色。
  2. light - 用于静态物体。事先将光效果渲染成纹理。
  3. 镜面反射 - 直接反射的区域。
  4. ao - 吸收物体不同区域的间接光线。
  5. alpha - '塑造'对象。
  6. 自发光 - 自我照度。
  7. normal - 用于处理光线的像素法向量。
  8. bump - (不知道normalmap之间的确切差异)。
  9. height - 存储Z范围值,生成地形,修改顶点等。
  10. 以下项目应该与我不熟悉的PBR材料相关:

    • 半透明/腔/金属/粗糙度等......

    如果有一些误解,请纠正我。 但无论如何,我的问题是为什么我们需要将这些纹理分开为一个材料而不是直接将它们一起渲染到一个静态对象的diffusemap中?

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

2 个答案:

答案 0 :(得分:3)

  

我可以事先将所有东西都烘焙到漫反射贴图中并应用于我的   网格,为什么我需要应用这么多不同的纹理?

<强>重新使用性

大多数游戏都会重复使用纹理来减少游戏的大小。如果将它们组合在一起,则无法进行。例如,当你有两个相似的物体,但你想随机化它们的外观(老化效果),你可以让它们共享相同的颜色(反照率)地图,但使用不同的ao地图。当数百个对象变得很重要时,可以在类似对象上使用不同的纹理贴图组合来创建唯一的对象。如果你将它组合成一个,就不可能与其他类似的对象共享它,但是你要略微看起来不同。

<强>定制-能够

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

<强>着色

标准着色器无法执行此操作,因此您必须学习如何编写着色器,因为您无法使用一个图像来获得使用标准着色器的所有纹理贴图所产生的效果。需要自定义着色器,您需要一种方法来读取组合着色器中有关地图的信息。

答案 1 :(得分:0)

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

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

  

纹理贴图是应用(映射)到形状或多边形表面的图像。这可以是位图图像或程序纹理。它们可以以通用图像文件格式存储,由3d模型格式或材料定义引用,并组装成资源包。

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

  

纹理贴图是一种在计算机生成的图形或3D模型上定义高频细节,表面纹理或颜色信息的方法。它在3D图形中的应用是由Edwin Catmull于1974年开创的。

这个细节代表的是一些商定的格式来表示某些属性,(例如&#34;粗糙度&#34;在某些BRDF模型中),如果你使用某种引擎,你会遇到这种格式。

或者无论你决定细节,如果你正在编写自己的引擎。你可以决定存储你想要的任何东西,无论你想要它。

您会在链接上注意到不同的&#34;映射&#34;提到了各种技术,每种技术都有自己的页面。这是一些人或做过一些研究并提出详细介绍该技术的论文的人的结果。其他人采用它,以及他们如何找到进入引擎的方式。

没有规则说这些不能合并。