Створення 3D-моделі за фотографіями прямо на мобільному пристрої — завдання, яке ще недавно здавалося фантастикою. Сьогодні, завдяки NeRF та 3D Gaussian Splatting, це реально. Більшість рішень для фотограмметрії потребують потужних десктопних GPU та не адаптовані під мобільний UX — ми закриваємо цей розрив, пропонуючи готовий пайплайн з guided capture та хмарною обробкою. Ми розробляємо такі рішення під ключ для iOS та Android. Наш досвід — 5+ років у мобільній розробці та 30+ проектів з комп'ютерним зором. Гарантуємо точність реконструкції та повну підтримку на всіх етапах. Замовте розробку прямо зараз — отримайте рішення, готове до публікації.
Яку проблему ми вирішуємо?
Ручне моделювання 3D-об'єктів займає години та потребує навичок. Автоматична реконструкція часто дає артефакти через погане покриття або низьку якість знімків. Ми усуваємо ці проблеми за допомогою guided capture та оптимізованого пайплайну на базі NeRF і 3D Gaussian Splatting. Користувач просто обходить об'єкт, слідуючи підказкам, а решту робить наша система. Особливо складні сцени з відблискуючими або однорідними поверхнями — для них ми використовуємо адаптивну стратегію зйомки.
Що обрати: NeRF, Gaussian Splatting чи фотограмметрія?
Три технології вирішують одне завдання: 3D-об'єкт із фотографій. Різниця принципова:
| Метод | Швидкість навчання | Час рендеру | Якість | Редагованість |
|---|---|---|---|---|
| Класичний NeRF | Години–дні | Повільний | Високе | Погана |
| InstantNGP/Nerfacto | 5–30 хв | Швидкий | Хороше | Середня |
| 3D Gaussian Splatting | 10–40 хв | Реальний час | Відмінне | Хороша |
| Photogrammetry (Metashape, COLMAP) | 30 хв–кілька годин | Миттєвий (mesh) | Залежить від фото | Відмінна |
Для мобільних додатків сьогодні 3D Gaussian Splatting — найкращий баланс швидкості та якості. Він у 3–5 разів швидший за класичний NeRF при порівнянній якості. Для швидкого прев'ю в AR підходить фотограмметрія з сучасним COLMAP-пайплайном.
Як працює 3D-реконструкція на мобільному?
On-device reconstruction можлива лише в обмежених сценаріях (наприклад, Apple Object Capture API — тільки на Mac з Apple Silicon). Практична архітектура для мобільного:
- Зйомка з підказками — guided capture з AR-оверлеєм (ARKit/ARCore) збирає 20–60 фото та метадані camera poses.
- Валідація на пристрої — перевірка покриття, різкості, кількості кадрів.
- Завантаження в хмару — стиснені зображення та метадані відправляються на GPU-інстанс.
- Побудова хмари точок — COLMAP SfM (якщо немає poses) або імпорт метаданих.
- Навчання 3D Gaussian Splatting — 10–40 хвилин на T4/A100.
- Експорт — .glb для AR Quick Look, .splat для web-перегляду.
- AR-перегляд — завантаження моделі та рендер через RealityKit/SceneViewer.
Технічні вимоги до хмарного GPU
Для навчання Gaussian Splatting рекомендується NVIDIA GPU з 8+ GB VRAM (T4, A10G, A100). Час навчання від 10 до 40 хвилин залежно від кількості кадрів та роздільної здатності. Використовуємо контейнеризацію (Docker + NVIDIA Container Toolkit).Guided capture на iOS з ARKit
Ключовий UX: користувач повинен обійти об'єкт правильно, інакше реконструкція буде з артефактами.
class GuidedCaptureSession: NSObject {
private var arSession: ARSession
private var capturedFrames: [(UIImage, simd_float4x4)] = [] // image + camera transform
private let targetFrameCount = 40
private let minAngleBetweenFrames: Float = 8.0 // градусы
func shouldCaptureFrame(currentTransform: simd_float4x4) -> Bool {
guard let lastTransform = capturedFrames.last?.1 else { return true }
// Угловое расстояние от последнего захваченного кадра
let angularDistance = computeAngularDistance(currentTransform, lastTransform)
return angularDistance >= minAngleBetweenFrames
}
var captureProgress: Float {
// Оцениваем покрытие орбиты вокруг объекта
let coveredAngles = estimateOrbitCoverage(capturedFrames.map { $0.1 })
return min(coveredAngles / 360.0, 1.0)
}
}
AR-оверлей показує «орбіту» навколо об'єкта: зелені дуги — вже зняті ракурси, сірі — потрібно зняти. Це знижує відсоток невдалих реконструкцій через неповне покриття.
Вимоги до якості знімків — ai 3d реконструкція
До відправки в хмару — базова валідація на пристрої:
func validateCaptureSet(_ frames: [(UIImage, simd_float4x4)]) -> ValidationResult {
// Минимальное количество кадров
guard frames.count >= 20 else {
return .insufficientFrames(current: frames.count, required: 20)
}
// Покрытие углов (нужно хотя бы 270° из 360°)
let orbitCoverage = estimateOrbitCoverage(frames.map { $0.1 })
guard orbitCoverage >= 0.75 else {
return .insufficientCoverage(coverage: orbitCoverage)
}
// Средняя резкость кадров
let avgSharpness = frames.map { sharpnessScore($0.0) }.reduce(0, +) / Float(frames.count)
guard avgSharpness >= 60.0 else {
return .blurryImages
}
return .valid
}
Backend: навчання 3D Gaussian Splatting
Метадані ARKit (camera poses) — спрощують COLMAP SfM, скорочуючи час обробки. Якщо poses відсутні, запускаємо SfM з nerfstudio.
# nerfstudio + gsplat pipeline
from nerfstudio.cameras.cameras import CameraType
from nerfstudio.pipelines.base_pipeline import Pipeline
def run_gaussian_splatting(
images_dir: Path,
camera_poses: list[np.ndarray] | None = None,
output_dir: Path = Path("output")
) -> Path:
"""
Если camera_poses переданы (из ARKit) — пропускаем COLMAP SfM.
Это сокращает время обработки с 15-20 мин до 3-5 мин.
"""
config = SplatfactoModelConfig(
num_downscales=2, # уменьшаем для скорости
use_scale_regularization=True,
max_gauss_ratio=10.0,
)
trainer = Trainer(config, output_dir=output_dir)
trainer.train() # ~10-40 мин на GPU (A100: 10 мин, T4: 25 мин)
# Экспорт в web-friendly формат
export_gaussian_splat(output_dir / "splat.ply")
export_glb(output_dir / "model.glb") # для AR Quick Look / SceneViewer
return output_dir
Відображення результату в AR
// iOS: RealityKit Quick Look для .usdz / .glb
import RealityKit
import ARKit
class ModelViewerViewController: UIViewController {
func presentARModel(modelURL: URL) {
let arView = ARView(frame: view.bounds, cameraMode: .ar)
let anchor = AnchorEntity(plane: .horizontal)
ModelEntity.loadModelAsync(contentsOf: modelURL)
.sink(
receiveCompletion: { _ in },
receiveValue: { [weak self] entity in
entity.generateCollisionShapes(recursive: true)
anchor.addChild(entity)
arView.scene.anchors.append(anchor)
// Pinch to scale, pan to move
arView.installGestures([.scale, .translation, .rotation], for: entity)
}
)
.store(in: &cancellables)
}
}
Терміни та що входить в роботу
| Етап | Тривалість | Результат |
|---|---|---|
| Аналіз та проектування | 3–5 днів | Технічне завдання та архітектура |
| Guided capture + валідація | 5–7 днів | Модуль зйомки з AR-оверлеєм |
| Хмарний backend | 5–10 днів | API для завантаження та навчання |
| AR-перегляд | 3–5 днів | Інтеграція RealityKit / SceneViewer |
| Тестування та деплой | 3–5 днів | Додаток в App Store / Google Play |
Зазначимо: що входить: повна документація, вихідні коди, інструкція з розгортання хмарного сервісу, підтримка на 3 місяці.
Чому варто довірити розробку нам?
Ми сертифіковані спеціалісти з iOS та Android. За 5+ років реалізували 30+ проектів з комп'ютерним зором та AR. Гарантуємо дотримання App Store Review Guidelines (Section 4.2/5.1) та стабільну роботу з push-сповіщеннями, deep linking та in-app purchase. Надаємо повний цикл: від ідеї до публікації. Отримайте консультацію інженера — ми допоможемо обрати оптимальний пайплайн для вашого завдання. Зв'яжіться з нами — оцінимо ваш проект протягом дня. Відповімо на питання та запропонуємо оптимальне рішення під ключ.







