SWCore / Animações / Blob e Avatar Vivo

Blob e Avatar Vivo Animações

Avatar e blob orgânico em SVG puro — morfa entre estados emocionais, respira e segue o cursor com física elástica.

O que é

Inspirado na arquitetura visual do bot da x.ai (Grok) e no projeto Bloub, o Blob e Avatar do SWCore renderiza um personagem vetorial orgânico inteiramente em SVG nativo. Sem dependências pesadas: o corpo morfa entre poses expressivas (idle, happy, curious, surprise, think, sleep), os olhos rastreiam o cursor do visitante com inércia física em tempo real e o avatar pisca espontaneamente.

Como funciona

O motor calcula o vetor do corpo via coordenadas cúbicas de Bézier com transição elástica. Em tempo real (60 FPS), calcula a posição relativa do cursor (Δx, Δy) em relação ao centro do avatar, projetando a pupila e o rosto na direção exata do olhar com amortecimento suave (LERP). Um temporizador biológico dispara piscadas naturais de 140ms.

Exemplos

00 · Modelo Mental: Morfologia Bézier + Olhar Vetorial Ao vivo
01
Corpo Bézier

Curvas cúbicas que morfam suavemente entre formatos.

02
Eye Tracking

As pupilas calculam o ângulo do mouse com inércia física.

03
Expressões

Boca, olhos e inclinação mudam de humor instantaneamente.

04
Vida Própria

Piscadas biológicas aleatórias mantêm o mascote vivo.

<!-- 
  Arquitetura do Avatar Vivo:
  1. Corpo Bézier -> Curvas cúbicas (C) que morfam com física elástica
  2. Eye Tracking -> Cálculo de ângulo e distância (Δx, Δy) com LERP
  3. Expressões   -> 6 estados emocionais chave com boca e inclinação
  4. Vida Própria -> Piscar aleatório biológico a cada 3~6 segundos
-->
01 · Laboratório Interativo: O Mascote Vivo (Mova o mouse sobre a tela) Ao vivo
SVG NATIVO 60 FPS

Mascote Interativo com Eye Tracking

RASTREAMENTO ATIVO · 60 FPS
Estado: Idle (Neutro) Mova o cursor pelo card
ESCOLHA UMA EXPRESSÃO / HUMOR
<!-- Avatar vivo que segue o mouse e morfa de estado emocional -->
<div 
  id="main-demo-avatar"
  data-sw="blob" 
  data-sw-state="idle"
  data-sw-track="mouse"
  data-sw-size="220"
  data-sw-color="#0f172a"
  data-sw-eye-color="#38bdf8"
  data-sw-pupil-color="#0f172a">
</div>

<script>
  // Altera o humor do avatar:
  SWMotion.setBlobState(document.getElementById('main-demo-avatar'), 'curious');
</script>
02 · Laboratório de Redesenho SVG ao Vivo (Editor de Formas & Presets) Ao vivo
EDITOR VISUAL VETORIAL

Redesenho & Customização de Silhueta SVG

SILHUETA ATIVA
Preset: Blob Clássico
1. ESCOLHA UMA SILHUETA PRÉ-PRONTA
2. OU EDITE O CAMINHO SVG (PATH D) AO VIVO
3. AUMENTAR OU DIMINUIR OLHOS & DETALHES
<!-- Redesenhando com presets ou passando seu próprio caminho SVG d="..." -->
<!-- 1. Usando um preset pronto (ghost, robot, cat, drop, star): -->
<div data-sw="blob" data-sw-preset="ghost" data-sw-color="#3b82f6" data-sw-size="180"></div>

<!-- 2. Passando um caminho SVG d="..." totalmente customizado: -->
<div 
  data-sw="blob" 
  data-sw-d="M 45,35 L 90,25 L 90,10 L 110,10 L 110,25 L 155,35 L 155,160 L 45,160 Z"
  data-sw-color="#6366f1"
  data-sw-size="180">
</div>

<!-- 3. Redesenhando dinamicamente via JavaScript: -->
<script>
  SWMotion.updateBlobDesign(avatarEl, {
    d: "M 100,20 C 150,20 175,55 175,110 C 175,155 100,170 25,110 Z",
    eyeY: 85,
    eyeDistance: 28,
    color: "#ec4899"
  });
</script>
03 · Reatividade em Elementos de Interface (Hover e Clique) Ao vivo
HOVER INTELIGENTE

Curiosidade no Hover

Passe o mouse sobre o avatar para vê-lo inclinar a cabeça.

FEEDBACK DE SUCESSO

Comemoração no Clique

Clique no botão para fazer o mascote celebrar a conclusão.

<!-- Avatares reagindo contextualmente às ações da UI -->
<!-- 1. Avatar que fica curioso no hover -->
<div data-sw="blob" data-sw-state="idle" data-sw-hover-state="curious" data-sw-size="140"></div>

<!-- 2. Avatar de feedback que comemora ao clicar no botão -->
<button onclick="SWMotion.setBlobState(document.getElementById('feedback-blob'), 'happy')">
  Completar Tarefa
</button>
04 · Uso Declarativo no HTML (1 Linha) Ao vivo
DECLARATIVO DATA-SW="BLOB"
Renderizado automaticamente com SVG e LERP a 60 FPS
<!-- 
  Basta adicionar data-sw="blob" (ou data-sw="avatar"):
-->
<div 
  data-sw="blob"
  data-sw-state="idle"
  data-sw-preset="ghost"
  data-sw-track="mouse"
  data-sw-size="180"
  data-sw-color="#38bdf8"
  data-sw-eye-color="#ffffff"
  data-sw-pupil-color="#0f172a">
</div>
05 · Consulta e Controle via JavaScript (SWMotion.updateBlobDesign) Referência
// Redesenhando o formato ou registrando nova silhueta:
const mascote = document.querySelector('#meu-avatar');

// Atualizando qualquer propriedade do vetor em tempo real:
SWMotion.updateBlobDesign(mascote, {
  d: "M 100,20 C 145,20 180,55 180,100 Z",
  color: "#a855f7",
  eyeY: 85,
  eyeDistance: 30
});

// Registrando um preset customizado no framework:
SWMotion.registerBlobShape("monstrinho", {
  idle: {
    d: "...",
    eyeY: 80,
    eyeDistance: 35,
    eyeRadius: 9
  }
});

Atributos

data-sw="blob"
no elemento para instanciar o avatar / blob vivo (ou data-sw="avatar")
data-sw-state="idle"
estado emocional inicial: idle, happy, curious, surprise, think, sleep
data-sw-track="mouse"
ativa o rastreamento do olhar na direção do cursor do mouse ou toque
data-sw-color="#38bdf8"
cor de preenchimento do corpo do blob
data-sw-eye-color="#fff"
cor da esclera / base dos olhos
data-sw-pupil-color="#0a0a0c"
cor das pupilas
data-sw-size="200"
tamanho / diâmetro em pixels (padrão: 200)
data-sw-hover-state="happy"
expressão adotada temporariamente ao passar o cursor do mouse

Variantes

Idle (Normal)
Estado neutro e sereno, piscando sozinho e acompanhando o cursor suavemente
Happy (Feliz)
Olhos fechados em arco de sorriso, corpo expandido e boca alegre
Curious (Curioso)
Cabeça inclinada em ângulo, olhos arregalados investigando o cursor
Surprise (Surpreso)
Corpo esticado verticalmente, boca em "O" e pupilas dilatadas
Think (Pensando)
Olhar concentrado para cima, cabeça inclinada e boca reta reflexiva
Sleep (Dormindo)
Achatado no chão, olhos fechados e respiração profunda

Eventos

Nenhum.

API (JavaScript)

SWMotion.blob(element)
Inicializa programaticamente o avatar no elemento.
SWMotion.setBlobState(element, stateName)
Altera o estado emocional e morfa a geometria em tempo real.
element.triggerBlobBlink()
Dispara uma piscada voluntária dos olhos.

Requisitos

  • Suporte a SVG 1.1 e requestAnimationFrame em 100% dos navegadores modernos.

Limitações — o que ele não faz

  • O Blob utiliza renderização vetorial SVG nativa via GPU — não requer bibliotecas externas pesadas.
  • Em dispositivos móveis sem mouse, o olhar centraliza e reage ao toque do visitante.