涂装(Skins) 是一类特殊部件,启用后会将特定材质替换为其他材质。它们主要用于车辆拉花、漆面设计,以及内饰颜色与样式的选择。
涂装的优先级低于发光贴图 glowMaps ,因此若要通过涂装替换材质,必须替换掉发光贴图中定义的全部3种输出材质。 涂装优先级同样低于 deformGroups ,因此材质的破损变体也必须一并替换。
涂装在 JBeam 的根节点中被定义为全局修改器,用法与license plate 属性类似。因此,车辆的所有部件都能读取到这些涂装设置。
这两个修改器可以互换使用。 唯一的区别是:部分系统在控制台输出数据时,不会上报 skinName 相关信息。
涂装的替换材质与普通材质一样,在 materials.json 文件中定义。
为了结构清晰,这些材质通常单独放在名为 skin.materials.json 的文件里。
涂装的具体生效逻辑,在材质的 "mapTo" 部分中定义。(为清晰起见,该值通常与名称保持一致)。
它由3 个用点分隔的部分组成:
"mapTo": "pickup.skin.ambulance",
第一部分是将要被替换的材质的 mapTo 值。 在大多数车辆中,负责车身漆面的材质,其 mapTo 值与车辆名称相同。
第二部分是材质槽(material slot)。
材质槽让不同部件可以替换不同的材质。
材质槽由调用涂装的部件所在插槽的 slotType 决定。
如果 slotType 名称里包含 skin_ "skin_" ,那么材质槽名就和这个 slotType 完全一样。如果slotTypr为"paint_design",材质槽位将命名为"skin".
材质槽可以用"skinType"属性在Jbeam中覆盖:
{
"nine_skin_taxi": {
"information":{
"authors":"BeamNG",
"name":"Taxi Cab",
"value":0,
},
"slotType" : "skin_nine_sedan",
"skinType" : "skin_body",
"skinName" : "taxi",
},
}
当 slotType 是图表,因而无法直接用作材质槽时,该规则就会派上用场:
{
"nine_skin_twotone_custom": {
"information":{
"authors":"BeamNG",
"name":"Two Tone Custom Paint",
"value":5000
},
"slotType" : ["skin_nine_roadster","skin_nine_coupe","skin_nine_sedan","skin_nine_van","skin_nine_panelvan","skin_nine_pickup"],
"skinType" : "skin_body",
"skinName" : "twotone_custom"
},
}
第三部分是涂装名称(skin name),由上一节介绍的全局修饰符定义。 这两个修饰符可互换使用,但为清晰起见:
用于修改主车身漆面的涂装,建议用 globalSkin ;
其余所有情况,使用 skinName 。
其余语法规则与普通材质一致,详见:涂装系统参考 以及 material examples 寻求更多细节
动态纹理(Dynamic Textures) 是每辆车都自带的一种辅助涂装,支持在生涯模式中通过涂装编辑器对车辆进行喷漆改色。 其 Jbeam 语法格式应如下所示:
{
"moonhawk_skin_dynamicTextures": {
"information":{
"authors":"BeamNG",
"name":"Dynamic Textures",
"isAuxiliary": true,
"value":1350
},
"slotType" : "paint_design",
"dynDecalMaterials": ["moonhawk", "moonhawk_nosecone_alt"],
"globalSkin" : "dynamicTextures"
},
}
它包含一个可选的 Jbeam 区段,名为 dynDecalMaterials ,这是一个列表,里面定义了该系统会作用到的车辆材质。 如果没有设置该区段,系统会默认作用于与车辆同名的材质。
请注意: dynamicDecals (动态贴花)仅对 slotType 为 "paint_design"的槽位生效,且与 skinType 编辑器器不兼容
一个标准的车辆涂装
Jbeam:
"pickup_skin_ambulance": {
"information":{
"authors":"BeamNG",
"name":"Ambulance Livery",
"value":5000,
},
"slotType" : "paint_design",
"globalSkin" : "ambulance",
},
skin.materials.json的开始:
"pickup.skin.ambulance": {
"name": "pickup.skin.ambulance",
"mapTo": "pickup.skin.ambulance",
"class": "Material",
/* ... */
},
Jbeam:
"etki_skin_lights_alt": {
"information":{
"authors":"BeamNG",
"name":"Alternate Lights",
"value":200
},
"slotType" : "skin_lights",
"globalSkin" : "lights_alt"
},
skin.materials.json中所有相关的材质:
"etki_lights.skin_lights.lights_alt": {
"name": "etki_lights.skin_lights.lights_alt",
"mapTo": "etki_lights.skin_lights.lights_alt",
"class": "Material",
/* ... */
},
"etki_lights_dmg.skin_lights.lights_alt": {
"name": "etki_lights_dmg.skin_lights.lights_alt",
"mapTo": "etki_lights_dmg.skin_lights.lights_alt",
"class": "Material",
/* ... */
},
"etki_lights_on.skin_lights.lights_alt": {
"name": "etki_lights_on.skin_lights.lights_alt",
"mapTo": "etki_lights_on.skin_lights.lights_alt",
"class": "Material",
/* ... */
},
"etki_lights_on_intense.skin_lights.lights_alt": {
"name": "etki_lights_on_intense.skin_lights.lights_alt",
"mapTo": "etki_lights_on_intense.skin_lights.lights_alt",
"class": "Material",
/* ... */
},
Jbeam:
"nine_skin_van_a": {
"information":{
"authors":"BeamNG",
"name":"Macaroni and Beans",
"value":0,
},
"slotType" : ["skin_nine_van","skin_nine_pickup"],
"skinType" : "skin_body",
"skinName" : "van_a",
},
材质:
"nine_main.skin_body.van_a": {
"name": "nine_main.skin_body.van_a",
"mapTo": "nine_main.skin_body.van_a",
"class": "Material",
/* ... */
},
这篇文章对你有用吗?