Your headline as a thick, bevelled 3D sculpture floating under three-point studio lighting. Each letter has glossy bevelled edges, the camera parallaxes with your pointer so the depth reads from every angle, a soft contact shadow + AO strip ground it, and a real mirrored reflection fades into the glossy floor. A CTA button hover sends a sweep of light across the letters.
import Extruded3DHeadlineSculpture from '@crazygl/hero-extruded-3d-headline-sculpture';
export default function Page() {
return (
<Extruded3DHeadlineSculpture
heading={'Make it\nmonumental.'}
extrudeDepth={0.4}
clearcoat={0.8}
ctaLabel="See it move"
/>
);
}heading (rendered AS the 3D sculpture), subheading, ctaLabel / onCTAClick, CTA colours.extrudeDepth, bevelSize, bevelSegments, letterSpacing, sculptureScale.textColor, metalness, roughness, clearcoat (together set the finish).keyLightIntensity, envIntensity (studio reflection), shadowOpacity, showFloor, floorReflection.pointerParallax for how far the camera orbits with the cursor.headingFontFamily / headingFontWeight; the selected Google font is fetched as real TTF and extruded into the glyphs.npm install @crazygl/hero-extruded-3d-headline-sculptureThe component takes the same props you see in the live customizer on the right — every default ships poster-quality.
import Extruded3DHeadlineSculpture from '@crazygl/hero-extruded-3d-headline-sculpture';
export default function Landing() {
return (
<Extruded3DHeadlineSculpture />
);
}The wrapper renders static HTML on the server and only initialises the canvas after hydration, so search engines see your copy.
// app/page.tsx — works in SSR-first frameworks (Next, Remix, Astro, etc.)
'use client';
import Extruded3DHeadlineSculpture from '@crazygl/hero-extruded-3d-headline-sculpture';
export default function Page() {
return (
<section>
<Extruded3DHeadlineSculpture
heading="Say hi."
subheading="Your new hero."
/>
<article>
<h2>Welcome</h2>
<p>Your content keeps its own voice below the hero.</p>
</article>
</section>
);
}