// ===== demos/camera/depth-layer-moves/DollyZoomReal.tsx ===== // dolly-zoom 滑动变焦(轮 F)——主体卡(card4-hires)大小锁定屏中, // 背景真实卡群 + 整页反向膨胀逼近(scale + blur 渐深), // "世界压过来"而主角纹丝不动。伪 dolly-zoom:无需 3D,分层反向补偿。 import { AbsoluteFill, Img, interpolate, staticFile, useCurrentFrame, Easing } from 'remotion'; import layout from '../../_textures/live-layout.json'; export const DOLLYZOOM_DUR = 135; const BG_CARDS = layout.projects.cards.filter((_, i) => i !== 3); export const DollyZoomReal: React.FC = () => { const frame = useCurrentFrame(); const t = interpolate(frame, [15, 110], [0, 1], { extrapolateLeft: 'clamp', extrapolateRight: 'clamp', easing: Easing.bezier(0.4, 0, 0.3, 1), }); const bgScale = 1 + t * 1.25; const bgBlur = t * 3.5; return ( {/* 背景:整页 + 卡群,从画面中心膨胀逼近 */} {BG_CARDS.slice(0, 8).map((c, k) => ( ))} {/* 主体:高清卡视觉大小恒定钉在屏中,落影渐深强调"世界在动我不动" */} ); }; // ===== demos/camera/depth-layer-moves/MultiplaneReal.tsx ===== // multiplane parallax(轮 E)——真实页面拆 3 层深度横移: // 背景整页(0.35x,微 blur 退后)+ 中景真实卡组(0.7x)+ // 前景浮块(1.4x,search 切片 + 高清卡,轻 blur 拉焦平面)。 // 系数克制(背景不动排版,卡组独立成层)防"排版散架"。 import { AbsoluteFill, Img, interpolate, staticFile, useCurrentFrame, Easing } from 'remotion'; import layout from '../../_textures/live-layout.json'; export const MULTIPLANE_DUR = 135; const CARDS = layout.projects.cards.slice(0, 6); export const MultiplaneReal: React.FC = () => { const frame = useCurrentFrame(); const drive = interpolate(frame, [10, 125], [0, 1000], { extrapolateLeft: 'clamp', extrapolateRight: 'clamp', easing: Easing.bezier(0.35, 0, 0.25, 1), }); return ( {/* 背景层 0.35x:整页微退焦 */} {/* 中景层 0.7x:真实卡组横排(主阅读层) */} {CARDS.map((c, k) => ( ))} {/* 前景层 1.4x:浮块掠过(search 切片 + 高清卡),轻 blur */} ); };