Dernier message de la page précédente :
Lorsqu'on regarde le code du simulateur BeamNG, il n'y a pas de différentiation entre un différentiel à glissement limité à engrenages, comme un Torsen, et un différentiel à glissement limité à disques. C'est le même code.
On peut donc simuler un Torsen, un Torsen avec précharge, ou un LSD à disques et cames (avec ou sans précharge, en 1 way, 1.5 way, 2 way) , avec le même code.
Ici la fonction qui calcule le couple en sortie de différentiel. Il suffit juste de changer les paramètres de précharge et les paramètres de couples de croisement en mode Drive et Coast (lsdPreload, lsdLockCoef, lsdRevLockCoef) pour simuler des diffs LSD à engrenages ou à disques ou autres LSD basés sur le même principe de report de couple.
lsdLockCoef et lsdRevLockCoef sont les valeurs d'addition de couple sur une roue (noté "a" dans les formules ci-dessous), mais on pourrait les substituer avec des valeurs TBR avec la formule simple :
TBR = (1+a)/(1-a)
a = (TBR - 1) / (TBR + 1)
Ou Si a est exprimé en pourcentage :
TBR = (1+(a/100))/(1-(a/100))
a = 100 * (TBR - 1) / (TBR + 1)
Code : Tout sélectionner
local function LSDUpdateTorque(device)
local inputAV = device.inputAV
local outputAV1diff = device.outputAV1 - inputAV * device.invGearRatio
local outputAV2diff = device.outputAV2 - inputAV * device.invGearRatio
local absMaxOutputAVdiff = max(abs(outputAV1diff), abs(outputAV2diff))
local friction = (device.friction * clamp(inputAV, -1, 1) + device.dynamicFriction * inputAV + device.torqueLossCoef * device.parent[device.parentOutputTorqueName]) * device.wearFrictionCoef * device.damageFrictionCoef
local inputTorque = (device.parent[device.parentOutputTorqueName] - friction) * (1 - min(device.speedLimitCoef * absMaxOutputAVdiff * absMaxOutputAVdiff * absMaxOutputAVdiff, 1)) * device.gearRatio
--lsd works with an initial preload torque + input torque sensing locking ability
local torqueSign = sign(inputTorque)
local lsdLockCoef = max(torqueSign, 0) * device.lsdLockCoef - min(torqueSign, 0) * device.lsdRevLockCoef
local lsdTorque = device.lsdPreload + lsdLockCoef * abs(inputTorque)
device.inputTorque = inputTorque
device.outputTorque1 = inputTorque * device.diffTorqueSplitA - device.lsdTorque1Smoother:get(lsdTorque * clamp(outputAV1diff * device.diffTorqueSplitA, -1, 1))
device.outputTorque2 = inputTorque * device.diffTorqueSplitB - device.lsdTorque2Smoother:get(lsdTorque * clamp(outputAV2diff * device.diffTorqueSplitB, -1, 1))
end