MÓDULO 3.2

🌍 World Population Shift (D3)

Animação estilo documentário do crescimento populacional por país, 1990–2030. Sem D3: você tem números. Com D3: você tem uma história que se desenrola em tempo real diante do espectador.

6
Seções
~45
min
D3
Lib
40
Anos de dados
1

📊 Cenário: dados que querem ser história

Você tem uma planilha: país, ano, população. São apenas números até que D3 os converta em barras que crescem, trocam de posição e revelam o drama geopolítico de quatro décadas. O espectador não lê a tabela — ele assiste a ela acontecer.

Por que D3 para este projeto?

D3 é a única lib da stack com escalas nativas (linear, band, time) e gerenciamento de transições de dados. Você não calcula pixels manualmente — você define domínio e range, e D3 resolve a geometria. GSAP animaria o visual, mas não entenderia os dados.

D3 é ideal quando…

Dataset que muda ao longo do tempo
Eixos, rankings e escalas automáticas
Reutilizar com datasets diferentes

D3 não é a melhor escolha quando…

Storytelling sem dados (→ GSAP)
Cenas 3D (→ Three.js)
Micro-animações de app (→ Lottie)
scaleLinear
pixels automáticos
scaleBand
posição das barras
sort
ranking dinâmico
interpolate
transição fluida
2

🏃 Bar Race: o coração do projeto

A cada frame do Remotion, o dataset do ano correspondente é lido, as barras são reordenadas e as posições Y interpoladas suavemente. Quando a China e a Índia trocam de lugar, o bar race pausa por 12 frames — o momento dramático.

bar race — demonstração ao vivo
2015
1 China
1.41B
2 Índia
1.43B
3 EUA
335M
4 Indonésia
277M
5 Paquistão
231M

💡 A pausa dramática

Quando ocorre mudança de liderança, adicione 12 frames de pausa antes de reordenar. É o equivalente cinematográfico de um close-up — dá ao espectador tempo para processar o que acabou de acontecer.

Sort dinâmico
a cada frame
Pausa 12f
mudança de líder
Interpolação
posição Y suave
Drama
tensão visual
3

📐 Escalas D3 no contexto Remotion

A integração D3+Remotion funciona porque D3 calcula geometria e Remotion avança no tempo. A cada chamada de useCurrentFrame(), você computa o frame de dados correspondente e deixa D3 mapear pixels.

padrão de integração D3 + Remotion
const frame = useCurrentFrame();
const fps = useVideoConfig().fps;
const year = Math.floor(interpolate(frame, [0, durationInFrames], [1990, 2030]));

const data = getDataForYear(year);
const xScale = scaleLinear().domain([0, maxPop]).range([0, width]);
const yScale = scaleBand().domain(data.map(d => d.country)).range([0, height]);
useCurrentFrame frame → ano Dataset getDataForYear() Escalas D3 domain → range Sort + Rank posição Y Barras SVG render frame Pipeline determinístico — mesmo frame sempre produz mesmo resultado
Determinístico
Mesmo frame = mesmo resultado
Domain
[0, maxPopulation]
Range
[0, width]
Sem estado
Puro cálculo
4

🏷️ Labels, Ano e Legibilidade em Movimento

Labels que seguem as barras são a alma do bar race. O contador de ano no canto inferior direito ancora o espectador no tempo. Ambos precisam ser calculados no mesmo frame — sem estado separado.

Boas práticas de label

Label posicionado com X = largura da barra + 6px
Valor formatado: "1.4B" não "1,410,000,000"
Cor do label = cor da barra, alpha 0.9

Erros comuns

Label fixo no eixo — fica para trás quando barra cresce
Número completo — ilegível em movimento rápido
Cor única para todos — perde identidade do país

💡 Contador de ano como âncora

O ano grande no canto é a bússola do espectador. Tamanho mínimo: 64px, opacidade 0.5–0.7 para não competir com as barras. Use font-variant-numeric: tabular-nums para evitar que os dígitos "pulem" ao mudar.

Follow label
x = bar.width + 6
Format "1.4B"
legível em movimento
tabular-nums
sem pulo de dígito
Cor por país
identidade persistente
5

💬 O Prompt Completo

Este é o prompt literal que você dá ao Claude Code. Cada instrução mapeia para um comportamento específico do bar race — o Claude gera a composição Remotion com D3 integrado em uma resposta.

prompt — copie e use
Create an animated bar race showing the ten most populous
countries from 1990 to 2030.
Animate transitions smoothly.
Display ranking changes in real time.
Pause briefly when leadership changes.

💡 Por que "Pause briefly when leadership changes"?

Esta instrução específica faz o Claude implementar a pausa dramática. Sem ela, a reordenação ocorre em tempo contínuo e passa despercebida. Com ela, o espectador tem o momento cinematográfico de "espera, a Índia passou a China!"

"bar race"
padrão reconhecido
"smoothly"
transições fluidas
"real time"
labels sincronizados
"pause"
drama explícito
6

♻️ Deliverable e Reusabilidade

O deliverable é um vídeo infográfico estilo YouTube — mas o componente é um template parametrizado que funciona com qualquer dataset de ranking temporal. Troque a planilha, mude o título, renderize outro vídeo.

Build order: da planilha ao vídeo

1

Preparar o dataset

JSON array de objetos {country, year, population}. Dados para 1990, 2000, 2010, 2020, 2030. Interpolar anos intermediários.

2

Montar escalas e estático

Valide que as barras aparecem no tamanho correto sem animação. Confirme que o ranking do ano 1990 está certo.

3

Conectar frame ao tempo

Use interpolate() para mapear frame → ano. Adicione a pausa nos anos de mudança de liderança.

4

Polish: cores, tipografia, música

Adicione identidade visual por país, fonte bold para os números, e trilha sonora dramática (Trilha 4).

YouTube
infográfico viral
Finanças
ranking de receita
Esportes
tabela de pontos
Política
aprovação presidencial

📋 Resumo do Módulo 3.2

← SaaS Walkthrough Próximo: Motorcycle Commercial →