Stringa del nome
XR_ANDROID_light_estimation
Tipo di estensione
Estensione dell'istanza
Numero di interno registrato
701
Revisione
1
Dipendenze da estensioni e versioni
Data ultima modifica
2025-01-17
Stato IP
Nessuna rivendicazione di proprietà intellettuale nota.
Collaboratori
Jared Finder, Google
Cairn Overturf, Google
Spencer Quin, Google
Levana Chen, Google
Nihav Jain, Google
Salar Khan, Google
Scott Chung, Google
Panoramica
Questa estensione consente all'applicazione di richiedere dati che rappresentano l'illuminazione dell'ambiente reale intorno al visore. Queste informazioni possono essere utilizzate per il rendering degli oggetti virtuali in modo che siano illuminati nelle stesse condizioni della scena in cui sono posizionati.
Ispezionare la funzionalità del sistema
Un'applicazione può verificare se il sistema supporta la stima della luce concatenando una struttura XrSystemLightEstimationPropertiesANDROID alla struttura XrSystemProperties quando chiama xrGetSystemProperties.
typedef struct XrSystemLightEstimationPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsLightEstimation;
} XrSystemLightEstimationPropertiesANDROID;
Descrizioni dei membri
type
è l'XrStructureType di questa struttura.next
èNULL
o un puntatore alla struttura successiva in una catena di strutture. Nessuna struttura di questo tipo è definita in OpenXR di base o in questa estensione.supportsLightEstimation
è unXrBool32
, che indica se il sistema attuale supporta la stima della luce.
Un'applicazione può verificare se il sistema è in grado di supportare la stima della luce estendendo XrSystemProperties con la struttura XrSystemLightEstimationPropertiesANDROID quando chiama xrGetSystemProperties.
Se il sistema non è in grado di supportare la stima della luce, restituirà
XR_FALSE
per supportsLightEstimation
e XR_ERROR_FEATURE_UNSUPPORTED
da xrCreateLightEstimatorANDROID.
Utilizzo valido (implicito)
- L'estensione XR_ANDROID_light_estimation deve essere abilitata prima di utilizzare XrSystemLightEstimationPropertiesANDROID
type
deve essereXR_TYPE_SYSTEM_LIGHT_ESTIMATION_PROPERTIES_ANDROID
next
deve essereNULL
o un puntatore valido alla struttura successiva in una catena di strutture
Crea un handle per lo strumento di stima della luce
XR_DEFINE_HANDLE(XrLightEstimatorANDROID)
L'handle XrLightEstimatorANDROID rappresenta uno strumento di stima della luce. Questo handle può essere utilizzato per accedere alle informazioni sulla stima della luce utilizzando altre funzioni di questa estensione.
La funzione xrCreateLightEstimatorANDROID è definita come:
XrResult xrCreateLightEstimatorANDROID(
XrSession session,
XrLightEstimatorCreateInfoANDROID* createInfo,
XrLightEstimatorANDROID* outHandle);
Descrizioni dei parametri
session
è l'XrSession che crea lo strumento di stima della luce.createInfo
è un puntatore a una struttura XrLightEstimatorCreateInfoANDROID contenente i parametri da utilizzare per creare lo strumento di stima della luce.outHandle
è un puntatore a un handle in cui viene restituito XrLightEstimatorANDROID creato.
L'applicazione può utilizzare la funzione xrCreateLightEstimatorANDROID per creare uno strumento di stima della luce.
- xrCreateLightEstimatorANDROID restituirà
XR_ERROR_FEATURE_UNSUPPORTED
se il sistema non supporta la stima della luce. - xrCreateLightEstimatorANDROID restituirà
XR_ERROR_PERMISSION_INSUFFICIENT
se le autorizzazioni richieste non sono state concesse all'applicazione chiamante.
L'handle dell'estimator di luce restituito può essere utilizzato successivamente nelle chiamate API. Se un'applicazione vuole indicare al runtime che ha terminato l'accesso ai dati di stima della luce, deve eliminare l'handle utilizzando xrDestroyLightEstimatorANDROID.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_light_estimation
deve essere attivata prima di chiamare xrCreateLightEstimatorANDROID session
deve essere un handle XrSession validocreateInfo
deve essere un puntatore a una struttura XrLightEstimatorCreateInfoANDROIDoutHandle
deve essere un puntatore a un handle XrLightEstimatorANDROID
Codici di ritorno
XR_SUCCESS
XR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_RUNTIME_FAILURE
XR_ERROR_INSTANCE_LOST
XR_ERROR_SESSION_LOST
XR_ERROR_OUT_OF_MEMORY
XR_ERROR_HANDLE_INVALID
XR_ERROR_LIMIT_REACHED
La struttura XrLightEstimatorCreateInfoANDROID descrive le informazioni per creare un handle XrLightEstimatorANDROID.
typedef struct XrLightEstimatorCreateInfoANDROID {
XrStructureType type;
void* next;
} XrLightEstimatorCreateInfoANDROID;
Descrizioni dei membri
type
è l'XrStructureType di questa struttura.next
èNULL
o un puntatore alla struttura successiva in una catena di strutture. Nessuna struttura di questo tipo è definita in OpenXR di base o in questa estensione.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_light_estimation
deve essere attivata prima di utilizzare XrLightEstimatorCreateInfoANDROID type
deve essereXR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROID
next
deve essereNULL
o un puntatore valido alla struttura successiva in una catena di strutture
La funzione xrDestroyLightEstimatorANDROID rilascia estimator
e tutte le risorse sottostanti.
XrResult xrDestroyLightEstimatorANDROID(
XrLightEstimatorANDROID estimator);
Descrizioni dei parametri
estimator
è un XrLightEstimatorANDROID creato in precedenza da xrCreateLightEstimatorANDROID.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_light_estimation
deve essere attivata prima di chiamare xrDestroyLightEstimatorANDROID estimator
deve essere un handle XrLightEstimatorANDROID valido
Thread Safety
- L'accesso a
estimator
e a tutti gli handle secondari deve essere sincronizzato esternamente
Codici di ritorno
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_HANDLE_INVALID
Accedere ai dati di stima della luce
La funzione xrGetLightEstimateANDROID è definita come:
XrResult xrGetLightEstimateANDROID(
XrLightEstimatorANDROID estimator,
const XrLightEstimateGetInfoANDROID* input,
XrLightEstimateANDROID* output);
Descrizioni dei parametri
estimator
: handle di un XrLightEstimatorANDROID creato in precedenza conxrCreateLightEstimatorANDROID
.input
: puntatore a una struttura XrLightEstimateGetInfoANDROID.output
: puntatore a una struttura XrLightEstimateANDROID.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_light_estimation
deve essere attivata prima di chiamare xrGetLightEstimateANDROID estimator
deve essere un handle XrLightEstimatorANDROID validoinput
deve essere un puntatore a una struttura XrLightEstimateGetInfoANDROID validaoutput
must be a pointer to an XrLightEstimateANDROID structure
Codici di ritorno
XR_SUCCESS
XR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_VALIDATION_FAILURE
XR_ERROR_RUNTIME_FAILURE
XR_ERROR_HANDLE_INVALID
XR_ERROR_INSTANCE_LOST
XR_ERROR_SESSION_LOST
XR_ERROR_OUT_OF_MEMORY
XR_ERROR_TIME_INVALID
Un XrLightEstimateGetInfoANDROID descrive le informazioni necessarie per ottenere i dati di stima della luce.
typedef struct XrLightEstimateGetInfoANDROID {
XrStructureType type;
void* next;
XrSpace space;
XrTime time;
} XrLightEstimateGetInfoANDROID;
Descrizioni dei membri
type
è l'XrStructureType di questa struttura.next
èNULL
o un puntatore alla struttura successiva in una catena di strutture.space
è XrSpace che definisce lo spazio di riferimento in cui vengono espressi la direzione della luce restituita e la rotazione degli armonici sferici e della cubemap.time
è ilXrTime
che descrive l'ora in cui l'applicazione vuole eseguire una query sulla stima della luce.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_light_estimation
deve essere attivata prima di utilizzare XrLightEstimateGetInfoANDROID type
deve essereXR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROID
next
deve essereNULL
o un puntatore valido alla struttura successiva in una catena di strutturespace
deve essere un handle XrSpace valido
La struttura XrLightEstimateANDROID contiene i dati di stima della luce.
typedef struct XrLightEstimateANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrTime lastUpdatedTime;
} XrLightEstimateANDROID;
Descrizioni dei membri
type
è l'XrStructureType di questa struttura.next
èNULL
o un puntatore alla struttura successiva in una catena di strutture. Le strutture valide sono XrAmbientLightANDROID, XrSphericalHarmonicsANDROID, XrEnvironmentLightingCubemapANDROID e XrDirectionalLightANDROID.state
è XrLightEstimateStateANDROID che rappresenta lo stato della stima della luce.lastUpdatedTime
è ilXrTime
che rappresenta l'ultima volta in cui è stato calcolato il valore stimato.
Per ottenere informazioni sulla stima della luce per la cubemap dell'illuminazione ambientale, la luce ambientale, le armoniche sferiche e la luce direzionale principale, le applicazioni possono concatenare istanze delle seguenti strutture, XrEnvironmentLightingCubemapANDROID, XrAmbientLightANDROID, XrSphericalHarmonicsANDROID e XrDirectionalLightANDROID rispettivamente su XrLightEstimateANDROID::next.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_light_estimation
deve essere attivata prima di utilizzare XrLightEstimateANDROID type
deve essereXR_TYPE_LIGHT_ESTIMATE_ANDROID
next
deve essereNULL
o un puntatore valido alla struttura successiva in una catena di strutture. Vedi anche: XrAmbientLightANDROID, XrDirectionalLightANDROID, XrEnvironmentLightingCubemapANDROID, XrSphericalHarmonicsANDROIDstate
deve essere un valore XrLightEstimateStateANDROID valido
La struttura XrEnvironmentLightingCubemapANDROID contiene dati di stima della luce in formato cubemap relativi all'illuminazione dell'ambiente della scena.
typedef struct XrEnvironmentLightingCubemapANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
const float* cubemapRightImage;
const float* cubemapLeftImage;
const float* cubemapTopImage;
const float* cubemapBottomImage;
const float* cubemapFrontImage;
const float* cubemapBackImage;
uint32_t resolution;
XrQuaternionf rotation;
XrTime centerExposureTime;
} XrEnvironmentLightingCubemapANDROID;
Descrizioni dei membri
type
è l'XrStructureType di questa struttura.next
èNULL
o un puntatore alla struttura successiva in una catena di strutture. Le strutture valide sono XrSphericalHarmonicsANDROID, XrAmbientLightANDROID e XrDirectionalLightANDROID.state
è XrLightEstimateStateANDROID che rappresenta lo stato della stima della luce.cubemapRightImage
è unfloat*
che rappresenta il buffer R32G32B32_SFLOAT del lato destro della cubemap. Tieni presente che si tratta di HDR, quindi i valori float possono essere maggiori di 1.0.cubemapLeftImage
è unfloat*
che rappresenta il buffer R32G32B32_SFLOAT del lato sinistro della cubemap. Tieni presente che si tratta di HDR, quindi i valori float possono essere maggiori di 1.0.cubemapTopImage
è unfloat*
che rappresenta il buffer R32G32B32_SFLOAT del lato superiore della cubemap. Tieni presente che si tratta di HDR, quindi i valori float possono essere maggiori di 1.0.cubemapBottomImage
è unfloat*
che rappresenta il buffer R32G32B32_SFLOAT del lato inferiore della cubemap. Tieni presente che si tratta di HDR, quindi i valori float possono essere maggiori di 1.0.cubemapFrontImage
è unfloat*
che rappresenta il buffer R32G32B32_SFLOAT del lato anteriore della cubemap. Tieni presente che si tratta di HDR, quindi i valori float possono essere maggiori di 1.0.resolution
è unuint32_t
che rappresenta la larghezza e l'altezza dell'immagine di ogni lato della cubemap.rotation
è un XrQuaternionf che rappresenta la rotazione della cubemap.centerExposureTime
è unXrTime
che rappresenta il momento in cui è stata acquisita la cubemap. Utile per l'interpolazione tra cubemap.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_light_estimation
deve essere abilitata prima di utilizzare XrEnvironmentLightingCubemapANDROID type
deve essereXR_TYPE_ENVIRONMENT_LIGHTING_CUBEMAP_ANDROID
next
deve essereNULL
o un puntatore valido alla struttura successiva in una catena di strutturestate
deve essere un valore XrLightEstimateStateANDROID validocubemapRightImage
deve essere un puntatore a un valore float validocubemapLeftImage
deve essere un puntatore a un valore float validocubemapTopImage
deve essere un puntatore a un valore float validocubemapBottomImage
deve essere un puntatore a un valore float validocubemapFrontImage
deve essere un puntatore a un valore float validocubemapBackImage
deve essere un puntatore a un valore float valido
La struttura XrAmbientLightANDROID contiene dati di stima della luce relativi alla luce ambientale nella scena.
typedef struct XrAmbientLightANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrVector3f intensity;
XrVector3f colorCorrection;
} XrAmbientLightANDROID;
Descrizioni dei membri
type
è l'XrStructureType di questa struttura.next
èNULL
o un puntatore alla struttura successiva in una catena di strutture. Le strutture valide sono XrSphericalHarmonicsANDROID, XrEnvironmentLightingCubemapANDROID, e XrDirectionalLightANDROID.state
è XrLightEstimateStateANDROID che rappresenta lo stato della stima della luce.intensity
è unXrVector3
che rappresenta l'intensità della luce ambientale. Ogni componente del vettore corrisponde ai canali rosso, verde e blu.colorCorrection
è unXrVector3
con valori nello spazio gamma. Moltiplica componente per componente il colore del rendering corretto in base alla gamma con questi valori.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_light_estimation
deve essere attivata prima di utilizzare XrAmbientLightANDROID type
deve essereXR_TYPE_AMBIENT_LIGHT_ANDROID
next
deve essereNULL
o un puntatore valido alla struttura successiva in una catena di strutturestate
deve essere un valore XrLightEstimateStateANDROID valido
La struttura XrSphericalHarmonicsANDROID contiene armoniche sferiche che rappresentano l'illuminazione della scena.
typedef struct XrSphericalHarmonicsANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrSphericalHarmonicsKindANDROID kind;
float coefficients[9][3];
} XrSphericalHarmonicsANDROID;
Descrizioni dei membri
type
è l'XrStructureType di questa struttura.next
èNULL
o un puntatore alla struttura successiva in una catena di strutture. Le strutture valide sono XrAmbientLightANDROID, XrEnvironmentLightingCubemapANDROID, e XrDirectionalLightANDROID.state
è XrLightEstimateStateANDROID che rappresenta lo stato della stima della luce.kind
è XrSphericalHarmonicsKindANDROID richiesto dall'applicazione.coefficients
è un arrayfloat
bidimensionale con dimensioni 9 righe e 3 colonne. Le tre colonne corrispondenti ai canali colore rosso, verde e blu rispettivamente. Ogni canale ha 9 coefficienti armonici sferici.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_light_estimation
deve essere attivata prima di utilizzare XrSphericalHarmonicsANDROID type
deve essereXR_TYPE_SPHERICAL_HARMONICS_ANDROID
next
deve essereNULL
o un puntatore valido alla struttura successiva in una catena di strutturestate
deve essere un valore XrLightEstimateStateANDROID validokind
deve essere un valore XrSphericalHarmonicsKindANDROID valido
La struttura XrDirectionalLightANDROID contiene i dati di stima della luce.
typedef struct XrDirectionalLightANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrVector3f intensity;
XrVector3f direction;
} XrDirectionalLightANDROID;
Descrizioni dei membri
type
è l'XrStructureType di questa struttura.next
èNULL
o un puntatore alla struttura successiva in una catena di strutture. Le strutture valide sono XrAmbientLightANDROID, XrSphericalHarmonicsANDROID e XrDirectionalLightANDROID.state
è XrLightEstimateStateANDROID che rappresenta lo stato della stima della luce.intensity
è unXrVector3
che rappresenta l'intensità della luce direzionale. Ogni componente del vettore corrisponde ai canali rosso, verde e blu.direction
è unXrVector3
che rappresenta la direzione della luce.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_light_estimation
deve essere attivata prima di utilizzare XrDirectionalLightANDROID type
deve essereXR_TYPE_DIRECTIONAL_LIGHT_ANDROID
next
deve essereNULL
o un puntatore valido alla struttura successiva in una catena di strutturestate
deve essere un valore XrLightEstimateStateANDROID valido
L'enumerazione XrSphericalHarmonicsKindANDROID identifica per il runtime il tipo di armoniche sferiche richiesto dall'applicazione.
typedef enum XrSphericalHarmonicsKindANDROID {
XR_SPHERICAL_HARMONICS_KIND_TOTAL_ANDROID = 0,
XR_SPHERICAL_HARMONICS_KIND_AMBIENT_ANDROID = 1
} XrSphericalHarmonicsKindANDROID;
Gli enum hanno i seguenti significati:
Enum |
Descrizione |
|
I coefficienti armonici sferici rappresentano la funzione di radianza della luce ambientale, inclusa la contribuzione della luce principale. |
|
I coefficienti armonici sferici rappresentano la funzione di radianza della luce ambientale, escluso il contributo della luce principale. |
L'enumerazione XrLightEstimateStateANDROID identifica per il runtime il tipo di armoniche sferiche richieste dall'applicazione.
typedef enum XrLightEstimateStateANDROID {
XR_LIGHT_ESTIMATE_STATE_VALID_ANDROID = 0,
XR_LIGHT_ESTIMATE_STATE_INVALID_ANDROID = 1
} XrLightEstimateStateANDROID;
Gli enum hanno i seguenti significati:
Enum |
Descrizione |
|
La stima della luce è valida |
|
La stima della luce non è valida |
Codice di esempio per la stima della luce
Il seguente codice di esempio mostra come ottenere tutte le quantità possibili di stima della luce dal runtime.
XrSession session; // Created at app startup
XrSpace appSpace; // 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 totalSh = {
.type = XR_TYPE_SPHERICAL_HARMONICS_ANDROID,
.kind = XR_SPHERICAL_HARMONICS_KIND_TOTAL_ANDROID,
.next = &directionalLight,
};
XrSphericalHarmonicsANDROID ambientSh = {
.type = XR_TYPE_SPHERICAL_HARMONICS_ANDROID,
.kind = XR_SPHERICAL_HARMONICS_KIND_AMBIENT_ANDROID,
.next = &totalSh,
};
XrAmbientLightANDROID ambientLight = {
.type = XR_TYPE_AMBIENT_LIGHT_ANDROID,
.next = &ambientSh,
};
XrEnvironmentLightingCubemapANDROID lightingCubemap {
.type = XR_TYPE_ENVIRONMENT_LIGHTING_CUBEMAP_ANDROID,
.next = &ambientLight,
}
XrLightEstimateANDROID estimate = {
.type = XR_TYPE_LIGHT_ESTIMATE_ANDROID,
.next = &lightingCubemap,
};
XrResult result = xrGetLightEstimateANDROID(estimator, &info, &estimate);
if (result == XR_SUCCESS &&
estimate.state == XR_LIGHT_ESTIMATE_STATE_VALID_ANDROID) {
// use directionalLight, totalSh, ambientSh, ambientLight,
// lightingCubemap, if each
// struct has a valid state field
}
// When you want to disable light estimation
CHK_XR(xrDestroyLightEstimatorANDROID(estimator));
Nuovi tipi di oggetti
XrLightEstimator
L'enumerazione XrObjectType è estesa con:
XR_OBJECT_TYPE_LIGHT_ESTIMATOR_ANDROID
L'enumerazione XrStructureType è estesa con:
XR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROID
XR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROID
XR_TYPE_LIGHT_ESTIMATE_ANDROID
XR_TYPE_DIRECTIONAL_LIGHT_ANDROID
XR_TYPE_SPHERICAL_HARMONICS_ANDROID
XR_TYPE_AMBIENT_LIGHT_ANDROID
XR_TYPE_ENVIRONMENT_LIGHTING_CUBEMAP_ANDROID
Nuovi enum
Nuove strutture
- XrLightEstimatorCreateInfoANDROID
- XrLightEstimateGetInfoANDROID
- XrLightEstimateANDROID
- XrDirectionalLightANDROID
- XrSphericalHarmonicsANDROID
- XrAmbientLightANDROID
- XrSystemLightEstimationPropertiesANDROID
- XrEnvironmentLightingCubemapANDROID
Nuove funzioni
Problemi
Cronologia delle versioni
- Revisione 2, 17/01/2025 (Salar Khan)
- È stato aggiunto il supporto per la cubemap dell'illuminazione ambientale
- Revisione 1, 16/09/2024 (Cairn Overturf)
- Descrizione iniziale dell'estensione
OpenXR™ e il logo OpenXR sono marchi di proprietà di The Khronos Group Inc. e sono registrati come marchi in Cina, nell'Unione Europea, in Giappone e nel Regno Unito.