24-06-2026, 20:33
Привіт! Минулого разу ми обговорювали код на Three.js для анімації персонажів. Але сьогодні я хочу підняти ще важливішу тему — **пайплайн і підготовку 3D-моделі**.
Найбільший біль фронтендера — це отримати від 3D-художника `.glb` файл, закинути його в браузер і зрозуміти, що ним неможливо керувати через JavaScript API. Тому ось чек-лист, як правильно підготувати персонажа в Blender, щоб з ним було приємно працювати в коді.
1. Правильний неймінг кісток (Rigging)
Якщо фронтендер хоче, щоб персонаж водив головою за мишкою (через подію `mousemove`), йому треба знайти цю кістку в коді: `scene.getObjectByName('Head')`.
Якщо ваша кістка в Blender називається `Bone.023` — це катастрофа.
Правило: Всі ключові кістки, якими буде керувати JS, мають називатися логічно: `Head`, `Neck`, `LeftArm`, `RightEye`.
2. Shape Keys (Morph Targets) для міміки
Щоб персонаж міг кліпати очима, посміхатися або говорити, не обов'язково робити складний скелет обличчя. Використовуйте Shape Keys у Blender. При експорті в GLTF вони перетворюються на `morphTargetInfluences`.
У JavaScript це виглядає так:
Правило: Називайте ключі форм англійською (`smile`, `blink`, `sad`), щоб у JS до них можна було звернутися через словник `morphTargetDictionary`.
3. Пакування анімацій через NLA Editor
Персонаж повинен мати кілька станів: Idle (дихання), Walk, Wave (махати рукою). Якщо просто накидати ключі на таймлайн в Blender, JS отримає одну суцільну кашу.
Правило: Кожну дію (Action) потрібно 'запушити' (Push Down) у Non-Linear Animation (NLA) редакторі як окремий трек. Тоді при завантаженні моделі у Three.js розробник отримає масив незалежних кліпів `gltf.animations`, які зможе перемикати через `AnimationMixer`.
4. Apply Transforms (Скидання трансформацій)
Часто буває: завантажуєш персонажа, а він лежить обличчям в підлогу або гігантського розміру.
Правило: Перед експортом виділіть об'єкт в Blender і натисніть `Ctrl+A -> All Transforms`. Масштаб має бути [1, 1, 1], а ротація [0, 0, 0]. Також перевірте, щоб центр (Origin) об'єкта був у нього в ногах — так найзручніше ставити його на 'землю' в Three.js.
Ось такі прості правила 'контракту' між 3D-шником та Front-End розробником зекономлять вам десятки годин дебагу. Хто з якими ще 'сюрпризами' стикався при інтеграції моделей на сайт?
Найбільший біль фронтендера — це отримати від 3D-художника `.glb` файл, закинути його в браузер і зрозуміти, що ним неможливо керувати через JavaScript API. Тому ось чек-лист, як правильно підготувати персонажа в Blender, щоб з ним було приємно працювати в коді.
1. Правильний неймінг кісток (Rigging)
Якщо фронтендер хоче, щоб персонаж водив головою за мишкою (через подію `mousemove`), йому треба знайти цю кістку в коді: `scene.getObjectByName('Head')`.
Якщо ваша кістка в Blender називається `Bone.023` — це катастрофа.
Правило: Всі ключові кістки, якими буде керувати JS, мають називатися логічно: `Head`, `Neck`, `LeftArm`, `RightEye`.
2. Shape Keys (Morph Targets) для міміки
Щоб персонаж міг кліпати очима, посміхатися або говорити, не обов'язково робити складний скелет обличчя. Використовуйте Shape Keys у Blender. При експорті в GLTF вони перетворюються на `morphTargetInfluences`.
У JavaScript це виглядає так:
Код:
// 0 - звичайне обличчя, 1 - широка посмішка
mesh.morphTargetInfluences[0] = 0.5; // напівпосмішка3. Пакування анімацій через NLA Editor
Персонаж повинен мати кілька станів: Idle (дихання), Walk, Wave (махати рукою). Якщо просто накидати ключі на таймлайн в Blender, JS отримає одну суцільну кашу.
Правило: Кожну дію (Action) потрібно 'запушити' (Push Down) у Non-Linear Animation (NLA) редакторі як окремий трек. Тоді при завантаженні моделі у Three.js розробник отримає масив незалежних кліпів `gltf.animations`, які зможе перемикати через `AnimationMixer`.
4. Apply Transforms (Скидання трансформацій)
Часто буває: завантажуєш персонажа, а він лежить обличчям в підлогу або гігантського розміру.
Правило: Перед експортом виділіть об'єкт в Blender і натисніть `Ctrl+A -> All Transforms`. Масштаб має бути [1, 1, 1], а ротація [0, 0, 0]. Також перевірте, щоб центр (Origin) об'єкта був у нього в ногах — так найзручніше ставити його на 'землю' в Three.js.
Ось такі прості правила 'контракту' між 3D-шником та Front-End розробником зекономлять вам десятки годин дебагу. Хто з якими ще 'сюрпризами' стикався при інтеграції моделей на сайт?
Твій сайт заслуговує бути першим.


Займаюсь розробкою сайтів,