Skip to content

通用-–-着色器替换

汉化标题:通用-–-着色器替换
原文标题:General-–-Shader-replacements
汉化更新时间:2026-01-14 14:27:45 +0800
英文原文最新更新时间:2023-06-25 12:50:33 +0200

最初,着色器替换是为了替换现有模型的着色器,但它发展得越来越远,允许更改材质参数和属性、纹理、对象参数,有时甚至可以改变一些行为。

与赛道的 [MATERIAL_ADJUSTMENT_...] 或车辆的 [EMISSIVE_...] 等事物的主要区别是,着色器替换是完全静态的,在加载期间或配置更改后应用一次。这样,它们本身不会影响性能或浪费任何 RAM(而动态的 [MATERIAL_ADJUSTMENT_...] 每帧都会更新,例如)。因此,对于静态更改,我强烈建议使用着色器替换。

这种差异的一个后果是,如果您更改配置并删除 [SHADER_REPLACEMENT_...] 部分,它将不会恢复原始值。

语法

ini
[SHADER_REPLACEMENT_...]
ACTIVE = 1    ; 设置为 0 以禁用整个部分(默认值为 1)
SKINS = red?  ; 要使用替换的皮肤列表(仅适用于车辆)

; 首先,目标,材质或网格(需要考虑的一点: 
; 对于更改材质属性,MESHES 中的每个网格都将获得自己的材质,因此 
; 增加 GPU 调用的数量,因此最好尽可能使用 MATERIALS):
MATERIALS = tree?, texture:grass?.dds
MESHES = mesh_bush_?

; 可选地,一个新的着色器:
SHADER = ksTree_ppshadows

; 着色器可以针对不同的原始着色器进行不同的设置:
SHADER_OVERRIDE_0 = ksTree, ksGrass  ; 如果原始是 ksTree,则使用 ksGrass
SHADER_OVERRIDE_... = ksPerPixelAT?, ksTree ; 如果原始以"ksPerPixelAT"开头,则使用 ksTree

; 材质属性:
PROP_0 = ksAmbient, 0.4
PROP_1 = ksDiffuse, 0.5
PROP_... = ksEmissive, 1, 0, 0 ; 通常,您可以使用"..."自动填充索引

; 纹理,使用以下方式之一设置(在这里,最好不要使用"..."以确保键 
; 将与其值配对):
RESOURCE_0 = txDiffuse
RESOURCE_TEXTURE_0 = name_of_texture_in_kn5.dds ; TEXTURE 指原始模型中的纹理

RESOURCE_1 = txNormal
RESOURCE_REF_1 = txDetailNM  ; REF 指特定插槽中的原始纹理

RESOURCE_2 = txMaps
RESOURCE_COLOR_2 = 1, 1, 1 ; COLOR 创建新的 1×1 纯色纹理

RESOURCE_3 = txDetail
RESOURCE_FILE_3 = custom.dds ; FILE 指磁盘上的纹理,位于配置旁边

FILL_MISSING_TEXTURES = 1 ; 此选项将自动创建缺失的纹理,例如 
                           ; txNormal(平面)或 txMaps(白色),以确保无损坏的外观
FORCE_POINT_SAMPLER = 1   ; 强制像素纹理采样器,如果您有微小的纹理并且您
                           ; 想要使其锐利和像素化,而不是模糊

; 材质参数(有关详细信息,请滚动到"不同模式"部分):
BLEND_MODE = ALPHA_BLEND   ; OPAQUE, ALPHA_TEST, ALPHA_BLEND, TRANSPARENT_AS_BLACK, ADD 或 ALPHA_ADD, MULTIPLY 或 ALPHA_MULTIPLY
CULL_MODE = OFF            ; DOUBLESIDED, FRONT_NO_MS, WIREFRAME, WIREFRAME_AA, FRONT_BIASED, SHADOWS_DOUBLE, SHADOWS_FRONT
DEPTH_MODE = NORMAL_FORCED ; NOWRITE, OFF, LESSEQUAL, LESSEQUAL_NOWRITE, NORMAL_FORCED

; 阴影参数:
CAST_SHADOWS = 1  ;* 设置网格是否应投射阴影,0、1 或 TERRAIN:
                   ; 1 始终启用它们,TERRAIN 仅在太阳低时,以加快速度

SEMITRANSPARENT_SHADOWS = 1  ; 用于半透明阴影,0、1 或 TEXTURE:
                              ; 1 用于实心半透明,TEXTURE 将考虑纹理

; 双面阴影(虽然它可能会使阴影渲染稍慢,
; 我建议尝试它,它似乎通过消除大量
; 孔或彼得平效应来显着改善阴影,特别是对于仪表盘或远距离):
DOUBLE_FACE_SHADOW = 1         ; 这一个可能——而且很可能——会导致很多自阴影
DOUBLE_FACE_SHADOW_BIASED = 1  ; 但这一个是有偏移的,所以它会很好地工作

; 遮罩通道(使用它,网格被渲染两次,首先是乘法混合模式和 
; 自定义类型的着色器以提取纯纹理颜色,从而为其后面的东西着色
; 以获得正确的彩色玻璃外观):
EXTRA_MASK_PASS = 1              ;* 启用遮罩通道
EXTRA_MASK_PASS_COLOR = 0, 0, 0  ;* 可选颜色偏移,RGB,可以是正值或负值
EXTRA_MASK_PASS_OPACITY = 2      ;* 该彩色玻璃通道的可选不透明度调整

; 其他参数:
FIXED_EMISSIVE = 1  ; Weather FX 可以更改自发光以更好地模拟眼睛适应;使用此 
                    ; 标志来禁用给定网格的该行为(仅在非常特殊的情况下使用
                    ; 例如 BLEND_MODE=MULTIPLY 或后视镜;尽管后视镜会自动获得此标志)
IS_TRANSPARENT = 1  ;* 用于该 IsTransparent 标志,以确保网格将最后渲染
LAYER = 0           ;* 网格层,这也是网格将被渲染的最低细节级别
LOD_IN = 0          ;* LOD 入口距离(如果距离较低,网格将被隐藏),以米为单位
LOD_OUT = 500       ;* LOD 出口距离(如果距离较大,网格将被隐藏),以米为单位

DISABLE_FAR_PLANE_CLIPPING = 1  ;* 在针对相机视锥体检查可见性时,跳过远平面,对于
                                 ; 远距离几何体(使用其自定义着色器)工作是必需的

; * — 每对象调整,如果您使用 MESHES 并且仅使用它们,这些将不会创建新材质。

不同模式

混合模式(BLEND_MODE = …

  • OPAQUE:常规不透明模式;
  • ALPHA_TEST:常规 alpha 测试;
  • ALPHA_BLEND:常规 alpha 混合;
  • ADD:加法模式,可能适用于发光区域(只需确保将 ksDiffuseksAmbient 设置为零并仅依赖 ksEmissive);
  • MULTIPLY:乘法模式以防万一(同样,仅使用 ksEmissive,并且不要忘记将 FIXED_EMISSIVE 设置为 1 以确保表面将具有恒定颜色);
  • TRANSPARENT_AS_BLACK:工作类似于 alpha 混合,但透明表面而不是透明的是黑色的(由扩展配置用于 Ruf Yellowbird 以修复其后面的网格,该网格后面没有建模的东西,也许在其他地方有用);

请记住,不透明和 alpha 测试是最快的,其他的会减慢速度。除了 OPAQUEALPHA_TESTTRANSPARENT_AS_BLACK 之外,所有都可能需要网格的透明标志(但仅当您无法将可能在它后面的所有网格在渲染队列中移动到它上方时,否则,请避免使用透明标志以既节省性能又提高视觉质量,如往常一样)。

剔除模式(CULL_MODE = …

  • FRONT:常规模式,剔除背面;
  • BACK:显示背面并隐藏正面;
  • WIREFRAME:显示线框;
  • WIREFRAME_AA:显示抗锯齿线框(非常慢);
  • DOUBLESIDEDNONEOFF:显示两侧。

双面模式将通过增加着色表面来对性能产生负面影响。

深度模式(DEPTH_MODE = …

  • NORMAL_FORCED:默认情况下,任何透明网格(带有透明标志)都忽略深度模式,这可能在某些情况下导致伪影,此值可能有助于解决它,但要谨慎使用,它不是完美的解决方案并且有自己的问题(但它有助于 Brands Hatch 上的窗户);
  • OFF:或 'DEPTH_OFF' - 网格不能被遮挡或不会遮挡任何东西,如果最后渲染,它将显示在顶部,如果首先渲染,一切都将绘制在其上方;
  • NOWRITE:或 'DEPTH_NOWRITE' 或 'READONLY' 或 'READ_ONLY' 网格可以被其他网格遮挡,但它本身不会遮挡任何东西;
  • LESSEQUAL:或 'DEPTH_LESSEQUAL' 如果其他网格在完全相同的位置,网格可以遮挡其他网格(用 替换常规的"到相机的新距离 < 到相机的旧距离");
  • LESSEQUAL_NOWRITE:或 'DEPTH_LESSEQUAL_NOWRITE' 或 'LESSEQUAL_READONLY' 或 'LESSEQUAL_READ_ONLY'
  • NORMAL:默认;基于到相机的距离的常规遮挡模式

我怀疑 LESSEQUAL 可能对于通过第二层添加的车辆上的贴纸来说是完美的,因为它不需要任何偏移来正确工作。

填充缺失纹理的颜色

  • txDiffuse:白色;
  • txMaps:白色;
  • txDetail:白色;
  • txNormal:平面法线(127, 127, 255);
  • txNormalBlur:平面法线(127, 127, 255);
  • txNormalDetail:平面法线(127, 127, 255);
  • txNormalR:平面法线(127, 127, 255);
  • txNormalG:平面法线(127, 127, 255);
  • txNormalB:平面法线(127, 127, 255);
  • txNormalA:平面法线(127, 127, 255)。

新参数

Custom Shaders Patch 为各种着色器添加了更多参数来调整它们的行为,而 [SHADER_REPLACEMENT_...] 是设置这些参数的完美方式。

extExtraSharpLocalReflections

更改局部反射(SSLR)。在某些地方,更希望使反射更模糊以隐藏这些只是简单的立方体贴图反射(通过减少 ksSpecularEXP),但没有理由使局部反射也那么模糊。要使它们更锐利,只需设置一个非零值,它就像锐度增强,从 0 到 1。

另一个可能更重要的功能:如果值为负,局部反射将切换到强制模式,严重放宽对检测到的反射的质量检查。默认情况下,这些检查非常苛刻:最初算法是为车漆设计的,对于车漆,在大多数情况下,拥有天空的反射比侧后视镜的错误重复反射要好。然而,在其他情况下,例如对于车辆轮圈,拥有任何混乱但局部的反射可能比天空更好。

第一部分,锐度增强,使用 extExtraSharpLocalReflections 的绝对值,因此您可以将 extExtraSharpLocalReflections 设置为 -0.001 以切换到强制 SSLR 反射而不改变锐度,或者将其设置为 -1 使它们强制并额外锐利(这种奇怪的组合节省了从 CPU 传递到 GPU 的数据量)。

示例,Kunos E30 镀铬的强制反射:

ini
[SHADER_REPLACEMENT_...]
MATERIALS = Chrome
PROP_... = extExtraSharpLocalReflections, -0.001

seasonAutumn, seasonWinter

几乎适用于所有着色器,允许调整漫反射颜色。Autumn 变量将其向黄色移动,winter 使其去饱和并提高亮度。两者都使用绿色作为遮罩。整个事情是作为快速且廉价的技巧来获得季节的,希望将来会被更实质性的东西取代。如果您想使用它,请在 [MATERIAL_ADJUSTMENT_...] 中设置它,绑定到基于季节的条件。

extColoredReflection, extColoredReflectionNorm, extColoredBaseReflection

适用于具有反射的着色器,这些参数允许使高光和反射的颜色受下方表面颜色的影响,以获得正确的金属外观,而无需 PBR 的所有费用。它对于使车辆灯光更反射而不失去颜色也非常有用。

  • extColoredReflection:从 0 到 1,着色的强度。

  • extColoredReflectionNorm:从 0 到 1,灰色颜色被着色的程度。使用默认值 0,它的工作类似于获取色相,仅此而已,因此深灰色和白色将以相同方式影响反射。使用 1,也会考虑亮度,因此深灰色表面将失去很多反射。

  • extColoredBaseReflection:仅适用于具有常规和太阳高光的 MultiMap 着色器,反射和太阳高光将使用 extColoredReflection,基础高光将使用 extColoredBaseReflection

extBounceBack

增加光线反弹回光源,对于使用特殊涂料的路标或车辆灯光旁边的物体可能很有用,这些物体在被其他车辆照亮时会发光。我不确定正确的术语是什么,但是,它是这些东西:

并且这里有一个关于它们如何工作的精彩视频

受以下支持:

  • ksPerPixelMultiMap_AT_NMDetail_ps
  • ksPerPixelMultiMap_AT_ps
  • ksPerPixelMultiMap_NMDetail_emissive_ps
  • ksPerPixelMultiMap_NMDetail_ps
  • ksPerPixelMultiMap_emissive_ps
  • ksPerPixelMultiMap_ps
  • ksPerPixelNM_ps
  • ksPerPixelReflection_ps
  • smLicensePlate_ps

变量设置该反弹光的强度。一个额外的提示:有这个灯光制作应用程序,它可以帮助在相机位置快速创建一个向前定向的聚光灯,只需增加范围,可能还有强度。非常适合在这里测试。

比较图像