Розробка 3D-перегляду товару для інтернет-магазину
Покупець бачить фото товару, але не може його покрутити, наблизити, оцінити фактуру. Результат — повернення через невідповідність очікуванням, втрачені продажі. 3D-перегляд вирішує цю проблему: користувач самостійно досліджує об'єкт, обертаючи, масштабуючи, вмикаючи доповнену реальність. Дослідження показують: конверсія на картках з 3D до 40% вища, ніж без нього (за даними Shopify для меблів — до 65%). Це означає, що 3D-перегляд конвертує у 1.4 рази краще за звичайні фото.
Наш досвід у нішах меблів, ювелірних прикрас, взуття та техніки підтверджує цю статистику. Ми реалізували понад 15 проєктів, кожен з яких вимагав індивідуального підходу до моделювання, освітлення та інтеграції. Ми на ринку з 2018 року (6+ років досвіду). Зниження витрат на контент-продакшн сягає 70% завдяки фотограмметрії, а ROI від впровадження 3D-перегляду може перевищувати 300%. Зв'яжіться з нами, щоб обговорити 3D-стратегію для вашого каталогу.
Формати 3D-моделей для вебу
| Формат | Розширення | Розмір | Підтримка браузером | Застосування |
|---|---|---|---|---|
| glTF 2.0 | .gltf + .bin + textures | Залежить від складності | Через Three.js/Babylon | Стандарт для вебу |
| GLB | .glb | Компактніший (бінарний) | Через Three.js/Babylon, <model-viewer> |
Переважний для вебу |
| USDZ | .usdz | Середній | iOS Safari нативно | AR Quick Look на iOS |
| USD / USDC | .usdc | Великий | Обмежена | Нативний Apple/Pixar |
| OBJ + MTL | .obj | Великий | Через Three.js | Legacy, не рекомендується |
| FBX | .fbx | Великий | Тільки конвертація | З DCC-інструментів |
GLB — де-факто стандарт для 3D в вебі (glTF 2.0 specification). Все упаковано в один файл: геометрія, матеріали, текстури, анімації. Підтримує PBR-матеріали (metalness/roughness workflow), що дає фізично коректний рендеринг.
Three.js — базовий стек
Мінімальний 3D-віджет на Three.js:
import * as THREE from 'three'; import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'; import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'; import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js'; import { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader.js'; const scene = new THREE.Scene(); const camera = new THREE.PerspectiveCamera(45, container.width / container.height, 0.1, 100); const renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true }); renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2)); renderer.toneMapping = THREE.ACESFilmicToneMapping; renderer.outputColorSpace = THREE.SRGBColorSpace; // OrbitControls — обертання, зум, панорамування мишею/тачем const controls = new OrbitControls(camera, renderer.domElement); controls.enableDamping = true; controls.dampingFactor = 0.05; controls.minDistance = 1; controls.maxDistance = 10; // DRACO-декомпресія для стиснених моделей const dracoLoader = new DRACOLoader(); dracoLoader.setDecoderPath('/draco/'); const loader = new GLTFLoader(); loader.setDRACOLoader(dracoLoader); loader.load('/models/product.glb', gltf => { scene.add(gltf.scene); fitCameraToObject(camera, controls, gltf.scene); }); // HDR-оточення для PBR-освітлення new RGBELoader().load('/env/studio.hdr', texture => { texture.mapping = THREE.EquirectangularReflectionMapping; scene.environment = texture; }); Що дає Draco-компресія?
Draco — алгоритм стиснення 3D-геометрії від Google. Типове стиснення: геометрія зменшується в 5–10 разів без видимої втрати якості. Модель крісла 8MB → 800KB після Draco.
Конвертація в pipeline (offline, при завантаженні моделі адміністратором):
# gltf-pipeline від Khronos npx gltf-pipeline -i input.glb -o output.glb --draco.compressionLevel 7 # або через blender CLI blender --background --python export_with_draco.py Draco-декодер в браузері — WASM-модуль (~200KB). Потрібно розмістити на сервері та вказати шлях у DRACOLoader.setDecoderPath().
<model-viewer> як готовий компонент
Якщо не потрібна глибока кастомізація, <cite><a href="https://github.com/google/model-viewer">model-viewer</a></cite> від Google покриває 90% завдань. Проєкт з відкритим кодом активно підтримується.
<model-viewer src="/models/chair.glb" ios-src="/models/chair.usdz" alt="Офісне крісло Herman Miller" camera-controls auto-rotate auto-rotate-delay="3000" rotation-per-second="30deg" shadow-intensity="1" exposure="0.8" environment-image="/env/neutral.hdr" ar ar-modes="webxr scene-viewer quick-look" loading="lazy" style="width: 100%; aspect-ratio: 1; background: #f5f5f5;" > <div slot="progress-bar"> <div class="progress-bar" style="..."></div> </div> <button slot="ar-button" class="ar-button"> Подивитися у вашому інтер'єрі </button> </model-viewer> Вбудовано: OrbitControls, touch support, AR (WebXR + Quick Look), shadow, lazy loading, прогрес завантаження.
Освітлення та PBR-матеріали
Якість рендерингу в браузері визначається освітленням. Без правильного оточення навіть хороша модель виглядає плоскою.
HDR environment map — сферична HDR-панорама студійного або нейтрального освітлення. Вона створює коректні відбиття на металевих та глянцевих поверхнях. Розмір: 2MB–8MB, завантажується один раз і кешується.
Для продуктів: нейтральний студійний HDRI (сірий фон, рівне світло) — neutral.hdr з репозиторію model-viewer. Для ювелірних прикрас — HDRI з вираженими відблисками.
Анімовані матеріали: зміна варіанту (колір, матеріал) — змінюємо material.color, material.roughness, material.metalnessMap. Без перезавантаження моделі:
const materials = model.querySelector('model-viewer').model.materials; const chairMaterial = materials.find(m => m.name === 'Fabric'); chairMaterial.pbrMetallicRoughness.setBaseColorFactor([0.8, 0.2, 0.2, 1]); // червоний Як оптимізувати продуктивність?
Розмір моделі: цільовий GLB для картки товару — до 2MB. Більше — користувач чекає, конверсія падає. Методи оптимізації:
- Draco-компресія геометрії (5–10x)
- KTX2 / Basis Universal компресія текстур (3–5x, з GPU-декодуванням)
- Retopology моделі: прибрати приховані грані, спростити невидимі частини
- Запекти (bake) деталі з high-poly в normal map low-poly моделі
Lazy loading: Three.js/WebGL ініціалізується тільки при потраплянні віджета в viewport за допомогою IntersectionObserver. Коли віджет поза видимістю, рендеринг призупиняється.
Pixel ratio: на mobile обмежуємо devicePixelRatio до 1.5 максимум — економить GPU на ретина-дисплеях.
Використовуйте <model-viewer> з вбудованим лінивим завантаженням, якщо не потрібна кастомна логіка.
Анотації та хотспоти
Анотації — точки на 3D-моделі з поясненнями. Користувач наводить / клікає — з'являється tooltip з інформацією про деталь.
У <model-viewer> анотації — через слоти:
<model-viewer src="headphones.glb" camera-controls> <button slot="hotspot-ear-cup" data-position="-0.3 0.1 0.2" data-normal="-1 0 0" data-visibility-attribute="visible" > <div class="hotspot-label"> <strong>Амбушури</strong> Пам'ять-піна з ефектом пам'яті, 40мм </div> </button> </model-viewer> Координати data-position — світові координати в системі координат моделі. Визначаються в Blender або через вбудований picking у Three.js.
Конвеєр підготовки контенту
Розробка віджета і підготовка моделей — паралельні завдання. Типовий pipeline:
- 3D-моделювання (Blender, Cinema 4D) або фотограмметрія (RealityCapture, Meshroom)
- Оптимізація (Blender: retopology, LOD), Draco-компресія
- PBR-текстурування (Substance Painter) + конвертація текстур у KTX2
- QA в браузері: перевірка в model-viewer, тест на мобайлі
- Конвертація в USDZ для iOS AR (Reality Converter, online-конвертери)
- Завантаження в CDN з правильними заголовками (
Content-Type: model/gltf-binary)
Терміни розробки 3D-перегляду
| Варіант інтеграції | Тривалість | Вартість | Опис |
|---|---|---|---|
<model-viewer> (готовий компонент, GLB від клієнта) |
3–5 робочих днів | від $500 | Мінімальна інтеграція: підключення, налаштування освітлення, lazy loading |
| Кастомний Three.js-віджет (анотації, зміна матеріалів) | 2–4 тижні | від $2500 | Глибока кастомізація, управління матеріалами, унікальне освітлення |
| Повна платформа (завантаження моделей у CMS, конвеєр оптимізації) | 4–7 тижнів | від $5000 | Включає pipeline завантаження, AR, адмінку, навчання |
Підготовка 3D-моделей (якщо немає): від 4 годин до 2 днів на один артикул. При великому каталозі фотограмметрія знижує вартість контент-продакшну в 5–10 разів порівняно з ручним моделюванням.
Що входить до нашого комплексу робіт
- Аналіз існуючих моделей та підготовка рекомендацій щодо оптимізації
- Вибір та налаштування оточення (HDR, освітлення)
- Інтеграція віджета у вашу CMS або фронтенд
- Налаштування лінивого завантаження та кешування
- Документація з управління моделями
- Навчання адміністраторів завантаженню та заміні моделей
- Гарантійна підтримка протягом місяця після здачі
Замовте розробку 3D-переглядача — пишіть для оцінки вашого проєкту. Отримайте консультацію щодо вашого каталогу. Ми запропонуємо оптимальне рішення під ваш бюджет та асортимент. Базова інтеграція model-viewer коштує від $500, кастомний Three.js-віджет — від $2500, повна платформа — від $5000. Економія на контенті до 70% порівняно з ручним моделюванням.







