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

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

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

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

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

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

स्ट्रीटस्केप जियोमेट्री चालू करें

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

किसी ARCore सत्र में स्ट्रीटस्केप ज्यामिति पाएं

GameObject में ARStreetscapeGeometryManager कॉम्पोनेंट जोड़ें. जब Streetscape Geometry को जोड़ा जाता है, अपडेट किया जाता है या हटाया जाता है, तो 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 में किसी इमारत की जानकारी है:

बिल्डिंग LOD 1

BuildingLOD1 में, इमारत के पैरों के निशान होते हैं, जिन्हें सपाट ऊपरी हिस्से से, ऊपर की ओर निकाला जाता है. इमारत की ऊंचाई गलत हो सकती है.

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

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

Mesh को समझें

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

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

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

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

ARRaycastManagerExtensions.RaycastStreetscapeGeometry का इस्तेमाल, Streetscape Geometry की जांच करने के लिए किया जा सकता है. अगर चौराहे, दोनों का पता चलता है, तो XRRaycastHit में हिट की जगह के बारे में पोज़ के बारे में जानकारी के साथ-साथ, हिट हुए ARStreetscapeGeometry का रेफ़रंस भी शामिल होता है. इस स्ट्रीटस्केप ज्यामिति को 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);
  }
}

जियोस्पेशियल गहराई चालू करें

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