Extrude Pop

A flat word pops up out of the plane on a solid colored 3D body, no camera involved

Installation

$ pnpm dlx shadcn@latest add @remocn/extrude-pop

Usage

// src/Root.tsx
import { Composition } from "remotion";
import { ExtrudePop } from "@/components/remocn/extrude-pop";
 
const ExtrudePopScene = () => (
  <ExtrudePop letter="WIN" bodyColor="#e8192b" faceColor="#ffffff" />
);
 
export const RemotionRoot = () => (
  <Composition
    id="ExtrudePop"
    component={ExtrudePopScene}
    durationInFrames={90}
    fps={30}
    width={1920}
    height={1080}
  />
);

The body is the same glyph swept along the extrusion vector — a morphological dilation drawn as stacked copies, back-to-front, with the white face riding the near end. Face travel and extrusion depth are keyframed together, which is what makes the word read as lifting off a plane rather than growing a shadow.

Props

PropTypeDefaultDescription
letter
string"WIN"The text to extrude — one short word reads best
bodyColor
string"#e8192b"Color of the extruded body
faceColor
string"#ffffff"Color of the front face
fontFamily
string"'Helvetica Neue', Helvetica, Arial, sans-serif"Font family of the glyph
fontWeight
number | string700Font weight
fontSize
number603Font size in comp pixels
maxTextWidth
number1660Longer text auto-shrinks (font size and extrusion depth together) to fit this width in comp pixels
basePosition
[number, number][959.2, 752.5]Baseline anchor of the body layer in comp pixels
minimaxRadius
number80Dilation radius. The extrusion depth is twice this
extrudeAngleDeg
number-58.6Direction of the extrusion in degrees
extrudeSteps
number200Copies making up the body — above the depth in pixels it is seamless
extrudeStartFrame / extrudeEndFrame
number0 / 48The pop window. The extrusion eases out and holds after the end frame
width / height
number1920 / 1080Coordinate space of the composition
className
stringOptional className passed to the wrapper

Inspired by 5 Clean Text Animations by Mapal.