跳转到内容
CRUSHFORMV1.1.0
在 Fab 上获取

损伤漆面与划痕

漆面与划痕

漆面会在车身凹陷和被刮擦的地方磨损。磨损从漆面到底漆,再到裸金属,刮擦还会沿其方向画出细细的划痕线。这些痕迹会一直保留,直到车身被修复。本页介绍磨损的作用,以及设定磨损的设置。漆面材质本身的连接方式见快速入门第 1 步。

沿墙面高速刮擦会留下一道底漆条纹,然后露出裸金属,并有细细的划痕线沿滑动方向延伸。凹陷会在其金属移动了至少 3 cm 的地方磨损漆面,较深的凹陷还会使漆面再开裂一点。只沿面板摩擦、速度低于 1.5 m/s 的轻推不会损伤漆面。

磨损会一块一块地积累,如这辆车所示:

深色轿车的侧前方四分之三视图,车门、翼子板和保险杠上的漆面成片剥落,露出浅色的裸金属。
车门、翼子板和保险杠上的漆面成片剥落,露出裸金属。

只有连接了 MF_CF_Paint 的材质会磨损。与车身共用网格体的玻璃和内饰件只连接 MF_CF_Deform:它们随车身一起凹陷,并保留自己的外观。关闭 Dents 后,任何东西都不会凹陷或被划伤,漆面保持完好。

划痕线是细细的平行线,比漆面更浅、更粗糙,其中最深的几条会露出底漆。它们沿车辆滑动的方向延伸。只有设置好划痕图集(见“设置”)后才会显示,滑动速度低于 Min Scrape Speed 时不会画出划痕线。

  • 凹陷磨损。 每次凹陷会为某点金属超出 Min Abrasion Depth(UCFProfile::MinAbrasionDepth,3 cm)之后移动的每厘米增加 Dent Abrasion(UCFProfile::DentAbrasion,0.002)的磨损。撞击时远离撞击点的车身只移动一两厘米,不会损伤那里的漆面。20 cm 的凹陷会增加 0.034,即超出 3 cm 的 17 cm。刮擦在任何深度都会磨损漆面。磨损被限制在 Max Paint Wear(UCFProfile::MaxPaintWear,0.2)以内:即一辆撞毁的车最多可磨掉、露出底漆和裸金属的漆面比例。1 表示全部漆面都会磨掉。
  • 刮擦磨损。 滑动速度超过 Min Scrape Speed(UCFProfile::MinScrapeSpeed,1.5 m/s)的接触,会在 Scrape Radius(UCFProfile::ScrapeRadius,30 cm)以内,每滑动 1 m 增加 Scrape Rate(UCFProfile::ScrapeRate,0.05)的磨损。报告每隔 Scrape Report Interval(0.1 s)发送一次。如果两次报告的间隔超过 Max Scrape Dt(0.25 s),则只计入 0.25 s 的滑动。
  • 划痕线。 同一次刮擦会在 Scrape Radius 以内的每个点上,每滑动 1 m 增加 Scratch Rate(UCFProfile::ScratchRate,0.05)的线条覆盖度,上限为 Max Scratch(UCFProfile::MaxScratch,0.033):即一辆撞毁的车最多会因划痕线而损失的漆面比例。一次滑过某个点,大约增加 Scratch Rate 乘以两倍 Scrape Radius(以米计)。默认值下为 0.05 × 0.6 = 0.03,因此滑过两次即达到 0.033 的上限。Scratch Rate 为 0 时没有划痕线。
  • 每个点一个方向。 每个点只保留一个划痕线方向,即在其上占主导的那次滑动的方向。较弱的滑动只增加覆盖度,不会改变线条方向。相邻点的方向不同时,即滑动转弯处或两次滑动交叉处,介于这些方向之间的线条会在一小段距离内相互渐变:同时显示两组线条,并相互交替,而不是一组线条在接缝处中断、另一组从那里开始。
  • 深凹陷会开裂。 深于 3 cm 的凹陷随深度增加会额外增加磨损,在 25 cm 深及以上时最多为 0.06。这个 3 cm 固定在着色器中,不随 Min Abrasion Depth 变化。
  • 漆面的显示。 磨损达到一定程度时,掉漆遮罩会显示底漆颜色;磨损更高时则显示裸金属颜色。粗糙度和金属度跟随每一层。底漆默认为中深灰色(0.1、0.105、0.095),裸金属默认为中灰色。
  • 输入。 MF_CF_Paint 有十四个输入。Base Color、Roughness 和 Metallic 接收你的漆面,Wear Depth 和 Scratch 接收 MF_CF_Deform。Primer Color 是漆面下的颜色,Metal Color 是裸金属的颜色。Scratch Tiling 设定掉漆遮罩在车身上重复的频率,Scratch Line Tiling 设定划痕线贴图重复的频率(默认每厘米 0.02 次)。Dust Color、Mud Color、Snow Color 和 Dirt Strength 设定污垢外观,其中 Dirt Strength 会缩放所有污垢,即灰尘、泥浆、积雪和湿润。Built-in Look 选择内置的污垢外观;关闭时,磨损的漆面直接通过,可用于你自己设计的外观。
MF_CF_Paint 及其输入(其中包括 Primer Color 和 Metal Color)和输出。
  • 修复。 Repair 会与凹陷一起清除磨损和划痕线。Wash 不会改变它们。
  • 网络。 划痕线会随凹陷一起复制到每个端,无需额外设置。
  1. 按凹陷与晶格的第 1 至 3 步创建配置文件。漆面设置位于同一个配置文件中。
  2. 打开配置文件,找到 Paint 分组。表中的默认值即为起始值。先保留它们,然后每次只改动一项。
Paint
Dent Abrasion0.002
Min Abrasion Depth3.0
Min Scrape Speed1.5
Scrape Rate0.05
Scratch Rate0.05
Scrape Radius30.0
Max Paint Wear0.2
Max Scratch0.033
凹陷配置文件的 Paint 分组。
  1. 连接漆面材质。在每个需要磨损的材质中,将 MF_CF_Paint 放在你的漆面与 Base Color、Roughness 和 Metallic 之间,并由 MF_CF_Deform 为其 Wear Depth 和 Scratch 提供输入。快速入门第 1 步列出了十项连接。
  2. 已上漆的材质会有一个标量参数 CF_PaintWear,设为 1。从共用车身母材质、但不应磨损的材质实例,应将其设为 0。同一个标量也会缩放划痕线,所以设为 0 也会关闭划痕线。
  3. 检查划痕图集。在 Project Settings › Plugins › Crushform 的 Atlas 分组中有 Scratch Atlas,默认指向 /Crushform/Atlas/RT_CF_ScratchAtlas。它必须是与晶格图集大小相同的 RG8 渲染目标。如果它缺失,或格式、大小不对,划痕线就不会显示,Output Log 会给出警告。掉漆和凹陷不受影响。

漆面没有蓝图调用,也没有事件。连接材质属于编辑器中的工作,因此这里没有图表。在编辑器代码中,批量连接多个材质的工具会用配置文件的 Max Displacement 加上默认的褶皱幅度,调用 WireMaterial:

// Editor code. Routes the body material through the deform and paint functions.
const float Bound = Profile->MaxDisplacement + UCFContentLibrary::GetDefaultFoldAmplitude();
const bool bWired = UCFContentLibrary::WireMaterial(BodyMaterial, DeformFunction, PaintFunction, Bound);

对于玻璃和内饰,将 PaintFunction 传为空值。此时该调用只连接形变。

属性作用默认值
UCFProfile::bDents关闭时:没有凹陷,也没有漆面磨损。开
UCFProfile::DentAbrasion凹陷每移动 1 cm 金属所增加的漆面磨损。0.002
UCFProfile::MinAbrasionDepth金属要移动多少厘米,凹陷才开始磨损其漆面;只有超出这一深度的移动才会磨损。刮擦在任何深度都会磨损漆面。3
UCFProfile::MinScrapeSpeed滑动速度(m/s),低于该值的接触不会损伤漆面。1.5
UCFProfile::ScrapeRate每滑动 1 m 增加的漆面磨损,上限为 Max Paint Wear。0.05
UCFProfile::ScratchRate每滑动 1 m 增加的划痕线覆盖度,上限为 Max Scratch。0 表示没有划痕线。0.05
UCFProfile::ScrapeRadius刮擦的半径(cm)。30
UCFProfile::MaxPaintWear任一点承受的漆面磨损上限,0 到 1。设为 1 时,漆面会在各处磨穿。0.2
UCFProfile::MaxScratch任一点承受的划痕线覆盖度上限,0 到 1。划痕线最多覆盖约 0.36 的漆面,因此更高的值不会再增加线条。0.033
UCFSettings::ScratchAtlas保存每个点的线条覆盖度和方向的 RG8 渲染目标,大小与晶格图集相同。没有可用的图集就没有划痕线。/Crushform/Atlas/RT_CF_ScratchAtlas
UCFSettings::ScrapeReportInterval两次刮擦报告之间的秒数。0.1
UCFSettings::MaxScrapeDt一次报告最多计入的滑动时长(秒)。0.25
CF_PaintWear已上漆材质上的标量。材质实例将其设为 0 即可停止磨损。1
  1. 在 Play In Editor 中打开 Proving Ground 演示,然后沿墙驾驶汽车,速度超过 1.5 m/s。漆面会在金属摩擦的地方磨损,细细的划痕线沿你行驶的方向延伸。刮擦的次数越多,线条越密。
  2. 输入 Crushform.Debug 2。叠加层会按位移或磨损(取较大者)为节点着色。磨损的条纹会以受损节点的形式显示。
  3. 输入 Crushform.RepairAll。磨损和划痕线会随凹陷一起消失。

Crushform.Debug 和 Crushform.RepairAll 是作弊指令:它们在除 Shipping 之外的所有构建以及编辑器中都可以使用。

原因。 有四种可能。配置文件中的 Dents 已关闭,这会阻止所有凹陷和刮擦。材质没有用 MF_CF_Paint 连接。材质实例将 CF_PaintWear 设为 0。或者车辆滑动速度低于 Min Scrape Speed。

修复。 按此顺序逐一检查这四项。然后以超过 1.5 m/s 的速度刮擦,确认连接有效。

原因。 Dent Abrasion 只按某点金属超出 Min Abrasion Depth(默认 3 cm)的移动来磨损该点的漆面。更浅的凹陷只会使金属弯曲,漆面仍留在上面。刮擦不受这一深度限制。

修复。 如果希望轻微碰撞后漆面保持完好,无需任何操作。要让更浅的凹陷也使漆面掉漆,请调低 Min Abrasion Depth:设为 0 时,任何深度都会磨损漆面。

原因。 在 Scrape Radius 以内,Scrape Rate 会在超过 Min Scrape Speed 的每一米滑动中增加磨损。高速长距离滑动会累加,而每次报告最多只计入 0.25 s 的滑动。

修复。 降低 Scrape Rate。如果沿面板的轻推不应损伤漆面,提高 Min Scrape Speed,或仅当撞毁的车应失去全部漆面时,提高 Max Paint Wear。

原因。 刮擦已经作用到车身,所以只剩四种可能。配置文件中的 Scratch Rate 为 0。划痕图集缺失,或不是与晶格图集大小相同的 RG8 渲染目标:此时 Output Log 会警告 No Crushform scratch atlas (Project Settings > Plugins > Crushform); scratch lines stay invisible,或指出该图集及其必须具备的大小。材质中没有把 MF_CF_Deform 的 Scratch 连到 MF_CF_Paint 的 Scratch。或者材质实例将 CF_PaintWear 设为 0。

修复。 将 Scratch Rate 提高到 0 以上。把 Scratch Atlas 设为 /Crushform/Atlas/RT_CF_ScratchAtlas,或设为你自己的、大小与晶格图集相同的 RG8 渲染目标。连接两个 Scratch 引脚,或用 WireMaterial 重新连接该材质。把 CF_PaintWear 改回 1。

原因。 车身上的每个点只保留一个划痕线方向。滑动转弯处,或两次滑动在同一处交叉时,相邻的点方向不同,介于这些方向之间的线条会在一小段距离内相互渐变。那里会同时看到两组线条。这是预期行为:它取代了一组线条在接缝处中断、另一组从那里开始的效果。

修复。 如果转弯或交叉处就该是这样,无需任何操作。这一段的长度没有对应的设置。要得到一组线条,请朝同一方向刮擦,即只做一次笔直的滑动。调低 Max Scratch 可让那里的线条更淡。

原因。 它们没有用 MF_CF_Paint 连接。这是设计如此:玻璃和内饰随车身凹陷,并保留自己的外观。

修复。 如果这正是你想要的,无需任何操作。如果要让某个部件磨损,请按上述步骤用 MF_CF_Paint 连接它。