贴图文件
https://www.a23d.co/blog/different-maps-in-pbr-textures?utm_source=chatgpt.com#_1-albedo-map
1. BaseColor / Albedo 颜色/反照率(物体表面对入射光的反射比)
- 决定纹理的颜色。在金属纹理中,它决定了材料反射的颜色
2. Normal Map:法线贴图
决定每个像素参与光照计算时使用的法线方向

- 模拟了光与物质表面相互作用的方式
- 让平面看起来有凹凸,但几何形状不会被法线图所改变
- 为什么要有法线贴图:将细节度更多的高模数据烘焙到一张法线贴图上,再将法线贴图应用到低模上,可以用更低的性能消耗获得很好的画面效果
烘焙过程与原理:
(51 封私信 / 80 条消息) 法线烘焙的基础原理、正确烘焙流程与坑点 – 知乎
- 在烘焙软件中,一般我们需要提供低模(Low Poly)、高模(High Poly)、包围盒(Cage)三个元素,来烘焙法线
- Cage从低模向外挤出得到,由Cage发射射线,Ray Dircetion就是挤出后模型的法线反方向将获取到的高模凹凸数据烘焙到低模上

- 勾选Smooth Cage,我们Cage的形状更像是一个缩放的结果,而不勾选则是把硬边都断开,再给每个面位移的结果
- 并不是说所有模型都勾选Smooth Cage就是一个通用的答案了。在一些情况下,我们需要根据不同的模型、不同的情况对Cage进行不同的调整,这也是为什么八猴会有“Use Custom Cage”选项、和通过Paint的方式修改Cage和Skew的原因了


- 不Smooth Cage的好处:
- 假设我们的高模上会有一些螺母,如图7所示,如果我们直接Smooth Cage烘焙的话,那么由于Ray Dircetion并不是垂直向下的,可能会出现图8左侧所示的法线方向偏移的情况。


- 证明了Cage正确性对法线烘焙的重要影响,而在实际应用是,我们也应该根据这个理论基础,动态的去调整我们Cage的策略以达到更好的烘焙效果
- 可以通过八猴里面Paint Skew的功能,在使用Smooth Cage的情况下,让特定的Ray Dircetion垂直于面,而达到正确的效果(如图9所示)

- 另外Cage还有一个“Min Offset”和“Max Offset”的概念,可以通过Offset这个值来改变Cage偏移的大小,在八猴中也可以通过Paint的方式,只修改一部分Cage的Offset距离,来达到更高的烘焙效果。
切线空间转换带来的问题
- 法线贴图有三个常用的坐标系:模型空间、世界空间、切线空间
- 很多模型都会旋转、缩放,带有蒙皮的文件还会根据动画出现变形的情况。在这些情况下,如果使用的是非切线空间的法线贴图,就会出现非常严重的效果上的错误。
- 因此行业内基本上都是使用切线空间坐标系存储法线贴图,来规避这些问题。但是就算我们使用的是切线空间的法线贴图,也需要在使用法线信息的时候,转化到世界空间
- 其实我们在高模烘焙到低模的过程中,最开始得到的法线朝向数据并不是切线空间的,而是世界空间的,因此我们需要将世界空间法线,转化到切线空间后,再保存到贴图上。而使用法线贴图时,还需要把切线空间的发现数据转化到世界空间中去

- 需要使用TBN矩阵进行转换的,但是我们在烘焙法线贴图的过程中我们使用的TBN,很有可能是与游戏引擎、渲染器的TBN是不同的,这就导致了 的情况出现了。因此我们就不同通过法线贴图获得我们想要的效果了
- 而TBN的数值到底是多少,其实就是由法线、切线、副切线,三个值一起决定的。至今行业内还没有一个统一的计算切线、副切线的方法,而切线的不同就会导致TBN的不同。而同一条法线,他的切线朝向其实是有无限种可能性的,如图12所示

- 如:Autodesk的3DsMax有一套自己的切线计算方式,而Autodesk的Maya又有一套Maya自己的切线计算方式,行业内还有一套Mikk的切线计算方式。这些行业标准不统一的问题,就带来了很多烘焙时候的错误。
- 目前行业内,Mikk正在逐步的成为主流,如:Unreal Engine、Unity、Houdini、八猴等等,都是使用的Mikk切线,而AutoDesk也在逐步的向Mikk靠齐
- 实践中我们是怎么选择的呢?答案是:我们使用UV的方向作为x轴和y轴的方向
- https://www.zhihu.com/question/23706933/answer/1943798636443054580
- 我们使用UV的方向作为x轴和y轴的方向,所以也叫是 “UV切线空间”
- 三角面的法线N平行于z轴;U、V方向分别作为x轴和y轴;三个轴两两垂直
- 如果我们在这三个方向上各取一个单位向量,就构成了著名的 TBN三轴:
- T(Tangent):对应切线空间中的 (1, 0, 0)
- B(Bitangent):对应 (0, 1, 0)
- N(Normal):对应 (0, 0, 1)
关于TBN(将法线从切线空间变换到世界空间的矩阵)

三角面的顺时针与逆时针问题
- 三角面化其实也是和上一个章节讨论的TBN是一个问题。
- 在烘焙法线的过程中,如果我们的低模是四边面,那么烘焙时,会自动转化成三角面烘焙,而我们在导入游戏引擎时,模型也会被自动三角面化。
- 如果两次三角面化的结果不同,也会出现上一个章节相似的问题

Bi-Tangent 副切线
- Normal 是从纸面垂直竖起来的方向。
Tangent 是沿着纸面左右走的方向。
Bi-Tangent 是沿着纸面上下走的方向。
最后的一个坑点就是Bi-Tangent 副切线,因为Bi-Tangent都是在烘焙软件和引擎里实时计算出来的,所以每个引擎也会有不同的计算方式
Bi-Tangent分了两种计算方式:“Per-Pixel”和“Per-Vertex”两种。UE和Unity HDRP里使用的都是Per-Pixel的方式,而Unity URP和Build-In管线使用的都是Per-Vertex,因此八猴的烘焙设置(如图16所示)也需要根据不同的引擎做统一。

OpenGL与DirectX问题
- 法线贴图也分左手坐标系和右手坐标系问题,我们需要根据不同的游戏引擎,使用不同的烘焙设置,如Unity是OpenGL(右手),UE是DirectX(左手)


sRGB与线性空间问题
烘焙软件一般生成的法线贴图都是线性颜色空间的,因此导入引擎时也需要保证它是线性空间的,才能得到正确的效果。
另外如果贴图导入PS里修改,请保证PS也是线性空间的

硬边UV需要断开
- 如果没有断开,可能会出现一些临近像素混合的问题,所以硬边一般都需要切开UV,并相隔几个像素(具体多少个需要看UV密度)

UV打直问题
- 在展UV时,应该尽量打直UV,这样就可以减少由于法线贴图分辨率低,在弯曲处产生的锯齿问题

颜色位数
贴图的颜色一般分为8bit、16bit和32bit,法线贴图在使用8bit的时候,很容易由于色深不够,出现色带,而导致效果上的错误,我个人建议法线贴图都是用16bit即可

总结
- 其实我们的思路已经很清晰了,我们现在只需要完成两个目标,就能解决这两个问题了。
- 目标一:让烘焙时的切线,与渲染时的切线统一
- 目标二:让烘焙时的三角面连接方式,与渲染时的三角面连接方式统一
- 首先,有两个选择上的问题。其一是关于切线计算方式的选择问题,由于我是做游戏开发的,鉴于游戏引擎都是用的是Mikk,那么我只需要保证烘焙法线的时候使用的也是Mikk即可。
- 其二是在烘焙法线的软件选择上。,一定不要在Maya和3DsMax里烘焙法线,最好也不要使用Blender,因为Maya和Max有一套自己的切线计算方式,他很难和游戏引擎的Mikk契合。而Substance Painter烘焙的效果总是会出现各种小问题也不推荐。而因为我没有使用过XNormal所以不做评论。因此介于我的经验得出的结论是,最好的方式就是使用八猴烘焙,并且Tangent Space选择使用Mikk
为了我们能正确的烘焙和使用法线贴图,我们只需要设计一个工作流程(如图15所示),让左右两个流程上的”计算切线 三角面化“的方式是统一的就解决问题了

- 至于为什么右边为什么需要绑定后再计算切线和三角面化,主要原因就是如果给绑定师一个三角面的模型,会大幅度降低他的工作效率,给他带来很多困难
- 而如何统一三角面化,其实是一个在理想状态下比较好解决的问题,在我们规范的流程里,只要建模和绑定使用的是同一个软件,那么他们再导出FBX是勾选三角面化,即可解决问题
- 现实是骨感的,Maya和Max之争永远没有胜负,而他们三角面化的结果也不会统一。而在被使用各种软件的美术夹在中间的TA来说,我们最好的方法就是,写一个FBXSDK的工具,来处理不同建模软件导出的FBX,让这个程序作为一个中转站,将不同软件的规范进行统一,这样就能对三角面化进行规范化了。
- 而计算切线的处理方式也是同理,由于Max和Maya计算切线的方式也不同,为了整体流程考虑,最好的方式也是写一个FBXSDK的工具,使用Mikk的方式计算切线,达到统一规范的作用

- 三角面化问题,直接调用FBXSDK的三角面化API即可解决。
- Mikk切线计算问题,使用这个GitHub的库,并实现以下他的接口即可解决,具体实现可以直接参考UE引擎的源码,搜算关键字“Mikk”即可看到实现过程。
- 三角面化问题,直接调用FBXSDK的三角面化API即可解决。
- Mikk切线计算问题,使用这个GitHub的库,并实现以下他的接口即可解决,具体实现可以直接参考UE引擎的源码,搜算关键字“Mikk”即可看到实现过程
其实法线贴图出现的很多问题,都是行业没有统一标准相关,因此写一个类似“转换器”的工具,来统一不同规范能解决不少问题。希望未来有朝一日,行业可以统一色彩空间、左右手坐标系、切线空间、Z+是向前还是Z-是向前的问题,这样就能解决很多问题了。
推荐阅读:
- The Toolbag Baking Tutorial | Marmoset Toolbag
- Generating Perfect Normal Maps for Unity (and Other Programs) | by Ben Golus | Medium
- 此外注意区分顶点法线(模型数据)和 面法线(模型数据)两者是可以编辑的
- 它们属于模型数据,所以可以在建模软件里直接改。
比如:翻转面法线
重新计算法线
把某些边设为硬边
把某些边设为软边
使用 Weighted Normal 修改高光
手动编辑顶点法线方向
- 它们属于模型数据,所以可以在建模软件里直接改。
- 法线贴图只是记录的载体
3. Roughness:粗糙度贴图
注:Gloss贴图一般是1 – X的Roughness贴图
决定了光线分布在模型表面的密度

- 粗糙的表面比光滑的表面向更多的方向散射光线,导致反射更模糊而不是更清晰
- 值范围为0.0到1.0。当粗糙度等于0.0时,反射清晰,您的模型根本不会散射光线,从而在材料上产生更清晰、更明亮的反射和照明。当粗糙度等于1.0时,反射变得模糊。光线会更加分散在你的材料中。光线和反射在模型上更加分散,但因此它们看起来要暗得多
- 这些地图是灰度的,白色代表最粗糙的表面,黑色代表有光泽、光滑的表面。
注意:
Unity URP Lit 里主要叫 Smoothness,它和 Roughness 是反的:
Smoothness = 1 - Roughness
也就是:
Roughness 白 = 粗糙
Smoothness 白 = 光滑
4. Metallic / Metalness:金属度贴图
指的是一个表面对周围环境的反射程度

- 当金属度为 0.0 时,固有色会完全显现,材质呈现塑料或陶瓷质感(即完全不反射)
- 金属度为 0.5 时,材质表现为烤漆金属质感;
- 当金属度达到 1.0 时,表面几乎完全失去固有色,仅单纯反射周边环境。(完全反射)
例如:金属度 1.0、粗糙度 0.0 时,表面就和现实中的镜面一模一样。 - 金属度贴图同样为灰度图,但制作时最好只用纯白、纯黑两种数值,中间过渡交由粗糙度贴图来控制
- 金属度贴图中黑色区域,会将固有色贴图作为漫反射颜色(即纹理受光后呈现的本色);
- 而白色区域,会以固有色来决定反射的色调与亮度,同时材质的漫反射颜色变为纯黑。此时不再需要漫反射本色,因为该区域所有色彩与细节都将由环境反射提供,所以漫反射直接置黑即可。
高光贴图(Specular Map)
- 用来控制表面反射高光的颜色和强度
- 如果你用金属度贴图来制作黄铜材质,
你需要在基础色贴图的对应区域绘制黄铜色调,这样反射效果才能让材质呈现出黄铜的质感。 - 在 Specular 工作流里,金属的反射颜色主要由 Specular Map 决定。BaseColor 更多表示非反射部分的漫反射颜色。
基础色贴图上的黄铜区域则需要设为纯黑色,你得在高光贴图上绘制黄铜的色彩细节,才能实现同样的效果,对理想金属来说,漫反射很弱,所以金属区域的 BaseColor 往往会变暗,甚至接近黑色。
5. Ambient Occlusion(AO) / Occlusion:环境遮蔽
环境光遮蔽会为物体缝隙、凹陷处添加阴影效果,让画面看起来更真实。在渲染时,这张贴图会叠加到基础色(Albedo)上,用来定义物体表面对光线的反应程度

- 是一张灰度图:白色区域代表能接收大部分光线,而深色区域代表光线难以到达的地方。环境光遮蔽的数值范围在 0.0 到 1.0 之间:0.0 代表完全黑暗(被遮蔽),1.0 代表无遮蔽。
- 模拟物体之间所产生的阴影,在不打光的时候增加体积感。也就是完全不考虑光线,单纯基于物体与其他物体越接近的区域,受到反射光线的照明越弱这一现象来模拟现实照明(的一部分)效果
注意:
AO 不是主要阴影,它只是补充“小范围遮挡感”。真正的大阴影还是由灯光和阴影系统负责。
6. Height / Displacement:高度贴图(也叫Bump)
作用:记录表面哪里高、哪里低

- 高度贴图是一种灰度贴图:黑色代表模型的最低凹陷处,白色代表模型的最高凸起,中间的灰色调则对应过渡的高度。
- 优势在于,提供的细节在任何角度、任何光照条件下都能完美呈现;但缺点是,它需要对模型进行曲面细分(Tessellation),这会显著增加渲染耗时。因此,法线贴图因使用便捷性,成为了更主流的选择。
- 通常情况下,用于高度贴图的灰度图像也适合用于遮挡贴图(AO贴图)

- 法线贴图和高度贴图的共同点是,二者都能为基础网格添加细节效果。
- 区别在于:高度贴图会向 3D 网格中添加实际数据,并提升模型的多边形数量;而法线贴图不会改变网格本身。

- 可以用于视差、位移、地形起伏等效果。
8. Opacity / Alpha 透明度
作用:决定哪些地方透明,哪些地方不透明。

- 透明度贴图可以让材质的指定区域变得透明。在制作玻璃、低多边形树枝或贴花时,这张贴图至关重要!
- 它常被用于树木或贴花的制作(如上图所示):你可以在单个多边形平面上绘制一整簇叶子,再用透明度贴图隐藏掉多余的部分。将多个这样的多边形分层叠加,就能用极低的性能消耗做出真实的树木效果。
- 透明度贴图为灰度图:白色代表完全不透明,黑色代表完全透明,中间的灰色调则对应不同程度的半透明效果。数值上,0.0 为不透明,1.0 为透明。
9. Curvature 曲率 = Convexity + Cavity
| 词 | 中文意思 | 解释 |
|---|---|---|
| Curvature | 曲率图 / 曲率信息 | 存储凹凸转折信息,包含凸边和凹槽信息,常用于边缘磨损、掉漆、积灰。 |
| Convexity | 凸度 / 凸起信息 | 只关注模型向外凸出的区域,比如边角、棱边,常用于生成边缘磨损、高光磨白。 |
| Cavity | 凹陷 / 腔体信息 | 只关注模型向内凹的细小缝隙、沟槽、裂缝,常用于生成污垢、灰尘、暗部堆积。 |

- 曲率贴图允许提取和黑色的值代表了凹区域,白色的值代表了凸区域,灰度值代表中性/平 地。
10. Thickness

- 黑色代表薄的地方、白色代表厚的地方。它可以用于辅助制作表面散射(SSS,简称3S材质)材质,或直接扩散/反照率假装SSS的效果。 从冰面,蜡烛以及皮肤上观察到这种效果,表面看起来有一种半透明的深度感。
11. Emissive(自发光贴图)
- 自发光贴图控制表面发射光的颜色和亮度。当场景中使用了自发光材质时,它看起来像一个可见光。物体将呈现『自发光』效果
12 ID 材质ID贴图
用不同颜色区分模型的不同材质区域,方便在 Substance Painter 里快速选区和上材质
通用流程


1.策划阶段
1.1 策划案(文案策划给出需求单)
- 指项目最初由策划或文案策划提出资源需求。比如游戏里需要一个角色、一把武器、一个场景道具,策划会说明它的用途、背景设定、风格方向、功能需求、数量、优先级等。
1.2 对接资源(过会)
- 美术、TA、主美、策划、项目负责人等相关人员一起开会确认需求是否可执行。这个阶段会讨论资源是否必要、工作量是否合理、风格是否统一、技术上能不能实现、排期是否允许。
- 简单说:把需求拿出来评审,确认能不能做、怎么做、谁来做。
1.3 资源分级
- 评审通过后,会根据资源的重要程度和使用场景进行等级划分。比如主角、Boss、核心场景属于高级资源,需要更高面数、更高贴图精度和更多制作时间;普通小道具、远景物体、一次性资源可以降低规格。
2.原画阶段
- 拆分
- 比如一张角色原画里有:角色本体、头发、衣服、护甲、武器、背包、挂件、特效光环
3.模型阶段
- (有没有特殊流程)—对模型特殊要求


通用流程
- 中模 / Blockout
- 旧项目可能使用 3ds Max,新项目规范可能转向 Maya
- Topology / Edge Flow 拓扑布线
- 不考虑布线 大型 一般是内部人员完成
- 拓扑是3D网格中顶点、边和面的排列方式,重拓扑就是重新优化这些结构,让模型更高效
- 不是所有模型都可以不考虑布线:静态道具相对宽松,建筑和场景件主要考虑结构与优化,而角色、怪物以及需要绑定动画的模型必须重点考虑关节、肌肉和表情等变形区域的拓扑布线。
- 高模制作
- (Zbrush 3Dcoat Blender(三角洲))
- 高模通常面数非常高,可能是几百万到几千万面。
它一般不会直接进游戏引擎,主要用于后续烘焙。
- 低模拓扑 / Retopology
- TOPOGUN 混元AI拓扑
- 把高模转成(拓补为)可用于游戏引擎的低面数模型(具体面数见上规范表)
- UV拆分
- RizomUV / Maya / Blender
- 把3D模型表面展开成2D贴图坐标(UV),为贴图绘制和烘焙做准备
- 如果UV拆得不好,会出现拉伸、接缝明显、贴图浪费等问题
- 根据资产复杂度选择单UV、多个Texture Set或UDIM方案
- UV 拆分主要是给低模做的,不是只给高模
- 低模一定要拆 UV。
因为最终进 Unity / Unreal 的是低面数模型,贴图也是贴在这个低模上的。你烘焙出来的 Normal、AO、Curvature、ID、BaseColor 等贴图,都会按照低模的 UV 坐标生成,我之前就是在烘焙之前没有拆UV所以结果错误
- 低模一定要拆 UV。
- 烘焙法线等贴图/ Baking
- Marmoset Toolbag(主流) / Substance Painter / Maya / Blender
- 得到法线、AO、曲率、ID等贴图(Map Types – Marmoset Toolbag Documentation)
Surface Maps

Lighting Maps

4.材质流程
- 材质贴图
- (Sunstance painter)SD(做材质贴图的)
- 制作最终视觉效果,包括颜色、粗糙度、金属度
LOD Level of Detail
- Houdini 很适合做批量资产处理,TA 可以用它做自动化 LOD 工具
- 比如用 Houdini 自动完成:
高模 / 中模 / 低模生成
自动减面
自动UV处理
自动生成碰撞体
自动生成LOD组
自动导出到引擎
- Nanite
- Unreal Engine 5 的虚拟几何体技术,美术可以导入非常高精度的模型,引擎自己根据屏幕大小动态选择需要渲染多少细节
特殊流程
- 植被(Houdini / SpeedTree)
- 头发(MAYA插件)
- 皮肤(顶点编辑加顶点色…)
Reference:

