Skip to content

车辆 – LED 面板

汉化标题:车辆 – LED 面板 原文标题:Cars – LED panels 汉化更新时间:2026-01-14 00:00:00 +0800
英文原文最新更新时间:2022-06-13 01:18:53 +0300

LED 面板可以显示赛车位置和车手名称,并偶尔闪烁。

与原始的 "digital_panels.ini" 不同,此选项可以在回放中工作(此外,它支持任何其他输入类型)。但主要区别在于它使用动态纹理而不是浮动数字,因此它可以更好地适应弯曲的表面,并且不需要用于数字放置的特殊父节点。

重要说明

在继续之前,我想首先深入介绍它的工作原理和使用方法。其工作原理是:这是一个动态纹理,背景是透明的,数字或字母使用指定的颜色。这意味着您可以通过两种方式使其工作:

  • 您可以复制底层网格,将新的网格稍微移动,将动态纹理分配给其 txDiffuse 插槽,使其成为自发光并设置混合模式为 alpha test。这是最简单的方法,但它会增加一次绘制调用,需要修改模型,并且总体上看起来很奇怪。不过还有另一种方法。

  • 相反,您可以使用 ksPerPixelMultiMap_emissive 着色器,并将动态纹理分配给 txEmissive 插槽!您无需更改模型来替换着色器,简单的 [SHADER_REPLACEMENT_...] 调整就能很好地工作。这样,您无需编辑任何模型。您可能会疑惑,如果 txDiffuse 应用于结果的自发光会破坏 LED 形状——好吧,好消息是,有一个参数可以禁用 txDiffuse 干扰!

语法

ini
[LED_PANEL_...]
MESHES = RSS_EXT_LED_Panel      ; 目标网格
TEXTURE_SLOT = txEmissive       ; 目标纹理插槽
RESOLUTION = 1024, 512          ; 新生成纹理的分辨率
MASKS_PACK = lumirank_font.zip  ; 包含 LED 遮罩的包名称
DIGIT_0 = 22, 47, 312, 455      ; 第一个数字的 X、Y、宽度和高度
DIGIT_1 = 353, 47, 312, 455     ; 第二个数字的 X、Y、宽度和高度
DIGIT_2 = 692, 47, 312, 455     ; 第三个数字的 X、Y、宽度和高度
                                 ; 您可以设置任意数量的数字

BASE_COLOR = '#ffffff', 0.5    ; 基础颜色(未闪烁时)
FLASHING_COLOR = '#ffffff', 1  ; 闪烁颜色
FLASHING_APPLY_MASK = 1        ; 是否对闪烁应用遮罩

BLANCPAIN_FLASHING_PERIOD = 1       ; Blancpain 闪烁:周期(秒)
BLANCPAIN_FLASHING_DURATION = 0.2   ; 关闭持续时间(秒)
BLANCPAIN_FLASHING_RACE_CLASS = AM  ; 赛事级别(仅对级别领先者闪烁)

N24_FLASHING_PERIOD = 3.5        ; N24 闪烁:周期(秒)
N24_FLASHING_TIME = 1.2          ; 闪烁持续时间(秒)
N24_FLASHING_FREQUENCY = 6       ; 闪烁频率(Hz)
N24_FLASHING_ACTIVE_SHARE = 0.7  ; 闪烁期间处于活动状态的时间比例

ROLE_0 = DRIVER_NAME  ; 第一个角色
ROLE_1 = POSITION     ; 第二个角色
                       ; 您可以设置任意数量的角色

ROLE_DURATION = 3     ; 每个角色持续的秒数

关于 LED 遮罩和 MASKS_PACK

遮罩是黑白纹理,白色区域标记为发光。它们与 texture\display_panel 中使用的纹理非常相似(尽管它们将被绘制在动态纹理上而不是出现在 3D 空间中)。然而,由于现在也可以使用字母,因此增加了一个额外功能,以节省磁盘空间和比赛期间的 VRAM。您可以准备一个包含所有 LED 的单一高分辨率遮罩,然后以低得多的分辨率制作字母和数字的遮罩,只是大致覆盖目标 LED 区域。这可以在不牺牲任何质量的情况下节省大量字节,甚至可能使准备遮罩更容易。这是一个示例包,来自 RSS GT-M Bayro 6(感谢 Scott Shaw 许可作为示例使用)。

因此,换句话说,它的全部工作原理如下:

  • 要渲染字母 "A",CSP 将打开 MASKS_PACK 中提到的 ZIP 档案并查找 "base/a.dds";
  • 它还会查找 "mask.dds";
  • 如果找到遮罩,它将使用乘法模式同时渲染两者;
  • 否则,仅使用 "base/a.dds"。

对于闪烁阶段,方法类似:

  • 要渲染字母 "A",CSP 将查找 "flashing/a.dds";
  • 如果那里不存在任何内容,它将使用 "flashing_fallback.dds";
  • 如果 FLASHING_APPLY_MASK 设置为 1,它将使用与非闪烁阶段类似的遮罩;
  • 否则,它将只使用纹理,就像没有遮罩一样。

关于角色

目前,有三种类型的角色:

  • DRIVER_NAME:打印车手名称(例如,在名称标签中显示的名称),如有必要则缩短:

    ini
    ROLE_0 = DRIVER_NAME
  • TEXT:打印在相应参数中设置的静态文本:

    ini
    ROLE_0 = TEXT
    ROLE_0_TEXT = HELLO WORLD
  • 其他任何内容都将作为输入进行处理,类似于 CSP 数字仪表和其他:

    ini
    ROLE_0 = GAS
    ROLE_0_INPUT_MULT = 999

    注意常规的 "INPUT_..." 参数在这里都有对应的 "ROLE_N_" 前缀。除此之外,您可以像往常一样使用它,包括 LUT、延迟等。

    另一个重要细节:默认情况下,数字格式将有前导零,使用此选项进行更改:

    ini
    ROLE_0_NUMBER_FORMAT = 3.0

关于 ksPerPixelMultiMap_emissive 和着色器替换

这是一个示例,说明如何通过配置更改着色器并使其发光:

ini
[SHADER_REPLACEMENT_...]
MATERIALS = LED_Panel
SHADER = ksPerPixelMultiMap_emissive
FILL_MISSING_TEXTURES = 1
PROP_... = emSkipDiffuseMap, 1
PROP_... = ksEmissive, 100, 100, 100

有关整个内容的更多信息,请查看此内容

几个技巧

  • 如果您想让闪烁颜色更亮,只需降低基础颜色的亮度并提高自发光;
  • 如果纹理插槽中有一些旧纹理,数字将绘制在其顶部;
  • 如果您使用 txEmissive 方法,与 txDiffuse 分辨率相比,降低分辨率可能是有意义的,以节省一些 VRAM 和性能。