कैमरा कॉन्फ़िगर किया जा रहा है

कैमरा कॉन्फ़िगरेशन से, ऐप्लिकेशन के कैमरे सेंसर की प्रॉपर्टी के बारे में पता चलता है. Unity में, इन कॉन्फ़िगरेशन को XRCameraConfiguration के ज़रिए ऐक्सेस किया जा सकता है.

Android प्लैटफ़ॉर्म पर, ARCore XRCameraConfigurationExtensions उपलब्ध कराता है, ताकि XRCameraConfiguration में ARCore से जुड़ी अन्य प्रॉपर्टी को दिखाया जा सके. अपने ऐप्लिकेशन के लिए सही कैमरा कॉन्फ़िगरेशन सेट अप करने के लिए, इन प्रॉपर्टी का इस्तेमाल किया जा सकता है.

कैमरे के कॉन्फ़िगरेशन की ज़्यादा प्रॉपर्टी (Android)

Android प्लैटफ़ॉर्म पर, ARCore के साथ ये एक्सटेंडेड प्रॉपर्टी काम करती हैं.

काम करने वाले कैमरे कॉन्फ़िगरेशन ऐक्सेस करना

किसी डिवाइस के लिए, काम करने वाले कैमरा कॉन्फ़िगरेशन ऐक्सेस करने के लिए, ARCameraManager.GetConfigurations() का इस्तेमाल करें. इससे एक ऐसा NativeArray दिखता है जिसमें XRCameraConfiguration के कई उदाहरण होते हैं. हर इंस्टेंस, कैमरे का एक अलग कॉन्फ़िगरेशन होता है. इसमें डेप्थ का इस्तेमाल, टारगेट कैप्चर फ़्रेम रेट, रिज़ॉल्यूशन, और टेक्स्चर डाइमेंशन जैसी प्रॉपर्टी की जानकारी होती है.

अपने ऐप्लिकेशन के सीन में कैमरे को कॉन्फ़िगर करना

अपने ऐप्लिकेशन के सीन में कैमरे को कॉन्फ़िगर करने के लिए, यह तरीका अपनाएं.

  1. काम करने वाले XRCameraConfiguration की सूची के बारे में क्वेरी करने के लिए, ARCameraManager.GetConfigurations() के साथ ARCameraManager का इस्तेमाल करें.

  2. अगर Android के लिए ऐप्लिकेशन बनाया जा रहा है, तो ARCore से जुड़ी प्रॉपर्टी पाने के लिए, XRCameraConfigurationExtensions में दिए गए फ़ंक्शन के किसी भी कॉम्बिनेशन का इस्तेमाल करें.

  3. मौजूदा कॉन्फ़िगरेशन सेट करने के लिए, cameraManager.currentConfiguration का इस्तेमाल करें.

using UnityEngine.XR.ARFoundation;


// Adds XRCameraConfigurationExtensions extension methods to XRCameraConfiguration.
// This is for the Android platform only.
using Google.XR.ARCoreExtensions;

// Must be set in the editor.
public ARCameraManager cameraManager;

// Use ARCameraManager to obtain the camera configurations.
using (NativeArray<XRCameraConfiguration> configurations = cameraManager.GetConfigurations(Allocator.Temp))
{
    if (!configurations.IsCreated || (configurations.Length <= 0))
    {
        return;
    }

    // Iterate through the list of returned configs to locate the config you want.
    var desiredConfig = configurations[0];
    for (int i = 1; i < configurations.Length; ++i)
    {
        // Choose a config for a given camera that uses the maximum
        // target FPS and texture dimension. If supported, this config also enables
        // the depth sensor.
        if (configurations[i].GetFPSRange().y > desiredConfig.GetFPSRange().y &&
            configurations[i].GetTextureDimensions().x > desiredConfig.GetTextureDimensions().x &&
            configurations[i].GetTextureDimensions().y > desiredConfig.GetTextureDimensions().y &&
            configurations[i].CameraConfigDepthSensorUsage() == CameraConfigDepthSensorUsage.RequireAndUse)
        {
            desiredConfig = configurations[i];
        }
    }

    // Set the configuration you want. If it succeeds, the session
    // automatically pauses and resumes to apply the new configuration.
    // If it fails, cameraManager.currentConfiguration throws an exception.
    if (desiredConfig != cameraManager.currentConfiguration)
    {
        cameraManager.currentConfiguration = desiredConfig;
    }
}

कैमरा कॉन्फ़िगरेशन फ़िल्टर

ARCoreExtensionsCameraConfigFilter का इस्तेमाल करके, किसी डिवाइस के लिए रनटाइम के दौरान उपलब्ध कैमरा कॉन्फ़िगरेशन को कम किया जा सकता है. इसके लिए, अपने ऐप्लिकेशन की ज़रूरतों के हिसाब से फ़िल्टर करें.

कैमरे से कैप्चर किए जाने वाले वीडियो के फ़्रेम रेट को 30 FPS तक सीमित करना

अगर आपके ऐप्लिकेशन को कैमरे के फ़्रेम रेट को तेज़ करने की ज़रूरत नहीं है, तो इसे 30 FPS तक सीमित किया जा सकता है. जिन डिवाइसों पर 60 FPS कैमरा फ़्रेम रेट काम करता है उन पर ARCore, डिफ़ॉल्ट रूप से उस फ़्रेम रेट के साथ काम करने वाले कैमरा कॉन्फ़िगरेशन को प्राथमिकता देगा. 60 एफ़पीएस पर काम करने वाले सभी कैमरा कॉन्फ़िगरेशन को फ़िल्टर करने के लिए, पक्का करें कि Target Camera Framerate को Target 30FPS पर सेट किया गया हो.

ARCore को डेप्थ सेंसर का इस्तेमाल करने से रोकना

अगर आपके ऐप्लिकेशन को डेप्थ की ज़रूरत नहीं है, तो ARCore को डेप्थ सेंसर का इस्तेमाल करने से रोका जा सकता है. जिन डिवाइसों में डेप्थ सेंसर काम करता है उन पर, ARCore उन कैमरा कॉन्फ़िगरेशन को प्राथमिकता देता है जो डेप्थ सेंसर का इस्तेमाल करते हैं. डेप्थ सेंसर का इस्तेमाल करने वाले सभी कैमरा कॉन्फ़िगरेशन को फ़िल्टर करने के लिए, पक्का करें कि Depth Sensor Usage को Do Not Use पर सेट किया गया हो.

कैमरा कॉन्फ़िगरेशन फ़िल्टर का इस्तेमाल करना

अपने ऐप्लिकेशन को कैमरे के कॉन्फ़िगरेशन को फ़िल्टर करने की सुविधा देने के लिए, यह तरीका अपनाएं.

नया कैमरा कॉन्फ़िगरेशन फ़िल्टर बनाने के लिए, Assets > Create > XR > Camera Config Filter पर जाएं.

वे कॉन्फ़िगरेशन चुनें जिनका इस्तेमाल आपके फ़िल्टर को करना है.

फ़िल्टर बनाने के बाद, उसका इस्तेमाल ARCoreExtensions कॉम्पोनेंट में करें.

रनटाइम के दौरान कैमरे को कॉन्फ़िगर करना

डिवाइस टाइप जैसे फ़ैक्टर के आधार पर, रनटाइम के दौरान कैमरे को कॉन्फ़िगर करने के लिए, कॉलबैक इवेंट ARCoreExtensions.OnChooseXRCameraConfiguration का इस्तेमाल किया जा सकता है.

// Unity's Awake() method
public void Awake()
{
    …
    // If the return value is not a valid index (ex. the value if -1),
    // then no camera configuration will be set. If no previous selection exists, 
    // the ARCore session will use the previously selected camera configuration 
    // or a default configuration.
    arcoreExtensions.OnChooseXRCameraConfiguration = SelectCameraConfiguration;
    …
}

// A custom camera configuration selection function
int SelectCameraConfiguration(List<XRCameraConfiguration> supportedConfigurations)
{
    int index = 0;

    // Use custom logic here to choose the desired configuration from supportedConfigurations.

    return index;
}