别人没给你的那几张贴图
贴图包很少会把 PBR 材质需要的每一张贴图都备齐。你拿到的可能是一张照片加一张高度贴图,或是一张按错误引擎烘焙的法线贴图,又或者渲染器要粗糙度,手里却只有光泽度贴图。这款免费在线工具就在浏览器里,把你手上的东西变成你真正需要的东西。
高度贴图转法线贴图
高度贴图用亮度存储高程,法线贴图则为每个像素存储一个方向。所谓转换,就是取高度场的梯度并由此构造表面法线:N = normalize(-dh/du, -dh/dv, 1)。
梯度用 3x3 的 Sobel 算子估算,而不是简单的相邻像素差分,因为 8 位高度贴图的量化很粗糙,直接做差会把这种量化变成肉眼可见的棱面。强度 在归一化之前缩放梯度:数值低则表面细微,数值高则夸张起伏。如果源图在缓坡上出现条带,可以加一点预模糊。
翻转绿通道:OpenGL 与 DirectX 之争
这是 3D 中最常见的法线贴图问题,而修法只有一行。切线空间的 V 轴指向 上方,但图像却是自上而下存储的,两种约定就从这个分歧中长了出来:
- OpenGL / glTF / Blender / Unity / Godot —— 绿色为 +Y,朝上。也称 Y+。
- DirectX / Unreal Engine / 3ds Max —— 绿色为 -Y,朝下。也称 Y-。
选错了不会报任何错。只是表面从相反的垂直方向被照亮:凸起看起来像凹陷,螺丝头像是被摁进去的。它看着说得通,所以才会一路活到最终渲染。
修法就是 g = 255 - g —— 只反转绿通道,别的都不动,这正是 反转绿通道 所做的事。该操作是它自己的逆操作,因此两个方向都能转。
法线转高度,实话实说
从法线贴图还原高度等于求解一个泊松方程,因此本工具会对斜率场做积分,再运行若干松弛迭代来消除漂移。若本该平坦的地方出现柔和渐变,就把迭代次数调高。只有相对深度可以还原,所以结果会被归一化。
粗糙度、光泽度与遮蔽
去色为粗糙度 使用感知亮度而不是通道平均值;之后用色阶修正它的范围。反转贴图 在粗糙度 ⇄ 光泽度或光滑度之间互转。由高度生成环境光遮蔽 从每个像素向外沿多个方向扫描,并按找到的最陡地平线将其压暗 —— 高度缩放滑块补上了灰度图像本身缺失的深度。
一切都通过浏览器自带的 canvas API 在你的设备上运行;不会上传任何贴图。
Tiny Online Tools







