Table of Contents
वास्तविकता के साथ निर्माण के लिए अगंमेंटेड वास्तविकता अनुभव
Augmented reality (AR) भौतिक दुनिया में डिजिटल सामग्री को ओवरले करता है, इंटरैक्टिव अनुभवों का निर्माण करता है जो आभासी वस्तुओं के साथ वास्तविकता को मिश्रित करता है। Apple का रियलिटी किट फ्रेमवर्क iOS के लिए AR ऐप बनाने के लिए उच्च स्तर, कलाकार API के साथ डेवलपर्स को प्रदान करता है। यह लेख मूल सिद्धांतों, सेटअप, इकाई-घटक वास्तुकला, उपयोगकर्ता संपर्क, एनीमेशन, भौतिकी, सहयोग और अनुकूलन को कवर करता है। अंत तक, आपके पास Swift और realityKit का उपयोग करके पॉलिश AR अनुभवों को बनाने का व्यावहारिक समझ होगा।
शुरू हो रहा है: परियोजना सेटअप और आवश्यकताएँ
RealKit के साथ AR एप्लिकेशन को विकसित करने के लिए, आपको Xcode 13 या बाद में, A9 चिप या नए (iPhone SE, 6s, और बाद में); iPads 5th gen और बाद में) के साथ एक भौतिक iOS उपकरण की आवश्यकता है। iOS सिम्युलेटर कैमरा या सेंसर डेटा का समर्थन नहीं करता है, इसलिए वास्तविक-डिवाइस परीक्षण आवश्यक है।
एक नया Xcode प्रोजेक्ट बनाएं और चुनें Augmented reality App] टेम्पलेट. अपनी वरीयता के आधार पर SwiftUI या UIKit चुनें - realityKit दोनों के साथ सहज रूप से काम करता है। टेम्पलेट एक और एक बुनियादी दृश्य सेटअप प्रदान करता है।
वैकल्पिक रूप से, आप ढांचे को आयात करके मैन्युअल रूप से एक मौजूदा परियोजना में वास्तविकता किट जोड़ सकते हैं:
import RealityKit
import ARKit
]NSCameraUsageDescription] को आपके ]] में सेट किया गया है - एक उपयोगकर्ता-अनुकूल स्ट्रिंग जो यह बताती है कि ऐप को कैमरा एक्सेस की आवश्यकता क्यों है।
अधिक विवरण के लिए, Apple के ] का उल्लेख करेंRealityKit प्रलेखन और ARKit प्रलेखन ]]]]].
इकाई-घटक प्रणाली को समझना
realityKit एक का उपयोग करता है अनंतता-Component आर्किटेक्चर, जो दृश्यों का निर्माण करने के लिए मौलिक है। An एक कंटेनर है जो घटकों को रखता है। घटक व्यवहार, उपस्थिति, भौतिकी और इकाई के अन्य गुणों को परिभाषित करते हैं। उदाहरण के लिए, एक एक 3D जाल को परिभाषित करता है, एक स्थिति / घूर्णन / पैमाने को संभालता है, और एक भौतिकी सिमुलेशन को सक्षम बनाता है।
यह मॉड्यूलर दृष्टिकोण जटिल वस्तुओं को रचना करना आसान बनाता है। आप संस्थाएं बनाते हैं, घटकों को संलग्न करते हैं और उन्हें एक पदानुक्रम में व्यवस्थित करते हैं। दृश्य की जड़ एक ] है (आमतौर पर एक ]), जो ARKit द्वारा पता लगाया गया वास्तविक दुनिया के स्थान पर आभासी सामग्री से संबंधित है।
एक एंकर और ऐडिंग सामग्री बनाना
सबसे आम लंगर एक विमान एंकर है, जो सामग्री को क्षैतिज या ऊर्ध्वाधर सतहों से जोड़ती है। यहां किसी भी मान्यता प्राप्त विमान पर 3 डी मॉडल कैसे रखा जाए:
// 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)
आप विशिष्ट विश्व पदों पर एंकर भी बना सकते हैं, जिसका उपयोग ] किया जाता है या ] या का उपयोग करके पता लगाया छवियों या चेहरे पर सामग्री संलग्न कर सकते हैं।
RealKit के साथ एक बुनियादी AR दृश्य का निर्माण
सरल मॉडल प्लेसमेंट से परे, आपको AR view lifecycle का प्रबंधन करने की आवश्यकता है। एक 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 पदानुक्रम में।
उपयोगकर्ता इंटरेक्शन: इशारा और हिट-टेस्टिंग
अपने AR एप्लिकेशन को इंटरैक्टिव बनाने के लिए, आपको उपयोगकर्ता टैप्स, ड्रैग और रोटेशन को संभालने की आवश्यकता है। RealKit उस इकाई को उपयोगकर्ता को छूने के लिए हिट-टेस्टिंग प्रदान करता है।
स्थान या इंटरैक्ट के लिए टैप करें
] को में जोड़ें। इशारा हैंडलर में, को उंगली के तहत इकाई को पुनर्प्राप्त करने के लिए कहते हैं:
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's पैकेज, या ] आईओएस 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)
आप भी बदल सकते हैं, opacity, या कस्टम मापदंडों का उपयोग कर [[FLT::29]] पहले देखा गया विधि. जटिल अनुक्रमों के लिए, [[FLT: 30]] या [[FLT: 31]]] का उपयोग करें।
भौतिक सिमुलेशन
गुरुत्वाकर्षण, टकराव और बलों को सक्षम करने के लिए ] को संलग्न करें:
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)
] को अन्य साथियों को एक नेटवर्क फ्रेमवर्क (जैसे, मल्टीपीयर कनेक्टिविटी) के माध्यम से भेजें। प्रत्येक उपकरण का रियलिटी किट दृश्य सिंक्रनाइज़ हो गया है। यह मल्टीप्लेयर गेम या साझा डिजाइन समीक्षा के लिए आदर्श है।
चिकना AR अनुभवों के लिए प्रदर्शन का अनुकूलन
एआर एप्लिकेशन गति बीमारी से बचने के लिए उच्च फ्रेम दरों (60 एफपीएस) की मांग करते हैं। इन प्रथाओं का पालन करें:
- ]Use low-poly models और अनुकूलित USDZ फ़ाइलें.
- ]]]]]]] ]]]] [[FLT: 37]]]]]]] [[FLT: 37]]]]]]]]] ]]]]] ]]]]]]]]]]]]]] ]]]]]]]]] ]]]]]]]]]]]]]]] [[FLT:>]]]]]]]]]]]]]]]]]]] [[[FLT: [[[FLT:[[[[[[FLT:]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
- ]]]Instancing का उपयोग करके ड्रॉ कॉल को कम करें - कई संस्थाओं में एक ही मॉडल साझा करें।
- ]]Adjust प्रतिपादन गुणवत्ता पुराने उपकरणों पर ]] के साथ ]]।
- Use ] मॉडल लोड हो रहा है मुख्य धागे को अवरुद्ध करने से रोकने के लिए। एक पृष्ठभूमि कतार में लोड मॉडल और उन्हें तैयार होने पर पेश करते हैं।
- ]:Ar सत्र lifecycle[: ]] जब ऐप पृष्ठभूमि पर जाता है, और अग्रभूमि पर कॉन्फ़िगरेशन को फिर से व्यवस्थित करता है।
विस्तृत मार्गदर्शन के लिए, देखें Apple's ] एक इमर्सिव AR अनुभव और ]टेस्टिंग और समस्या निवारण आपका AR अनुभव ]]]]]
Intuitive AR interfaces
AR में उपयोगकर्ता अनुभव पारंपरिक ऐप्स से भिन्न होता है। इन सिद्धांतों का पालन करें:
- ]Surface डिटेक्शन फीडबैक : एक ग्रिड या रूपरेखा के साथ पता चला विमानों को दृश्यित करें ताकि उपयोगकर्ता ऑब्जेक्ट्स को कहां रखें।
- गिस्ट्रेस को प्राकृतिक : अमूर्त नियंत्रण के बजाय प्रत्यक्ष हेरफेर (tap, खींचें, चुटकी) का उपयोग करें।
- ]Provide Visual संकेत : Highlight इंटरैक्टिव संस्थाओं या एक crosshair दिखाने जब उपयोगकर्ता एक वैध विमान पर अंक।
- ]Handle प्रकाश : RealKit स्वचालित रूप से वास्तविक दुनिया प्रकाश का अनुमान लगा सकता है और इसे आभासी वस्तुओं पर लागू कर सकता है। तीव्रता को समायोजित करने के लिए [[FLT: 41]] का उपयोग करें।
- ]विभिन्न वातावरण में टेस्ट : विभिन्न प्रकाश व्यवस्था, बनावट, और कमरे के आकार AR ट्रैकिंग को प्रभावित करते हैं। औसत स्थिति के लिए ऑप्टिमाइज़ करें।
एआर ऐप्स को डीबगिंग और परीक्षण
वास्तविक-डिवाइस परीक्षण गैर-नकली है। Xcode का उपयोग करें ARKit Debugging Features]:
- ]] को सुविधा अंक, विश्व मूल और भौतिकी वायरफ्रेम दिखाने के लिए सक्षम करें।
- ] का प्रयोग करें, जब सतहों का पता लगाया जाता है, तो देखने के लिए लॉग इन करें।
- ट्रैकिंग स्टेट और त्रुटियों की निगरानी के लिए जोड़ें।
- एकाधिक डिवाइस पीढ़ियों (जैसे, iPhone 8 बनाम iPhone 14 प्रो) पर प्रदर्शन गेज करने के लिए टेस्ट।
स्वचालित यूआई परीक्षण के लिए, आप AR डेटा का मजाक कर सकते हैं, लेकिन मैनुअल परीक्षण सटीकता के लिए आवश्यक रहता है।
निष्कर्ष
RealKit AR विकास की जटिलता का बहुत सार है, लेकिन एक पॉलिश अनुभव का निर्माण करने के लिए इकाई वास्तुकला, उपयोगकर्ता संपर्क, प्रदर्शन और डिजाइन पर ध्यान देना पड़ता है। तकनीकों को कवर करके - दृश्य सेटअप और भौतिकी और सहयोग से इशारा हैंडलिंग से - आप AR ऐप बना सकते हैं जो उपयोगकर्ताओं को संलग्न करते हैं और iOS हार्डवेयर की पूरी क्षमता का लाभ उठाते हैं। Apple के विकसित AR फ्रेमवर्क के साथ वर्तमान रहें और हमेशा एक सहज, इमर्सिव अनुभव सुनिश्चित करने के लिए वास्तविक उपकरणों पर परीक्षण करें।