XR_ANDROID_light_estimation
Stringa del nome
XR_ANDROID_light_estimation
Tipo di estensione
Estensione dell'istanza
Numero di interno registrato
701
Revisione
1
Stato di ratifica
Non ratificato
Dipendenze da estensioni e versioni
Data ultima modifica
2025-03-13
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. L'applicazione può utilizzare queste informazioni per illuminare gli oggetti virtuali nelle stesse condizioni della scena reale in cui sono posizionati.
Autorizzazioni
Le applicazioni Android devono disporre dell'autorizzazione android.permission.SCENE_UNDERSTANDING_COARSE elencata nel loro manifest, in quanto questa estensione espone informazioni sull'illuminazione dell'ambiente. L'autorizzazione android.permission.SCENE_UNDERSTANDING_COARSE è considerata pericolosa. L'applicazione deve richiedere l'autorizzazione in fase di runtime per utilizzare queste funzioni:
(livello di protezione: pericoloso)
Ispezionare la funzionalità del sistema
La struttura XrSystemLightEstimationPropertiesANDROID è definita come:
typedef struct XrSystemLightEstimationPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsLightEstimation;
} XrSystemLightEstimationPropertiesANDROID;
Descrizioni dei membri
typeè l'XrStructureType di questa struttura.nextèNULLo 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 e solo se un runtime restituisce XR_FALSE per supportsLightEstimation , il runtime deve restituire XR_ERROR_FEATURE_UNSUPPORTED da xrCreateLightEstimatorANDROID .
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_light_estimationdeve essere attivata prima di utilizzare XrSystemLightEstimationPropertiesANDROID -
typedeve essereXR_TYPE_SYSTEM_LIGHT_ESTIMATION_PROPERTIES_ANDROID -
nextdeve essereNULLo 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)
I dati di stima della luce vengono generati dal runtime e condivisi con l'applicazione utilizzando l'handle XrLightEstimatorANDROID.
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è la 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 l'oggetto XrLightEstimatorANDROID creato.
L'applicazione utilizza la funzione xrCreateLightEstimatorANDROID per creare uno strumento di stima della luce.
- Il runtime deve restituire
XR_ERROR_FEATURE_UNSUPPORTEDse il sistema non supporta la stima della luce. - Il runtime deve restituire
XR_ERROR_PERMISSION_INSUFFICIENTse le autorizzazioni richieste non sono state concesse all'app chiamante.
Se un'applicazione vuole indicare al runtime che ha terminato l'accesso ai dati di stima della luce, deve eliminare l'handle tramite xrDestroyLightEstimatorANDROID .
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_light_estimationdeve essere attivata prima di chiamare xrCreateLightEstimatorANDROID -
sessiondeve essere un handle XrSession valido -
createInfodeve essere un puntatore a una struttura XrLightEstimatorCreateInfoANDROID -
outHandledeve essere un puntatore a un handle XrLightEstimatorANDROID
Codici di ritorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FEATURE_UNSUPPORTEDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_PERMISSION_INSUFFICIENTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOST
La struttura XrLightEstimatorCreateInfoANDROID descrive le informazioni per creare un handle XrLightEstimatorANDROID.
typedef struct XrLightEstimatorCreateInfoANDROID {
XrStructureType type;
const void* next;
} XrLightEstimatorCreateInfoANDROID;
Descrizioni dei membri
typeè l'XrStructureType di questa struttura.nextèNULLo 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_estimationdeve essere attivata prima di utilizzare XrLightEstimatorCreateInfoANDROID -
typedeve essereXR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROID -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture . Vedi anche: XrCubemapLightEstimatorCreateInfoANDROID , XrPointLightsEstimatorCreateInfoANDROIDX1
La funzione xrDestroyLightEstimatorANDROID è definita come:
XrResult xrDestroyLightEstimatorANDROID(
XrLightEstimatorANDROID estimator);
Descrizioni dei parametri
estimatorè un XrLightEstimatorANDROID creato in precedenza da xrCreateLightEstimatorANDROID .
La funzione xrDestroyLightEstimatorANDROID rilascia estimator e tutte le risorse sottostanti.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_light_estimationdeve essere attivata prima di chiamare xrDestroyLightEstimatorANDROID -
estimatordeve essere un handle XrLightEstimatorANDROID valido
Thread Safety
- L'accesso a
estimatore a tutti gli handle secondari deve essere sincronizzato esternamente
Codici di ritorno
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_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è un handle di un XrLightEstimatorANDROID creato in precedenza con xrCreateLightEstimatorANDROID .inputè un puntatore a una struttura XrLightEstimateGetInfoANDROID.outputè un puntatore a una struttura XrLightEstimateANDROID.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_light_estimationdeve essere attivata prima di chiamare xrGetLightEstimateANDROID -
estimatordeve essere un handle XrLightEstimatorANDROID valido -
inputdeve essere un puntatore a una struttura XrLightEstimateGetInfoANDROID valida -
outputdeve essere un puntatore a una struttura XrLightEstimateANDROID
Codici di ritorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
La struttura XrLightEstimateGetInfoANDROID è definita come:
typedef struct XrLightEstimateGetInfoANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
} XrLightEstimateGetInfoANDROID;
Descrizioni dei membri
typeè l'XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture.spaceè l'XrSpace che definisce lo spazio di riferimento in cui sono espressi la direzione della luce e le armoniche sferiche restituite.timeè ilXrTimeche descrive l'ora in cui l'applicazione vuole eseguire una query per la stima della luce.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_light_estimationdeve essere attivata prima di utilizzare XrLightEstimateGetInfoANDROID -
typedeve essereXR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROID -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture -
spacedeve 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èNULLo un puntatore alla struttura successiva in una catena di strutture. Le strutture valide includono XrAmbientLightANDROID , XrSphericalHarmonicsANDROID e XrDirectionalLightANDROID .stateè XrLightEstimateStateANDROID che rappresenta lo stato della stima della luce.lastUpdatedTimeè laXrTimeche rappresenta la data dell'ultimo calcolo della stima.
Per ogni struct di stima della luce, se state è XR_LIGHT_ESTIMATE_STATE_INVALID_ANDROID, tutti gli altri campi dello struct sono arbitrari, il che significa che i loro valori non sono definiti.
Per ottenere informazioni sulla stima della luce per la luce ambientale, le armoniche sferiche e la luce direzionale primaria, le applicazioni possono concatenare istanze delle seguenti strutture, XrAmbientLightANDROID , XrSphericalHarmonicsANDROID e XrDirectionalLightANDROID rispettivamente a XrLightEstimateANDROID :: next .
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_light_estimationdeve essere attivata prima di utilizzare XrLightEstimateANDROID -
typedeve essereXR_TYPE_LIGHT_ESTIMATE_ANDROID -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture . Vedi anche: XrAmbientLightANDROID , XrCubemapLightingDataANDROID , XrDirectionalLightANDROID , XrPointLightsANDROIDX1 , XrSphericalHarmonicsANDROID -
statedeve essere un valore XrLightEstimateStateANDROID valido
La struttura XrAmbientLightANDROID contiene dati di stima della 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èNULLo un puntatore alla struttura successiva in una catena di strutture. Le strutture valide includono XrSphericalHarmonicsANDROID e XrDirectionalLightANDROID .stateè XrLightEstimateStateANDROID che rappresenta lo stato della stima della luce.intensityè un XrVector3f che rappresenta l'intensità della luce ambientale. Ogni componente del vettore corrisponde rispettivamente ai canali rosso, verde e blu.colorCorrectionè un XrVector3f con valori nello spazio gamma. Se il rendering viene eseguito nello spazio colore gamma, moltiplica i valori componente per componente rispetto al colore finale calcolato dopo il rendering. Se il rendering viene eseguito nello spazio lineare, converti prima i valori nello spazio lineare elevandoli alla potenza di 2,2, quindi moltiplica i componenti per il colore finale calcolato dopo il rendering.The purpose of pname:colorCorrection is to make a scene appear natural and blend with the real world.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_light_estimationdeve essere attivata prima di utilizzare XrAmbientLightANDROID -
typedeve essereXR_TYPE_AMBIENT_LIGHT_ANDROID -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture -
statedeve 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èNULLo un puntatore alla struttura successiva in una catena di strutture. Le strutture valide includono XrAmbientLightANDROID e XrDirectionalLightANDROID .stateè XrLightEstimateStateANDROID che rappresenta lo stato della stima della luce.kindè XrSphericalHarmonicsKindANDROID richiesto dall'applicazione.coefficientsè un arrayfloatbidimensionale con dimensioni 9 righe e 3 colonne. Le tre colonne corrispondenti ai canali di colore rosso, verde e blu rispettivamente. Ogni canale ha 9 coefficienti armonici sferici.
coefficients devono essere utilizzati in una funzione speciale che accetta una direzione come input e restituisce il colore della luce proveniente da quella direzione. Maggiori dettagli sono disponibili in questo documento .
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_light_estimationdeve essere attivata prima di utilizzare XrSphericalHarmonicsANDROID -
typedeve essereXR_TYPE_SPHERICAL_HARMONICS_ANDROID -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture -
statedeve essere un valore XrLightEstimateStateANDROID valido -
kinddeve essere un valore XrSphericalHarmonicsKindANDROID valido
L'enumerazione XrSphericalHarmonicsKindANDROID identifica per il runtime il tipo di armoniche sferiche richieste dall'applicazione.
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;
I valori di enumerazione hanno i seguenti significati:
Descrizione enum
XR_SPHERICAL_HARMONICS_KIND_TOTAL_ANDROID
I coefficienti armonici sferici rappresentano la funzione di radianza della luce ambientale, escluso il contributo della luce principale.
XR_SPHERICAL_HARMONICS_KIND_AMBIENT_ANDROID
I coefficienti armonici sferici rappresentano la funzione di radianza della luce ambientale, incluso il contributo della luce principale.
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èNULLo un puntatore alla struttura successiva in una catena di strutture. Le strutture valide includono XrAmbientLightANDROID , XrSphericalHarmonicsANDROID e XrDirectionalLightANDROID .stateè XrLightEstimateStateANDROID che rappresenta lo stato della stima della luce.intensityè un XrVector3f che rappresenta l'intensità della luce direzionale. Ogni componente del vettore corrisponde ai canali rosso, verde e blu.directionè un XrVector3f che rappresenta la direzione della luce.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_light_estimationdeve essere attivata prima di utilizzare XrDirectionalLightANDROID -
typedeve essereXR_TYPE_DIRECTIONAL_LIGHT_ANDROID -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture -
statedeve essere un valore XrLightEstimateStateANDROID valido
L'enumerazione XrLightEstimateStateANDROID indica lo stato della stima della luce restituita dal runtime.
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;
I valori di enumerazione hanno i seguenti significati:
Descrizione enum
XR_LIGHT_ESTIMATE_STATE_VALID_ANDROID
La stima della luce è valida
XR_LIGHT_ESTIMATE_STATE_INVALID_ANDROID
La stima della luce non è valida
Codice di esempio per la stima della luce
Il seguente codice di esempio mostra come ottenere tutte le possibili quantità di stima della luce dal runtime
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));
Nuovi tipi di oggetti
Nuovi comandi
Nuove strutture
- XrLightEstimateANDROID
- XrLightEstimateGetInfoANDROID
- XrLightEstimatorCreateInfoANDROID
Estensione di XrLightEstimateANDROID :
Estensione di XrSystemProperties :
Nuovi enum
Nuove costanti enum
XR_ANDROID_LIGHT_ESTIMATION_EXTENSION_NAMEXR_ANDROID_light_estimation_SPEC_VERSIONEstensione di XrObjectType :
XR_OBJECT_TYPE_LIGHT_ESTIMATOR_ANDROID
Estensione di XrStructureType :
XR_TYPE_AMBIENT_LIGHT_ANDROIDXR_TYPE_DIRECTIONAL_LIGHT_ANDROIDXR_TYPE_LIGHT_ESTIMATE_ANDROIDXR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROIDXR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROIDXR_TYPE_SPHERICAL_HARMONICS_ANDROIDXR_TYPE_SYSTEM_LIGHT_ESTIMATION_PROPERTIES_ANDROID
Problemi
Cronologia delle versioni
Revisione 1, 16/09/2024 (Cairn Overturf)
- Descrizione iniziale dell'estensione