归根结底,子画面和纹理只是图像-光栅颜色数据块(尽管有时我们会稍微增加一些边界以将非图像数据放入其中)。区别主要在于我们如何使用它们。
如果将其预期的渲染目的直接绘制到屏幕的2D网格而没有透视变形,则通常将图像(或包含许多独立片段的图像部分)称为“精灵”。因此,在运行的游戏中看到的基本上是在图像文件本身中看到的(除了颜色着色/调色板交换/透明效果)。这适用于2D游戏中的背景图块和角色/交互式对象,“广告牌”卡(例如粒子和较旧样式的树和灌木渲染),也适用于3D游戏中的用户界面元素和图标。
相反,如果我们使用图像来提供3D对象的多边形的表面细节(可能是在透视图中绘制),则通常将该图像称为“纹理”。该名称已延续到图像数据的其他用途,以调制其他物体的渲染,即使它们不再与您指尖所能感觉到的纹理有关,例如反射,变形贴图,覆盖,蒙版或其他任何东西通用图像的使用,我们不觉得更具体地命名往往会被我们宽松的命名法中的“纹理”所迷惑。
这使得两者之间的界限变得模糊而不是特别严格。如果我的图像包含一系列火焰和烟流,可用于绘制广告牌粒子以产生爆炸效果,则可以互换地称其为“ spritesheet”或“ Flipbook纹理”。或者,如果我有一个包含2D游戏所有背景图块的tileset图像,那么我今天可以将其称为“纹理图集”,类似于为3D游戏开发的图集纹理,即使其数据和在我的2D游戏中的使用无法区分从别人所谓的spritesheet。如果我有一个几何矩形,其目的是在屏幕上显示单个图像,则根据我要强调的使用方式,我可以称其为“纹理四边形”或“精灵”。
(请注意,在此最后一个示例中,“ sprite”既代表我们游戏资产中的源图像段,也代表使用该图像段的渲染游戏实体的实例-这是我们不一致地使用此术语的另一种方式)
您会发现一些引擎和库在将意图转换成它们自己的名称时对这种区别进行了编码。例如,在Unity中,您可以选择将图像资产导入为“ Sprite”-这将启用UI图像或2D游戏资产通常需要的一组额外选项,例如Spritesheet切片和打包,以及引用功能图像的各个部分作为场景和对象设置中的离散实体。在这些情况下,“ Sprite”通常意味着“图像(纹理)加元数据 ”-但仍与引擎盖下的普通纹理相同。额外的包装很方便,因此我们不需要在要使用图像的任何地方进行显微胶印。