Что такое Three.js и зачем он нужен

Разбираемся, что такое Three.js, почему он избавляет от боли «голого» WebGL и где его применяют.

Three.js — это JavaScript-библиотека, высокоуровневая обёртка над WebGL, которая позволяет рисовать и анимировать 3D-графику прямо в браузере, не погружаясь в ручную работу с шейдерами и матрицами.

Зачем вообще нужна обёртка над WebGL

Браузер умеет рисовать 3D через WebGL — это API к видеокарте (GPU). Проблема в том, что WebGL крайне низкоуровневый: чтобы показать один цветной треугольник, нужно вручную написать шейдеры на языке GLSL, создать буферы вершин, перемножить матрицы проекции и вида, настроить контекст. Сотни строк ради треугольника.

Three.js закрывает эту рутину. Вместо матриц вы думаете категориями, понятными человеку: «сцена», «камера», «куб», «свет», «поверни объект на 30 градусов». Библиотека сама собирает нужные матрицы и шейдеры и отдаёт их WebGL. Вы пишете в разы меньше кода и думаете о результате, а не о математике GPU.

Где это применяют

Three.js — один из самых популярных способов делать 3D в вебе. Типичные сценарии:

  • Конфигураторы товаров — покрутить кроссовок или автомобиль на сайте магазина.
  • Визуализации данных и архитектуры — интерактивные 3D-графики, цифровые двойники зданий.
  • Презентации и промо-сайты — «вау»-эффекты, скролл-анимации с 3D.
  • Лёгкие игры — браузерные 3D-игры без установки.
  • VR/AR в браузере через WebXR.

Как выглядит код

Чтобы почувствовать разницу, посмотрите на минимальный набросок сцены Three.js. Пока не вникайте в детали — важно увидеть, что код читается почти как описание словами.

import * as THREE from 'three';

// сцена — контейнер для всех объектов
const scene = new THREE.Scene();

// камера — откуда мы смотрим
const camera = new THREE.PerspectiveCamera(75, 2, 0.1, 1000);
camera.position.z = 5;

// рендерер — кто рисует картинку
const renderer = new THREE.WebGLRenderer();
renderer.setSize(800, 600);
document.body.appendChild(renderer.domElement);

// куб = геометрия + материал
const cube = new THREE.Mesh(
  new THREE.BoxGeometry(1, 1, 1),
  new THREE.MeshBasicMaterial({ color: 0x00ff88 })
);
scene.add(cube);

renderer.render(scene, camera);

Этот код использует WebGL и DOM, поэтому в нашей песочнице он не запускается (здесь нет настоящего браузерного canvas и библиотеки THREE). На сайте подобные примеры даны как образец для чтения — копируйте их в свой проект. А вот чистую математику 3D мы будем запускать прямо на странице кнопкой «Запустить».

Three.js — это не игровой движок

Важно не путать ожидания. Three.js — это библиотека рендеринга, а не полноценный движок вроде Unity. В нём из коробки нет физики, редактора уровней, системы сцен-ассетов или готового геймплея. Он отлично рисует, а физику, звук и логику вы добавляете отдельными библиотеками. Зато он лёгкий, гибкий и работает в любом браузере без установки.

Итог

  • Three.js — обёртка над WebGL: 3D в браузере без ручных шейдеров и матриц.
  • Применяют для конфигураторов, визуализаций, промо-сайтов, лёгких игр, VR/AR.
  • Это библиотека рендеринга, а не игровой движок: физику и геймплей подключают отдельно.
Проверьте себя
1. Поверх какой браузерной технологии работает Three.js?
ACanvas 2D API
BWebGL
CSVG
DWebRTC
2. Что Three.js берёт на себя по сравнению с «голым» WebGL?
AНичего, это просто другой синтаксис того же WebGL
BМатрицы, шейдеры, загрузку моделей, сцену и камеру — много рутины
CТолько загрузку картинок
DЗапуск кода на сервере
3. Где Three.js применяют чаще всего?
AДля серверных вычислений без браузера
BДля работы с базами данных
CДля 3D-визуализаций, конфигураторов товаров, игр и интерактивных сайтов в браузере
DДля отправки электронной почты
Поддержать проект