Вимірювання та приладобудування
Будівля доповнених реальних досвідів з реальністю
Table of Contents
Вступ до побудови доповнених реальних досвіду з реальністьКіт
Оздоблений реальність (AR) переносить цифровий контент на фізичний світ, створюючи інтерактивні враження, які блендерують реальність з віртуальними об'єктами. Основа Apple надає розробникам високий рівень, виконавцю API для побудови додатків AR для iOS. Ця стаття розширюється на принципах, налаштовує налаштування, об'єктно-компонентна архітектура, взаємодію користувача, анімація, фізика, співпраця та оптимізацію. До закінчення ви будете мати практичне розуміння того, як створити полірований AR-досвід за допомогою Swift і RealityKit.
Початок: Налаштування проекту та вимоги
Для розробки AR додатків з RealityKit вам потрібно Xcode 13 або пізніше, фізичного iOS пристрою з чіпом A9 або новачком (iPhones SE, 6s, а пізніше; iPads 5 ген і пізніше), і Apple Developer облікового запису для тестування. iOS Simulator не підтримує камеру або сенсорні дані, тому тестування реальних додатків є важливим.
Створіть новий проект Xcode і виберіть Застосований Додаток реальності] шаблон. Виберіть SwiftUI або UIKit залежно від вашого вподобання – RealityKit працює безшовно з обох. Шаблон надає і базову налаштування сцени.
Крім того, ви можете вручну додати RealKit на існуючий проект шляхом імпорту каркасу:
import RealityKit
import ARKit
Забезпечити NSCameraUsageDescription встановлюється у Вашому - зручний рядок, що пояснює, чому додаток потребує доступу до камери.
Для отримання більш детальної інформації див. у документації «RealityKit» та ARKit документація.
Розуміння системи компонента
ДійсністьКіт використовує Entity‐Component Архітектура, яка є фундаментальним для побудови сценань. ] - контейнер, який містить компоненти. Компоненти визначають поведінку, зовнішній вигляд, фізику та інші властивості суб'єкта. Наприклад, визначає 3D-сіт, ручить позицію/рошення/масштаб, а дозволяє фізичний імітаційний моделювання.
Цей модульний підхід дозволяє легко композилювати складні об'єкти. Ви створюєте компоненти, прикріплюєте компоненти та влаштовує їх в ієрархії. Корінь сцени - (типово ), які зв'язує віртуальний контент на реальне розташування світу, виявлене ARKit.
Створення вмісту Анко та Додавання
Найпоширеніший анкер - це площина, яка прикріплює вміст на горизонтальні або вертикальні поверхні. Ось як розмістити модель 3D на будь-якій визнаній площині:
// Load a USDZ model
guard let model = try? ModelEntity.load(named: "robot") else { return }
// Create an anchor on any horizontal plane
let anchor = AnchorEntity(plane: .horizontal, classification: .any, minimumBounds: [0.2, 0.2])
// Attach the model to the anchor
anchor.addChild(model)
// Add the anchor to the ARView’s scene
arView.scene.addAnchor(anchor)
Ви також можете створювати анкери на конкретних світових позиціях за допомогою або прикріпити вміст для виявлення зображень або обличчя за допомогою або .
Будівля базової AR сцени з реальністьКіт
За простою моделлю розміщення, потрібно керувати життєвим циклом AR. У додатку UIKit додайте до вашого перегляду контролера:
class ViewController: UIViewController {
@IBOutlet var arView: ARView!
override func viewDidLoad() {
super.viewDidLoad()
arView.session.delegate = self
// Configure session
let config = ARWorldTrackingConfiguration()
config.planeDetection = [.horizontal, .vertical]
arView.session.run(config)
loadContent()
}
func loadContent() {
// Create and add anchors
}
}
Для SwiftUI, посольство , що міст в SwiftUI ієрархію.
Користувач: Гезекції та Hit‐Testing
Щоб зробити свій AR додаток інтерактивним, потрібно обробляти натискачі, перетягування та обертання. ДійсністьKit забезпечує вражаюче виявлення якого суб'єкта господарювання, що доторкнувся.
Натисніть на місце або Interact
Додати до . У жест-керувальниці, виклик ] для отримання суб'єкта під пальцем:
arView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleTap(_:))))
@objc func handleTap(_ sender: UITapGestureRecognizer) {
let location = sender.location(in: arView)
if let entity = arView.entity(at: location) {
// Scale the entity
var transform = entity.transform
transform.scale *= 1.2
entity.move(to: transform, relativeTo: entity.parent, duration: 0.3, timingFunction: .easeInOut)
} else {
// Place a new object at the tapped location
placeObject(at: location)
}
}
func placeObject(at screenPoint: CGPoint) {
let results = arView.raycast(from: screenPoint, allowing: .estimatedPlane, alignment: .any)
guard let result = results.first else { return }
let anchor = AnchorEntity(world: result.worldTransform)
let box = ModelEntity(mesh: .generateBox(size: 0.1), materials: [SimpleMaterial(color: .blue, isMetallic: false)])
anchor.addChild(box)
arView.scene.addAnchor(anchor)
}
Відкидання від реальних поверхонь світу є більш надійним, ніж суб'єкт, який потрапив до тестування, коли ви хочете розмістити вміст на площині. Використовуйте для цього.
Перетягніть і обертайте з дорогоцінними протезами
Щоб включити перетягування, прикріпіть і оновіть позицію суб'єкта по площині. Для обертання використовуйте :
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(handlePan(_:)))
arView.addGestureRecognizer(panGesture)
@objc func handlePan(_ sender: UIPanGestureRecognizer) {
let location = sender.location(in: arView)
guard let entity = arView.entity(at: location) else { return }
guard let parent = entity.parent as? HasAnchoring else { return }
// Translate the entity in the anchor’s local plane
let translation = sender.translation(in: arView)
// ... (convert to 3D movement)
}
Для надійного виконання, враховуйте за допомогою від RealityKit пакет, або жест нерухомості в iOS 16+.
Додаткові функції: Анімація, фізика та співпраця
Анімація
RealKit підтримує як скелетні анімації (з файлів USDZ) та анімації на основі нерухомості. Для запуску вбудованої анімації на моделі з анімаційними ресурсами:
guard let model = try? ModelEntity.load(named: "dancing_character") else { return }
model.playAnimation(model.availableAnimations[0].repeat(duration: .infinity), transitionDuration: 0.5, startsPaused: false)
Ви також можете аніматувати перетворення, непрозорість або користувацькі параметри за допомогою методу . Для складних послідовностей використовуйте або .
Фізика моделювання
Прикріпіть для включення ваги, зіткнення та сил:
let box = ModelEntity(mesh: .generateBox(size: 0.1), materials: [SimpleMaterial(color: .red, isMetallic: false)])
box.position = [0, 0.5, 0] // above a plane
let physicsBody = PhysicsBodyComponent(
massProperties: .default,
material: .generate(staticFriction: 0.8, dynamicFriction: 0.5, restitution: 0.3),
mode: .dynamic
)
box.components.set(physicsBody)
let collision = CollisionComponent(shapes: [.generateBox(size: [0.1, 0.1, 0.1])])
box.components.set(collision)
// Add box to anchor
anchor.addChild(box)
Коробка буде падати на площину і реагувати на зіткнення. Статичні об'єкти (подібні стіни) повинні мати .
Колегативні AR-сесії
З колегами ARKit можна поділитися одними з кращих програм AR. Увімкнути співпрацю, встановлюючи параметри співпраці сеансу:
config.collaborationEnabled = true
arView.session.run(config)
для інших однолітків через мережу (наприклад, багатокористувацьку з'єдність). Кожна сцена пристрою RealKit залишається синхронізованою. Це ідеально підходить для багатокористувацьких ігор або спільних відгуків дизайну.
Оптимальна продуктивність для плавних AR-досвідів
AR-програми вимагають високих частот кадрів (60 к/с) для уникнення захворюваності руху. Дотримуйтесь цих практик:
- Використовувати моделі низького рівня і оптимізовані файли USDZ. Тримайте вертекс нарахуйте низьку і використовуйте стиснені текстури (KTX або PNG).
- => Визначте кількість суб’єктів в сцені. Використовуйте для підрахунку абвуг.
- Minimize викликає за допомогою інсталяції – поділіть однакову модель по декількох суб'єктам.
- Налаштування якості рендерингу на старих пристроях.
- Використовувати для запобігання блокування основної нитки. Моделі навантаження на фоновому чергі і при необхідності при необхідності пред'являються.
- Керування життєвим циклом AR-сесії: виклик , коли додаток йде на фон, і перенаправлення конфігурації на передній план.
Для детального керівництва див. Apple Створення досвіду роботи з нерухомістю та ]Захід та усунення несправностей вашого досвіду зі стрілками.
Розробка інтерфейсів AR
Досвід роботи користувачів в AR відрізняється від традиційних додатків. Дотримуйтесь цих принципів:
- ]Сурі-детекції : Візуалізація виявних площин з сітку або контуром, тому користувачі знають, де розмістити об'єкти.
- Особливості повинні відчувати природну: Використовуйте прямі маніпуляції (затиск, перетягування, щіпка) а не абстрактні елементи.
- Provide візуальні натяки: Виділіть інтерактивні особи або покажіть крос-голову при вказаних площинах користувача.
- Handle Lighting: RealityKit може автоматично оцінити світ реального світу і застосувати його на віртуальні об'єкти. Використовуйте для регулювання інтенсивності.
- Test в різних середовищах]: Різні освітлення, текстури та розміри номерів впливають на стеження за AR. Оптимальна для середніх умов.
Видалення та тестування додатків AR
Тестування на реальні розробки не є невідомим. Використовуйте Xcode ARKit Debugging Особливості:
- Увімкнути для відображення точок, світового походження та фізики дротів.
- Використовуйте журнали, щоб побачити при виявленні поверхонь.
- Додати для моніторингу стану відстеження та помилок.
- Тест на декількох пристроїв генерації (наприклад, iPhone 8 vs. iPhone 14 Pro) для вимірювання продуктивності.
Для автоматизованого тестування UI можна відмітити дані AR, але ручне тестування залишається важливим для точності.
Висновок
ДійсністьКіт анотації набагато складність розвитку AR, але побудови полірованого досвіду вимагає уваги до архітектури суб'єкта, взаємодії користувачів, продуктивності та дизайну. Поєднуючи методи, які охоплюються – від налаштування сцени та обробки жестів до фізики та колаборації – ви можете створювати AR програми, які залучають користувачів та важе повний потенціал обладнання iOS. Залишайтеся струмом із за участю AR-фреймворками Apple та завжди перевірте на реальних пристроях, щоб забезпечити безшовний, неперервний досвід.