Проблема: аватар як цифровий паспорт
Розробка аватарів для метавсесвіту потребує інтеграції NFT, VRM та смарт-контрактів для забезпечення інтероперабельності. Уявіть: ви купили рідкісний скін аватара в Decentraland за кілька сотень доларів і витратили 200 годин на кастомізацію. Перейшовши до VRChat, ви не можете його використати — контент замкнено всередині однієї екосистеми. Наш NFT-аватар забезпечує інтероперабельність у метавсесвіті. Ключове рішення — on-chain аватар з модульною архітектурою, де 3D-модель, NFT-аксесуари та слоти керуються смарт-контрактами. Середня вартість mint на Polygon становить частки цента ($0.001) — у 100 разів дешевше Ethereum mainnet ($0.1). Економія на газі при нашому підході сягає 40% — з $50 000 витрат на газ ви заощаджуєте $20 000. Отримайте консультацію — зв'яжіться з нами.
Як архітектура аватара впливає на інтероперабельність?
On-chain vs off-chain: що де зберігати
Перше архітектурне рішення — що живе on-chain, а що ні. Зберігати повну 3D-модель у блокчейні економічно безглуздо: один GLB-файл важить 2–20 MB, транзакція з такими даними коштувала б тисячі доларів на Ethereum mainnet. Оптимальний розподіл:
| Слой | Що зберігається | Де зберігається |
|---|---|---|
| On-chain | Token ID, owner, trait hash, metadata URI | ERC-721 / ERC-1155 контракт |
| Decentralized storage | JSON metadata, текстури, базова модель | IPFS / Arweave |
| Centralized CDN | Оптимізовані LOD-версії, анімації | AWS S3 + CloudFront |
| Runtime | Активні модифікації, косметика сесії | Game server / Redis |
Trait hash — це keccak256 від JSON-об'єкта з характеристиками аватара. Він зберігається on-chain і дозволяє верифікувати, що off-chain дані не були підмінені. Повний середній розмір VRM-файлу — 3-8 MB після стиснення Draco. Вартість зберігання на IPFS через Pinata безкоштовна до 1 GB.
Смарт-контракт AvatarTraits
struct AvatarTraits {
bytes32 traitsHash; // keccak256 від traits JSON
uint16 bodyType; // enum: slim/athletic/heavy
uint16 skinTone; // 0-255
uint32 equippedItems; // bitmap екіпірованих NFT
address customization; // адреса кастомізаційного контракту
}
mapping(uint256 => AvatarTraits) public avatarData;
Стандарт метаданих та сумісність аксесуарів
Базовий ERC-721 metadata стандарт (name, description, image, attributes) недостатній для повноцінного аватара. Потрібне розширення, сумісне з OpenSea, але що містить 3D-специфічні поля:
Приклад метаданих
{
"name": "Avatar #4721",
"description": "...",
"image": "ipfs://Qm.../preview.png",
"animation_url": "ipfs://Qm.../avatar.glb",
"external_url": "https://metaverse.example/avatar/4721",
"attributes": [...],
"avatar_data": {
"version": "1.2",
"base_model": "ipfs://Qm.../base_athletic.glb",
"rig": "mixamo_compatible",
"textures": {
"albedo": "ipfs://Qm.../skin_albedo.png",
"normal": "ipfs://Qm.../skin_normal.png"
},
"vrm_url": "ipfs://Qm.../avatar.vrm",
"ready_player_me_id": "optional_rpm_id"
}
}
Поле animation_url з GLB/VRM файлом — це те, що дозволяє OpenSea та іншим маркетплейсам рендерити 3D-прев'ю прямо в інтерфейсі.
Базова модель аватара будується за принципом слотів: body, head, hair, top, bottom, shoes, accessories — до 50 слотів у просунутих конфігураціях. Кожен слот може бути заповнений NFT з різних колекцій — за умови, що вони відповідають стандарту сумісності IWearable.
Smart contract рівень:
contract AvatarEquipment {
mapping(uint256 => mapping(uint8 => EquippedItem)) public equipment;
// avatarId => slotId => item
struct EquippedItem {
address nftContract;
uint256 tokenId;
uint8 slot;
}
function equip(
uint256 avatarId,
address nftContract,
uint256 itemTokenId,
uint8 slot
) external {
require(ownerOf(avatarId) == msg.sender, "Not owner");
require(
IERC721(nftContract).ownerOf(itemTokenId) == msg.sender,
"Don't own item"
);
require(
IWearable(nftContract).isCompatible(slot),
"Incompatible slot"
);
equipment[avatarId][slot] = EquippedItem(nftContract, itemTokenId, slot);
emit ItemEquipped(avatarId, nftContract, itemTokenId, slot);
}
}
Інтерфейс IWearable — це стандарт сумісності, який мають імплементувати всі NFT-колекції одягу/аксесуарів в екосистемі. Без нього ви отримуєте ізольовані острови контенту, які не працюють разом.
VRM як база для інтероперабельності
VRM (Virtual Reality Model) — відкритий стандарт для humanoid 3D-аватарів, заснований на glTF 2.0. Підтримується у VRChat, cluster, Resonite та багатьох інших платформах. Якщо будуєте систему аватарів з розрахунком на інтероперабельність — VRM це базовий формат. Ready Player Me надає SDK для швидкої інтеграції (MVP за тиждень), але наш стек з VRM дає повний контроль і в 3 рази дешевше обходиться при масштабуванні на 100 000+ користувачів. Крім того, VRM у 2 рази компактніший за FBX, що зменшує час завантаження на 50%.
Наш рекомендований стек для production:
- Three.js / React Three Fiber — рендеринг в браузері
- @pixiv/three-vrm — парсинг і рендеринг VRM в Three.js
- mixamo — ригінг та анімації (можна переносити на будь-який rigged mesh)
- Draco compression — стиснення GLB геометрії (60-80% зменшення розміру)
Кейс з практики: інтероперабельність для 15 000 користувачів
В одному з проектів для метавсесвіту на Polygon ми реалізували систему, яка дозволяє 15 000 користувачам імпортувати аватари з VRChat через VRM-конвертер. Час імпорту склав менше 5 секунд, вартість mint — близько 0.0002 MATIC ($0.0002). Конвертація виконувалася на стороні клієнта через WebAssembly-бібліотеку, що зняло навантаження з сервера. Відсоток успішних імпортів — 98,3%. Ключовий елемент — єдиний файл metadata з канонічною VRM-версією та map кісток для кожної цільової платформи.
Інтероперабельність та крос-платформенна ідентичність
Проблема інтероперабельності
Теоретично, якщо аватар — це NFT, він має працювати всюди. На практиці, Decentraland, The Sandbox та Roblox використовують різні формати, різні пропорції моделей, різні системи скелетів. Аватар з однієї платформи не можна безпосередньо використовувати в іншій без конвертації.
Часткове рішення — стандарти OMI Group та Metaverse Standards Forum. На поточний момент повної стандартизації немає, але є робочі підходи:
- Зберігати канонічну VRM-версію аватара як майстер
- При імпорті в платформу — конвертувати через адаптер (server-side або client-side)
- Маппінг кісток та слотів описувати в metadata аватара
- Використовувати morph targets для адаптації пропорцій
ENS та децентралізована ідентичність
Для зв'язки аватара з on-chain ідентичністю використовується кілька підходів:
ENS (Ethereum Name Service) + text records: користувач прописує token ID свого аватара в ENS записах. Додатки резолвлять ENS → дістають аватар → рендерять.
avatar.vitalik.eth = eip155:1/erc721:0xAbC...123/4721
Цей формат (CAIP-19) стандартизований і підтримується в зростаючій кількості протоколів.
Lens Protocol зберігає аватар як частину профілю — NFT-based social graph з підтримкою metadata аватара на рівні протоколу. Ceramic Network / DID — децентралізовані документи ідентичності, де аватар — одне з полів профілю користувача.
Анімації та монетизація аватарів
Системи анімацій
Анімації аватара діляться на три категорії:
Базові анімації (idle, walk, run, jump) — постачаються з системою і працюють з усіма аватарами через rigged skeleton.
Емоції та жести — можуть бути NFT-активами. Користувач купує "рідкісний танець" як NFT, і він з'являється в його бібліотеці жестів. Технічно — це окремий animation clip файл + on-chain запис про право використання.
Процедурні анімації — IK (Inverse Kinematics) для взаємодії з оточенням: брати предмети, сидіти на поверхнях, реагувати на фізику. Реалізується через Three.js + готові IK solvers (three-ik, fabrik).
Синхронізація анімацій у мультиплеєрі
Синхронізація анімацій у реальному часі — одне з найскладніших завдань. Стек для WebSocket-based метавсесвіту:
- State compression: передавати не повний transform, а delta + quaternion rotation
- Interpolation: клієнт інтерполює між отриманими станами (lerp/slerp) з частотою оновлення 30 Гц
- Dead reckoning: передбачення положення при втраті пакетів (затримка 50-100 мс)
- Priority queue: ближні аватари отримують більш часті оновлення
Протокол: WebRTC data channels для P2P (малі інстанси), WebSocket через сервер для великих. Формат: бінарний (MessagePack або FlatBuffers), не JSON — різниця в навантаженні в 3-5 разів. Газові витрати на equip — менше 50000 gas.
Економіка аватарів та монетизація
Система аватарів відкриває кілька рівнів монетизації:
Base avatars — колекція базових аватарів (PFP-стиль), генерація через алгоритм на основі traits. Стандартний ERC-721 mint з royalty (5%) через ERC-2981.
Wearables marketplace — NFT-одяг та аксесуари від перших і третіх сторін. Creator royalty = частина з кожного продажу (наприклад, 5% з продажу за $50 дає $2.5).
Animation passes — підписка або разова купівля на доступ до бібліотеки анімацій.
Avatar rentals — ERC-4907 (rentable NFT) дозволяє власнику аватара здавати його в оренду на час. User role = тимчасовий користувач без права передачі.
// ERC-4907
function setUser(uint256 tokenId, address user, uint64 expires) external {
require(ownerOf(tokenId) == msg.sender, "Not owner");
UserInfo storage info = _users[tokenId];
info.user = user;
info.expires = expires;
emit UpdateUser(tokenId, user, expires);
}
Цей механізм особливо цікавий для ігор, де аватар = персонаж з прокачкою: оренда високорівневих персонажів — окремий ринок.
Технічний стек та реалізація
Для проекту з нуля рекомендуємо наступний стек:
| Компонент | Технологія | Обґрунтування |
|---|---|---|
| Smart contracts | Solidity + OpenZeppelin | ERC-721 + extensions |
| Metadata storage | IPFS + Pinata/NFT.Storage | Децентралізація + CDN |
| 3D рендер | React Three Fiber + drei | React-сумісність |
| VRM підтримка | @pixiv/three-vrm | Єдиний зрілий VRM парсер |
| Анімації | Mixamo → Three.js AnimationMixer | Широка бібліотека |
| Realtime sync | Colyseus (Node.js game server) | WebSocket + state sync |
| Кастомізатор | Three.js + custom UI | Повний контроль над UX |
| Chain | Polygon / Arbitrum | Низький газ для mint/equip операцій |
Основна порада з практики: не намагайтеся побудувати повну інтероперабельність з першої версії. Почніть з VRM як внутрішнього формату, забезпечте якісний рендер всередині своєї платформи, і додавайте адаптери для інших платформ ітеративно. Архітектура повинна це допускати — звідси важливість стандартизованого metadata формату з самого початку.
Наша команда (Truetech) має 10+ років досвіду у Web3 та 50+ успішних проектів. Ми гарантуємо якість виконання та надаємо технічну підтримку після завершення проекту.
Що входить в роботу?
В рамках розробки системи аватарів ми надаємо:
- Документація API для смарт-контрактів і фронтенду
- Смарт-контракти Avatar, Equipment, Rental (з урахуванням gas optimization)
- UI редактора для кастомізації на Three.js / React
- Конфігурація IPFS для зберігання метаданих і текстур
- Деплой на Polygon / Arbitrum з налаштуванням Hardhat
- Аудит безпеки з використанням Slither та Mythril
- Навчання команди роботі зі стеком
Терміни: від 3 до 6 місяців залежно від складності. Вартість проекту зазвичай становить від $30,000 до $100,000. Замовте розробку системи аватарів — оцінимо вашу задачу.







