关于3D里的各种贴图和格式

关于3D里的各种贴图和格式

菜鸡一个,如果有说错的地方请通过评论区纠正,谢谢。

众所周知,贴图格式千变万化,贴图类型也是如此,为了方便记忆和分享所学的知识,特地写下了这篇文章作为参考。

如果你认为这篇博文帮助到你,欢迎投喂(

贴图格式

为什么先说格式呢?最主要的原因还是因为我想让看过这篇文章的人都能主动地使用 tga 或者是 png 作为贴图格式。

格式 说明
dds 使用 DXTn 算法来按照块(4x4)为单位来压缩存储,有效减少了纹理内存消耗,可被GPU硬件解压缩,支持 mipmap层级数据存储,专门为纹理而设计的贴图,内部跑的协议乱到爆炸

8位:R3G3B2
16位:A1R5G5B5、A4R4G4B4、R5G6B5、A8R3G3B2、X4R4G4B4
24位:R8G8B8
32位:A8R8G8B8、A2R10G10B10、X8R8G8B8
64位:A16B16G16R16

一些有用的工具:
- XnView MP(图片浏览器)
- Texture Tools for Adobe Photoshop
tga 支持压缩和透明,可用于存储8位、15位、16位、24位、32位图像数据
支持 alpha 通道、颜色索引、RGB颜色、灰度图

所以建议使用 tga 作为贴图的存储格式

一些有用的工具:
- SageThumbs(缩略图插件)
png 格式是无损数据压缩的,格式有8位、24位、32位三种形式,其中8位PNG支持两种不同的透明形式(索引透明和 alpha 透明)

24位 png 不支持透明
32位 png 在24位基础上增加了8位透明通道

跟 tga 旗鼓相当,体积甚至更小,除了在某些软件下可能会导致 alpha 丢失,我十分推荐作为主要贴图格式
bmp 格式是无损数据压缩的,格式有1位、4位、8位、16位、24位、32位

1位(单色位图): 一个像素只占一位,要么是0,要么是1,所以只能存储黑白信息
4位(16色位图):一个像素4位,有16种颜色可选
8位(256色位图):一个像素8位,有256种颜色可选
16位:X1R5G5B5、R5G6B5、X4R4G4B4
24位:R8G8B8
32位:X8R8G8B8

理论上 bmp是画质最好的,但是体积太大,不建议使用
jpg 支持的像素格式:R8G8B8
不支持透明
有损压缩,可按照图片质量来设定压缩比

不要使用 jpg 作为贴图格式

贴图类型

Diffuse Map、Base Color Map和 Albedo Map(颜色贴图)

在宏观意义上,Base Color Map(基础颜色贴图) = Albedo Map(反照率贴图) = Diffuse Map(漫反射贴图)

它们都是用于表现物体被光照射到而显出的颜色和强度。

在 PBR 流程中,分为两个流派:Metal/RoughnessSpecular/Glossiness

Metal/Roughness工作流程使用:Base Color、Roughness、Metallic 三种纹理来作为基础纹理。

Specular/Glossiness工作流程使用:Diffuse、Glossiness、Specular 三种纹理来作为基础模型。

这里解释一下名词 M/R 对应金属和粗糙度,而 S/G 对应镜面反射(金属)和 平滑(高光),Specular 在这里并不是指和 M/R 流程里和 Roughness 对立的高光

Base Color Map的色调更平缓,对比度更低。并且,因为 Base Color Map中带了金属的反射率值,所以这部分它是要配合上 Metallic Map一起使用的,且不带光影信息。

Diffuse Map则是带着光影信息的,而 Albedo Map是移除了光影信息的(是否自带AO)。

BumpMap(凹凸贴图)

它可以给模型增加立体感,但并不是直接改变模型的形状,而是通过影响模型表面的影子来达到凸凹效果。其中有两种不同类型的凸凹贴图:Normal Map(法线贴图)和 Height Map(高度贴图)。

一般 BumpMap指 Height Map。

  • Normal Map(法线贴图):定义一个表面的倾斜度或者法线。一条法线是一个三维向量,一个三维向量由x, y, z等3个分量组成,在法线贴图中,把(x, y, z)当作RGB 3个颜色的值存储。你可以通过查看 RGB 通道看到对应储存的信息。
  • Height Map(高度贴图):一种黑白的图像,它通过像素来定义模型表面的高度。像素越白的地方越高,越黑的地方越低,灰色的在中间,从而表现不同的高低。

换句话来说,Normal Map包含角度信息,Height Map包含高度信息。

在 Normal Map中,又分为 Tangent Space(切线空间) 、Object Space(物体空间) 和 World Space(世界空间) 。

  • 基于 3D 模型纹理所在的坐标系,即 Tangent Space Normal Map,也称作 Texture-Space(纹理空间),我们可以互相套用这种 Normal Map到不同的模型上。
    • 且OpenGL 和 DirectX 的绿色通道是相反的。
  • 基于 3D 模型的顶点所在的坐标系,即 Object Space Normal Map,在这种 Normal Map中,模型和贴图需要始终对应,否则会出现问题。
  • 基于 3D 模型所在的世界环境为坐标系,即 World Space Normal Map,你需要在一样的场景下才能正常使用。

Specular Map(高光贴图)

也叫做 Reflective Map(镜面光贴图)或者是 Glossiness Map(高光贴图)

这是一种黑白的图像,像素越白的地方镜面反射越强,越黑的地方镜面反射越弱,用来表现模型表面反光程度(塑料>木头>皮肤>布料),从而区分不同材质。

同时也可以理解成光滑程度,表面越光滑,单个像素的反射光线的方向范围就越集中,高光点就越小越亮,将周围环境映射到模型表面就显得越清晰。

Roughness Map(粗糙度贴图)

与 Specular Map功能一样,只是图中存储的值是相反的(但也会有合理的差异化)。

和 Specular Map搭配好后会提供十分令人舒适的真实度。

Metallic Map(金属度贴图)

这是一种二值黑白图,什么是二值呢?即非黑即白——黑色非金属,白色金属。

那为什么会是二值呢?因为现实中很少有金属与非金属之间的过渡物质,所以,如果你看到哪个模型的金属度贴图有大量灰色,那一定是哪里出错了。

Displacement(置换贴图)

可以改变模型本身的形状以产生更多的细节。
根据表面的灰度确定高度。然后根据镶嵌所得到的多边形,沿着原先的表面法线方向移动微多边形以产生新的多边形高度差。

Ambient Occlusion(环境阻塞贴图)

简称 AO 贴图。

使用一张灰白图来表示物体之间相互影响的效果,可以理解为明暗素描那样的一种表现形式,

主要用于改善阴影,贴图中越黑的地方,阴影就会加得越深(若输入一张纯白的AO贴图,相当于关掉了AO效果),可以给场景(模型)更多的深度,有助于更好的表现模型的光影细节。

Cavity Map(缝隙图)

也叫 Crevice Map。

可以认为是用于描述更细小凹陷细节的 AO 图。

跟 Ambient Occlusion 制作和使用流程一致,一个侧重于整体,一个是细节。

Mask Map(遮罩贴图)

又叫做 Opacity Map,Opacity Mask Map。

用作于记录透明信息的黑白图,黑色是不透明,白色是透明。

Environment Map(环境贴图)

也称为 Reflection Map(反射贴图)

用一张贴图映射到反射对象上,使得在反射对象上看到场景的影像。

按照映射的方式又分为:Sphere Map(球面环境映射贴图,标准环境映射贴图)、Cube Map(立方体环境映射贴图)、Parabola Map(双抛物面环境映射贴图)

Fuzz Map(模糊贴图)

这是一个新类型贴图,用作于织物和其他带有微纤维的模型,这样可以使其更加真实,目前只用作于实时引擎如八猴和虚幻,目前,你可以在 Cycles、Vray 中忽略。

结语

感谢你看到最后,希望这篇文章能帮助到你规范化贴图流程并认识到贴图的类型与运作方式。

参考文献:

关于3D里的各种贴图和格式

http://ldo.one/post/about-map/

作者

Loudomian

发布于

2021-06-11

更新于

2021-06-11

许可协议

评论