1. 项目缘起与整体设计思路
酒桶战锤这个题材,第一次看到参考图的时候我就觉得有意思。它不像常规的骑士长剑或者双手斧那样规整,木桶本身的弧形结构、铁箍的锈蚀质感、锤头的厚重金属感,这三样东西凑在一起,天然就是练PBR全流程的好素材。我选它作为次世代道具案例,核心原因有三个:第一,它同时包含了木材、金属、皮革三种典型材质,能一次性把SP里最常用的材质球逻辑跑通;第二,木桶的弧形表面和铁箍的硬边结构形成对比,对ZBrush雕刻阶段的形体控制要求适中,不会像生物雕刻那样劝退新手;第三,战锤整体的剪影辨识度高,放在引擎里做展示的时候,轮廓一眼就能认出来,这对作品集来说很重要。
整个项目的设计思路,我走的是“高模定细节、低模控面数、烘焙转信息、SP出材质”这条标准次世代管线。具体来说,ZBrush阶段负责把木板的裂纹、铁箍的锈坑、锤头的锻打痕迹全部雕出来,这些细节是后续法线贴图的信息来源;Maya或者Blender阶段做低模拓扑,把面数控制在游戏道具的合理范围内,一般这种尺寸的武器,低模面数在3000到5000三角面之间比较合适;然后通过Substance Painter的烘焙功能,把高模的细节投射到低模上,生成法线、AO、曲率、位置等贴图;最后在SP里用图层混合的方式,把木纹、锈迹、划痕一层层叠上去,输出最终的PBR贴图组。
这里我想多说一句关于“为什么不用传统手绘贴图”的问题。次世代PBR流程和十年前的手绘流程最大的区别在于,PBR材质是物理正确的,金属度、粗糙度、法线这三张图决定了模型在引擎里对光照的响应方式。你手绘得再漂亮,如果粗糙度画错了,金属看起来就像塑料。所以这个项目里,我所有的材质信息都是从高模烘焙出来的贴图作为基底,再在SP里做艺术化处理,而不是凭空画出来的。这样做的好处是,细节有依据,光照下有层次,而且后续如果要改颜色或者做变体,只需要调整图层参数,不用重新画一遍。
另外,关于工具选型,ZBrush我用的是2024版,SP用的是2024版,烘焙器用的是SP内置的。有人喜欢用XNormal或者Marmoset Toolbag来烘焙,这也没问题,但SP内置的烘焙器对新手更友好,因为它和后续的材质绘制在同一个软件里完成,不用来回导贴图。当然,如果你追求极致的烘焙质量,Marmoset的八猴在法线抗锯齿方面确实有优势,这个后面讲烘焙的时候我会细说。
2. ZBrush雕刻阶段的核心细节与实操要点
2.1 从基础形体到木桶结构的搭建
雕刻阶段的第一步,永远是把大形体做准。我见过太多新手一上来就开始雕木纹,结果桶身歪了,后面怎么调都别扭。我的做法是,先在ZBrush里用Box Modeling的方式,把木桶的圆柱体、锤头的方块、握柄的长条这三个基本体块搭出来。木桶的直径和高度比例,参考真实橡木桶的尺寸,大概是直径60厘米、高度80厘米,锤头长度40厘米左右,握柄长度1.2米。这些比例不用特别精确,但视觉上要协调,锤头不能太小,否则看起来像玩具。
搭好基础体块之后,用DynaMesh重新布线,分辨率设置在128左右,这个数值既能保证后续雕刻有足够的细节密度,又不会让模型变得太卡。然后进入Sculptris Pro模式,用ClayBuildup笔刷把木桶的弧形表面推出来。这里有个小技巧:木桶不是完美的圆柱体,它的中间部分会略微鼓出,两端收窄,这个弧度用Move笔刷配合Alt键可以快速调整。铁箍的位置也要在这一步定好,一般木桶会有三道铁箍,分别在顶部、中部和底部,铁箍的宽度大概是木桶直径的十分之一。
锤头的部分,先用TrimDynamic笔刷把方块的边缘切出斜面,然后用hPolish笔刷把表面打磨平整。锤头的打击面要做出轻微的弧度,不能是纯平的,否则看起来不真实。握柄和锤头的连接处,用DamStandard笔刷刻出接缝,这个接缝在后续做材质的时候会变成磨损的重灾区,所以雕刻阶段就要把凹槽做出来。
2.2 木纹与铁锈的细节雕刻技巧
木纹的雕刻,我习惯用两种笔刷配合:先用Alpha 47(ZBrush自带的木纹alpha)配合DragRect笔刷,在木桶表面拖出大的纹理走向,然后用DamStandard笔刷加深裂纹。这里要注意,木纹不是均匀分布的,靠近铁箍的地方因为被箍紧,木纹会变得更密集,而木桶中间的部分,木纹会稍微舒展一些。这个逻辑和真实木桶的受力情况是一致的,铁箍附近的木材被压缩,纹理自然就更紧。
铁锈的雕刻,核心是“坑洞”和“剥落”两种形态。坑洞用ClayBuildup笔刷配合Alt键往下压,压的时候要注意深浅变化,不能所有坑都一样深。剥落的效果,用Flatten笔刷把铁箍边缘压平,然后用Mallet笔刷快速敲出一些不规则的凹痕。铁箍和木桶接触的缝隙处,锈蚀最严重,这里可以用SnakeHook笔刷拉出一些细小的锈蚀碎片,增加真实感。
锤头的锻打痕迹,我用的是Planar笔刷配合不同的Alpha,在锤头表面敲出一些不规则的平面。锻打痕迹的特点是,每个面都是平的,但面与面之间的过渡是硬的。这个效果用Planar笔刷最容易实现,因为它的笔触本身就是平面的。敲完之后,用Smooth笔刷轻轻过渡一下边缘,避免过于生硬。
注意:雕刻阶段不要把所有细节都雕得太深,尤其是木纹和锈坑,深度控制在0.5到1毫米之间就够了。雕得太深,烘焙的时候容易产生法线错误,而且低模拓扑的时候也会很麻烦。
2.3 高模的细化与导出设置
高模雕刻完成后,需要做一次整体的细化。我一般会用Subdivide把模型细分到200万到300万面之间,这个面数对于这种尺寸的道具来说足够了。细分之后,用NoiseMaker给木桶表面加一层微弱的噪波,模拟木材的微观粗糙感。噪波的强度设置在0.02左右,太高了会显得像砂纸。
导出高模的时候,我习惯导出OBJ格式,因为SP对OBJ的支持最好。导出之前,记得把模型的位置归零,缩放统一,否则烘焙的时候容易出问题。另外,高模的UV不需要展开,因为烘焙的时候用的是低模的UV,高模只需要有正确的形体就行。
这里有个细节:如果你的高模是多个子工具组成的,比如木桶、铁箍、锤头、握柄是分开的,导出的时候可以合并成一个OBJ,也可以分开导出。我建议合并成一个,这样烘焙的时候SP会自动识别为一个整体,不会出现部件之间法线不连续的问题。
3. 低模拓扑与UV展开的实操流程
3.1 低模拓扑的面数控制与布线逻辑
低模拓扑我是在Maya里做的,用Quad Draw工具。拓扑的核心原则是:在需要细节的地方多布线,在平坦的地方少布线。木桶的弧形表面,布线要顺着弧度走,不能横平竖直地切,否则烘焙出来的法线会有明显的棱角。铁箍的边缘,需要加一圈保护线,防止烘焙的时候边缘信息丢失。锤头的硬边,用Bevel工具倒角,倒角的宽度大概是0.5厘米,这个宽度在烘焙后能形成清晰的高光边缘。
面数控制方面,木桶主体大概1500三角面,铁箍三道加起来800面,锤头1000面,握柄700面,总共4000面左右。这个面数对于游戏道具来说是比较合理的,既不会太吃性能,又能保证剪影的圆滑度。如果你做的是手游项目,可以压缩到2000面左右,但铁箍的边缘保护线不能省,否则烘焙出来的法线会糊。
UV展开我用的是Maya的Unfold3D算法,木桶的UV沿着圆柱面展开,铁箍单独展,锤头和握柄各自独立。UV的排布要尽量紧凑,但不同材质的部分要分开,比如木材和金属的UV不能重叠,否则SP里画材质的时候会互相干扰。UV的边距留0.5%左右,太小了烘焙的时候容易溢出,太大了浪费UV空间。
3.2 烘焙前的模型检查清单
烘焙之前,有几个检查项必须过一遍,不然烘焙出来的贴图全是问题。第一,高低模的位置要对齐,低模不能偏离高模太远,否则烘焙出来的法线会偏移。第二,低模的法线要统一朝外,不能有反面的面。第三,低模的UV不能有重叠,尤其是对称的部分,如果你用了镜像UV,烘焙的时候要关掉对称,否则AO会出错。第四,高低模的命名要对应,SP烘焙的时候是根据名称匹配的,名字对不上就烘不出来。
我一般会在Maya里用Cleanup工具检查一遍,把非流形边、零面积面、重叠顶点全部清理掉。然后导出FBX格式,因为FBX对游戏管线的兼容性最好。导出的时候,记得勾选Smoothing Groups和Tangents,这两个选项对烘焙法线很重要。
4. Substance Painter材质制作全解析
4.1 烘焙参数设置与贴图输出配置
SP的烘焙,我用的分辨率是2048x2048,这个分辨率对于道具来说足够了。烘焙的贴图包括Normal、AO、Curvature、Position、Thickness这几张。Normal的烘焙,Anti-aliasing开到4x,能有效减少锯齿。AO的Ray Count设置在64左右,太低了会有噪点,太高了烘焙时间太长。Curvature的强度设置在1.0,这个数值对后续做边缘磨损很重要。
烘焙的时候,有一个参数叫“Match”,我一般选“By Name”,因为我的高低模命名是对应的。如果你用的是“Always”,SP会把所有高模都烘到所有低模上,容易出错。另外,Skew的数值可以稍微调大一点,0.5左右,能减少烘焙时边缘的拉伸。
提示:烘焙完成后,先别急着画材质,把Normal贴图单独拿出来看一眼,如果边缘有黑边或者接缝,说明高低模的匹配有问题,需要回去调整低模的布线或者高模的位置。
4.2 木材材质的图层堆叠逻辑
木材材质的制作,我分了五个图层。底层是基础色,用深棕色打底,颜色值大概在#4A2E1A左右。第二层是木纹,用SP自带的Wood Fine纹理,配合Curvature贴图做遮罩,让木纹只在凹陷的地方显现。第三层是磨损,用Metal Edge Wear生成器,配合Curvature和AO,在木桶边缘和铁箍接触的地方做出磨损效果。第四层是污渍,用Dirt生成器,配合Position贴图,让污渍集中在木桶的下半部分。第五层是划痕,用Scratches生成器,随机分布一些细小的划痕。
这里的关键是遮罩的运用。SP的遮罩系统非常强大,你可以用Curvature做边缘遮罩,用AO做缝隙遮罩,用Position做高度遮罩。我习惯把多个遮罩叠加使用,比如磨损效果,就是Curvature乘以AO,再乘以一个Noise,这样出来的磨损既有边缘感,又有随机性,不会显得太规整。
4.3 金属锈蚀与锤头锻打质感的实现
铁箍的锈蚀材质,我用的是SP的Rust材质球作为基底,然后叠加了三层锈蚀。第一层是均匀锈蚀,用Rust Base覆盖整个铁箍,粗糙度设置在0.8左右。第二层是局部锈蚀,用Rust Spots配合Noise遮罩,在铁箍的缝隙和边缘做出集中的锈斑。第三层是剥落锈蚀,用Rust Flakes配合Curvature遮罩,在铁箍的凸起处做出锈层剥落、露出底层金属的效果。
锤头的锻打质感,核心是粗糙度的变化。锻打面的粗糙度比锤头其他部分要低,因为锻打过程中金属被压实,表面更光滑。我用一个Fill图层,把粗糙度降到0.3,然后用Planar笔刷在遮罩上画出锻打面的形状。锤头的边缘,用Metal Edge Wear做出高光磨损,磨损处的金属度拉到1.0,粗糙度降到0.2,这样在引擎里打光的时候,边缘会有一圈亮边,非常出效果。
4.4 握柄皮革缠绕的材质细节
握柄的皮革缠绕,我用的是SP的Leather材质球,但做了一些调整。皮革的基础色是深褐色,粗糙度在0.7左右。皮革的纹理,我用了一个Leather Fine的纹理,配合Curvature遮罩,让纹理只在皮革的凹陷处显现。缠绕的缝隙处,用Dirt生成器做出污垢堆积的效果,污垢的颜色偏黑,粗糙度拉到0.9。
皮革的磨损,主要集中在握柄的两端和缠绕的凸起处。我用Metal Edge Wear生成器,配合Curvature遮罩,在凸起处做出磨损,磨损处的皮革颜色变浅,粗糙度降低,模拟皮革被磨光的效果。握柄和锤头连接的地方,用Position遮罩做出油污效果,油污的颜色偏暗,粗糙度在0.4左右,模拟手汗和油脂的积累。
5. 常见问题与排查技巧实录
5.1 烘焙法线出现黑边或接缝的排查思路
烘焙法线出现黑边,最常见的原因是高低模的匹配有问题。排查步骤是这样的:第一,检查高低模的位置是否对齐,低模不能偏离高模太远。第二,检查低模的UV是否有重叠,尤其是对称的部分。第三,检查高低模的命名是否对应,SP烘焙的时候是根据名称匹配的。第四,检查低模的法线是否统一朝外,如果有反面的面,烘焙出来的法线会出错。
如果以上都没问题,那可能是烘焙的Skew参数设置不当。Skew的作用是调整烘焙射线的方向,数值太小,边缘的射线打不到高模上,就会出现黑边。我一般把Skew设置在0.5到1.0之间,具体数值根据模型的形状调整。另外,Anti-aliasing开到4x也能有效减少黑边。
5.2 SP材质在引擎中显示异常的解决方法
SP里画好的材质,导入引擎后显示异常,最常见的原因是贴图的色彩空间设置错了。BaseColor贴图要设置为sRGB,Normal、Roughness、Metallic、AO这些贴图要设置为Linear。如果色彩空间设错了,材质的颜色会偏暗或者偏亮,粗糙度的响应也会不对。
另一个常见问题是法线的绿通道方向。SP导出的法线贴图,默认是OpenGL格式,绿通道朝上。如果你的引擎用的是DirectX格式,绿通道朝下,就需要在SP的导出设置里勾选“Flip Green Channel”。这个设置不对的话,模型表面的凹凸会反过来,看起来非常奇怪。
还有一个容易被忽略的问题:SP导出的贴图,默认是8位深度,如果你的项目要求16位深度,需要在导出设置里改。8位深度对于大多数项目来说够用了,但如果你做的是影视级渲染,16位深度能保留更多的细节。
5.3 高模雕刻细节在低模上丢失的补救方案
高模雕得很细,但烘焙到低模上之后细节丢失了,这个问题很常见。原因通常是低模的面数不够,或者UV的精度不够。补救方案有两个:第一,增加低模的面数,尤其是在细节密集的区域,比如木纹和锈坑的地方,多布线。第二,提高烘焙的分辨率,从2048提高到4096,能保留更多的细节。
如果以上都做了还是丢失,那可能是高模的细节雕得太浅了。烘焙的时候,法线贴图只能捕捉到高模表面的起伏,如果起伏太小,烘焙出来的法线变化就不明显。这种情况下,需要回到ZBrush,把细节雕得更深一些,或者用NoiseMaker加一层微弱的噪波,增加表面的起伏。
5.4 常见问题速查表
| 问题现象 | 可能原因 | 排查方法 | 解决方案 |
|---|---|---|---|
| 烘焙法线黑边 | 高低模位置偏移 | 检查高低模对齐 | 调整低模位置 |
| 烘焙法线接缝 | UV重叠 | 检查UV排布 | 重新展开UV |
| 材质颜色偏暗 | 色彩空间错误 | 检查贴图色彩空间 | BaseColor设sRGB |
| 凹凸反向 | 法线绿通道错误 | 检查引擎法线格式 | 翻转绿通道 |
| 细节丢失 | 低模面数不足 | 检查低模布线 | 增加面数或提高烘焙分辨率 |
| 边缘磨损不自然 | 遮罩叠加不当 | 检查Curvature遮罩 | 叠加Noise增加随机性 |
| 金属像塑料 | 粗糙度设置错误 | 检查粗糙度贴图 | 金属粗糙度调低 |
| 锈蚀太均匀 | 遮罩缺乏变化 | 检查锈蚀遮罩 | 叠加多层Noise遮罩 |
注意:SP的图层混合模式里,有一个“Passthrough”模式,这个模式在导出贴图的时候会被忽略,所以不要用它来做最终的材质效果。如果你用了Passthrough,导出的时候记得把它改成Normal。
6. 引擎导入与最终效果验证
6.1 贴图导入引擎的参数配置
贴图导入引擎的时候,有几个参数必须设置正确。BaseColor贴图,色彩空间选sRGB,压缩格式选DXT1或者BC1。Normal贴图,色彩空间选Linear,压缩格式选DXT5或者BC5,BC5的精度比DXT5高,但文件体积也大一些。Roughness、Metallic、AO这三张图,可以打包成一张RGB贴图,R通道放AO,G通道放Roughness,B通道放Metallic,这样能节省贴图槽位。打包的时候,色彩空间选Linear,压缩格式选DXT5或者BC7。
引擎里的材质节点,BaseColor接BaseColor贴图,Normal接Normal贴图,Roughness和Metallic从打包贴图里拆分出来,分别接到对应的输入口。AO贴图可以接到Ambient Occlusion输入口,也可以不接,因为引擎的SSAO会处理环境光遮蔽。如果你用的是UE5,还可以把AO贴图接到材质节点的“Ambient Occlusion”输入口,增强缝隙处的阴影效果。
6.2 光照环境下的材质表现调试
材质导入引擎后,需要在不同的光照环境下调试。我一般会在三个环境下看效果:第一个是中性白光,色温5500K,强度1.0,用来检查材质的基础颜色和粗糙度。第二个是暖光,色温3200K,强度0.8,用来检查金属的反射和锈蚀的颜色。第三个是冷光,色温7000K,强度1.2,用来检查木材的纹理和皮革的细节。
调试的时候,重点看三个地方:第一,金属的反射是否清晰,如果反射模糊,说明粗糙度太高了。第二,木材的纹理是否自然,如果纹理太规整,说明遮罩的随机性不够。第三,锈蚀的颜色是否偏色,如果锈蚀看起来偏红或者偏绿,说明BaseColor的色彩空间有问题。
6.3 最终效果的多角度展示与文件归档
最终效果展示,我一般会渲染四个角度:正面、侧面、背面、俯视。每个角度渲染一张2048x2048的图,背景用中性灰,光照用三点布光。渲染的时候,开启Ray Tracing,让金属的反射更真实。渲染完成后,把高模、低模、贴图、渲染图分别归档,高模存ZTL格式,低模存FBX格式,贴图存PNG格式,渲染图存PNG格式。归档的时候,文件夹命名要规范,比如“酒桶战锤_HighModel”、“酒桶战锤_LowModel”、“酒桶战锤_Textures”、“酒桶战锤_Renders”,这样后续找文件的时候一目了然。
我个人在实际操作中的体会是,次世代PBR流程最耗时的部分不是雕刻,也不是画材质,而是烘焙和调试。烘焙出问题的时候,往往需要回到低模阶段重新调整布线,这个来回的过程非常磨人。所以我的建议是,低模拓扑的时候多花点时间,把布线做扎实,UV展开的时候多检查几遍,把重叠和拉伸降到最低。前期多花一个小时,后期能省三个小时。另外,SP的图层不要堆太多,超过二十层之后软件会变卡,而且图层之间的混合逻辑会变得很难管理。我一般把图层控制在十五层以内,复杂的材质用生成器配合遮罩来实现,而不是一层一层地叠。