损伤漆面与划痕
漆面与划痕
漆面会在车身凹陷和被刮擦的地方磨损。磨损从漆面到底漆,再到裸金属,刮擦还会沿其方向画出细细的划痕线。这些痕迹会一直保留,直到车身被修复。本页介绍磨损的作用,以及设定磨损的设置。漆面材质本身的连接方式见快速入门第 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 选择内置的污垢外观;关闭时,磨损的漆面直接通过,可用于你自己设计的外观。
- 修复。 Repair 会与凹陷一起清除磨损和划痕线。Wash 不会改变它们。
- 网络。 划痕线会随凹陷一起复制到每个端,无需额外设置。
- 按凹陷与晶格的第 1 至 3 步创建配置文件。漆面设置位于同一个配置文件中。
- 打开配置文件,找到 Paint 分组。表中的默认值即为起始值。先保留它们,然后每次只改动一项。
| Paint | ||
|---|---|---|
| Dent Abrasion | 0.002 | |
| Min Abrasion Depth | 3.0 | |
| Min Scrape Speed | 1.5 | |
| Scrape Rate | 0.05 | |
| Scratch Rate | 0.05 | |
| Scrape Radius | 30.0 | |
| Max Paint Wear | ||
| Max Scratch | ||
- 连接漆面材质。在每个需要磨损的材质中,将
MF_CF_Paint放在你的漆面与 Base Color、Roughness 和 Metallic 之间,并由MF_CF_Deform为其 Wear Depth 和 Scratch 提供输入。快速入门第 1 步列出了十项连接。 - 已上漆的材质会有一个标量参数
CF_PaintWear,设为 1。从共用车身母材质、但不应磨损的材质实例,应将其设为 0。同一个标量也会缩放划痕线,所以设为 0 也会关闭划痕线。 - 检查划痕图集。在 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 |
检查是否正常工作
Section titled “检查是否正常工作”- 在 Play In Editor 中打开 Proving Ground 演示,然后沿墙驾驶汽车,速度超过 1.5 m/s。漆面会在金属摩擦的地方磨损,细细的划痕线沿你行驶的方向延伸。刮擦的次数越多,线条越密。
- 输入
Crushform.Debug 2。叠加层会按位移或磨损(取较大者)为节点着色。磨损的条纹会以受损节点的形式显示。 - 输入
Crushform.RepairAll。磨损和划痕线会随凹陷一起消失。
Crushform.Debug 和 Crushform.RepairAll 是作弊指令:它们在除 Shipping 之外的所有构建以及编辑器中都可以使用。
漆面从不磨损
Section titled “漆面从不磨损”原因。 有四种可能。配置文件中的 Dents 已关闭,这会阻止所有凹陷和刮擦。材质没有用 MF_CF_Paint 连接。材质实例将 CF_PaintWear 设为 0。或者车辆滑动速度低于 Min Scrape Speed。
修复。 按此顺序逐一检查这四项。然后以超过 1.5 m/s 的速度刮擦,确认连接有效。
凹陷后漆面完好
Section titled “凹陷后漆面完好”原因。 Dent Abrasion 只按某点金属超出 Min Abrasion Depth(默认 3 cm)的移动来磨损该点的漆面。更浅的凹陷只会使金属弯曲,漆面仍留在上面。刮擦不受这一深度限制。
修复。 如果希望轻微碰撞后漆面保持完好,无需任何操作。要让更浅的凹陷也使漆面掉漆,请调低 Min Abrasion Depth:设为 0 时,任何深度都会磨损漆面。
一次刮擦就把漆面磨穿
Section titled “一次刮擦就把漆面磨穿”原因。 在 Scrape Radius 以内,Scrape Rate 会在超过 Min Scrape Speed 的每一米滑动中增加磨损。高速长距离滑动会累加,而每次报告最多只计入 0.25 s 的滑动。
修复。 降低 Scrape Rate。如果沿面板的轻推不应损伤漆面,提高 Min Scrape Speed,或仅当撞毁的车应失去全部漆面时,提高 Max Paint Wear。
漆面会磨损,但没有划痕线
Section titled “漆面会磨损,但没有划痕线”原因。 刮擦已经作用到车身,所以只剩四种可能。配置文件中的 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。
划痕线在两个方向之间渐变
Section titled “划痕线在两个方向之间渐变”原因。 车身上的每个点只保留一个划痕线方向。滑动转弯处,或两次滑动在同一处交叉时,相邻的点方向不同,介于这些方向之间的线条会在一小段距离内相互渐变。那里会同时看到两组线条。这是预期行为:它取代了一组线条在接缝处中断、另一组从那里开始的效果。
修复。 如果转弯或交叉处就该是这样,无需任何操作。这一段的长度没有对应的设置。要得到一组线条,请朝同一方向刮擦,即只做一次笔直的滑动。调低 Max Scratch 可让那里的线条更淡。
玻璃板或内饰没有任何磨损
Section titled “玻璃板或内饰没有任何磨损”原因。 它们没有用 MF_CF_Paint 连接。这是设计如此:玻璃和内饰随车身凹陷,并保留自己的外观。
修复。 如果这正是你想要的,无需任何操作。如果要让某个部件磨损,请按上述步骤用 MF_CF_Paint 连接它。
