XR_ANDROID_light_estimation

Name String

XR_ANDROID_light_estimation

एक्सटेंशन टाइप

इंस्टेंस एक्सटेंशन

रजिस्टर किया गया एक्सटेंशन नंबर

701

बदलाव

1

पुष्टि की स्थिति

पुष्टि नहीं की गई

एक्सटेंशन और वर्शन की डिपेंडेंसी

OpenXR 1.0

पिछली बार बदलाव किए जाने की तारीख

2025-03-13

आईपी स्टेटस

आईपी से जुड़े किसी भी दावे की जानकारी नहीं है.

योगदान देने वाले

जेरेड फ़ाइंडर, Google
केर्न ओवरटर्फ़, Google
स्पेंसर क्विन, Google
लेवाना चेन, Google
निहाव जैन, Google
सलार ख़ान, Google
स्कॉट चुंग, Google

खास जानकारी

इस एक्सटेंशन की मदद से ऐप्लिकेशन, हेडसेट के आस-पास के माहौल की रोशनी के डेटा का अनुरोध कर सकता है. ऐप्लिकेशन इस जानकारी का इस्तेमाल करके, वर्चुअल ऑब्जेक्ट को उसी तरह से रौशनी दे सकता है जिस तरह से उन्हें असल दुनिया के सीन में रखा गया है.

अनुमतियां

Android ऐप्लिकेशन के मेनिफ़ेस्ट में, android.permission.SCENE_UNDERSTANDING_COARSE अनुमति का होना ज़रूरी है. ऐसा इसलिए, क्योंकि यह एक्सटेंशन, एनवायरमेंट की लाइटिंग की जानकारी दिखाता है. android.permission.SCENE_UNDERSTANDING_COARSE अनुमति को खतरनाक अनुमति माना जाता है. इन फ़ंक्शन का इस्तेमाल करने के लिए, ऐप्लिकेशन को रनटाइम के दौरान अनुमति का अनुरोध ज़रूर करना चाहिए:

(सुरक्षा का लेवल: खतरनाक)

सिस्टम की क्षमता की जांच करना

XrSystemLightEstimationPropertiesANDROID स्ट्रक्चर को इस तरह परिभाषित किया गया है:

typedef struct XrSystemLightEstimationPropertiesANDROID {
    XrStructureType    type;
    void*              next;
    XrBool32           supportsLightEstimation;
} XrSystemLightEstimationPropertiesANDROID;

सदस्यों के बारे में जानकारी

  • type इस स्ट्रक्चर का XrStructureType है.
  • next, NULL होता है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर होता है. इस तरह के स्ट्रक्चर, OpenXR के मुख्य स्पेसिफ़िकेशन या इस एक्सटेंशन में तय नहीं किए गए हैं.
  • supportsLightEstimation एक XrBool32 है. इससे पता चलता है कि मौजूदा सिस्टम , रोशनी का अनुमान लगाने की सुविधा के साथ काम करता है या नहीं.

कोई ऐप्लिकेशन, xrGetSystemProperties को कॉल करते समय, XrSystemProperties को XrSystemLightEstimationPropertiesANDROID स्ट्रक्चर के साथ बढ़ाकर, यह देख सकता है कि सिस्टम में रोशनी का अनुमान लगाने की सुविधा काम करती है या नहीं .

अगर कोई रनटाइम, supportsLightEstimation के लिए XR_FALSE दिखाता है, तो रनटाइम को xrCreateLightEstimatorANDROID से XR_ERROR_FEATURE_UNSUPPORTED दिखाना ज़रूरी है .

मान्य इस्तेमाल (इंप्लिसिट)

लाइट का अनुमान लगाने वाला हैंडल बनाना

XR_DEFINE_HANDLE(XrLightEstimatorANDROID)

रोशनी का अनुमान लगाने से जुड़ा डेटा, रनटाइम के ज़रिए जनरेट किया जाता है. इसे XrLightEstimatorANDROID हैंडल का इस्तेमाल करके, ऐप्लिकेशन के साथ शेयर किया जाता है.

इस हैंडल का इस्तेमाल करके, इस एक्सटेंशन के अन्य फ़ंक्शन का इस्तेमाल करके, रोशनी का अनुमान लगाने से जुड़ी जानकारी को ऐक्सेस किया जा सकता है.

xrCreateLightEstimatorANDROID फ़ंक्शन को इस तरह से परिभाषित किया गया है:

XrResult xrCreateLightEstimatorANDROID(
    XrSession                                   session,
    XrLightEstimatorCreateInfoANDROID*          createInfo,
    XrLightEstimatorANDROID*                    outHandle);

पैरामीटर की जानकारी

  • session, XrSession है, जो लाइट एस्टिमेटर बनाता है.
  • createInfo, XrLightEstimatorCreateInfoANDROID स्ट्रक्चर का पॉइंटर है. इसमें लाइट एस्टिमेटर बनाने के लिए इस्तेमाल किए जाने वाले पैरामीटर शामिल होते हैं.
  • outHandle एक ऐसे हैंडल का पॉइंटर है जिसमें बनाया गया XrLightEstimatorANDROID ऑब्जेक्ट दिखता है.

ऐप्लिकेशन, लाइट एस्टिमेटर बनाने के लिए xrCreateLightEstimatorANDROID फ़ंक्शन का इस्तेमाल करता है.

  • अगर सिस्टम में रोशनी का अनुमान लगाने की सुविधा काम नहीं करती है, तो रनटाइम को XR_ERROR_FEATURE_UNSUPPORTED वैल्यू ज़रूर दिखानी चाहिए.
  • अगर कॉल करने वाले ऐप्लिकेशन को ज़रूरी अनुमतियां नहीं दी गई हैं, तो रनटाइम को XR_ERROR_PERMISSION_INSUFFICIENT वैल्यू ज़रूर दिखानी चाहिए.

अगर कोई ऐप्लिकेशन, रनटाइम को यह बताना चाहता है कि उसने रोशनी का अनुमान लगाने वाले डेटा का ऐक्सेस पूरा कर लिया है, तो उसे xrDestroyLightEstimatorANDROID के ज़रिए हैंडल को मिटाना होगा .

मान्य इस्तेमाल (इंप्लिसिट)

  • xrCreateLightEstimatorANDROID को कॉल करने से पहले, XR_ANDROID_light_estimation एक्सटेंशन को चालू करना ज़रूरी है
  • session, XrSession का एक मान्य हैंडल होना चाहिए
  • createInfo को XrLightEstimatorCreateInfoANDROID स्ट्रक्चर का पॉइंटर होना चाहिए
  • outHandle, XrLightEstimatorANDROID हैंडल का पॉइंटर होना चाहिए

रिटर्न कोड

सफल

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Failure

  • XR_ERROR_FEATURE_UNSUPPORTED
  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_PERMISSION_INSUFFICIENT
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST

XrLightEstimatorCreateInfoANDROID स्ट्रक्चर, XrLightEstimatorANDROID हैंडल बनाने के लिए ज़रूरी जानकारी के बारे में बताता है.

typedef struct XrLightEstimatorCreateInfoANDROID {
    XrStructureType    type;
    const void*        next;
} XrLightEstimatorCreateInfoANDROID;

सदस्यों के बारे में जानकारी

  • type इस स्ट्रक्चर का XrStructureType है.
  • next, NULL होता है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर होता है. इस तरह के स्ट्रक्चर, OpenXR के मुख्य स्पेसिफ़िकेशन या इस एक्सटेंशन में तय नहीं किए गए हैं.

मान्य इस्तेमाल (इंप्लिसिट)

xrDestroyLightEstimatorANDROID फ़ंक्शन को इस तरह से तय किया गया है:

XrResult xrDestroyLightEstimatorANDROID(
    XrLightEstimatorANDROID                     estimator);

पैरामीटर की जानकारी

xrDestroyLightEstimatorANDROID फ़ंक्शन, estimator और इससे जुड़े सभी संसाधनों को रिलीज़ करता है.

मान्य इस्तेमाल (इंप्लिसिट)

  • xrDestroyLightEstimatorANDROID को कॉल करने से पहले, XR_ANDROID_light_estimation एक्सटेंशन को चालू करना ज़रूरी है
  • estimator, XrLightEstimatorANDROID का एक मान्य हैंडल होना चाहिए

थ्रेड सेफ़्टी

  • estimator और बच्चों के सभी हैंडल को बाहरी तौर पर सिंक किया जाना चाहिए

रिटर्न कोड

सफल

  • XR_SUCCESS

Failure

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID

रोशनी का अनुमान लगाने से जुड़ा डेटा ऐक्सेस करना

xrGetLightEstimateANDROID फ़ंक्शन को इस तरह से तय किया गया है:

XrResult xrGetLightEstimateANDROID(
    XrLightEstimatorANDROID                     estimator,
    const XrLightEstimateGetInfoANDROID*        input,
    XrLightEstimateANDROID*                     output);

पैरामीटर की जानकारी

मान्य इस्तेमाल (इंप्लिसिट)

रिटर्न कोड

सफल

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Failure

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_TIME_INVALID
  • XR_ERROR_VALIDATION_FAILURE

XrLightEstimateGetInfoANDROID स्ट्रक्चर को इस तरह से परिभाषित किया गया है:

typedef struct XrLightEstimateGetInfoANDROID {
    XrStructureType    type;
    const void*        next;
    XrSpace            space;
    XrTime             time;
} XrLightEstimateGetInfoANDROID;

सदस्यों के बारे में जानकारी

  • type इस स्ट्रक्चर का XrStructureType है.
  • next, NULL होता है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर होता है.
  • space, XrSpace है. यह उस रेफ़रंस स्पेस को तय करता है जिसमें रोशनी की दिशा और स्फ़ेरिकल हार्मोनिक्स को दिखाया जाता है.
  • time, XrTime है. इससे पता चलता है कि ऐप्लिकेशन को रोशनी का अनुमान लगाने के लिए किस समय क्वेरी करनी है.

मान्य इस्तेमाल (इंप्लिसिट)

XrLightEstimateANDROID स्ट्रक्चर में, रोशनी के अनुमान का डेटा शामिल होता है:

typedef struct XrLightEstimateANDROID {
    XrStructureType                type;
    void*                          next;
    XrLightEstimateStateANDROID    state;
    XrTime                         lastUpdatedTime;
} XrLightEstimateANDROID;

सदस्यों के बारे में जानकारी

  • type इस स्ट्रक्चर का XrStructureType है.
  • next, NULL होता है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर होता है. मान्य स्ट्रक्चर में XrAmbientLightANDROID , XrSphericalHarmonicsANDROID और XrDirectionalLightANDROID शामिल हैं .
  • state, XrLightEstimateStateANDROID है. यह रोशनी के अनुमान की स्थिति को दिखाता है.
  • lastUpdatedTime वह XrTime है जिससे पता चलता है कि अनुमान का हिसाब पिछली बार कब लगाया गया था.

अगर हर लाइट एस्टिमेट स्ट्रक्ट के लिए state फ़ील्ड की वैल्यू XR_LIGHT_ESTIMATE_STATE_INVALID_ANDROID है, तो स्ट्रक्ट के अन्य सभी फ़ील्ड की वैल्यू मनमुताबिक होती है. इसका मतलब है कि उनकी वैल्यू तय नहीं होती.

एम्बिएंट लाइट, स्फ़ेरिकल हार्मोनिक्स, और प्राइमरी डायरेक्शनल लाइट के लिए, लाइट का अनुमान लगाने से जुड़ी जानकारी पाने के लिए ऐप्लिकेशन, इन स्ट्रक्चर के इंस्टेंस को चेन कर सकते हैं: XrAmbientLightANDROID , XrSphericalHarmonicsANDROID, और XrDirectionalLightANDROID. ऐसा XrLightEstimateANDROID :: next के लिए किया जा सकता है.

मान्य इस्तेमाल (इंप्लिसिट)

XrAmbientLightANDROID स्ट्रक्चर में, सीन में मौजूद आस-पास की रोशनी का अनुमान लगाने से जुड़ा डेटा होता है.

typedef struct XrAmbientLightANDROID {
    XrStructureType                type;
    void*                          next;
    XrLightEstimateStateANDROID    state;
    XrVector3f                     intensity;
    XrVector3f                     colorCorrection;
} XrAmbientLightANDROID;

सदस्यों के बारे में जानकारी

  • type इस स्ट्रक्चर का XrStructureType है.
  • next, NULL होता है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर होता है. मान्य स्ट्रक्चर में XrSphericalHarmonicsANDROID और XrDirectionalLightANDROID शामिल हैं .
  • state, XrLightEstimateStateANDROID है. यह रोशनी के अनुमान की स्थिति को दिखाता है.
  • intensity एक XrVector3f है, जो कमरे में मौजूद रोशनी की इंटेंसिटी को दिखाता है. वेक्टर का हर कॉम्पोनेंट, लाल, हरे, और नीले चैनल से जुड़ा होता है.
  • colorCorrection, गामा स्पेस में वैल्यू वाला XrVector3f है. अगर गामा कलर स्पेस में रेंडर किया जा रहा है, तो रेंडरिंग के बाद कैलकुलेट किए गए फ़ाइनल कलर के साथ, उन्हें कॉम्पोनेंट के हिसाब से गुणा करें. अगर लीनियर स्पेस में रेंडर किया जा रहा है, तो सबसे पहले वैल्यू को 2.2 की पावर में बढ़ाकर लीनियर स्पेस में बदलें. इसके बाद, रेंडरिंग के बाद कैलकुलेट किए गए फ़ाइनल कलर से हर कॉम्पोनेंट को गुणा करें.

    The purpose of pname:colorCorrection is to make a scene appear natural and
    blend with the real world.
    

मान्य इस्तेमाल (इंप्लिसिट)

XrSphericalHarmonicsANDROID स्ट्रक्चर में, स्फ़ेरिकल हार्मोनिक शामिल होते हैं. ये सीन की लाइटिंग को दिखाते हैं.

typedef struct XrSphericalHarmonicsANDROID {
    XrStructureType                    type;
    void*                              next;
    XrLightEstimateStateANDROID        state;
    XrSphericalHarmonicsKindANDROID    kind;
    float                              coefficients[9][3];
} XrSphericalHarmonicsANDROID;

सदस्यों के बारे में जानकारी

  • type इस स्ट्रक्चर का XrStructureType है.
  • next, NULL होता है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर होता है. मान्य स्ट्रक्चर में XrAmbientLightANDROID और XrDirectionalLightANDROID शामिल हैं .
  • state, XrLightEstimateStateANDROID है. यह रोशनी के अनुमान की स्थिति को दिखाता है.
  • kind, ऐप्लिकेशन के अनुरोध किया गया XrSphericalHarmonicsKindANDROID है.
  • coefficients, 9 लाइनों और 3 कॉलम वाला दो डाइमेंशन वाला float अरे है. ये तीन कॉलम, लाल, हरे, और नीले रंग के चैनलों से जुड़े हैं. हर चैनल में नौ स्फ़ेरिकल हार्मोनिक कोएफ़िशिएंट होते हैं.

coefficients का इस्तेमाल एक खास फ़ंक्शन में किया जाता है. यह फ़ंक्शन, दिशा को इनपुट के तौर पर लेता है और उस दिशा से आने वाले हल्के रंग को आउटपुट के तौर पर दिखाता है. ज़्यादा जानकारी के लिए, यह पेपर पढ़ें .

मान्य इस्तेमाल (इंप्लिसिट)

XrSphericalHarmonicsKindANDROID इन्यूमरेशन से रनटाइम को पता चलता है कि ऐप्लिकेशन किस तरह के स्फ़ेरिकल हार्मोनिक्स का अनुरोध कर रहा है.

typedef enum XrSphericalHarmonicsKindANDROID {
    XR_SPHERICAL_HARMONICS_KIND_TOTAL_ANDROID = 0,
    XR_SPHERICAL_HARMONICS_KIND_AMBIENT_ANDROID = 1,
    XR_SPHERICAL_HARMONICS_KIND_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrSphericalHarmonicsKindANDROID;

गिनती की गई वैल्यू का मतलब यहां दिया गया है:

Enum की जानकारी

XR_SPHERICAL_HARMONICS_KIND_TOTAL_ANDROID

स्फ़ेरिकल हार्मोनिक कोएफ़िशिएंट, एनवायरमेंट लाइट रेडियंस फ़ंक्शन को दिखाते हैं. इसमें मुख्य लाइट का योगदान शामिल नहीं होता.

XR_SPHERICAL_HARMONICS_KIND_AMBIENT_ANDROID

स्फ़ेरिकल हार्मोनिक कोएफ़िशिएंट, एनवायरमेंट लाइट रेडियंस फ़ंक्शन को दिखाते हैं. इनमें मुख्य लाइट का योगदान भी शामिल होता है.

XrDirectionalLightANDROID स्ट्रक्चर में, रोशनी का अनुमान लगाने से जुड़ा डेटा होता है.

typedef struct XrDirectionalLightANDROID {
    XrStructureType                type;
    void*                          next;
    XrLightEstimateStateANDROID    state;
    XrVector3f                     intensity;
    XrVector3f                     direction;
} XrDirectionalLightANDROID;

सदस्यों के बारे में जानकारी

  • type इस स्ट्रक्चर का XrStructureType है.
  • next, NULL होता है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर होता है. मान्य स्ट्रक्चर में XrAmbientLightANDROID , XrSphericalHarmonicsANDROID और XrDirectionalLightANDROID शामिल हैं .
  • state, XrLightEstimateStateANDROID है. यह रोशनी के अनुमान की स्थिति को दिखाता है.
  • intensity एक XrVector3f है, जो दिशात्मक रोशनी की तीव्रता को दिखाता है. वेक्टर का हर कॉम्पोनेंट, लाल, हरे, और नीले चैनल से मेल खाता है.
  • direction, XrVector3f है. यह रोशनी की दिशा दिखाता है.

मान्य इस्तेमाल (इंप्लिसिट)

XrLightEstimateStateANDROID इन्यूमरेशन, रनटाइम से मिली रोशनी के अनुमान की स्थिति दिखाता है.

typedef enum XrLightEstimateStateANDROID {
    XR_LIGHT_ESTIMATE_STATE_VALID_ANDROID = 0,
    XR_LIGHT_ESTIMATE_STATE_INVALID_ANDROID = 1,
    XR_LIGHT_ESTIMATE_STATE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrLightEstimateStateANDROID;

गिनती की गई वैल्यू का मतलब यहां दिया गया है:

Enum की जानकारी

XR_LIGHT_ESTIMATE_STATE_VALID_ANDROID

रोशनी का अनुमान मान्य है

XR_LIGHT_ESTIMATE_STATE_INVALID_ANDROID

रोशनी का अनुमान अमान्य है

रोशनी का अनुमान लगाने के लिए कोड का उदाहरण

यहां दिए गए उदाहरण कोड में, रनटाइम से रोशनी का अनुमान लगाने से जुड़ी सभी संभावित वैल्यू पाने का तरीका बताया गया है

XrSession session;  // Created at app startup
XrSpace appSpace;   // Created previously.
PFN_xrCreateLightEstimatorANDROID xrCreateLightEstimatorANDROID; // Created previously.
PFN_xrDestroyLightEstimatorANDROID xrDestroyLightEstimatorANDROID; // Created previously.
PFN_xrGetLightEstimateANDROID xrGetLightEstimateANDROID; // Created previously.

XrLightEstimatorANDROID estimator;
XrLightEstimatorCreateInfoANDROID createInfo = {
    .type = XR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROID};
CHK_XR(xrCreateLightEstimatorANDROID(session, &createInfo, &estimator));

// Every frame
XrTime updateTime;  // Time used for the current frame's simulation update.

XrLightEstimateGetInfoANDROID info = {
    .type = XR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROID,
    .space = appSpace,
    .time = updateTime,
};

XrDirectionalLightANDROID directionalLight = {
    .type = XR_TYPE_DIRECTIONAL_LIGHT_ANDROID,
};

XrSphericalHarmonicsANDROID sphericalHarmonics = {
    .type = XR_TYPE_SPHERICAL_HARMONICS_ANDROID,
    .next = &directionalLight,
};

// Querying both TOTAL or AMBIENT spherical harmonics in one call will result in an error because chaining two structs with the same type is not allowed
bool useTotalSH;
if (useTotalSH) {
  sphericalHarmonics.kind = XR_SPHERICAL_HARMONICS_KIND_TOTAL_ANDROID;
} else {
  sphericalHarmonics.kind = XR_SPHERICAL_HARMONICS_KIND_AMBIENT_ANDROID;
}

XrAmbientLightANDROID ambientLight = {
    .type = XR_TYPE_AMBIENT_LIGHT_ANDROID,
    .next = &sphericalHarmonics,
};

XrLightEstimateANDROID estimate = {
    .type = XR_TYPE_LIGHT_ESTIMATE_ANDROID,
    .next = &ambientLight,
};

XrResult result = xrGetLightEstimateANDROID(estimator, &info, &estimate);
if (result == XR_SUCCESS &&
    estimate.state == XR_LIGHT_ESTIMATE_STATE_VALID_ANDROID) {
  // use directionalLight, totalSh, ambientSh, ambientLight if each
  // struct has a valid state field
}

// When you want to disable light estimation
CHK_XR(xrDestroyLightEstimatorANDROID(estimator));

नए ऑब्जेक्ट टाइप

नए निर्देश

नई संरचनाएं

नए एनम

नए Enum कॉन्स्टेंट

  • XR_ANDROID_LIGHT_ESTIMATION_EXTENSION_NAME
  • XR_ANDROID_light_estimation_SPEC_VERSION
  • XrObjectType को बढ़ाना :

    • XR_OBJECT_TYPE_LIGHT_ESTIMATOR_ANDROID
  • XrStructureType को बढ़ाना :

    • XR_TYPE_AMBIENT_LIGHT_ANDROID
    • XR_TYPE_DIRECTIONAL_LIGHT_ANDROID
    • XR_TYPE_LIGHT_ESTIMATE_ANDROID
    • XR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROID
    • XR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROID
    • XR_TYPE_SPHERICAL_HARMONICS_ANDROID
    • XR_TYPE_SYSTEM_LIGHT_ESTIMATION_PROPERTIES_ANDROID

समस्याएं

वर्शन इतिहास

  • पहला संशोधन, 16-09-2024 (कैर्न ओवरटर्फ़)

    • एक्सटेंशन की शुरुआती जानकारी