Unity पर अपने आस-पास की इमारतों और इलाकों का इस्तेमाल करें

Streetscape Geometry API किसी सीन में इलाके, इमारतों या अन्य स्ट्रक्चर की ज्यामिति उपलब्ध कराता है. ज्यामिति का इस्तेमाल हिट-टेस्ट एपीआई के ज़रिए एआर कॉन्टेंट को शामिल करने, रेंडर करने या उसमें करने के लिए किया जा सकता है. Streetscape ज्यामिति डेटा, Google Street View की तस्वीरों के ज़रिए लिया जाता है.

सैंपल आज़माएं

जियोस्पेशियल सैंपल ऐप्लिकेशन में, Streetस्केप जियोमेट्री का पता लगाने और उन्हें रेंडर करने का तरीका बताया गया है.

Geospatial API को सेट अप करना

Streetscape Geometry का इस्तेमाल करने के लिए, आपको अपने प्रोजेक्ट में Geospatial API को सेट अप करना होगा. Geospatial API को सेट अप करने के लिए, Geospatial API को चालू करने से जुड़े निर्देशों का पालन करें.

Streetscape ज्यामिति चालू करें

GeospatialMode को GeospatialMode.Enabled और StreetscapeGeometryMode को StreetscapeGeometryMode.Enabled पर सेट करने पर Geospatial API को Streetscape जियोमेट्री डेटा मिल जाता है.

ARCore सेशन में Streetscape ज्यामिति पाएं

GameObject में कोई ARStreetscapeGeometryManager कॉम्पोनेंट जोड़ें. टास्क कब शुरू होगा Streetscape जियोमेट्री को जोड़ा, अपडेट किया या हटाया जाता है और ARStreetscapeGeometryManager.StreetscapeGeometriesChanged इवेंट ट्रिगर होता है.

public Material streetscapeGeometryMaterial;

List<ARStreetscapeGeometry> _addedStreetscapeGeometries = new List<ARStreetscapeGeometry>();
List<ARStreetscapeGeometry> _updatedStreetscapeGeometries = new List<ARStreetscapeGeometry>();
List<ARStreetscapeGeometry> _removedStreetscapeGeometries = new List<ARStreetscapeGeometry>();

public void OnEnable()
{
    StreetscapeGeometryManager.StreetscapeGeometriesChanged +=
        GetStreetscapeGeometry;
}

public void Update() {
  foreach (ARStreetscapeGeometry streetscapegeometry in _addedStreetscapeGeometries)
  {
    GameObject renderObject = new GameObject(
       "StreetscapeGeometryMesh", typeof(MeshFilter), typeof(MeshRenderer));

    if (renderObject)
    {
        renderObject.transform.position = streetscapegeometry.pose.position;
        renderObject.transform.rotation = streetscapegeometry.pose.rotation;
        renderObject.GetComponent<MeshFilter>().mesh = streetscapegeometry.mesh;
        renderObject.GetComponent<MeshRenderer>().material = streetscapeGeometryMaterial;
    }
  }
}

public void OnDisable()
{
    StreetscapeGeometryManager.StreetscapeGeometriesChanged -=
        GetStreetscapeGeometry;
}

private void GetStreetscapeGeometry(ARStreetscapeGeometriesChangedEventArgs eventArgs)
{
    _addedStreetscapeGeometries = eventArgs.Added;
    _updatedStreetscapeGeometries = eventArgs.Updated;
    _removedStreetscapeGeometries = eventArgs.Removed;
}

ARStreetscapeGeometry के बारे में जानें

ARStreetscapeGeometry में किसी बिल्डिंग की जानकारी शामिल है:

बिल्डिंग एलओडी 1

BuildingLOD1 में दीवार के ऊपरी हिस्से से बाहर की ओर बढ़ाए गए फ़ुटप्रिंट शामिल हैं. इमारत की ऊंचाई गलत हो सकती है.

बिल्डिंग एलओडी 2

BuildingLOD2 में हाई फ़िडेलिटी ज्यामिति होगी. मेश की दीवारें और छतें, इमारत के आकार से काफ़ी हद तक मेल खाएगी. चिमनी या छत के वेंटिलेशन जैसी छोटी सुविधाएं, अब भी मेश के बाहर से निकल सकती हैं.

Mesh के बारे में जानें

Mesh एक पॉलीगॉन मेश है, जो Streetscape ज्यामिति का सरफ़ेस रीकंस्ट्रक्शन दिखाता है. Mesh और MeshRenderer देखें. ध्यान दें कि स्टैंडर्ड को डिफ़ॉल्ट रूप से कैलकुलेट नहीं किया जाता है; उनका हिसाब लगाने के लिए, Mesh.RecalculateNormals() पर जाएं.

ARStreetscapeGeometry में एआर (ऑगमेंटेड रिएलिटी) कॉन्टेंट अटैच करें

ARStreetscapeGeometry.mesh में शीर्षों के पास किसी पोज़ पर ऐंकर बनाने के लिए, ARAnchorManager.AddAnchor() का इस्तेमाल करें. यह ऐंकर अपनी ट्रैकिंग स्थिति, पैरंट ARStreetscapeGeometry से इनहेरिट करेगा.

ARStreetscapeGeometry के लिए हिट-टेस्ट करें

ARRaycastManagerExtensions.RaycastStreetscapeGeometry का इस्तेमाल, Streetscape की ज्यामिति के साथ हिट-टेस्ट करने के लिए किया जा सकता है. अगर कोई इंटरसेक्शन मिलता है, तो XRRaycastHit में हिट लोकेशन के बारे में पोज़ की जानकारी के साथ-साथ हिट ARStreetscapeGeometry का रेफ़रंस भी होता है. इस Streetscape ज्यामिति को ARAnchorManager.AddAnchor() को पास किया जा सकता है, ताकि इसके साथ ऐंकर बनाया जा सके.

Vector2 screenTapPosition = Input.GetTouch(0).position;
List<XRRaycastHit> hitResults = new List<XRRaycastHit>();
if (RaycastManager.RaycastStreetscapeGeometry(screenTapPosition, ref hitResults)){
  ARStreetscapeGeometry streetscapegeometry =
      StreetscapeGeometryManager.GetStreetscapeGeometry(hitResults[0].trackableId);
  if (streetscapegeometry != null)
  {
      ARAnchor anchor = StreetscapeGeometryManager.AttachAnchor(streetscapegeometry, hitResults[0].pose);
  }
}

जियोस्पेशल डेप्थ की सुविधा चालू करें

जियोस्पेशियल डेप्थ में स्ट्रीटस्केप ज्यामिति शामिल है इसमें स्थानीय सेंसर इनपुट इस्तेमाल किया जाता है, ताकि डेप्थ डेटा को बेहतर बनाया जा सके. जियोस्पेशियल डेप्थ की सुविधा चालू होने पर, आउटपुट डेप्थ और रॉ डेप्थ इमेज में बदलाव किया गया है, ताकि स्थानीय तौर पर देखी गई डेप्थ के साथ-साथ रास्टराइज़्ड स्ट्रीटस्केप ज्यामिति भी शामिल की जा सके. इससे डेप्थ का इस्तेमाल करके, पोज़ को ज़्यादा सटीक बनाने में मदद मिल सकती है.