VE Lua Documentation

Press F to search!

lerp

Definition


-- @/lua/common/mathlib.lua:1193

function lerp(from, to, t)
  return from + (to - from) * t  -- monotonic
end

Callers

@/lua/ge/extensions/flowgraph/nodes/util/perlinNoise.lua
    -- Take the weighted average between all 8 unit cube coordinates
    return self.lerp(w,
        self.lerp(v,
    return self.lerp(w,
        self.lerp(v,
            self.lerp(u,
        self.lerp(v,
            self.lerp(u,
                self:grad(AAA,x,y,z),
            ),
            self.lerp(u,
                self:grad(ABA,x,y-1,z),
        ),
        self.lerp(v,
            self.lerp(u,
        self.lerp(v,
            self.lerp(u,
                self:grad(AAB,x,y,z-1), self:grad(BAB,x-1,y,z-1)
            ),
            self.lerp(u,
                self:grad(ABB,x,y-1,z-1), self:grad(BBB,x-1,y-1,z-1)

function C.lerp(t, a, b)
    return a + t * (b - a)
@/lua/vehicle/ai.lua
          if ego.pos:squaredDistance(linePointFromXnorm(p1Pos, plan[i+2].pos, nextXnorm)) <
              square(ego.width + lerp(p1Radius, plan[i+2].radiusOrig, min(1, nextXnorm))) then
            egoXnormOnSeg = nextXnorm
        local rad1, rad2 = mapData:getEdgeRadii(wp1, wp2)
        local rad = lerp(rad2, rad1, xnorm)
        if xnorm >= 0 and xnorm <= 1 and sqDist <= square(2 * rad) then
          local rad1, rad2 = mapData:getEdgeRadii(wp1, wp2)
          local rad = lerp(rad2, rad1, xnorm)
          posOrig = linePointFromXnorm(pos2, pos1, xnorm)
          if rsLong > 0 then -- time to overtake v
            TTO = (2 * ego.length * lerp(1, lerp(0.5, 0, backAwereness), xnormL) + (xnormF < 0 and v.length or 0)) / (rsLong + 1e-30)
          else -- time to be overtaken by v
          if rsLong > 0 then -- time to overtake v
            TTO = (2 * ego.length * lerp(1, lerp(0.5, 0, backAwereness), xnormL) + (xnormF < 0 and v.length or 0)) / (rsLong + 1e-30)
          else -- time to be overtaken by v
          else -- time to be overtaken by v
            TTO = (2 * ego.length * lerp(0.5, 1, backAwereness) * xnormL + (xnormF > 0 and v.length or 0)) / (-rsLong + 1e-30)
          end
        -- player xnorm and ego xnorm get interpolated here
        local tarPos = playerNodePos1 + targetLineDir * clamp(lerp(xnorm1, xnorm2, 0.5), -radii[plwp2], radii[plwp2])
@/lua/ge/extensions/flowgraph/nodes/gameplay/decalLine.lua

    data.position = lerp(a, b, t)
    data.forwardVec = fwd
@/lua/ge/extensions/gameplay/traffic/trafficUtils.lua
  local xnorm = clamp(pos:xnormOnLine(p1, p2), 0, 1)
  local radius = lerp(mapNodes[mapNode1].radius, mapNodes[mapNode2].radius, xnorm)
  local normal = mapNodes[mapNode1].normal:slerp(mapNodes[mapNode2].normal, xnorm):normalized()
@/lua/ge/client/postFx/dof.lua
  -- rangeNear is done in two phases, so that it can be clamped with rangeFar
  local rangeNearTemp = lerp(dofPostEffect.minRange, dofPostEffect.maxRange, fd) / farDist * 0.5
  local rangeFar = lerp(dofPostEffect.maxRange, dofPostEffect.minRange, fd) / farDist * 0.5
  local rangeNearTemp = lerp(dofPostEffect.minRange, dofPostEffect.maxRange, fd) / farDist * 0.5
  local rangeFar = lerp(dofPostEffect.maxRange, dofPostEffect.minRange, fd) / farDist * 0.5
  local rangeNear = clamp(rangeNearTemp, 0, rangeFar)
@/lua/ge/extensions/flowgraph/nodes/util/randomVector.lua
function C:work()
  local x = lerp(self.pinIn.xMin.value or 0, self.pinIn.xMax.value or 0, math.random())
  local y = lerp(self.pinIn.yMin.value or 0, self.pinIn.yMax.value or 0, math.random())
  local x = lerp(self.pinIn.xMin.value or 0, self.pinIn.xMax.value or 0, math.random())
  local y = lerp(self.pinIn.yMin.value or 0, self.pinIn.yMax.value or 0, math.random())
  local z = lerp(self.pinIn.zMin.value or 0, self.pinIn.zMax.value or 0, math.random())
  local y = lerp(self.pinIn.yMin.value or 0, self.pinIn.yMax.value or 0, math.random())
  local z = lerp(self.pinIn.zMin.value or 0, self.pinIn.zMax.value or 0, math.random())
  self.pinOut.vector.value = {x, y, z}
@/lua/ge/extensions/freeroam/bigMapMode.lua
  local minMergeRadius = (camHeightAboveTerrain * camMode.fovMin) / 1000
  M.clusterMergeRadius = lerp(minMergeRadius, maxMergeRadius, factor)
  freeroam_bigMapMarkers.setupFilter(currentlyVisibleIds, M.clusterMergeRadius)
@/lua/ge/extensions/gameplay/drag/times.lua
          elseif timer.type == "velocity" then
            timer.value = lerp(racer.prevSpeed, racer.vehSpeed, t)
            timer.isSet = true
@/lua/ge/extensions/editor/trafficManager.lua
  local r1, r2 = mapData:getEdgeRadii(mapNode1, mapNode2)
  local radius = lerp(r1, r2, xnorm)
  -- calculate tentative spawn position as the road center line position closest to pos
@/lua/ge/extensions/flowgraph/nodes/math/math.lua
    description = "Smoothly changes a value from one to another, according to a lerping parameter. a and b can be number, vec3 or quat, but need to be the same type.",
    expression = "lerp(a,b,c)",
    pinInfo = {
@/lua/ge/extensions/editor/toolUtilities/perlin.lua

  return lerp(
    lerp(grad(perm[AA], xf, yf), grad(perm[BA], xf - 1, yf), u),
  return lerp(
    lerp(grad(perm[AA], xf, yf), grad(perm[BA], xf - 1, yf), u),
    lerp(grad(perm[AB], xf, yf - 1), grad(perm[BB], xf - 1, yf - 1), u),
    lerp(grad(perm[AA], xf, yf), grad(perm[BA], xf - 1, yf), u),
    lerp(grad(perm[AB], xf, yf - 1), grad(perm[BB], xf - 1, yf - 1), u),
    v
@/lua/ge/extensions/flowgraph/nodes/gameplay/decalSingle.lua
  for i = 1, 4 do
    clr[i] = lerp(self.pinIn.clrA.value[i], self.pinIn.clrB.value[i], pingpong(os.clockhp() * self.pinIn.clrFrequency.value, 1))
  end
@/lua/ge/extensions/flowgraph/nodes/util/randomQuaternion.lua
function C:work()
  local x = lerp(math.rad(self.pinIn.xMinAngle.value or 0), math.rad(self.pinIn.xMaxAngle.value or 0), math.random())
  local y = lerp(math.rad(self.pinIn.yMinAngle.value or 0), math.rad(self.pinIn.yMaxAngle.value or 0), math.random())
  local x = lerp(math.rad(self.pinIn.xMinAngle.value or 0), math.rad(self.pinIn.xMaxAngle.value or 0), math.random())
  local y = lerp(math.rad(self.pinIn.yMinAngle.value or 0), math.rad(self.pinIn.yMaxAngle.value or 0), math.random())
  local z = lerp(math.rad(self.pinIn.zMinAngle.value or 0), math.rad(self.pinIn.zMaxAngle.value or 0), math.random())
  local y = lerp(math.rad(self.pinIn.yMinAngle.value or 0), math.rad(self.pinIn.yMaxAngle.value or 0), math.random())
  local z = lerp(math.rad(self.pinIn.zMinAngle.value or 0), math.rad(self.pinIn.zMaxAngle.value or 0), math.random())
@/lua/ge/extensions/editor/rallyEditor/measurementsTab.lua
            local xnorm = pos_rayCast:xnormOnLine(bestP1.pos, bestP2.pos)
            continuousPos = vec3(lerp(bestP1.pos, bestP2.pos, clamp(xnorm, 0, 1)))
          end
            local xnorm = targetPos:xnormOnLine(bestP1.pos, bestP2.pos)
            local newPos = lerp(bestP1.pos, bestP2.pos, clamp(xnorm, 0, 1))
            selectedMeasurement.points[self.draggedPointIndex] = vec3(newPos)
        local xnorm = pos_rayCast:xnormOnLine(bestP1.pos, bestP2.pos)
        continuousPos = vec3(lerp(bestP1.pos, bestP2.pos, clamp(xnorm, 0, 1)))
      end
@/lua/ge/extensions/scenario/raceMarkers/overhead.lua
local function lerpColor(a,b,t)
  return {lerp(a[1],b[1],t),lerp(a[2],b[2],t),lerp(a[3],b[3],t)}
end
local function lerpColor(a,b,t)
  return {lerp(a[1],b[1],t),lerp(a[2],b[2],t),lerp(a[3],b[3],t)}
end
local function lerpColor(a,b,t)
  return {lerp(a[1],b[1],t),lerp(a[2],b[2],t),lerp(a[3],b[3],t)}
end
@/lua/ge/extensions/gameplay/drift/stuntZones/driftThrough.lua
  else
    lerpVecA = lerp(self.data.drawData.pointA, self.data.drawData.pointB, cooldownPerc / 100)
    lerpVecB = lerp(self.data.drawData.pointC, self.data.drawData.pointD, cooldownPerc / 100)
    lerpVecA = lerp(self.data.drawData.pointA, self.data.drawData.pointB, cooldownPerc / 100)
    lerpVecB = lerp(self.data.drawData.pointC, self.data.drawData.pointD, cooldownPerc / 100)
    debugDrawer:drawLineInstance(self.data.drawData.pointA, lerpVecA, gameplay_drift_stuntZones.getLineThickness(lerpVecA), gameplay_drift_stuntZones.getWhiteColor())
@/lua/ge/extensions/flowgraph/nodes/util/randomColor.lua
  if self.pinIn.cuteColor.value then
    local r, g, b = HSVtoRGB(math.random(), lerp(1, 0.7, square(math.random())), lerp(1, 0.7, square(math.random())))
    self.pinOut.color.value = {r, g, b, a}
  if self.pinIn.cuteColor.value then
    local r, g, b = HSVtoRGB(math.random(), lerp(1, 0.7, square(math.random())), lerp(1, 0.7, square(math.random())))
    self.pinOut.color.value = {r, g, b, a}
@/lua/ge/extensions/flowgraph/nodes/util/roadSegment.lua
  end
  self.pinOut.width.value = lerp(a.radius, b.radius, self.pinIn.xnorm.value or 0.5) * 2 -- updates at runtime due to xnorm
end
@/lua/ge/extensions/editor/toolUtilities/polygon.lua
    for j = 1, lineSegGran do
      tmp3:set(lerp(tmp1, tmp2, (j - 1) * lineSegGranInv)) -- Interpolate to increase line clarity on scene
      tmp4:set(lerp(tmp1, tmp2, j * lineSegGranInv))
      tmp3:set(lerp(tmp1, tmp2, (j - 1) * lineSegGranInv)) -- Interpolate to increase line clarity on scene
      tmp4:set(lerp(tmp1, tmp2, j * lineSegGranInv))
      tmp3.z = core_terrain.getTerrainHeight(tmp3) + lineRaiseHeight
@/lua/ge/extensions/gameplay/sites/location.lua
    distance = distance,
    pos = lerp(a.pos,b.pos, xnorm),
    radius = lerp(a.radius,b.radius,xnorm)
    pos = lerp(a.pos,b.pos, xnorm),
    radius = lerp(a.radius,b.radius,xnorm)
  }
@/lua/ge/extensions/core/multiSpawn.lua
    local p1, p2 = mapNodes[n1].pos, mapNodes[n2].pos
    local radius = lerp(mapNodes[n1].radius, mapNodes[n2].radius, xnorm)
@/lua/ge/extensions/scenario/raceMarkers/attention.lua
local function lerpColor(a,b,t)
  return {lerp(a[1],b[1],t),lerp(a[2],b[2],t),lerp(a[3],b[3],t)}
end
local function lerpColor(a,b,t)
  return {lerp(a[1],b[1],t),lerp(a[2],b[2],t),lerp(a[3],b[3],t)}
end
local function lerpColor(a,b,t)
  return {lerp(a[1],b[1],t),lerp(a[2],b[2],t),lerp(a[3],b[3],t)}
end
@/lua/ge/extensions/gameplay/sites/zone.lua
        local t = i/steps
        local p = lerp(cur, nex, t)
        if core_terrain then
@/lua/ge/extensions/gameplay/race/segment.lua
  local xnorm, distance = point:xnormDistanceToLineSegment(a.pos,b.pos)
  local maxDistance = lerp(a.radius, b.radius, clamp(xnorm,0,1))
  if distance < maxDistance then
@/lua/ge/extensions/gameplay/drift/destination.lua
  local xnorm = vehData.pos:xnormOnLine(previousWaypointPos, nextWaypointPos)
  remainingDist = remainingDist + lerp(previousWaypointPos, nextWaypointPos, xnorm):distance(nextWaypointPos)
  if index < #extractedWaypoints then
@/lua/ge/extensions/gameplay/traffic/vehicle.lua

  local activeRadius = lerp(160, 80, min(1, self.respawn.spawnValue)) -- based on spawn value (larger radius if value is smaller)
  local extraRadius = self.focus.dist + max(0, (1 - self.focus.dist / 5) * 80) -- larger extra radius if player is at a low speed
    local xnorm = clamp(self.pos:xnormOnLine(p1, p2), 0, 1)
    local radius = lerp(mapNodes[n1].radius, mapNodes[n2].radius, xnorm)
    tempPos:setLerp(p1, p2, xnorm)
@/lua/ge/extensions/editor/toolUtilities/geom.lua
  if u >= 0.0 and u <= 1.0 and v >= 0.0 and v <= 1.0 then
    return lerp(lerp(q[1].z, q[2].z, u), lerp(q[3].z, q[4].z, u), v)
  end
  if u >= 0.0 and u <= 1.0 and v >= 0.0 and v <= 1.0 then
    return lerp(lerp(q[1].z, q[2].z, u), lerp(q[3].z, q[4].z, u), v)
  end
  if u >= 0.0 and u <= 1.0 and v >= 0.0 and v <= 1.0 then
    return lerp(lerp(q[1].z, q[2].z, u), lerp(q[3].z, q[4].z, u), v)
  end
  -- Interpolate binormal and width
  local bin = lerp(binormals[bestIdx], binormals[bestIdx + 1], bestT)
  bin:normalize()
      outPosns[ctr] = vec3(tmp0)
      outTans[ctr] = lerp(tangents[iMinusOne], tangents[i], t)
      outTans[ctr]:normalize()
      outTans[ctr]:normalize()
      outNormals[ctr] = lerp(normals[iMinusOne], normals[i], t)
      outNormals[ctr]:normalize()
      outPosns[ctr] = vec3(tmp0)
      outTans[ctr] = lerp(tangents[iMinusOne], tangents[i], t)
      outTans[ctr]:normalize()
      outTans[ctr]:normalize()
      outNormals[ctr] = lerp(normals[iMinusOne], normals[i], t)
      outNormals[ctr]:normalize()
@/lua/ge/extensions/scenario/raceMarkers/singleHologramMarker.lua
local function lerpColor(a,b,t)
  lerpedColor:set(lerp(a[1],b[1],t), lerp(a[2],b[2],t), lerp(a[3],b[3],t))
  return lerpedColor
local function lerpColor(a,b,t)
  lerpedColor:set(lerp(a[1],b[1],t), lerp(a[2],b[2],t), lerp(a[3],b[3],t))
  return lerpedColor
local function lerpColor(a,b,t)
  lerpedColor:set(lerp(a[1],b[1],t), lerp(a[2],b[2],t), lerp(a[3],b[3],t))
  return lerpedColor
  local t = clamp(self.colorTimer / self.colorLerpDuration,0,1)
  local alpha = lerp(self.modeInfos[self.oldMode or 'default'].alpha, self.modeInfos[self.mode or 'default'].alpha, t)
  local color = lerpColor(self.modeInfos[self.oldMode or 'default'].columnColor, self.modeInfos[self.mode or 'default'].columnColor, t)

  local scalarThin = lerp(self.modeInfos[self.oldMode or 'default'].scalarThin, self.modeInfos[self.mode or 'default'].scalarThin, t)
  local sideHeight = clamp(inverseLerp(60,180,distanceFromMarker),0,20)+1 +clamp(inverseLerp(1800,2040,distanceFromMarker),0,20)
@/lua/ge/extensions/editor/tech/roadArchitect/terraform.lua
  if u >= 0 and u <= 1 and v >= 0 and v <= 1 then
    return lerp(lerp(q[1].z, q[2].z, u), lerp(q[3].z, q[4].z, u), v)
  end
  if u >= 0 and u <= 1 and v >= 0 and v <= 1 then
    return lerp(lerp(q[1].z, q[2].z, u), lerp(q[3].z, q[4].z, u), v)
  end
  if u >= 0 and u <= 1 and v >= 0 and v <= 1 then
    return lerp(lerp(q[1].z, q[2].z, u), lerp(q[3].z, q[4].z, u), v)
  end
@/lua/ge/map.lua
    local l2n2rad = edges[edgeId][3].outRadius
    local l2Prad = lerp(l2n1rad, l2n2rad, l2Xnorm)
    local tempVec = (linePointFromXnorm(l2n1pos, l2n2pos, l1n1pos:xnormOnLine(l2n1pos, l2n2pos)) - l1n1pos):normalized() * (l2Prad + l1n1rad)
      positions[i] = linePointFromXnorm(map.nodes[n1].links[n2].inPos, map.nodes[n1].links[n2].outPos, splitData[i][1])
      radii[i] = lerp(map.nodes[n1].links[n2].inRadius, map.nodes[n1].links[n2].outRadius, splitData[i][1])
    end
              local t2 = linePointFromXnorm(l2n1pos, l2n2pos, l2xn)
              local l1Prad = lerp(l1n1rad, l1n2rad, l1xn)
              local l2Prad = lerp(l2n1rad, l2n2rad, l2xn)
              local l1Prad = lerp(l1n1rad, l1n2rad, l1xn)
              local l2Prad = lerp(l2n1rad, l2n2rad, l2xn)
              if t1:squaredDistance(t2) < square(min(l1Prad, l2Prad) * 0.5) then
      positions[j] = linePointFromXnorm(map.nodes[n1].links[n2].inPos, map.nodes[n1].links[n2].outPos, splitData[j][1])
      radii[j] = lerp(map.nodes[n1].links[n2].inRadius, map.nodes[n1].links[n2].outRadius, splitData[j][1])
    end
            local l1n2rad = edges[edgeId][3].outRadius
            local linePrad = lerp(l1n1rad, l1n2rad, xnorm)
            local d2 = n.pos:squaredDistance(linePoint)
      positions[j] = linePointFromXnorm(map.nodes[n1].links[n2].inPos, map.nodes[n1].links[n2].outPos, splitData[j][1])
      radii[j] = lerp(map.nodes[n1].links[n2].inRadius, map.nodes[n1].links[n2].outRadius, splitData[j][1])
    end
          local xnorm = (pathLen[j] - pathLen[i]) / (pathLen[k] - pathLen[i])
          local rDiff = abs(map.nodes[path[j]].radius - lerp(map.nodes[path[i]].radius, map.nodes[path[k]].radius, xnorm))
          if rDiff > maxDiff then
@/lua/ge/extensions/scenario/raceMarkers/crawlMarker.lua
local function lerpColor(a,b,t)
  return {lerp(a[1],b[1],t),lerp(a[2],b[2],t),lerp(a[3],b[3],t)}
end
local function lerpColor(a,b,t)
  return {lerp(a[1],b[1],t),lerp(a[2],b[2],t),lerp(a[3],b[3],t)}
end
local function lerpColor(a,b,t)
  return {lerp(a[1],b[1],t),lerp(a[2],b[2],t),lerp(a[3],b[3],t)}
end
        else
          columnHeight = lerp(50.0, 200.0, clamp(inverseLerp(200.0, 1200.0, distanceFromMarker), 0, 1))
        end
@/lua/ge/extensions/gameplay/rally/tools/rallyToolbox.lua
      local xnorm = self.selectedPacenoteWaypoint.pos:xnormOnLine(self.lineSegState.fromPos, self.lineSegState.toPos)
      local projPos = lerp(self.lineSegState.fromPos, self.lineSegState.toPos, xnorm)
@/lua/vehicle/hydros.lua
    local speedT = max(electrics.values.airspeed, abs(electrics.values.wheelspeed)) / ffbSpeedFast
    M.wheelFFBForceCoefCurrent = lerp(M.wheelFFBForceCoefLowSpeed, M.wheelFFBForceCoef, clamp(speedT, 0, 1)) -- approach maxForce as we get closer to the fast speed threshold
@/lua/ge/extensions/core/groundMarkers.lua
    local t = inverseLerp(M.startingStep-from.distToTarget/M.stepDistance, M.startingStep-to.distToTarget/M.stepDistance, i)
    local distFromVehicle = M.startingDist-lerp(from.distToTarget, to.distToTarget, t)
    if distFromVehicle > M.decalDrawingDistance then return idx, false, i end

    M.decalPool[idx].pos = lerp(from.pos, to.pos, t)
    M.decalPool[idx].position:set(M.decalPool[idx].pos.x, M.decalPool[idx].pos.y, M.decalPool[idx].pos.z)
@/gameplay/missionTypes/collection/customNodes/collectionMarkersNode.lua
      local c = clamp(inverseLerp(1, 100, dist),0,1)
      debugDrawer:drawCylinder(pos + vec3(0,0,-100), pos + vec3(0,0,1000), lerp(0.1, 2, r), ColorF(0.5+0.5*clr[1],0.5+0.5*clr[2],0.5+0.5*clr[3],lerp(0.00, 0.3, c)))
    end
      local c = clamp(inverseLerp(1, 100, dist),0,1)
      debugDrawer:drawCylinder(pos + vec3(0,0,-100), pos + vec3(0,0,1000), lerp(0.1, 2, r), ColorF(0.5+0.5*clr[1],0.5+0.5*clr[2],0.5+0.5*clr[3],lerp(0.00, 0.3, c)))
    end
@/lua/ge/extensions/flowgraph/nodes/util/distanceRemaining.lua
  local xnorm = vehData.pos:xnormOnLine(prevPos, nextPos)
  distLeft = distLeft + lerp(prevPos, nextPos, xnorm):distance(nextPos)
  if index < #self.pinIn.waypoints.value then
@/lua/vehicle/scriptai.lua
  if a1 == 0 then
    scriptTime = lerp(t1, t2, aiXnormOnSeg)
  else
    else
      scriptTime = lerp(t1, t2, aiXnormOnSeg)
    end
  end
  local reqVel = dt1 == 0 and v2 or lerp(v1, v2, (scriptTime - t1) / dt1) -- required velocity
  local timeDiff = scriptTime - time -- negative value indicates vehicle is lagging script
      if p1 and p2 and a then
        local targetPos = lerp(p1, p2, a)
        local up = obj:getDirectionVectorUp()
@/lua/ge/extensions/gameplay/crawl/boundary.lua

            local currentScale = lerp(minScale, maxScale, smootherstep(scaleT))
            local currentAlpha = lerp(0.0, 1.0, smootherstep(alphaT))
            local currentScale = lerp(minScale, maxScale, smootherstep(scaleT))
            local currentAlpha = lerp(0.0, 1.0, smootherstep(alphaT))
            local alphaT = 1.0 - (objectInfo.animationTimer / fadeOutDuration)
            local currentAlpha = lerp(0.0, 1.0, smootherstep(alphaT))
      local t = j / numMarkers
      local pos = lerp(startPos, endPos, t)
@/lua/ge/extensions/gameplay/police.lua
      local sideSeg = placeData.width / amount
      local sideDisp = lerp(sideSeg * (i - 1), sideSeg * i, 0.5) - placeData.width * 0.5
      local dir = sign2(sideDisp)
  local coef = policeVehs[be:getPlayerVehicleID(0)] and 1 or 2 -- longer timer if player is not police
  suspectTimer = time or (lerp(suspectTimerDelay, 0, vars.suspectFrequency) + random(15)) * coef -- time until next suspect gets queued
end
@/lua/vehicle/sounds.lua
        --blend in volume
        sndVol = lerp(snd.minVolume, snd.maxVolume, (val - snd.volumeBlendInStartValue) / (snd.volumeBlendInEndValue - snd.volumeBlendInStartValue))
      elseif val > snd.volumeBlendInEndValue and val < snd.volumeBlendOutStartValue then
        --blend out volume
        sndVol = lerp(snd.minVolume, snd.maxVolume, (((val - snd.volumeBlendOutStartValue) / (snd.volumeBlendOutEndValue - snd.volumeBlendOutStartValue)) - 1) * -1)
      end
      --blend pitch
      local sndPitch = lerp(snd.minPitch, snd.maxPitch, clamp((val - snd.pitchBlendInStartValue) / (snd.pitchBlendInEndValue - snd.pitchBlendInStartValue), 0, 1))
@/lua/ge/extensions/scenario/raceMarkers/ringMarker.lua
local function lerpColor(a,b,t)
  return {lerp(a[1],b[1],t),lerp(a[2],b[2],t),lerp(a[3],b[3],t)}
end
local function lerpColor(a,b,t)
  return {lerp(a[1],b[1],t),lerp(a[2],b[2],t),lerp(a[3],b[3],t)}
end
local function lerpColor(a,b,t)
  return {lerp(a[1],b[1],t),lerp(a[2],b[2],t),lerp(a[3],b[3],t)}
end
@/lua/ge/extensions/util/trackBuilder/obstaclePlacer.lua
  else
    local targetLen = lerp(piece.startLength, piece.endLength, clamp(o.offset, 0, 1))
    for i = 1, #piece.points do
@/inspector/External/three.js/three.js

                var aj = a.clone().lerp( c, i / cols );
                var bj = b.clone().lerp( c, i / cols );
                var aj = a.clone().lerp( c, i / cols );
                var bj = b.clone().lerp( c, i / cols );

                        v[ i ][ j ] = aj.clone().lerp( bj, j / rows );
@/lua/ge/extensions/flowgraph/nodes/audio/fade.lua
    else
      Engine.Audio.setChannelVolume(self.channel, lerp(self.origVolume, self.targetVolume, self.timer / duration), true)
    end
@/lua/ge/extensions/editor/tech/roadArchitect/geometry.lua
    local p = cen + util.rotateVecAroundAxis(v1, vertical, q * theta)
    p.z = lerp(z1, z2, q)
    pDisc[idx] = p
    pDisc[idx] = p
    rDisc[idx], oDisc[idx] = lerp(rot1, rot2, q), lerp(off1, off2, q)
    wDisc[idx], hLDisc[idx], hRDisc[idx] = lerpWAndH(w1, w2, hL1, hL2, hR1, hR2, q)
    pDisc[idx] = p
    rDisc[idx], oDisc[idx] = lerp(rot1, rot2, q), lerp(off1, off2, q)
    wDisc[idx], hLDisc[idx], hRDisc[idx] = lerpWAndH(w1, w2, hL1, hL2, hR1, hR2, q)
@/lua/ge/extensions/flowgraph/nodes/scene/camera/cameraCircle.lua
    end
    self.camPos.z = lerp(prevZ, nextZ, 0.05) -- smoothing, to prevent rough steps
  end
@/gameplay/missionTypes/scatterPickup/customNodes/scatterCollectNode.lua
  self.collectedInFrame = 0
  self.radius = self.radius + self.mgr.dtSim * lerp(maxRadiusSpeed, minRadiusSpeed, self.radius/maxRadius)
  if self.radius > maxRadius then
@/lua/ge/extensions/core/cameraModes/driver.lua
  -- Look-ahead angle
  self.fwdSpeed = lerp(self.fwdSpeed, -data.vel:length() * push3(data.vel):normalized():dot(carFwd), data.dt * ( 1.5 - self.lookAheadSmoothness))
  nRockPos:set(push3(carFwd) * (1 - self.rockPos:length() / self.lookAheadSmoothness) + self.rockPos)
@/lua/ge/extensions/gameplay/rally/driveline/drivelineRoute.lua
  if xnorm > 0 then
    local newpos = lerp(fromPoint.pos, toPoint.pos, xnorm)
    return newpos
@/lua/ge/extensions/core/environment.lua
      local factor = invertLerp(tempCurve[i-1][1], v[1], t)
      tempC = lerp(tempCurve[i-1][2], v[2], clamp(factor,0,1))
      break
@/lua/common/mathlib.lua

-- returns u, v satisfying p(u,v) = lerp( lerp(a1, a2, u), lerp(b1, b2, u), v ) in 2D
-- https://www.reedbeta.com/blog/quadrilateral-interpolation-part-2

-- returns u, v satisfying p(u,v) = lerp( lerp(a1, a2, u), lerp(b1, b2, u), v ) in 2D
-- https://www.reedbeta.com/blog/quadrilateral-interpolation-part-2

-- returns u, v satisfying p(u,v) = lerp( lerp(a1, a2, u), lerp(b1, b2, u), v ) in 2D
-- https://www.reedbeta.com/blog/quadrilateral-interpolation-part-2
@/lua/ge/extensions/util/forestGenerator.lua
    data.pos = vec3(bluePos:getBlueNoise2d())
    data.pos.x = lerp(minX, maxX, data.pos.x)
    data.pos.y = lerp(minY, maxY, data.pos.y)
    data.pos.x = lerp(minX, maxX, data.pos.x)
    data.pos.y = lerp(minY, maxY, data.pos.y)
    data.rotDeg = lerp(0, 360, randomRot / rotSteps)
    data.pos.y = lerp(minY, maxY, data.pos.y)
    data.rotDeg = lerp(0, 360, randomRot / rotSteps)
    data.scl = lerp(minScl, maxScl, math.random())
    data.rotDeg = lerp(0, 360, randomRot / rotSteps)
    data.scl = lerp(minScl, maxScl, math.random())
    data.pos = vec3(bluePos:getRandomPointInCircle(radius))
    data.rotDeg = lerp(0, 360, randomRot / rotSteps)
    data.scl = lerp(minScl, maxScl, math.random())
    data.rotDeg = lerp(0, 360, randomRot / rotSteps)
    data.scl = lerp(minScl, maxScl, math.random())
@/lua/ge/extensions/core/trafficSignals.lua
    local nPos = linePointFromXnorm(p1, p2, xnorm)
    local radius = lerp(mapNodes[n1].radius, mapNodes[n2].radius, xnorm)
@/lua/ge/extensions/gameplay/traffic.lua
          tempVec:setCross(spawnPointDirVec, vecUp)
          tempVec:setScaled(lerp(-lateralDist, lateralDist, random()))
          spawnPointPos:setAdd(tempVec)
    maxDist = maxDist or 500
    targetDist = targetDist or min(minDist * 2, lerp(minDist, maxDist, 0.5))
    else
      auxiliaryData.dynamicSpawnDir = lerp(-1, 1, outboundCount / auxiliaryData.activeAmount)
    end
@/lua/ge/extensions/scenario/raceMarkers/sideHologramMarker.lua
local function lerpColor(a,b,t)
  lerpedColor:set(lerp(a[1],b[1],t), lerp(a[2],b[2],t), lerp(a[3],b[3],t))
  return lerpedColor
local function lerpColor(a,b,t)
  lerpedColor:set(lerp(a[1],b[1],t), lerp(a[2],b[2],t), lerp(a[3],b[3],t))
  return lerpedColor
local function lerpColor(a,b,t)
  lerpedColor:set(lerp(a[1],b[1],t), lerp(a[2],b[2],t), lerp(a[3],b[3],t))
  return lerpedColor
  local t = clamp(self.colorTimer / self.colorLerpDuration,0,1)
  local alpha = lerp(self.modeInfos[self.oldMode or 'default'].alpha, self.modeInfos[self.mode or 'default'].alpha, t)
  -- instance color 1

  local scalarThin = lerp(self.modeInfos[self.oldMode or 'default'].scalarThin, self.modeInfos[self.mode or 'default'].scalarThin, t)
@/lua/ge/extensions/editor/rallyEditor/drivelineTab.lua
      local nextNml = self.drivelineV3.spline.nmls[insertIdx] or vec3(0, 0, 1)
      table.insert(self.drivelineV3.spline.nmls, insertIdx, lerp(prevNml, nextNml, 0.5))
@/lua/vehicle/controller/vehicleController/shiftLogic/cvtGearbox2.lua
    local nextFixedGearRatio = cvtHandling.fixedGearRatios[cvtHandling.fixedGearRatioIndex + 1]
    local shiftThreshold = lerp(fixedGearRatio, nextFixedGearRatio, M.smoothedValues.drivingAggression) -- higher aggression means a higher shift point
    -- streams.drawGraph("Upshift Threshold", { value = shiftThreshold, color = "#00ffff" })
@/lua/ge/extensions/gameplay/route/route.lua
  if xnorm > 0 then
    a.pos = lerp(a.pos, b.pos, xnorm)
    a.wp = nil
@/lua/ge/spawn.lua
          local projectedPosition = n1.pos + segmentDir * scalarProjection
          pos = projectedPosition + perpendicular:normalized() * roadSide * (lerp(n1.radius, n2.radius, scalarProjection) - veh.initialNodePosBB:getExtents().x/2)
@/lua/ge/extensions/gameplay/route/raceRoute.lua
  -- gcprobe()
    -- a.pos = lerp(a.pos, b.pos, xnorm)
    a.pos:setLerp(a.pos, b.pos, xnorm)
@/lua/ge/extensions/editor/masterSpline/homologation.lua
    -- Lerp between node normals.
    local nml = lerp(nmls[idxA], nmls[idxB], alpha)
    nml:normalize()
  local oldZ = nodes[i].z
  nodes[i].z = lerp(oldZ, targetZ, slopeEaseFactor)
@/lua/ge/extensions/career/modules/marketplace.lua
        local t = math.max(0, math.min(1, inverseLerp(0.98, 0.85, marketRatio)))
        offerTimeMultiplier = lerp(1, 0.4, t)
      elseif marketRatio > 1.1 then
        local t = math.max(0, math.min(1, inverseLerp(1.1, 1.5, marketRatio)))
        offerTimeMultiplier = lerp(1, 4.0, t)
      end
@/gameplay/missionTypes/scatterPickup/customNodes/scatterAnimatorNode.lua
      scenetree.findObject(e.objectId):setScale(vec3(1,1,1) * sclCurve(e.animationTimer))
      scenetree.findObject(e.objectId):setPosition(lerp(e.pos, e.vehicleTarget, posCurve(e.animationTimer)) + vec3(0,0,zAdd(e.animationTimer)*e.zScl))
    end
@/lua/ge/extensions/ui/policeInfo.lua
  pd.sightValue = pursuit.sightValue
  pd.arrest = lerp(pd.arrest, pursuit.timers.arrestValue, 0.5)
  pd.evade = lerp(pd.evade, pursuit.timers.evadeValue, 0.5)
  pd.arrest = lerp(pd.arrest, pursuit.timers.arrestValue, 0.5)
  pd.evade = lerp(pd.evade, pursuit.timers.evadeValue, 0.5)
  -- lerp is used to make the progress bar act fancy when values get reset to zero
@/lua/ge/extensions/gameplay/parking.lua
    for i, ps in ipairs(psList) do
      local minValue = min(fallbackValue, lerp(ratio, 1, square(i / psCount))) -- minValue is lower for nearer parking spots
      if not selected[ps.ps.name] and random() >= minValue then
@/lua/ge/extensions/flowgraph/nodes/util/closestRoad.lua
    self.pinOut.projectedPoint.value = projPos:toTable()
    self.pinOut.width.value = lerp(a.radius, b.radius, xnorm) * 2
  end
@/lua/ge/extensions/scenario/raceMarkers/sideMarker.lua
local function lerpColor(a,b,t)
  return {lerp(a[1],b[1],t),lerp(a[2],b[2],t),lerp(a[3],b[3],t)}
end
local function lerpColor(a,b,t)
  return {lerp(a[1],b[1],t),lerp(a[2],b[2],t),lerp(a[3],b[3],t)}
end
local function lerpColor(a,b,t)
  return {lerp(a[1],b[1],t),lerp(a[2],b[2],t),lerp(a[3],b[3],t)}
end
  if self.sides then
    local sideSize = lerp(1*self.radius,sideToDistantRatio, smootherstep(distantFade))
    self.sides:setScale(vec3(self.radius, self.radius, self.radius))
@/lua/ge/extensions/editor/toolUtilities/util.lua
-- Generates a hue-based colour, based on the given value.
local function getHueBasedColour255(t) return hsvToRgb255(lerp(240, 0, clamp(t, 0, 1)), 1.0, 1.0) end
@/lua/ge/extensions/editor/terraform/terraform.lua
  roughness, scale = clamp(roughness, 0, 1), clamp(scale, 0, 1) -- Clamp the input roughness and scale to the range [0, 1].
  local noiseStrength = lerp(0.0, 1.0, roughness) -- Amplitude mapping.
  local noiseFreq = lerp(0.02, 0.2, scale) -- Frequency mapping: large bumps ~ 50m wavelength => freq ~= 0.02, small bumps ~ 5m wavelength => freq ~= 0.2.
  local noiseStrength = lerp(0.0, 1.0, roughness) -- Amplitude mapping.
  local noiseFreq = lerp(0.02, 0.2, scale) -- Frequency mapping: large bumps ~ 50m wavelength => freq ~= 0.02, small bumps ~ 5m wavelength => freq ~= 0.2.
  local fbmOctaves = floor(lerp(3, 6, scale) + 0.5) -- Octave mapping: avoid flickering patterns (three layers), richer detail (six layers).
  local noiseFreq = lerp(0.02, 0.2, scale) -- Frequency mapping: large bumps ~ 50m wavelength => freq ~= 0.02, small bumps ~ 5m wavelength => freq ~= 0.2.
  local fbmOctaves = floor(lerp(3, 6, scale) + 0.5) -- Octave mapping: avoid flickering patterns (three layers), richer detail (six layers).
  return noiseFreq, noiseStrength, fbmOctaves, defaultFbmLacunarity, defaultFbmGain
        local w = clamp(influence / (2 * globalSmoothRadius + 1), 0, 1)
        final[idx] = lerp(final[idx], sum / count, w)
      end
        local w = clamp((1.0 - dist * DOIInv) ^ falloffExp, 0, 1) -- Weight of blend, based non-linearly on distance to ribbon.
        final[idx] = lerp(original, ribbonZ, w) -- If grid point within DOI, blend between original height and ribbon height.
        mod[idx] = 1 -- Set the mod array to 1 to indicate that the grid point is within the DOI.
@/lua/ge/extensions/scenario/raceMarkers/sideColumnMarker.lua
local function lerpColor(a,b,t)
  lerpedColor:set(lerp(a[1],b[1],t), lerp(a[2],b[2],t), lerp(a[3],b[3],t))
  return lerpedColor
local function lerpColor(a,b,t)
  lerpedColor:set(lerp(a[1],b[1],t), lerp(a[2],b[2],t), lerp(a[3],b[3],t))
  return lerpedColor
local function lerpColor(a,b,t)
  lerpedColor:set(lerp(a[1],b[1],t), lerp(a[2],b[2],t), lerp(a[3],b[3],t))
  return lerpedColor
@/lua/ge/extensions/gameplay/race/race.lua

  local distToAdd = inNextPos:distance(lerp(inPrevPos, inNextPos, clamp(pointA:xnormOnLine(inPrevPos, inNextPos), 0, 1)))
  local distToAddTwo = outPrevPos:distance(lerp(outNextPos, outPrevPos, clamp(pointB:xnormOnLine(outNextPos, outPrevPos), 0, 1)))
  local distToAdd = inNextPos:distance(lerp(inPrevPos, inNextPos, clamp(pointA:xnormOnLine(inPrevPos, inNextPos), 0, 1)))
  local distToAddTwo = outPrevPos:distance(lerp(outNextPos, outPrevPos, clamp(pointB:xnormOnLine(outNextPos, outPrevPos), 0, 1)))
          local roadPos = linePointFromXnorm(n1.pos, n2.pos, xnorm)
          local rad = lerp(mapNodes[n1.wp] and mapNodes[n1.wp].radius or 10, mapNodes[n2.wp] and mapNodes[n2.wp].radius or 10, xnorm)
@/lua/ge/extensions/career/modules/tether.lua
    debugDrawer:drawLine(playerPos, t.p1, ColorF(0,0,1,0.1))
    simpleDebugText3d(string.format("%0.1fm", (t.p1-playerPos):length()), lerp(playerPos, t.p1, 0.5))
  end
    debugDrawer:drawLine(playerPos, t.p1, ColorF(0,0,1,0.1))
    simpleDebugText3d(string.format("%0.1fm", (t.p1-playerPos):length()), lerp(playerPos, t.p1, 0.5))
  end
    debugDrawer:drawSphere(t.p2, t.r2, ColorF(0,1,0,0.2))
    local p = lerp(t.p1, t.p2, clamp(xnorm, 0, 1))
    debugDrawer:drawLine(playerPos, p, ColorF(0,0,1,0.1))
    debugDrawer:drawLine(t.p1, t.p2, ColorF(0,0,1,0.1))
    simpleDebugText3d(string.format("%0.1fm", (p-playerPos):length()), lerp(playerPos, p, 0.5))
  end
  if xnorm >= 1 then return (playerPos-t.p2):length() > t.r2 end
  return dist > lerp(t.r1, t.r2, xnorm)
end
    debugDrawer:drawLine(playerPos,vehPos, ColorF(0,0,1,0.1))
    simpleDebugText3d(string.format("%0.1fm", (playerPos - vehPos):length()), lerp(vehPos, playerPos, 0.5))
    --log("I","Tether: " .. string.format("%0.1fm", (playerPos - vehPos):length()))
@/lua/ge/extensions/freeroam/specialTriggers.lua
              if not data.delayRandom then
                data.delayRandom = lerp(delayRandomMin, delayRandomMax, math.random()) -- random delay until next index step
              end
@/lua/ge/extensions/editor/toolUtilities/splineInput.lua
            table.insert(widths, tableIdx, lerpWidth)
            local lerpNormal = lerp(nmls[iPrev], nmls[iNext], 0.5)
            table.insert(nmls, tableIdx, lerpNormal)
@/lua/ge/extensions/core/hotlapping.lua
    local xnorm = clamp(pos:xnormOnLine(p1, p2), 0, 1)
    radius = math.max(3, lerp(mapNodes[n1].radius, mapNodes[n2].radius, xnorm) + 1)
  end