参考设置
UCFSettings
蓝图:Crushform
Crushform 项目级设置:位于 Project Settings > Plugins > Crushform。
函数
项目的 Crushform 设置对象(类默认对象)。
某一污垢通道的设置。
铰接部件在摆动或脱落后所采用的碰撞:取 Loose Part Collision Profile 的模板;若其为 None 或未指定配置文件,则使用插件自身的碰撞。插件自身的碰撞不需要项目中的配置文件或碰撞通道:它是一个阻挡世界、忽略 Pawn、车辆、摄像机、可见性射线检测、可破坏物及其他物理刚体(包括其他松脱部件)的物理刚体。无论哪种情况,铰链之后都会让车辆单向阻挡该部件。
按给定的优先级,把这些设置写入它们的控制台变量。默认是项目设置的优先级,控制台命令或设备配置文件会覆盖它。
一次较重的碰撞体构建可以推迟的帧数,取值为 0 或 1,由 Crushform.Collision.DeferFrames 给出:负的控制台值表示不推迟,大于 1 的值按 1 处理。
本项目中车身碰撞体和部件碰撞体是否可以跟随凹陷,由 Crushform.Collision.Deform 给出。关闭时优先于配置文件的 Deform Collision。
凹陷和划痕在距摄像机多远处绘制,单位为 cm,由 Crushform.Dents.CullDistance 给出。0:不设限。
有多少辆车身绘制凹陷和划痕,由 Crushform.Dents.MaxBodies 给出。0:不设限。
污垢在距摄像机多远处绘制,单位为 cm,由 Crushform.Dirt.CullDistance 给出。0:不设限。
有多少辆车身绘制污垢,由 Crushform.Dirt.MaxBodies 给出。0:不设限。
属性
车身的凹陷和划痕在距摄像机多远处绘制,单位为 cm。超过此距离,车身以完好的外观绘制,走近后再次显示凹陷和划痕。只是停止绘制:晶格、碰撞、复制和损伤事件照常进行。0:不设限。仅对本机有效。Crushform.Dents.CullDistance 或设备配置文件会覆盖它。
- 默认值
- 0.0f
- 分类
- Culling
有多少辆车身绘制凹陷和划痕:最近的优先,屏幕内的先于屏幕外的,每秒检查几次。其余车身只是停止绘制。0:不设限。仅对本机有效。Crushform.Dents.MaxBodies 或设备配置文件会覆盖它。
- 默认值
- 0
- 分类
- Culling
车身的污垢(车身上和车轮上)在距摄像机多远处绘制,单位为 cm。超过此距离,它们以干净的外观绘制,走近后再次显示污垢。污垢被剔除期间,车身的污垢在本机上保持不变:既不积累也不消退,车身再次显示后才继续变化。清洗、填充或新增污垢仍然生效。0:不设限。仅对本机有效。Crushform.Dirt.CullDistance 或设备配置文件会覆盖它。
- 默认值
- 0.0f
- 分类
- Culling
有多少辆车身绘制污垢:最近的优先,屏幕内的先于屏幕外的,每秒检查几次。其余车身的污垢在本机上保持不变,与超过 Dirt Cull Distance 时一样。0:不设限。仅对本机有效。Crushform.Dirt.MaxBodies 或设备配置文件会覆盖它。
- 默认值
- 0
- 分类
- Culling
所有形变网格体采样的 RGBA8 贴图,不带 Mip 且不启用 sRGB:可以是渲染目标,也可以是 NeverStream 未压缩的 Texture2D。其尺寸决定槽位数量。
- 分类
- Atlas
单个槽位横向占用的纹素数。当 ResX * ResZ <= SlotWidth 时晶格可以放入。槽位平铺于图集中;着色器从 Custom Primitive Data 中读取每个槽位的原点。
- 默认值
- 256
- 分类
- Atlas
单个槽位的纹素行数。当 ResY <= SlotHeight 时晶格可以放入。
- 默认值
- 8
- 分类
- Atlas
Crushform 写入的第一个 Custom Primitive Data 索引;从该索引起使用 18 个浮点数。修改此值时,编辑器会重新生成烘焙它的材质函数(Crushform.RebakeOffsets 可手动执行);请保存这些材质函数以保留结果。
- 默认值
- 0
- 分类
- Atlas
车轮网格体四个污垢通道及其层级序号(CF::WheelData)所对应的第一个 Custom Primitive Data 索引。这是独立的偏移量:车轮从不携带形变数据块,而其轮胎通常会从索引 0 开始携带其他数据(轮胎形变即是如此),因此默认值为最后两个浮点数。修改此值时,编辑器会重新生成烘焙它的材质函数(Crushform.RebakeOffsets 可手动执行);请保存这些材质函数以保留结果。
- 默认值
- 34
- 分类
- Atlas
轮胎网格体接触记录(CF::TireData,32 个浮点数)所对应的第一个 Custom Primitive Data 索引。轮胎从不携带形变数据块,但它不得与位于 Wheel Custom Data Offset 处的车轮污垢数据块重叠(默认的 0..31 会避开 34..35)。修改此值时,编辑器会重新生成烘焙它的材质函数(Crushform.RebakeOffsets 可手动执行);请保存这些材质函数以保留结果。
- 默认值
- 0
- 分类
- Atlas
玻璃板裂纹(CF::GlassData,16 个浮点数)所对应的第一个 Custom Primitive Data 索引;玻璃板同样是形变网格体,因此不得与从 Custom Data Offset 起的 18 个浮点数重叠。修改此值时,编辑器会重新生成烘焙它的材质函数(Crushform.RebakeOffsets 可手动执行);请保存这些材质函数以保留结果。
- 默认值
- 18
- 分类
- Atlas
驾驶中的客户端每帧一批发送的报告数;服务器会拒绝超出的部分。
- 默认值
- 8
- 分类
- Network
服务器从单个组件每秒接受的报告数。发送方从这种深度的令牌桶中取用;服务器的令牌桶深度是其 1.5 倍,因为网络抖动会把发送方间隔开的报告聚成一批。
- 默认值
- 60.0f
- 分类
- Network
单个组件两次刮擦报告之间的间隔秒数。
- 默认值
- 0.1f
- 分类
- Network
一次刮擦报告所能代表的最长滑动时间,单位秒。
- 默认值
- 0.25f
- 分类
- Network
客户端保留预测撞击而服务器既未确认也未拒绝它的秒数。
- 默认值
- 10.0f
- 分类
- Network
车身在没有受到其他刚体撞击的情况下,最多能持续多少秒,超过后它的下一次撞击就算作一次新的接触(可造成凹陷)。叠放在另一刚体上的车身,每个物理步都会受到数倍于自身重量的求解器推出作用;这些撞击属于同一次接触,并且在其碰撞窗口期过后,只有出现尖峰时才会造成凹陷。比此时长更长的帧(即卡顿)会把这段时间延长到该帧结束之后。
- 默认值
- 0.1f
- 分类
- Contact
在同一接触内,撞击需比该接触当前水平强多少倍才能再次造成凹陷:即在静止接触之上发生的碰撞。它会开启属于自己的碰撞窗口期。
- 默认值
- 2.0f
- 分类
- Contact
自接触开始、或自接触中出现尖峰起算的秒数,在此期间每次撞击仍会造成凹陷:碰撞本身在其跨越的每个物理步都会造成凹陷。超过此时长后,处于静止状态(平放、挤压)的接触只有在出现尖峰时才会造成凹陷。
- 默认值
- 0.25f
- 分类
- Contact
接触点处的相对速度低于此值(单位米每秒)时,稳定接触视为静止并停止造成凹陷。平放或压在另一物体上的车身几乎不会相对它移动;而从旁掠过的物体(例如用车关上车门的车辆)则会像碰撞一样,在每一步都持续造成凹陷。
- 默认值
- 0.5f
- 分类
- Contact
车身在最近一次受损后,经过此秒数会在每一端上自动修复,效果同 Repair;为 0 则从不自动修复。
- 默认值
- 0.0f
- 分类
- Repair
每种物理材质一行:各表面的污垢、滚动声音与滚动特效。未设置此项时,任何车身都不会变脏。
- 分类
- Surfaces
供未指定形变配置文件的车身使用的形变配置文件;车辆适配器会读取该项。
- 分类
- Profile
图集尺寸的 RGBA8 渲染目标:R 通道为灰尘,G 为泥浆,B 为积雪,A 为湿润,与晶格逐槽位对应。车身材质须在 MF_CF_Paint 中使用同一个渲染目标。
- 分类
- Dirt
图集尺寸的 RG8 渲染目标:R 通道为划痕覆盖量,G 为方向,与晶格逐槽位对应。车身材质必须在 MF_CF_Deform 中使用同一个。
- 分类
- Atlas
污垢函数读取的材质参数集合(MPC_CF_Dirt):每辆车上污垢的外观。插件在此路径提供该集合,污垢函数从这里读取它。运行时模块不会加载它;它放在这里是为了让游戏代码找到它,并通过 CF::DirtLook 这些名称设置其参数。
- 分类
- Dirt
单个车身两次污垢更新之间的秒数。
- 默认值
- 0.2f
- 分类
- Dirt
轮胎速度达到此值时,表面的各项速率按原值生效,单位 m/s。
- 默认值
- 8.0f
- 分类
- Dirt
更快的轮胎对速率所乘的最大倍数。
- 默认值
- 2.0f
- 分类
- Dirt
灰尘通道:其名称、与其他通道的叠加方式以及清除速度。
- 分类
- Dirt|Channels
泥浆通道:其名称、与其他通道的叠加方式以及清除速度。
- 分类
- Dirt|Channels
积雪通道:其名称、与其他通道的叠加方式以及清除速度。
- 分类
- Dirt|Channels
湿润通道:其名称、与其他通道的叠加方式以及清除速度。
- 分类
- Dirt|Channels
决定各层上下顺序的依据:每个通道的 Z Order,或最近获得污垢的那一层。Overlay 通道始终位于所有层之上。使用 Most Recent On Top 需要 Dirt Fresh Atlas。
- 默认值
- ECFDirtLayerOrder::Fixed
- 分类
- Dirt|Channels
尺寸与污垢图集相同的 RGBA8 渲染目标,按纹素与通道记录每个通道最近一次获得污垢的时间,通道顺序与 Dirt Atlas 一致。仅当 Dirt Layer Order 为 Most Recent On Top 时才会读取。
- 分类
- Dirt
单个车身两次污垢变化事件之间的最短间隔,单位秒。
- 默认值
- 0.5f
- 分类
- Dirt|Events
自上一事件以来,车身任一侧、任一通道的平均污垢需变化多少(0..1),下一事件才会触发。
- 默认值
- 0.02f
- 分类
- Dirt|Events
用于替换车身污垢外观(MF_CF_Paint)的材质函数,在项目的材质中使用。其输入按 MF_CF_Paint(Base Color、Roughness、Metallic)和 MF_CF_DirtAmount 的引脚命名,另加 Normal(材质自身的法线,若没有则为平面法线);其输出按所替换的引脚命名,另加 Normal,它取代材质的法线。Base Color 为必填。引脚名按原样匹配:大小写无关,空格有关。未设置:使用内置外观。
- 分类
- Look
用于替换车轮污垢外观(MF_CF_WheelDirt)的材质函数。其输入按 MF_CF_WheelDirt(Base Color、Roughness、Metallic)和 MF_CF_WheelDirtAmount 的引脚命名,另加 Normal(材质自身的法线,若没有则为平面法线);其输出按所替换的引脚命名,另加 Normal,它取代材质的法线。Base Color 为必填。引脚名按原样匹配:大小写无关,空格有关。未设置:使用内置外观。
- 分类
- Look
替换玻璃板裂纹外观(MF_CF_GlassCrack)的材质函数。其输入以 MF_CF_GlassCrack(Base Color、Roughness、Opacity、Normal)与 MF_CF_GlassCrackData 的引脚命名,其输出以所替换的引脚命名;Opacity 为必填。引脚名称按原样匹配:不区分大小写,但区分空格。未设置时使用内置外观。
- 分类
- Look
为定义中没有指定 Shard System 的玻璃板抛出碎片的 Niagara 系统。它必须公开插件 NS_CF_GlassShards 的碎片参数,以及网格体槽位 User.CF_ShardMesh0 到 User.CF_ShardMesh5,也就是插件默认系统所具有的六个:定义的第七个及之后的不同碎片网格体会复用这些槽位。
- 分类
- Glass
铰接部件摆动或脱落后所采用的碰撞配置文件。None(Reset to Default)表示使用插件自身的碰撞,它不需要项目中的任何配置(参见 GetLoosePartCollision)。此处指定的配置文件应阻挡世界并忽略 Pawn。无论其对车辆的设定如何,铰链都会让该部件对车辆单向阻挡:车辆会托住它并将其推开,而车辆不会受到任何反作用力。
- 分类
- Loose Parts
摆动部件绕其铰链的阻尼,作为关节的扭转速度驱动。它同时也会对 Swing Spring 施加阻尼:该驱动两者共用一个 Damping。
- 默认值
- 1.0f
- 分类
- Loose Parts
将摆动部件拉回闭合姿态的弹簧,取关节扭转驱动的刚度,与其质量无关(这是加速度驱动,按 p.Chaos.JointConstraint.AngularDriveStiffnessScale(1.5)缩放)。Chaos 会在部件绕销轴转动时,按其绕质心的转动惯量对其缩放:在边缘铰接的车门或引擎盖,回转的角加速度约为此值 1.5 倍的四分之一,单位为每弧度开度对应的 rad/s^2(固有频率约为此值 1.5 倍的平方根的一半,单位 rad/s),并受 Swing Damping 阻尼。依靠自身重量即可闭合的部件(如引擎盖)无需此弹簧;竖直销轴上的车门无需弹簧也会停留在摆开的位置;仅由一个安装点悬挂着的部件(如保险杠)则需要它将其拉回。修改后新建的关节会采用该值。0 表示无弹簧。
- 默认值
- 0.0f
- 分类
- Loose Parts
摆动部件行程两端止挡的弹性程度(关节两端共用一个扭转限制)。0:使用物理引擎的止挡,将部件牢牢固定。高于 0 时,止挡为一个弹簧,部件会先陷入其中,然后再被弹回:这一取值在刚超过 0 时仅约为其速度的 0.05,在 0.66 时约为四分之一,在 1 时约为一半。以 180 deg/s 猛然关上的车门,在取值 0.66 时会先越过闭合位置 4 度(以 720 deg/s 时为 15 度)。开启端也会过冲:取 0.66 时,以 180 deg/s 猛然甩开的车门会越过其 Open Angle 约 1.3 度。搁在止挡上的引擎盖会略微陷入其中:取 0.66 时为 0.2 度,取 1 时为 0.9 度。修改后新建的关节会采用该值。
- 默认值
- 0.0f
- 分类
- Loose Parts
车身颠簸时,摆动部件额外获得的推力:车身在销轴处的加速度使部件绕销轴产生的转动,乘以此倍数,叠加在物理本身给予的推力之上。0:仅使用物理。仅在模拟该车身的端上生效,那里是其撞击源:在回放该车身的端上,网络修正会被误读为颠簸。在游戏线程上读取车身运动:在异步物理下,推力会滞后于颠簸,滞后时长为若干固定步(p.AsyncInterpolationMultiplier),而物理自身的部分则立即生效。稳定的加速度同样会产生推力:车身在跳跃中下落时,引擎盖会被掀起。摆动得越猛烈,部件就越早积累其 Shake Off Travel。每帧读取:修改后立即生效。
- 默认值
- 0.0f
- 分类
- Loose Parts
部件开始摆动时,朝其开启一侧获得的角速度(deg/s),使其略微打开。
- 默认值
- 90.0f
- 分类
- Loose Parts
刚开始摆动的部件,在此秒数内其关节既不会撕裂,也不会被甩脱:导致其松脱的那次碰撞不会同时撕裂其关节。它不会延迟凹陷:被压溃超过脱落阈值的部件会立即脱落。此后,撞击可能撕裂悬挂中部件的关节,晃动也可能将其甩脱。
- 默认值
- 1.0f
- 分类
- Loose Parts
另一辆车须距离因凹陷而被撕下的部件的闭合位置多近(厘米),才能将该部件保持在那里。碰撞时,车身会在另一辆车抵达该部件之前先发生凹陷;若在其仍位于该部件处时放手,该部件就会在两个对它而言都无限重的物体之间脱开,被弹飞或楔入自身车身。当该车移开到超过此距离的那一帧,部件即落下,在碰撞中通常一到两帧之内。0:仅当车辆接触其位置、或在 Torn Part Hold Lookahead 时间内逼近该位置,或该位置有物体占据时才会保持。仅车辆计入此余量:低位部件下方的地面,或车辆所靠的墙壁,永远不会移开。
- 默认值
- 20.0f
- 分类
- Loose Parts
正在逼近被撕下部件的车辆,视为已在其处的提前秒数:余量会按其逼近速度乘以此值而增加。碰撞时的接触会先于车身相碰而出现:凹陷将车门撕下时,另一辆车仍可能距离车门超过 20 厘米,而在几毫秒后便抵达该处。驶离的车辆则只按余量计算。
- 默认值
- 0.05f
- 分类
- Loose Parts
脱落的部件在下沉前静置的秒数。
- 默认值
- 60.0f
- 分类
- Loose Parts
部件下沉至地面以下、沉入深度等于其自身高度后隐藏所需的秒数。
- 默认值
- 2.0f
- 分类
- Loose Parts
凹陷车身的碰撞体会在盒体或凸包表面上的某个晶格节点,或球体或胶囊体上的某个点,自上次构建以来移动了此距离(厘米)后重新构建。
- 默认值
- 2.0f
- 分类
- Collision
单个车身碰撞体两次构建之间的最短间隔,单位秒。更早到来的凹陷需等待剩余的间隔。
- 默认值
- 0.5f
- 分类
- Collision
凹陷车身的盒体或凸包,在晶格使其偏离仅由其角点形成的形状超过此距离(厘米)处,会被切分为碰撞块。
- 默认值
- 1.5f
- 分类
- Collision
单个车身的盒体与凸包所能切分出的碰撞块数量上限。数量不超过此上限时不做切分:每个各自为一个凸包。
- 默认值
- 96
- 分类
- Collision
本项目中碰撞体是否跟随凹陷:车身的碰撞块、为被扯断部件做的切割,以及松脱部件的凹陷凸包。关闭时,无论配置文件怎么设置,每辆车都保留其原本制作的碰撞体,凹陷只是被绘制出来。配置文件的 Deform Collision 仍可为单辆车将其关闭。在车辆开始游戏时读取。它是 `Crushform.Collision.Deform` 的项目值;设备配置文件或控制台会覆盖它。
- 默认值
- true
- 分类
- Collision
一次较重的碰撞体构建可以在游戏线程之外运行多少帧,之后必须落到车身上,取值为 0 或 1:为被扯断部件做的切割、凹陷之后车身的重建,以及被扯断部件的凸包。0 表示在命中的那一帧完成全部构建。取 1 时,铰接部件在命中之后的那一帧检查,车身的重建和切割会在下一帧的物理之前落到车身上,这一步物理会等待工作线程尚未完成的部分;在另一次构建运行期间请求的构建,会在那一次完成时开始,并占用自己的一帧;被扯断部件的凸包在物理之后落到车身上。大于 1 的值按 1 处理:在凹陷之前的形状上多走一个物理步,会让把另一个刚体压向地面的刚体受到第二次推力。使用异步物理时,如果帧不比物理步更短,无论取哪个值,命中都可能在下一步已经开始之后才到达游戏线程。它是 `Crushform.Collision.DeferFrames` 的项目值;设备配置文件或控制台会覆盖它。
- 默认值
- 1
- 分类
- Collision