// Fundo: o estúdio escuro. Breu sem emenda, um FEIXE de luz que cai do teto (volume com poeira), // um poço de luz no chão polido e vinheta. O feixe balança devagar: nada fica parado. import React from 'react'; import {AbsoluteFill, useCurrentFrame} from 'remotion'; import {COR} from '../base'; export type FundoProps = { /** centro do feixe em % da largura */ feixe?: number; /** centro do poço de luz no chão, em % da tela */ poca?: [number, number]; /** força do feixe e do poço (0–1) */ forca?: number; /** linha do horizonte do chão polido em % da altura (o chão fica 4% mais claro abaixo dela) */ horizonte?: number; }; const rnd = (i: number) => {const x = Math.sin(i * 127.1 + 311.7) * 43758.5453; return x - Math.floor(x);}; export const Fundo: React.FC = ({feixe = 50, poca = [50, 66], forca = 1, horizonte = 64}) => { const f = useCurrentFrame(); const bal = Math.sin(f / 46) * 2.2; // o feixe balança ±2,2% const x = feixe + bal; return {/* chão polido: um tom acima do breu, que some no horizonte */} {/* o feixe: trapézio do teto ao chão, borrado */} {/* poeira no feixe */} {Array.from({length: 26}, (_, i) => { const px = x + (rnd(i) - 0.5) * 30 * (0.3 + rnd(i + 9)); const py = ((rnd(i + 3) * 70 + f * (0.05 + rnd(i + 5) * 0.08)) % 70) + 2; const a = (0.25 + 0.5 * rnd(i + 7)) * forca * (0.5 + 0.5 * Math.sin(f / 9 + i)); return
; })} {/* poço de luz no chão */} {/* vinheta */} ; };