Для создания трехмерного текста в Three.js используется комбинация FontLoader и TextGeometry. FontLoader позволяет загружать шрифты в формате JSON, которые затем можно применять к геометрии текста. Шрифты обычно экспортируются из редакторов типа Facetype.js или Three.js editor, после чего их можно хранить локально или загружать по URL.
Пример базовой загрузки шрифта:
import * as THREE from 'three';
const loader = new THREE.FontLoader();
loader.load('fonts/helvetiker_regular.typeface.json', function(font) {
const geometry = new THREE.TextGeometry('Пример текста', {
font: font,
size: 5,
height: 1,
curveSegments: 12,
bevelEnabled: true,
bevelThickness: 0.2,
bevelSize: 0.5,
bevelOffset: 0,
bevelSegments: 3
});
const material = new THREE.MeshStandardMaterial({ color: 0x00ff00 });
const textMesh = new THREE.Mesh(geometry, material);
scene.add(textMesh);
});
Ключевые моменты при загрузке шрифта:
TextGeometry предоставляет множество параметров, влияющих на визуальное отображение текста.
Основные параметры:
font – объект шрифта, загруженный через
FontLoader.size – размер символов, задается в единицах сцены.height – глубина текста, определяет его объем в
пространстве.curveSegments – количество сегментов на кривых, влияет
на плавность округлых букв.bevelEnabled – включение фаски (среза) на краях
символов.bevelThickness – толщина фаски.bevelSize – глубина среза.bevelOffset – смещение фаски относительно поверхности
текста.bevelSegments – количество сегментов фаски для
плавности.Эти параметры позволяют создавать как простой объемный текст, так и текст с декоративной фаской, плавными изгибами и глубокой детализацией.
Трехмерный текст в сцене требует материала. MeshStandardMaterial и MeshPhysicalMaterial дают реалистичное освещение, реагируют на тени и световые источники.
Пример с применением градиентного эффекта через vertexColors:
const material = new THREE.MeshStandardMaterial({
color: 0xffffff,
metalness: 0.5,
roughness: 0.3
});
Для стилизации текста можно использовать также MeshBasicMaterial (не реагирует на свет) или ShaderMaterial для создания динамических эффектов.
Большие объемы текста могут значительно нагружать рендеринг. Основные методы оптимизации:
curveSegments до минимально приемлемого
значения.После создания Mesh с текстом можно применять стандартные трансформации Three.js:
position.set(x, y, z) – установка координат.rotation.set(rx, ry, rz) – вращение текста вокруг
осей.scale.set(sx, sy, sz) – масштабирование для изменения
размеров текста.Анимацию можно реализовать через библиотеку GSAP или встроенный рендер-цикл Three.js:
function animate() {
requestAnimationFrame(animate);
textMesh.rotation.y += 0.01;
renderer.render(scene, camera);
}
animate();
Такой подход позволяет создавать интерактивные титры, динамические надписи и декоративные эффекты с трехмерным текстом.
TextGeometry хорошо сочетается с другими примитивами и моделями:
Эти техники позволяют эффективно создавать трехмерный текст любой сложности, управлять его визуальными эффектами и интегрировать в интерактивные сцены на базе Three.js.