Учебник Three.js для начинающих
Three.js — самый популярный способ делать 3D-графику прямо в браузере. Это высокоуровневая обёртка над WebGL: она избавляет от ручной работы с шейдерами и матрицами и позволяет мыслить понятными категориями — сцена, камера, объект, свет. Курс рассчитан на тех, кто уже знает JavaScript и хочет научиться строить интерактивные 3D-сцены: от первого вращающегося куба до сцены с моделями, светом, тенями и управлением мышью. Вы разберёте три кита любой сцены (Scene, Camera, Renderer), научитесь собирать объекты из геометрии и материалов, ставить свет и тени, управлять камерой через OrbitControls, анимировать честно по времени (delta time), ловить клики по объектам через Raycaster, грузить готовые модели в формате glTF и держать высокий FPS с помощью инстансинга и других приёмов. Будем честны про интерактив: код с Three.js использует WebGL и DOM, поэтому в нашей песочнице он не запускается и дан как образец для чтения с корректными ESM-импортами. Зато всю математику 3D — векторы, нормализацию, интерполяцию, пересечение луча и сферы, расчёт кадров — вы запускаете прямо на странице кнопкой «Запустить» и видите реальный вывод. Это первый курс раздела «Геймдев и графика».
Курс «Three.js» состоит из 6 разделов и 24 уроков: Введение в Three.js и 3D, Объекты и геометрия, Материалы, цвет и свет, Камера, управление и анимация, Взаимодействие и сцена побольше и Производительность и практика. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Введение в Three.js и 3D
- Что такое Three.js и зачем он нужен
Three.js — высокоуровневая обёртка над WebGL для 3D в браузере: что она даёт, где применяется и чем отличается от голого WebGL.
- Три кита сцены: Scene, Camera, Renderer
Любая 3D-картинка в Three.js строится из трёх частей: Scene (что показываем), Camera (откуда смотрим), Renderer (кто рисует). Разбираем каждую.
- Подключение: npm, CDN и ES-модули
Как подключить Three.js: установка через npm с Vite или быстрый старт через CDN и import map. ES-модули, импорт addons и почему важна версия.
- Первая сцена и цикл рендера
Собираем минимальную сцену с вращающимся кубом и запускаем цикл рендера через requestAnimationFrame. Зачем нужен animation loop и как он работает.
- Что такое Three.js и зачем он нужен
2 Объекты и геометрия
- Меш: геометрия плюс материал
Mesh в Three.js — это связка геометрии (форма) и материала (внешний вид). Разбираем, из чего состоит видимый объект и как его собрать.
- Встроенные геометрии
Box, Sphere, Plane, Cylinder и другие готовые геометрии Three.js. Какие параметры они принимают и как сегментация влияет на гладкость и нагрузку.
- Координаты и трансформации
Система координат Three.js (X вправо, Y вверх, Z на зрителя) и три трансформации: position, rotation (в радианах) и scale. Как двигать и поворачивать объекты.
- Группы и единицы измерения
Group объединяет объекты, чтобы двигать их вместе как единое целое. Плюс — про условные единицы Three.js и выбор удобного масштаба сцены.
- Меш: геометрия плюс материал
3 Материалы, цвет и свет
- Материалы: Basic, Lambert, Phong, Standard
Четыре главных материала Three.js и их отличия: Basic не реагирует на свет, Standard физически корректен (PBR). Когда какой выбирать.
- Цвет и текстуры
Как задавать цвет в Three.js (hex, объект Color) и накладывать текстуры через TextureLoader. Что такое UV-развёртка простыми словами и зачем нужна.
- Источники света
Четыре типа света в Three.js: Ambient (равномерный), Directional (солнце), Point (лампочка), Spot (прожектор). Чем отличаются и как их комбинировать.
- Тени и почему объект чёрный
Почему MeshStandardMaterial без света выглядит чёрным и как это исправить. Обзор теней в Three.js: что включить, чтобы объект отбрасывал и принимал тень.
- Материалы: Basic, Lambert, Phong, Standard
4 Камера, управление и анимация
- Камеры: Perspective и Orthographic
Две камеры Three.js: PerspectiveCamera с перспективой (fov, aspect, near, far) и OrthographicCamera без искажений. Когда какую выбирать и что значат параметры.
- Управление камерой: OrbitControls
OrbitControls позволяет вращать, приближать и панорамировать сцену мышью без ручного кода. Как подключить из addons и обновлять в цикле рендера.
- Векторная математика движения
Основы векторов для 3D-движения: длина, нормализация, линейная интерполяция (lerp) и поворот. Живые запускаемые JS-примеры без Three.js.
- Анимация и delta time
Почему анимацию нужно привязывать к реальному времени (delta time), а не к кадрам. Как THREE.Clock даёт delta и почему это спасает на разных мониторах.
- Камеры: Perspective и Orthographic
5 Взаимодействие и сцена побольше
- Реакция на ввод: мышь и клавиатура
Как ловить мышь и клавиатуру в Three.js-приложении: события браузера, состояние нажатых клавиш и применение ввода в цикле рендера для управления объектами.
- Пикинг объектов: Raycaster
Raycaster пускает луч из камеры через курсор и находит объекты под мышью. Разбираем идею луча и считаем пересечение луча со сферой живым JS-примером.
- Загрузка моделей: GLTFLoader
Как загружать готовые 3D-модели в Three.js через GLTFLoader. Почему формат glTF/glb — стандарт для веба и как добавить загруженную модель в сцену.
- Атмосфера: туман, фон, окружение
Как добавить сцене глубину и настроение: туман (Fog) для растворения дали, цвет или картинка фона и карта окружения для реалистичных отражений.
- Реакция на ввод: мышь и клавиатура
6 Производительность и практика
- Что тормозит 3D
Главные причины низкого FPS в Three.js: много draw calls, избыток полигонов и тяжёлые текстуры. Как диагностировать узкое место и на что смотреть.
- Приёмы оптимизации и инстансинг
Как ускорить Three.js: переиспользование геометрии и материалов, инстансинг (InstancedMesh) для тысяч одинаковых объектов и уровни детализации.
- Адаптация под окно, сборка и деплой
Как сделать сцену адаптивной под размер окна (resize), обновить aspect камеры и размер рендерера, а затем собрать и задеплоить Three.js-проект.
- Мини-проект и что дальше
Собираем всё вместе: разбираем структуру кода вращающейся интерактивной сцены и намечаем путь развития — физика, шейдеры, react-three-fiber.
- Что тормозит 3D