Configuração

Nesta lição, configuraremos nosso ambiente com todas as ferramentas que precisamos para começar a construir nossa primeira aplicação 3D. Em seguida, criaremos nosso primeiro projeto React e instalaremos as dependências necessárias.

Seu sistema operacional não importa. Estou usando um Mac, mas você pode seguir no Windows ou Linux também.

Visual Studio Code

Você pode usar qualquer editor de código que quiser, mas recomendo usar o Visual Studio Code. É gratuito, open-source, e possui muitas extensões excelentes.

Você pode baixá-lo aqui: https://code.visualstudio.com/

Se você optar por usar Visual Studio Code, aqui estão algumas extensões que recomendo:

  • ESLint: Utilitário de linting para JavaScript e JSX. Ele mostrará erros e avisos no seu código.
  • Prettier: Formatador de código. Ele formatará seu código automaticamente quando você salvar, com base em suas configurações.
  • Copilot: Programador pareado por IA. Ele ajudará você a escrever código mais rápido, sugerindo linhas de código com base no seu contexto.

Node.js

Node.js é um runtime de JavaScript construído sobre o motor JavaScript V8 do Chrome. Ele permite que você execute código JavaScript fora do navegador. Em nosso caso, usaremos para rodar o servidor de desenvolvimento de nossos projetos.

Você pode baixá-lo aqui: https://nodejs.org/en/download/

Baixe a versão LTS. É a versão mais estável.

Yarn

Yarn é um gerenciador de pacotes para JavaScript. É similar ao npm, porém mais rápido e seguro.

Você pode baixá-lo aqui: https://classic.yarnpkg.com/en/docs/install

Nós o utilizaremos para instalar as bibliotecas que necessitamos para nossos projetos. Por exemplo, Three.js, React Three Fiber, etc...

Vite

Vite é uma ferramenta de construção para projetos web modernos. É rápido, leve e fácil de usar.

Não necessita de instalação.

Para criar um novo projeto React, abra seu terminal (no Visual Studio Code, você pode abri-lo pelo menu Terminal > New Terminal) e execute o seguinte comando:

yarn create vite

Em seguida, digite o nome do seu projeto, pressione enter, e com as setas do teclado escolha React como framework e JavaScript como linguagem.

Seleção de framework com Vite

Você deverá ver algo assim:

Projeto criado com sucesso

Agora, no Visual Studio Code, abra a pasta do projeto clicando em Open Folder e selecionando a pasta que você acabou de criar.

No terminal, execute os seguintes comandos para instalar as dependências e iniciar o servidor de desenvolvimento do seu projeto:

yarn
yarn dev

Seu terminal deverá fornecer uma URL local para acessar seu projeto:

Servidor de desenvolvimento iniciado

Abra-a no seu navegador ou utilize o atalho cmd + click no Mac ou ctrl + click no Windows/Linux na URL e você deverá ver a página padrão do Vite React:

Página padrão do Vite React

Agora temos um projeto React funcional. É hora de instalar as bibliotecas que precisamos.

React Three Fiber

Para adicionar r3f ao nosso projeto, execute o seguinte comando no seu terminal:

yarn add three @types/three @react-three/fiber

Se o seu terminal ainda estiver executando o servidor de desenvolvimento, pare-o pressionando cmd + c no Mac ou ctrl + c no Windows/Linux antes de executar o comando acima.

Isso irá instalar three e react-three-fiber como dependências do nosso projeto.

Depois que terminar, remova o arquivo App.css e substitua o conteúdo de index.css pelo seguinte:

#root {
  width: 100vw;
  height: 100vh;
}

body {
  margin: 0;
}

Isso fará com que nosso canvas preencha a tela inteira.

Substitua o conteúdo de App.jsx pelo seguinte:

import { Canvas } from "@react-three/fiber";

function App() {
  return (
    <Canvas>
      <mesh>
        <boxGeometry />
        <meshNormalMaterial />
      </mesh>
    </Canvas>
  );
}

export default App;

Um componente Canvas é a raiz de toda aplicação r3f. É um componente React que cria um contexto WebGL e uma scene Three.js.

Dentro do componente Canvas, temos um componente mesh. Um mesh é um objeto que pode ser renderizado na cena. Ele é composto por uma geometry e um material.

Não se preocupe se você não entende o que é uma geometry ou um material, abordaremos isso nas próximas lições. Apenas saiba que este código renderizará um cubo no meio da tela.

Depois execute yarn dev novamente para iniciar o servidor de desenvolvimento com as novas dependências.

Você deve ver um quadrado no meio da tela:

First r3f scene

Mas ele parece 2D, não 3D, isso acontece porque o cubo está na frente da camera.

Podemos mover ligeiramente a câmera para cima, para a direita e para trás adicionando a prop camera ao componente Canvas:

<Canvas camera={{ position: [3, 3, 3] }}>

Abordaremos como o posicionamento funciona nas próximas lições.

Agora o cubo é visível em 3D:

First r3f scene camera moved

Versions ⚠️

Three.js e React Three Fiber são bibliotecas que são atualizadas frequentemente. Isso significa que o código que você vê neste curso ou em outros tutoriais pode se comportar de maneira diferente se você não estiver usando a mesma versão.

No momento de escrever este curso, Three.js está em sua transição para WebGPU o que está propenso a mudanças disruptivas ou mudanças na maneira como as coisas são renderizadas.

Ao usar o starter pack fornecido com este curso, você terá certeza de estar utilizando as mesmas versões que eu, mas é importante saber como verificar as versões de suas dependências.

Abra o arquivo package.json e procure pelos objetos dependencies e devDependencies:

{
  "name": "react-three-fiber-starter",
  "private": true,
  "version": "0.0.0",
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "lint": "eslint src --ext js,jsx --report-unused-disable-directives --max-warnings 0",
    "preview": "vite preview"
  },
  "dependencies": {
    "@react-three/drei": "^9.74.14",
    "@react-three/fiber": "^8.13.0",
    "@types/three": "^0.152.1",
    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "three": "^0.153.0"
  },
  "devDependencies": {
    "@types/react": "^18.0.37",
    "@types/react-dom": "^18.0.11",
    "@vitejs/plugin-react": "^4.0.0",
    "eslint": "^8.38.0",
    "eslint-plugin-react": "^7.32.2",
    "eslint-plugin-react-hooks": "^4.6.0",
    "eslint-plugin-react-refresh": "^0.3.4",
    "vite": "^4.3.9"
  }
}

Você pode ver que a versão do Three.js é ^0.153.0 e a versão do React Three Fiber é ^8.13.0.

O símbolo ^ significa que estamos usando uma versão semver. Isso significa que receberemos todas as atualizações da biblioteca até a próxima versão principal.

Para saber mais sobre Semantic Versioning confira este link: https://devhints.io/semver

ESLint

Se você instalou a extensão ESLint para o Visual Studio Code, você verá alguns erros no seu código.

Isso acontece porque o arquivo de configuração padrão criado pelo Vite não inclui as regras do r3f.

Para corrigir isso, abra o arquivo .eslintrc.cjs e adicione esta linha ao array extends:

"plugin:@react-three/recommended",

Seu arquivo completo deve ficar assim:

module.exports = {
  env: { browser: true, es2020: true },
  extends: [
    "eslint:recommended",
    "plugin:react/recommended",
    "plugin:react/jsx-runtime",
    "plugin:react-hooks/recommended",
    "plugin:@react-three/recommended",
  ],
  parserOptions: { ecmaVersion: "latest", sourceType: "module" },
  settings: { react: { version: "18.2" } },
  plugins: ["react-refresh"],
  rules: {
    "react-refresh/only-export-components": "warn",
  },
};

Agora, após salvar o arquivo, os erros devem desaparecer.

Para podermos fazer o lint do nosso código, precisamos instalar o pacote @react-three/eslint-plugin nas dependências de desenvolvimento do nosso projeto:

yarn add -D @react-three/eslint-plugin

-D instalará o pacote como uma dependência de desenvolvimento. (Pois não é necessário na construção final de produção)

Drei

Drei é uma coleção de helpers e abstrações úteis em cima do r3f.

Nós o usaremos bastante nas próximas aulas para criar experiências 3D de forma mais fácil e rápida.

Para instalar o pacote drei, execute o seguinte comando no seu terminal:

yarn add @react-three/drei

Conclusão

Nós instalamos todas as dependências necessárias para nossos projetos e agora temos um projeto r3f funcional. É a partir daqui que começaremos a criar nossas experiências 3D.