Клієнт хоче додати в додаток можливість сканувати об'єкт однією камерою і одразу дивитися його 3D-модель в AR. Без LiDAR, без фотограмметрії — тільки нейромережі. Завдання складне: на пристрої мало пам'яті, а сервер додає затримки. Ми вирішуємо його комбінацією on-device глибини та серверної реконструкції, підбираючи архітектуру під залізо та сценарій.
Класичні підходи вимагають десятків фотографій або спеціального обладнання. Нейромережева генерація з одного фото — реальне завдання, але з суттєвими обмеженнями щодо якості при повністю локальній обробці. Наш досвід — 5+ років в мобільному AR/ML — дозволяє обрати оптимальний баланс. Якщо ви зіткнулися з аналогічним завданням, зв'яжіться з нами — ми допоможемо підібрати пайплайн під ваші вимоги.
Як вибрати архітектуру генерації?
Повністю на пристрої — легкі моделі типу DepthPro Core ML для depth estimation + point cloud, або One-2-3-45 у мобільній редакції. Отримуємо грубу 3D-структуру, придатну для AR-прев'ю, але не для експорту в професійні додатки. On-device depth у 10 разів швидше сервера, але точність нижча в 2 рази за метрикою Chamfer Distance.
Гібрид — на пристрої робимо depth map та початкову сегментацію об'єкта, на сервері — повноцінна 3D-реконструкція через Zero123++, One-2-3-45 або TripoSR. Сервер повертає .obj або .glb файл. Затримка 0.5–1 с додатково, але якість — як у десктопних рішень.
LiDAR-доповнений — на iPhone 12 Pro+ та iPad Pro є LiDAR сканер. ARKit + ARMeshAnchor дозволяє отримати real mesh сцени. Комбінація LiDAR mesh + текстура з камери + AI texture inpainting дає якісний результат без сервера. Це найнадійніший варіант для iOS.
Чому LiDAR дає найкращий результат?
На iPhone з LiDAR найнадійніший варіант — ARKit:
let configuration = ARWorldTrackingConfiguration() configuration.sceneReconstruction = .meshWithClassification // В ARSession delegate func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) { for anchor in anchors.compactMap({ $0 as? ARMeshAnchor }) { let geometry = anchor.geometry // geometry.vertices, geometry.faces, geometry.normals — готовий меш exportMesh(geometry: geometry, transform: anchor.transform) } } ARMeshAnchor.geometry.vertices — ARGeometrySource з буфером Metal. Експорт в .obj:
func exportToOBJ(geometry: ARMeshGeometry, transform: simd_float4x4) -> String { var obj = "" let vertices = geometry.vertices // Ітеруємо MTLBuffer напряму через withUnsafeBytes vertices.buffer.contents().withMemoryRebound(to: SIMD3<Float>.self, capacity: vertices.count) { ptr in for i in 0..<vertices.count { let v = ptr[i] let world = transform * SIMD4<Float>(v.x, v.y, v.z, 1) obj += "v \(world.x) \(world.y) \(world.z)\n" } } // Аналогічно для faces (indices) return obj } Текстурування меша — проєктуємо відеокадр на меш через UV-mapping. Це окреме завдання; без нього меш буде сірим.
Які складнощі виникають при on-device обробці?
On-device depth estimation потребує ретельного калібрування та обробки EXIF-даних. Наприклад, ігнорування фокусної відстані спотворює depth map. Ми завжди читаємо focal length з метаданих кадру. Також складнощі виникають з відбиттями та скляними поверхнями: depth дає невірні значення, тому застосовуємо сегментацію та AI-inpainting на сервері. Монотонні поверхні без текстури — ще одна проблема: накладаємо AI-згенеровану текстуру для реалістичного вигляду.
Порівняння підходів
| Критерій | On-device Depth | LiDAR ARKit | Сервер (TripoSR) |
|---|---|---|---|
| Якість | ★★ (point cloud) | ★★★★ (mesh + текстура) | ★★★★★ (готовий mesh) |
| Швидкість | Миттєво | Миттєво | 0.5–2 с |
| Офлайн | Так | Так | Ні |
| Підтримка пристроїв | Будь-які | iPhone 12 Pro+ | Будь-які з інтернетом |
Типові помилки та як їх уникнути
- Ігнорування фокусної відстані — без EXIF depth map спотворюється. Читаємо focal length з метаданих.
- Відбиття та скло — depth дає невірні значення. Застосовуємо сегментацію та inpainting.
- Монотонні поверхні — без текстури меш погано виглядає. Накладаємо AI-згенеровану текстуру.
- Розмір моделі — dense mesh може важити >100 МБ. Застосовуємо квадричне спрощення (decimation) до 50k полігонів.
Що входить у роботу
- Документація по інтеграції API.
- Вихідний код модуля (Swift / Kotlin).
- Тестовий білд з демонстрацією.
- Навчання команди замовника.
- Підтримка 3 місяці після запуску.
Вартість проєкту розраховується індивідуально. Ми гарантуємо прозорість: підписуємо специфікацію та фіксуємо етапи. Економія часу на 3D-моделювання — до 80% за рахунок автоматизації.
Процес роботи
- Аналіз вимог: сценарій, цільові пристрої, необхідність текстури.
- Вибір архітектури (on-device / гібрид / LiDAR).
- Розробка пайплайну захоплення та обробки кадру.
- Інтеграція depth estimation (DepthPro / ARKit) або серверного API.
- Вилучення меша (Poisson / Marching Cubes) або використання ARMeshAnchor.
- Накладення текстури (проєкція кадру або AI inpainting).
- AR-прев'ю через RealityKit / ARKit.
- Експорт у формати: USDZ, glTF, OBJ.
- Оптимізація продуктивності та тестування на складних об'єктах.
Орієнтири за термінами
| Варіант | Термін |
|---|---|
| LiDAR-сканування + експорт (iOS) | 3–5 тижнів |
| On-device depth + сервер (iOS+Android) | 8–10 тижнів |
| Повний пайплайн + AR-прев'ю + експорт | 8–14 тижнів |
Отримайте консультацію — зв'яжіться для оцінки вашого проєкту. Докладніше про технологію LiDAR та ARKit на офіційних сторінках.







