This scaffolding lets you easily get started with using Three.js and TypeScript.
- Vite development environment
- Full TypeScript support
- Asset management
- Debugging GUI and Stats
- Social media and description overlay
- Simple loading animation
- Including shader chunks
- LYGIA Shader Library
💡 This project uses [email protected] and [email protected]. Other versions might lead to different package resolutions, proceed with caution. Example commands use yarn.
To use this scaffolding, run the following command:
git clone https://github.com/mayacoda/simple-threejs-typescript-starter my-threejs-project
cd my-threejs-project
yarn install
✅ If you are on GitHub, create a new repository using this repository as a template by clicking the green Use this template button in the top right.
The starter includes a pre-configured Vite server which you can use to run and develop your project. To start the development server, run the following command:
yarn dev
To build the project, run:
yarn build
And if you wish to automatically start a server to preview your build, you can run:
yarn build && yarn preview
The starter includes a utility Engine
class which is responsible for setting up the renderer, render loop, scene, camera, and controls. All you have to do is provide a class that follows the Experience
interface and pass it to the Engine
constructor.
// in src/main.ts
import { Engine } from './engine/Engine'
import { Demo } from './demo/Demo'
new Engine({
canvas: document.querySelector('#canvas') as HTMLCanvasElement,
experience: Demo,
info: {
twitter: 'https://twitter.com/maya_ndljk',
github: 'https://github.com/mayacoda/simple-threejs-typescript-starter',
description: 'A simple Three.js + Typescript + Vite starter project',
documentTitle: 'Three.js + Typescript + Vite',
title: 'A cube on a plane',
},
})
Then inside the class which implements Experience
, you have access to the entire engine and its components.
// in src/demo/Demo.ts
import { Engine } from '../engine/Engine'
import { Experience } from '../engine/Experience'
import { Resource } from '../engine/Resources'
export class Demo implements Experience {
// list of resources required by the experience
resources: Resource[] = []
constructor(private engine: Engine) {}
// initialize scene -- called by tne Engine after resources are loaded
init() {}
// called on resize
resize() {}
// called on each render
update() {}
}
To demonstrate how to use the scaffolding, this project includes an example scene. To remove it and start with a blank project, run:
yarn cleanup
This will also clear the content of this README.md file to just the basic commands for running the project.
Resources loaded through THREE.js loaders need to go in the /public
directory to avoid being compiled by Vite. This includes textures and models.
More information about Vite's asset handling can be found here.
Shaders are loaded using the vite-plugin-glsl Vite plugin and can be located anywhere within the /src
directory.
The starter also includes the LYGIA Shader Library. To use it, import the shader chunks you need in your shader file.
// in src/demo/shader.frag
#include "../shaders/lygia/color/palette/water.glsl"
varying vec2 vUv;
void main() {
gl_FragColor = vec4(water(vUv.y), 1.0);
}