法线贴图在线生成器:强度调到几,绿色通道才不反
一句话结论:法线贴图生成器只有两个真正需要你决定的参数——强度和绿色通道方向。其余(算法、模糊、是否 16 位)都有默认值可循。本文把这两个参数量化出来:强度 1 到 100 对应多大的倾斜角,绿通道反了会有多大差别。
一、先说原理(一行公式)
法线贴图不改变几何,只改写"这个像素朝哪边"。核心公式:
n = normalize( -dx·strength, -dy·strength, 1 )
RGB = n * 0.5 + 0.5
dx / dy是高度图在水平/垂直方向的梯度(相邻像素的高度差);- 平地上梯度为 0 →
n = (0,0,1)→ RGB =(127.5, 127.5, 255),这就是法线贴图那种淡蓝紫色; - 越陡的地方,R/G 越偏离 127,B 越暗。
所以"强度"实际是梯度的倍数:强度越大,同一个高度差被解释得越陡。
二、强度到底该调到几(实测)
1,024×1,024 高度图(一个球顶 + 一个 45° 台阶 + 一个方块凸起),用 Sobel 卷积生成:
| 强度 | 耗时(CPU/scipy) | R 通道范围 | G 通道范围 | 最大倾斜角 |
|---|---|---|---|---|
| 1 | 156 ms | 96–152 | 102–152 | 14° |
| 5 | 160 ms | 27–217 | 37–217 | 51° |
| 20 | 162 ms | 2–251 | 3–251 | 78° |
| 100 | 174 ms | 0–254 | 0–254 | 83° |
怎么读这张表:
- 强度 1 ≈ 没效果。最大倾斜才 14°,肉眼几乎看不出凹凸——很多人以为"工具坏了",其实只是强度太低。
- 强度 20 是多数场景的甜点(78°),既有明显立体感又不至于像塑料。
- 强度 100 已经接近饱和(83°,RGB 打到 0/254 的边界),细节会被削平、边缘出现硬边。
- 耗时都在 0.15 秒级(1,024²,单线程 CPU)。所以"在线生成要等很久"通常是上传/下载图片,不是算法。
经验值:贴图尺寸 512² 用 10–20;1,024² 用 15–25;2,048² 用 25–40。凹凸越细(布料、木纹)强度越低,越粗(砖墙、浮雕)强度越高。
三、Sobel 还是 Scharr
| 项 | 实测(同一张图) |
|---|---|
\|dx\| 均值 |
两者都是 0.00109 |
\|dx\| 最大值 |
两者都是 0.25 |
| 差别 | 3×3 权重不同:Scharr 给斜向像素更高权重(10 vs 2) |
肉眼差别极小,方向性细节(斜 45° 的边缘)用 Scharr 更平滑一点。所以:没有特别理由就用默认的 Sobel,Scharr 是"斜边特别多"时的微调项,不是升级版。
四、最隐蔽的坑:绿色通道(OpenGL vs DirectX)
法线贴图的 G 通道有两种约定:
| 约定 | G = 0.5 + ny 还是 0.5 − ny | 常见于 |
|---|---|---|
| OpenGL / Y+ | 0.5 + ny |
Blender、Three.js(默认)、Unity(默认) |
| DirectX / Y− | 0.5 − ny |
3ds Max、Unreal(默认)、部分游戏引擎 |
实测:同一张图把 G 通道翻转,最大像素差 248/255、平均差 2.4。平均差很小意味着——大部分像素看起来一样,只有曲面的受光方向整体反了。所以这类问题极少被当成"贴图错了",通常被误判为"灯光没打好"。
判断方法:找一个明显的凸起,光从左上来时,左侧应该亮。如果左侧变暗、右侧亮,就是绿通道反了。修法:生成器里勾/去掉"翻转 Y / DirectX 模式",或在 Photoshop 里反相 G 通道。
五、五个常见翻车点
① 高度图是 8 位、且有大面积平滑渐变。8 位只有 256 级,缓坡上会出现阶梯状波纹。修法:模糊高度图(1–2 px)再生成,或用 16 位高度图。
② 把法线贴图当凹凸/位移贴图用。- 凹凸贴图(bump):灰度,只影响光照,最简单; - 法线贴图(normal):RGB,能表达方向,性能好、效果比 bump 强; - 位移贴图(displacement):真的改几何,最贵最真实。 需要"轮廓也变"就必须用位移,法线永远改不了轮廓。
③ 尺寸不是 2 的幂。1,000×1,000 的贴图在 GPU 上会被重采样,"看起来糊"多半是这个原因。用 512/1024/2048。
④ 当成 sRGB 图片存/读。法线贴图存的是方向,不是颜色。被当作 sRGB 做颜色管理后,方向会整体偏移。引擎里的导入设置要选 "Normal map"(Linear)。
⑤ 只做了一张贴图,却忘了平铺(tiling)。 砖墙、布料这类重复材质,边缘必须无缝;否则贴到模型上会出现一条明显的接缝。做法:生成前把高度图做成无缝(偏移 50% 再修补)。
六、在线生成的实际流程(BimAnt)
- 打开 高度图转法线贴图,拖入灰度高度图(PNG / JPG / TGA 都行);
- 先把强度拉到 20 左右看效果,再按细节微调(参考上面的表);
- 需要判断绿通道方向:勾/取消"翻转 Y",看凸起受光是否左右一致;
- 导出 PNG(要 PBR 流程的话可同时导出 AO / 位移贴图);
- 把贴图贴到模型上看真实效果——3D 模型在线查看 可以直接预览带贴图的模型。
有现成照片(而不是高度图)时,用 照片生成法线贴图:四张不同光照方向的照片反解出法线,适合实物表面。
常见问题
Q:法线贴图和置换贴图能混用吗?能,而且常见:法线贴图管细节光照,位移贴图管大轮廓。注意位移需要足够细分的网格。
Q:为什么我的法线贴图偏紫/偏绿?偏紫是正常的((127,127,255));偏绿说明 B 通道被压太低,通常是强度过大或高度图本身对比过强。
Q:生成的贴图能商用吗?可以。贴图由你的高度图生成,本站不上传服务器、不保留文件;请自行确认高度图本身的版权。
Q:强度调大就"更真实"吗?不是。真实感来自凹凸与材质尺度匹配:1 米宽的墙用 20 合适,10 厘米的按键用 20 就过了。先确定贴图在模型上的实际覆盖尺寸,再调强度。
Q:批量处理几十张高度图?用 法线贴图批量生成,一次拖入多张,按同一套参数导出。
实测说明:1,024×1024 高度图(球顶 + 45° 台阶 + 方块),Sobel/Scharr 3×3 卷积(symm 边界),单线程 CPU;强度扫描与 G 通道翻转对照在 Python 3.10 + numpy/scipy 下完成;输出 PNG 体积:高度图 24,127 字节 → 法线图 46,166 字节。数字均为 2026-10-25 本地实测。
相关阅读:SculptGL 在线三维雕刻 | 3D 模型在线查看工具 | 3D 逆向工程实战 | 3D 格式与在线查看完全指南
本文由 BimAnt 整理,含本地实测数据,转载请注明出处。最后更新:2026-10-25
查看专题全部文章 →
按格式打开:高度图转法线贴图在线 | 照片生成法线贴图 | 法线贴图批量生成(浏览器直接打开,不上传服务器)