Promo Icon

鈿★笍 Limited Black Friday Deal

Get 50% off on the React Three Fiber Ultimate Course with the promo code ULTIMATE50

Buy Now

$85.00 $42.50

Theatre.js

Starter pack

Theatre.js es una biblioteca de animaci贸n de JavaScript que nos permite crear experiencias cinematogr谩ficas con Three.js y React Three Fiber.

Su caracter铆stica principal en comparaci贸n con otras bibliotecas de animaci贸n que hemos estado usando hasta ahora es que viene con una interfaz de estudio que nos permite crear y editar animaciones visualmente.

Desde animar objetos de Three.js directamente en el espacio 3D hasta crear secuencias complejas con m煤ltiples transiciones y funciones de easing, Theatre.js tiene todo lo que necesitamos para crear incre铆bles transiciones 3D.

Para esta lecci贸n, crearemos un sitio web para una ciudad medieval imaginaria. Usaremos este hermoso modelo de Medieval Fantasy Book de Pixel.

La animaci贸n es parte del modelo, la mantenemos en reproducci贸n autom谩tica para darle algo de vida a la escena.

Tambi茅n prepar茅 la interfaz de usuario con TailwindCSS y Framer Motion para cambiar entre diferentes secciones del sitio web.

驴Listo para convertirte en el pr贸ximo Steven Spielberg de la web? 隆Comencemos!

Instalaci贸n

Para agregar Theatre.js a nuestro proyecto, ejecuta el siguiente comando en tu terminal:

yarn add @theatre/[email protected] @theatre/[email protected] @theatre/[email protected]

Luego, en nuestro c贸digo, necesitamos obtener el sheet en el que trabajaremos para nuestro project. En App.jsx:

// ...
import { getProject } from "@theatre/core";

const project = getProject("MedievalTown");
const mainSheet = project.sheet("Main");

// ...

El nombre del proyecto debe ser 煤nico para evitar conflictos con otros proyectos. Como Theatre.js usa localStorage para almacenar datos de animaci贸n y a menudo usamos la misma URL y puerto del navegador en desarrollo, es importante usar un nombre 煤nico.

El sheet est谩 destinado a animar uno o m谩s objetos en la escena. Usaremos solo un sheet para este proyecto. Deber铆as considerar usar varios sheets si deseas animar diferentes objetos de manera independiente. En nuestro caso, todas nuestras animaciones tienen sentido en el mismo sheet.

Finalmente, necesitamos envolver todos los componentes que ser谩n animados en un <SheetProvider>:

// ...
import { SheetProvider } from "@theatre/r3f";
// ...

function App() {
  // ...
  return (
    <>
      <UI
        currentScreen={currentScreen}
        onScreenChange={setTargetScreen}
        isAnimating={currentScreen !== targetScreen}
      />
      <Canvas camera={{ position: [5, 5, 10], fov: 30, near: 1 }} shadows>
        <SoftShadows />
        <SheetProvider sheet={mainSheet}>
          <Experience />
        </SheetProvider>
      </Canvas>
    </>
  );
}

export default App;

Ahora es momento de agregar el editor visual a nuestro proyecto.

Theatre.js Studio

Para agregar el Theatre.js Studio a nuestro proyecto, necesitamos importarlo e inicializarlo:

// ...
import extension from "@theatre/r3f/dist/extension";
import studio from "@theatre/studio";

studio.initialize();
studio.extend(extension);

// ...

Bastante simple, 驴verdad? Ahora, si ejecutas tu proyecto, deber铆as ver la interfaz de usuario del Theatre.js Studio en tu pantalla:

Theatre.js Studio UI

Editable

Para hacer un objeto editable con Theatre.js y poder interactuar con 茅l en el studio, necesitamos importar el componente editable. En Experience.jsx:

// ...
import { editable as e } from "@theatre/r3f";
// ...

Utilizamos editable as e para coincidir con la documentaci贸n oficial. Es un simple atajo para hacer nuestro c贸digo m谩s corto.

Luego, necesitamos prefijar el elemento JSX del objeto que queremos hacer editable con e y definir la propiedad theatreKey:

// ...

export const Experience = () => {
  return (
    <>
      <e.directionalLight
        theatreKey="SunLight"
        position={[3, 3, 3]}
        intensity={0.2}
        castShadow
        shadow-bias={-0.001}
        shadow-mapSize-width={2048}
        shadow-mapSize-height={2048}
      />
      <e.group theatreKey="MedievalFantasyBook">
        <MedievalFantasyBook scale={0.1} envMapIntensity={0.3} />
      </e.group>
      <Environment preset="dawn" background blur={4} />
    </>
  );
};

Hicimos que la directional light y el Medieval Fantasy Book sean editables. Recarguemos nuestra p谩gina y veamos qu茅 sucede:

Editable objects in Theatre.js Studio

Nuestros objetos aparecen bajo la Main sheet en el outline panel

Controles

Ahora estamos listos para jugar con el studio.

End of lesson preview

To get access to the entire lesson, you need to purchase the course.