Skip to content

赛道-–-显示屏

汉化标题:赛道-–-显示屏
原文标题:Tracks-–-Displays
汉化更新时间:2026-01-14 16:44:15 +0800
英文原文最新更新时间:2022-06-13 01:18:53 +0300

显示屏允许对赛道纹理进行动画处理。目前它们只支持摄像头画面,但以后希望会支持更多选项。

整个配置由两部分组成,第一部分用于通用显示设置(目标网格、在纹理上的位置和尺寸、颜色调整),第二部分用于实际的模式,目前仅有摄像头模式。

提示:要在夜间让它有亮光效果,在 MATERIALS_ADJUSTMENT 的单独材料段中添加一些自发光,并在 DISPLAY 段中使用该网格。

语法(通用)

ini
[DISPLAY_...]
; 通用设置:
MESHES = tvstaff_HI_?    ; 作为显示屏的赛道网格列表
REGION_START = 20, 320   ; 纹理上显示区域的位置(像素)
REGION_SIZE = 508, 290   ; 纹理上显示区域的尺寸(像素)

; 更新与渲染选项
HIGH_REFRESH_RATE = 1    ; 高刷新率(默认启用;启用时约 30 FPS,不启用时约 15 FPS)
FLIP_X = 0               ; 设为 1 可在 X 轴翻转输出(主要用于奇怪的 UV 映射)
FLIP_Y = 0               ; 设为 1 可在 Y 轴翻转输出(主要用于奇怪的 UV 映射)

; 颜色校正:
OUTPUT_ALPHA = 1         ; 显示区域的 alpha 通道值
OUTPUT_GAMMA = 0.55      ; 伽马校正,减小值会使暗部更暗
OUTPUT_SATURATION = 1.0  ; 饱和度校正
OUTPUT_BRIGHTNESS = 1.0  ; 亮度校正
OUTPUT_FISH_EYE = 0.0    ; 增大以添加镜头畸变效果
OUTPUT_VIGNETTE = 0.0    ; 增大以使角落变暗
OUTPUT_CHROMATIC_ABERRATION = 0.0 ; 增大以添加彩色像散效果

; 模式设置:

然后,为了让整套系统工作,在同一节中添加模式设置。

语法(摄像头模式)

ini
[DISPLAY_...]
; 通用设置:


; 模式设置:
MODE = CAMERA

; 第一台摄像机
CAMERA_0 = 176.03, 211.67, -189.67         ; 摄像机位置
CAMERA_0_TARGET = 171.65, 209.59, -185.13  ; 摄像机所看的点
CAMERA_0_UP = 0, 1, 0                      ; 摄像机的向上方向,默认 0, 1, 0
CAMERA_0_FOV = 50                          ; 视场角(度),默认 50
CAMERA_0_ASPECT_RATIO = 1.752              ; 长宽比,默认 REGION_SIZE.x/REGION_SIZE.y

; 第二台摄像机
CAMERA_1 = 451.95, 197.55, 103.46
CAMERA_1_TARGET = CLOSEST_CAR  ; 使用最近的赛车代替固定点
CAMERA_1_TARGET_INERTIA = 0.9  ; 摄像机惯性以获得更平滑的移动
CAMERA_1_TARGET_TARGET_REFERENCE_POINT = 431, 197, 103
                               ; 用于决定最近赛车的参考点,默认为摄像机位置

CAMERA_2 = -44.02, 195.05, 284.45
CAMERA_2_TARGET = FOCUSED_CAR  ; 另一种模式,聚焦赛车(通常与摄像机关联的那辆)
CAMERA_2_TARGET_INERTIA = 0.9
CAMERA_2_FOV = 35

当前,活动摄像机为最近的一台。它的工作方式,例如,你在赛道各处放置了很多电视机。你可以使用单个 [DISPLAY_...] 配置它们,然后在每台电视旁边添加一个摄像机。激活最近摄像机可确保车手在他们当前最近的电视机处获得正确视图,同时在核心上它是单一实体、单次渲染、单张纹理组合,所以一切都干净且经过优化。

关于处理距离

摄像机和显示装置只有在不离摄像机太远时才会工作。你不能让摄像机显示 10 公里开外的东西,这是一个非常重要的限制并且完全是有意为之。即便现在,AC 已经有大量 LOD 等优化,这些摄像机也需要考虑这些优化而不是让整个事物可见,否则对性能会非常糟糕。此外,CSP 最近加入了区块优化,简单地将远处的几何体从场景树中移除以节省处理时间,我希望以后还可以在那里加入更多内容,理想情况下能从 VRAM 甚至 RAM 中卸载资源。当然,让摄像机显示 10 公里外的东西会破坏这一切。

数字屏着色器

正如引入 GIF 所示,它不仅仅是显示图像,还带有像素模式,在斜角视线下会弄乱颜色等等。这不是由于 [DISPLAY_...] 本身,而是由于 common/materials_track.ini 中的自定义材质 [Material_DigitalScreen]

它可以以两种不同方式工作。如果你的屏幕被分离成一个单独的网格,那么很简单,只用它来处理全部:

ini
[Material_DigitalScreen]
Materials = tv_staff
UseTextureCoordinates = 1  ; 如果映射看起来怪异,改为 0
                           ; (尽管不该如此,否则 DISPLAY_… 如何工作?)
ScreenAspectRatio = 0.5    ; 如果像素看起来歪斜则调整
ScreenScale = 1024         ; 根据目标分辨率调整,一般使用纹理大小是个好主意

另一种情况是如果你的屏幕与常规模型合并,则可以使用带有不同掩码选项的 MultiMap 版本。这是我在 Vallelunga 的设置方式,使用 [DISPLAY_...] 中的 OUTPUT_ALPHA = 0,因为那里的其余 txDiffuse 有白色 alpha 通道:

ini
[Material_DigitalScreen]
Materials = tv_staff
UseMultiMap = 1
UseDiffuseMask = INVERT  ; 与 DISPLAY 中的 OUTPUT_ALPHA = 0 配合使用
ScreenScale = 1024

除了 UseDiffuseMask 外,还有 UseMapsMaskUseNormalMask,两者都接受 01INVERT。另一种选择是显式定义区域:

ini
[Material_DigitalScreen]
Materials = tv_staff
UseMultiMap = 1
UseAreaMask = 1
AreaMaskCenter = 264, 464
AreaMaskSize = 508, 288
AreaMaskTotalSize = 2048, 2048
ScreenScale = 1024

后续计划添加的功能

  • 更多模式:可编程内容、幻灯片放映,理想情况下也能播放视频;
  • 更多摄像机模式与移动方式;
  • 让 3D 摄像机跟随赛车?尽管这更适合赛道动画;
  • 允许为缩放和旋转的映射进行调整?