凹凸贴图

From Valve Developer Community
< Zh
Jump to navigation Jump to search
English (en)Español (es)Français (fr)Português do Brasil (pt-br)中文 (zh)Translate (Translate)


凹凸贴图(Bump Maps)、法线贴图(Normal Maps)是通过变换照明来在2D贴图上模拟3D细节的一种材质技术,几乎所有高画质3D游戏都应用了此技术。

Note.png注意:除非在CS:GO(en)中,任何使用凹凸贴图的静态物体都不能使用顶点方法去照亮。
Note.png注意:除非在CS:GO(en)中,任何凹凸贴图不能用于贴花纹理上。为了使它们正常工作,放置它们的表面还必须具有凹凸贴图。
一个材质的漫反射率示意与其凹凸贴图(右)
实际游戏表现

格式

凹凸贴图:1维黑白的图片,图片越白表示纹素高度越高。 法线贴图:可由凹凸贴图算出,通常为切线法线贴图,将法线信息通过编码方式存储在贴图上。

凹凸贴图的每个像素都包含定义了 标准化向量 的(x,y,z)坐标。 故有凹凸贴图中的每个颜色通道的意义为:

红 Red
水平 (X轴)
  • 0=左
  • 128=向前或面向玩家
  • 255=右
绿 Green
垂直 (Y轴)
  • 0=向上
  • 128=向前或面向玩家
  • 255=向下
蓝 Blue
Z轴
  • 0=面向纹理,远离玩家。这是个瑕疵值,因为低于128说明表面远离玩家,然而这是不可能的。
  • 128=能够接收动态光的最大深度,随意改变这个值可能造成不良后果。
  • 255=面向玩家所对的纹理之外。
Note.png注意:放置于平面上的凹凸贴图应设为[128,128,255]。提示,dev/flat_normal 是一个平面凹凸贴图的预设,可以用。

在三个通道表示每个像素的 法向量,法向量表示像素在3D空间中所面对的方向,这允许引擎可以在2D面上生成阴影和高光,或者给3D模型提供更多细节。

凹凸贴图对于非常平的表面(比如光滑的混凝土或金属)其实作用不大。但即使是平整的混凝土表面也要有适当的深度感,让凹凸贴图派上用场。

创建

凹凸贴图应在切线空间中渲染,并使用矢量方向 X+ Y- Z+。

Note.png注意:法线贴图基本上有两组规则:DirectX(en)OpenGL(en)。他们对绿色通道的解释是相反的。起源(en)使用前者。因此,绿色通道可能需要反转,具体取决于用于创建它的软件。

程序

由各种程序创建的凹凸贴图。

各种程序可以通过图像分析或使用用户提供的 3D 几何图形自动创建凹凸贴图。

2D
Photoshop or Paint Shop Pro(en)
Substance Designer
The GIMP(en)
nDo
Filter Forge
3D
XSI(en)
ZBrush(en)
Lightwave(en)
3ds Max(en)
Maya(en)
Blender(en)
NVIDIA Melody
Cinema 4D
NormalMapper(en)
xNormal
其他
NormalMap Online: 用于在线生成法线贴图的网站。
SSBump Generator 5.3: 尽管名称如此,但它也可用于生成凹凸贴图,而不仅仅是自阴影凹凸贴图(en)
Substance B2M3: 以前称为 BitMap2Material。
InsaneBump: 专门用于成为现已取代的软件“CrazyBump”的免费替代品(由于不兼容,可能会使防病毒软件失效)

转换

通过 VTFEdit(en)

转换纹理时:

  1. 选择你图像的格式。BGR888 等未压缩格式比 DXT1 等压缩格式质量更高,但要注意文件大小。
  2. 导入完成后,选中纹理标志列表中的“法线贴图”框。它大约是列表的 1/5。
Tip.png提示:VTFEdit 可以自动生成凹凸贴图。请参阅导入屏幕的右下角。

通过 Vtex(en)

  1. 将你的法线贴图保存为 TGA(en) 格式。命名一个以 _normal 结尾的名称。名称末尾的 _normal 将影响 Vtex(en) 如何转换它。对于砖墙示例,我们将文件命名为 brickwall_normal.tga
  2. nocompress 1 normal 1 添加到与纹理相同的文件夹中的 <纹理文件名>.txt,然后编译。

应用

请参阅 $bumpmap

另见