ZH
我的工具

法线贴图生成器

用高度图或照片生成切线空间法线贴图:支持 Sobel 或 Scharr 滤波、强度、模糊、反转、OpenGL 或 DirectX 绿色通道以及可平铺的边缘,输出 PNG。

在测量斜率前先去除照片噪点。0 = 不处理。
放大斜率:数值越高,凹凸看起来越深。
我的工具 →
广告

法线贴图为纹理的每个像素记录表面朝向哪个方向。游戏引擎和 3D 软件用它来给平坦的多边形打光,让它看起来有凸起、凹槽和划痕。本生成器读取高度图(或用亮度代表高度的照片),测量每个像素的斜率,并按 OpenGL 或 DirectX 约定输出切线空间法线贴图,还可为平铺纹理启用无缝边缘。它在浏览器中运行。

使用方法

  1. 选择高度图(白色 = 高)或纹理照片。
  2. 选择高度的来源;如果希望暗部凸起,就反转高度。
  3. 设置平滑、边缘滤波器和强度;平铺纹理请勾选无缝边缘。
  4. 选择你的引擎使用的绿色通道约定,然后下载法线贴图。

计算公式

n = normalize(−s × ∂h/∂x, ±s × ∂h/∂y, 1);RGB = (n + 1) ÷ 2 × 255

h 是 0 到 1 的高度,s 是强度。斜率由 Sobel (1, 2, 1) ÷ 8 或 Scharr (3, 10, 3) ÷ 32 滤波器,或中心差分 ÷ 2 得到。图像的行向下排列,因此 OpenGL(Y+ 向上)约定使用 +∂h/∂y,DirectX(Y− 向下)使用 −∂h/∂y。平滑是 σ = 半径 ÷ 2 的高斯模糊。启用无缝边缘后,滤波会环绕过边界,因此贴图平铺时没有接缝。

示例

在平坦区域斜率为 0,所以 n = (0, 0, 1),颜色是大家熟悉的浅蓝色 (128, 128, 255)。当高度在一个像素内上升 0.38 时,Sobel 斜率为 0.19;强度为 2 时是 0.38,于是 n = (−0.38, 0, 1) ÷ 1.07,红色通道降到 82。

常见问题

该选 OpenGL 还是 DirectX?

Blender、Godot、Unity 和大多数 glTF 工具使用 OpenGL(绿色向上);Unreal Engine 和 3ds Max 使用 DirectX(绿色向下)。如果凹凸的光照来自错误的一侧,请切换这个设置。

可以使用任意照片吗?

可以,但亮度只是对高度的猜测:暗的裂缝会变低、亮的石块会变高,这对石头、树皮和织物通常看起来很合适。涂上的颜色和阴影会产生假的凹凸,所以用真正的高度图效果最好。

为什么平铺后我的纹理能看到接缝?

请开启无缝边缘,让边界处的斜率按环绕后的邻点来测量。纹理本身也必须能平铺;可以用“无缝纹理制作”工具来处理。

我的纹理会被上传吗?

不会。所有计算都在你的设备上完成。

最后更新:

引用此工具
APA

kakaoCalc. (2026, November 8). 法线贴图生成器. https://kakao.mobile/zh/tools/normal-map-generator/

MLA

“法线贴图生成器.” kakaoCalc, 8 Nov. 2026, kakao.mobile/zh/tools/normal-map-generator/.

广告