← All packages

Smooth Pro

Suavização independente de frame rate para Unity. A correção direta para o erro mais comum do Unity: usar Lerp(value, target, 0.1f) todo frame.

v1.1.0 Unity 2021.3+ No dependencies namespace: DawgTools.Smooth

O problema

Quebrado (dependente de frame rate)

// This runs every frame with a fixed 10% step.
// At 30fps: 30 steps/sec. At 144fps: 144 steps/sec.
// Players on faster machines see faster smoothing.
value = Mathf.Lerp(value, target, 0.1f);

Corrigido (independente de frame rate)

// Same behavior at any frame rate.
// Uses exp(-speed * dt) which naturally
// compensates for variable frame times.
value = Smooth.Exp(value, target, 10f, Time.deltaTime);

Início rápido

using DawgTools.Smooth;

// --- Exponential smoothing ---

// Direct replacement for broken Lerp
transform.position = Smooth.Exp(transform.position, target, 10f, Time.deltaTime);

// Designer-friendly: "halfway to target in 0.2 seconds"
value = Smooth.ExpHalfLife(value, target, 0.2f, Time.deltaTime);

// Angle-aware (handles 0/360 wrap correctly)
angle = Smooth.ExpAngle(angle, targetAngle, 8f, Time.deltaTime);

// --- Amortecedores de mola ---

// Critically damped: fastest convergence, no overshoot
pos = Spring.Critical(pos, target, ref velocity, 5f, Time.deltaTime);

// Bouncy: overshoots and oscillates
scale = Spring.Bouncy(scale, targetScale, ref scaleVel, 8f, 0.5f, Time.deltaTime);

// --- Migration ---

// Convert your existing broken lerp value to correct speed
float speed = Smooth.SpeedFromBrokenLerpT(0.1f, 60f); // ~6.32

// --- Easing ---

float t = Ease.InOutCubic(progress);
value = Ease.Lerp(start, end, progress, EaseType.InOutElastic);

Suavização exponencial - Smooth

Classe estática. Todos os métodos sobrecarregados para float, Vector2, Vector3, Quaternion e Color.

MethodDescription
Smooth.Exp(value, target, speed, dt)Suavização exponencial usando exp(-speed * dt). A correção principal.
Smooth.ExpHalfLife(value, target, halfLife, dt)Mesma matemática, parametrizada por meia-vida em segundos. Amigável para designers.
Smooth.ExpAngle(value, target, speed, dt)Versão com consciência de ângulo. Lida corretamente com o wrap 0/360.
Smooth.SpeedFromBrokenLerpT(t, fps)Converter valor t de lerp quebrado existente para velocidade correta em um fps de referência.
Smooth.ConvergenceTime(speed, pct)Quanto tempo para atingir uma dada porcentagem (padrão 99%) de convergência.

Amortecedores de mola - Spring

Dinâmica de mola de segunda ordem com sub-stepping adaptativo para estabilidade de frame rate. Sobrecarregado para float, Vector2, Vector3.

MethodDescription
Spring.Critical(val, target, ref vel, freq, dt)Criticamente amortecido. Convergência mais rápida sem overshoot.
Spring.Bouncy(val, target, ref vel, freq, bounciness, dt)Sensação elástica/mola com elasticidade configurável (0-1).
Spring.Damped(val, target, ref vel, freq, damping, dt)Mola de segunda ordem geral com razão de amortecimento arbitrária.

Funções de easing - Ease

30+ curvas padrão. Cada uma disponível como variantes In, Out e InOut.

FamíliaCurvas
PolynomialQuad, Cubic, Quart, Quint
TrigonometricSine
ExponentialExpo, Circ
OvershootBack, Elastic, Bounce
HermiteSmoothStep, SmootherStep (Perlin variant)

Ease.Lerp(start, end, t, EaseType) combina easing + interpolação em uma chamada.

Editor tools

Window > DAWG Tools > Smooth Inspector

  • Modo exponencial - Gráfico lado a lado comparando Lerp naive vs Smooth.Exp em 30/60/144fps. Veja a dependência de frame rate visualmente.
  • Modo mola - Visualização de curva de resposta mostrando overshoot, tempo de acomodação e ringing para configurações bouncy.
  • Modo easing - Pré-visualização de forma de curva para todas as 30+ funções de easing.
  • Teste de estresse dt - Teste sua suavização em FPS constante, frames com jitter, FixedUpdate e tick rates personalizados.
  • Auxiliar de migração - Converte seus valores lerp quebrados existentes para velocidades exponenciais corretas. Código pronto para copiar e colar.

Instalação

// Unity Package Manager > Add package from disk
// Navigate to package.json and select it

// Then import the demo scene:
// Package Manager > Motion Smoothing Pro > Samples > Import

Requires Unity 2021.3 LTS or newer. Sem dependências externas.