XR_ANDROID_light_estimation
Name String
XR_ANDROID_light_estimation
Erweiterungstyp
Instanzerweiterung
Registrierte Durchwahlnummer
701
Revision
1
Ratifikationsstatus
Nicht ratifiziert
Abhängigkeiten von Erweiterungen und Versionen
Datum der letzten Änderung
2025-03-13
IP-Status
Es sind keine Ansprüche wegen geistigen Eigentums bekannt.
Mitwirkende
Jared Finder, Google
Cairn Overturf, Google
Spencer Quin, Google
Levana Chen, Google
Nihav Jain, Google
Salar Khan, Google
Scott Chung, Google
Übersicht
Mit dieser Erweiterung kann die Anwendung Daten anfordern, die die Beleuchtung der realen Umgebung um das Headset herum darstellen. Die Anwendung kann diese Informationen verwenden, um virtuelle Objekte unter denselben Bedingungen zu beleuchten wie die reale Szene, in der sie platziert werden.
Berechtigungen
Android-Anwendungen müssen die Berechtigung „android.permission.SCENE_UNDERSTANDING_COARSE“ in ihrem Manifest aufführen, da diese Erweiterung Informationen zur Beleuchtung der Umgebung bereitstellt. Die Berechtigung „android.permission.SCENE_UNDERSTANDING_COARSE“ gilt als gefährliche Berechtigung. Die App muss die Berechtigung zur Laufzeit anfordern, um diese Funktionen zu verwenden:
(Schutzebene: gefährlich)
Systemfunktionen prüfen
Die Struktur XrSystemLightEstimationPropertiesANDROID wird so definiert:
typedef struct XrSystemLightEstimationPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsLightEstimation;
} XrSystemLightEstimationPropertiesANDROID;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind in OpenXR Core oder dieser Erweiterung nicht definiert.supportsLightEstimationist einXrBool32, der angibt, ob das aktuelle System die Schätzung von Licht unterstützt.
Eine Anwendung kann prüfen, ob das System die Schätzung der Lichtverhältnisse unterstützt, indem sie die XrSystemProperties beim Aufrufen von xrGetSystemProperties mit der Struktur XrSystemLightEstimationPropertiesANDROID erweitert .
Wenn und nur wenn eine Laufzeit XR_FALSE für supportsLightEstimation zurückgibt , muss die Laufzeit XR_ERROR_FEATURE_UNSUPPORTED von xrCreateLightEstimatorANDROID zurückgeben .
Gültige Nutzung (implizit)
- Die Erweiterung
XR_ANDROID_light_estimationmuss aktiviert werden, bevor XrSystemLightEstimationPropertiesANDROID verwendet wird. -
typemussXR_TYPE_SYSTEM_LIGHT_ESTIMATION_PROPERTIES_ANDROIDsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.
Handle für Schätzung der Lichtverhältnisse erstellen
XR_DEFINE_HANDLE(XrLightEstimatorANDROID)
Die Daten zur Lichtschätzung werden von der Laufzeit generiert und über das XrLightEstimatorANDROID-Handle für die Anwendung freigegeben.
Mit diesem Handle kann über andere Funktionen in dieser Erweiterung auf Informationen zur Lichtschätzung zugegriffen werden.
Die Funktion xrCreateLightEstimatorANDROID ist so definiert:
XrResult xrCreateLightEstimatorANDROID(
XrSession session,
XrLightEstimatorCreateInfoANDROID* createInfo,
XrLightEstimatorANDROID* outHandle);
Parameterbeschreibungen
sessionist die XrSession, mit der der Lichtschätzer erstellt wird.createInfoist ein Zeiger auf eine XrLightEstimatorCreateInfoANDROID-Struktur, die Parameter enthält, die zum Erstellen des Lichtschätzers verwendet werden sollen.outHandleist ein Zeiger auf ein Handle, in dem der erstellte XrLightEstimatorANDROID zurückgegeben wird.
Die Anwendung verwendet die Funktion xrCreateLightEstimatorANDROID, um einen Lichtschätzer zu erstellen.
- Die Laufzeit muss
XR_ERROR_FEATURE_UNSUPPORTEDzurückgeben, wenn das System die Schätzung der Lichtverhältnisse nicht unterstützt. - Die Laufzeit muss
XR_ERROR_PERMISSION_INSUFFICIENTzurückgeben, wenn der Anruf-App die erforderlichen Berechtigungen nicht erteilt wurden.
Wenn eine Anwendung der Laufzeit mitteilen möchte, dass sie den Zugriff auf Daten zur Lichtschätzung beendet hat, muss sie das Handle über xrDestroyLightEstimatorANDROID zerstören .
Gültige Nutzung (implizit)
- Die
XR_ANDROID_light_estimation-Erweiterung muss vor dem Aufrufen von xrCreateLightEstimatorANDROID aktiviert werden. -
sessionmuss ein gültiger XrSession-Handle sein -
createInfomuss ein Zeiger auf eine XrLightEstimatorCreateInfoANDROID-Struktur sein. -
outHandlemuss ein Zeiger auf ein XrLightEstimatorANDROID-Handle sein.
Rückgabecodes
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
Die Struktur XrLightEstimatorCreateInfoANDROID beschreibt die Informationen zum Erstellen eines XrLightEstimatorANDROID-Handles.
typedef struct XrLightEstimatorCreateInfoANDROID {
XrStructureType type;
const void* next;
} XrLightEstimatorCreateInfoANDROID;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind in OpenXR Core oder dieser Erweiterung nicht definiert.
Gültige Nutzung (implizit)
- Die
XR_ANDROID_light_estimation-Erweiterung muss aktiviert werden, bevor XrLightEstimatorCreateInfoANDROID verwendet wird. -
typemussXR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROIDsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein . Siehe auch: XrCubemapLightEstimatorCreateInfoANDROID , XrPointLightsEstimatorCreateInfoANDROIDX1
Die Funktion xrDestroyLightEstimatorANDROID ist so definiert:
XrResult xrDestroyLightEstimatorANDROID(
XrLightEstimatorANDROID estimator);
Parameterbeschreibungen
estimatorist ein XrLightEstimatorANDROID, der zuvor mit xrCreateLightEstimatorANDROID erstellt wurde .
Mit der Funktion xrDestroyLightEstimatorANDROID werden estimator und alle zugrunde liegenden Ressourcen freigegeben.
Gültige Nutzung (implizit)
- Die
XR_ANDROID_light_estimation-Erweiterung muss aktiviert werden, bevor xrDestroyLightEstimatorANDROID aufgerufen wird. -
estimatormuss ein gültiger XrLightEstimatorANDROID-Handle sein
Threadsicherheit
- Der Zugriff auf
estimatorund alle untergeordneten Handles muss extern synchronisiert werden.
Rückgabecodes
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
Auf Daten zur Lichtschätzung zugreifen
Die Funktion xrGetLightEstimateANDROID ist so definiert:
XrResult xrGetLightEstimateANDROID(
XrLightEstimatorANDROID estimator,
const XrLightEstimateGetInfoANDROID* input,
XrLightEstimateANDROID* output);
Parameterbeschreibungen
estimatorist ein Handle für einen XrLightEstimatorANDROID, der zuvor mit xrCreateLightEstimatorANDROID erstellt wurde .inputist ein Zeiger auf eine XrLightEstimateGetInfoANDROID-Struktur.outputist ein Zeiger auf eine XrLightEstimateANDROID-Struktur.
Gültige Nutzung (implizit)
- Die Erweiterung
XR_ANDROID_light_estimationmuss aktiviert sein, bevor xrGetLightEstimateANDROID aufgerufen wird. -
estimatormuss ein gültiger XrLightEstimatorANDROID-Handle sein -
inputmuss ein Zeiger auf eine gültige XrLightEstimateGetInfoANDROID-Struktur sein. -
outputmuss ein Zeiger auf eine XrLightEstimateANDROID-Struktur sein.
Rückgabecodes
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
Die Struktur XrLightEstimateGetInfoANDROID ist so definiert:
typedef struct XrLightEstimateGetInfoANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
} XrLightEstimateGetInfoANDROID;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette.spaceist der XrSpace, der den Referenzraum definiert, in dem die zurückgegebene Lichtrichtung und die sphärischen Harmonischen ausgedrückt werden.timeist derXrTime, der die Uhrzeit beschreibt, zu der die Anwendung die Schätzung der Lichtverhältnisse abfragen möchte.
Gültige Nutzung (implizit)
- Die Erweiterung
XR_ANDROID_light_estimationmuss aktiviert werden, bevor XrLightEstimateGetInfoANDROID verwendet wird. -
typemussXR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROIDsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. -
spacemuss ein gültiger XrSpace-Handle sein
Die Struktur XrLightEstimateANDROID enthält Daten zur Lichtschätzung:
typedef struct XrLightEstimateANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrTime lastUpdatedTime;
} XrLightEstimateANDROID;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Gültige Strukturen sind XrAmbientLightANDROID , XrSphericalHarmonicsANDROID und XrDirectionalLightANDROID .stateist der XrLightEstimateStateANDROID, der den Status der Lichtschätzung darstellt.lastUpdatedTimeist derXrTime, der angibt, wann die Schätzung zuletzt berechnet wurde.
Wenn für jede Light Estimate-Struktur state gleich XR_LIGHT_ESTIMATE_STATE_INVALID_ANDROID ist , sind alle anderen Felder in der Struktur beliebig. Das bedeutet, dass ihre Werte nicht definiert sind.
Um Informationen zur Lichtschätzung für Umgebungslicht, sphärische Harmonische und das primäre gerichtete Licht zu erhalten, können Anwendungen Instanzen der folgenden Strukturen, XrAmbientLightANDROID, XrSphericalHarmonicsANDROID und XrDirectionalLightANDROID, an XrLightEstimateANDROID :: next anhängen .
Gültige Nutzung (implizit)
- Die
XR_ANDROID_light_estimation-Erweiterung muss aktiviert werden, bevor XrLightEstimateANDROID verwendet wird. -
typemussXR_TYPE_LIGHT_ESTIMATE_ANDROIDsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein . Siehe auch: XrAmbientLightANDROID , XrCubemapLightingDataANDROID , XrDirectionalLightANDROID , XrPointLightsANDROIDX1 , XrSphericalHarmonicsANDROID -
statemuss ein gültiger XrLightEstimateStateANDROID-Wert sein
Die Struktur XrAmbientLightANDROID enthält Daten zur Schätzung des Umgebungslichts in der Szene.
typedef struct XrAmbientLightANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrVector3f intensity;
XrVector3f colorCorrection;
} XrAmbientLightANDROID;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Gültige Strukturen sind XrSphericalHarmonicsANDROID und XrDirectionalLightANDROID .stateist der XrLightEstimateStateANDROID, der den Status der Lichtschätzung darstellt.intensityist ein XrVector3f, der die Intensität des Umgebungslichts darstellt. Jede Komponente des Vektors entspricht dem roten, grünen bzw. blauen Kanal.colorCorrectionist ein XrVector3f mit Werten im Gammabereich. Wenn im Gamma-Farbraum gerendert wird, multiplizieren Sie sie komponentenweise mit der endgültigen berechneten Farbe nach dem Rendern. Wenn die Darstellung im linearen Raum erfolgt, müssen die Werte zuerst in den linearen Raum konvertiert werden, indem sie mit 2,2 potenziert werden.Anschließend werden sie nach der Darstellung komponentenweise mit der endgültigen berechneten Farbe multipliziert.The purpose of pname:colorCorrection is to make a scene appear natural and blend with the real world.
Gültige Nutzung (implizit)
- Die
XR_ANDROID_light_estimation-Erweiterung muss aktiviert werden, bevor XrAmbientLightANDROID verwendet werden kann. -
typemussXR_TYPE_AMBIENT_LIGHT_ANDROIDsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. -
statemuss ein gültiger XrLightEstimateStateANDROID-Wert sein
Die Struktur XrSphericalHarmonicsANDROID enthält sphärische Harmonische, die die Beleuchtung der Szene darstellen.
typedef struct XrSphericalHarmonicsANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrSphericalHarmonicsKindANDROID kind;
float coefficients[9][3];
} XrSphericalHarmonicsANDROID;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Gültige Strukturen sind XrAmbientLightANDROID und XrDirectionalLightANDROID .stateist der XrLightEstimateStateANDROID, der den Status der Lichtschätzung darstellt.kindist der von der Anwendung angeforderte XrSphericalHarmonicsKindANDROID.coefficientsist ein zweidimensionalesfloat-Array mit 9 Zeilen und 3 Spalten. Die drei Spalten entsprechen den Farbkanälen Rot, Grün und Blau. Jeder Channel hat 9 sphärische harmonische Koeffizienten.
Die coefficients werden in einer speziellen Funktion verwendet, die eine Richtung als Eingabe akzeptiert und die Lichtfarbe aus dieser Richtung ausgibt. Weitere Informationen
Gültige Nutzung (implizit)
- Die
XR_ANDROID_light_estimation-Erweiterung muss aktiviert werden, bevor XrSphericalHarmonicsANDROID verwendet wird. -
typemussXR_TYPE_SPHERICAL_HARMONICS_ANDROIDsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. -
statemuss ein gültiger XrLightEstimateStateANDROID-Wert sein -
kindmuss ein gültiger XrSphericalHarmonicsKindANDROID-Wert sein
Die Enumeration XrSphericalHarmonicsKindANDROID gibt der Laufzeit an, welche Art von sphärischen Harmonischen die Anwendung anfordert.
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;
Die Aufzählungswerte haben die folgende Bedeutung:
Enum-Beschreibung
XR_SPHERICAL_HARMONICS_KIND_TOTAL_ANDROID
Die sphärischen harmonischen Koeffizienten stellen die Strahlungsfunktion des Umgebungslichts dar, ohne den Beitrag des Hauptlichts.
XR_SPHERICAL_HARMONICS_KIND_AMBIENT_ANDROID
Die sphärischen harmonischen Koeffizienten stellen die Leuchtdichtefunktion des Umgebungslichts dar, einschließlich des Beitrags des Hauptlichts.
Die Struktur XrDirectionalLightANDROID enthält Daten zur Lichtschätzung.
typedef struct XrDirectionalLightANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrVector3f intensity;
XrVector3f direction;
} XrDirectionalLightANDROID;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Gültige Strukturen sind XrAmbientLightANDROID , XrSphericalHarmonicsANDROID und XrDirectionalLightANDROID .stateist der XrLightEstimateStateANDROID, der den Status der Lichtschätzung darstellt.intensityist ein XrVector3f, der die Intensität des gerichteten Lichts darstellt. Jede Komponente des Vektors entspricht dem roten, grünen und blauen Kanal.directionist ein XrVector3f, der die Lichtrichtung darstellt.
Gültige Nutzung (implizit)
- Die
XR_ANDROID_light_estimation-Erweiterung muss aktiviert werden, bevor XrDirectionalLightANDROID verwendet werden kann. -
typemussXR_TYPE_DIRECTIONAL_LIGHT_ANDROIDsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. -
statemuss ein gültiger XrLightEstimateStateANDROID-Wert sein
Die Aufzählung XrLightEstimateStateANDROID gibt den Status der von der Laufzeit zurückgegebenen Lichtschätzung an.
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;
Die Aufzählungswerte haben die folgende Bedeutung:
Enum-Beschreibung
XR_LIGHT_ESTIMATE_STATE_VALID_ANDROID
Die Lichtschätzung ist gültig
XR_LIGHT_ESTIMATE_STATE_INVALID_ANDROID
Die Schätzung der Lichtverhältnisse ist ungültig
Beispielcode für die Schätzung der Lichtverhältnisse
Der folgende Beispielcode zeigt, wie Sie alle möglichen Mengen für die Lichtschätzung aus der Laufzeit abrufen können.
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));
Neue Objekttypen
Neue Befehle
Neue Strukturen
- XrLightEstimateANDROID
- XrLightEstimateGetInfoANDROID
- XrLightEstimatorCreateInfoANDROID
XrLightEstimateANDROID erweitern :
XrSystemProperties erweitern :
Neue Enums
Neue Enum-Konstanten
XR_ANDROID_LIGHT_ESTIMATION_EXTENSION_NAMEXR_ANDROID_light_estimation_SPEC_VERSIONXrObjectType erweitern :
XR_OBJECT_TYPE_LIGHT_ESTIMATOR_ANDROID
Erweitern von 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
Probleme
Versionsverlauf
Revision 1, 16.09.2024 (Cairn Overturf)
- Erste Beschreibung der Erweiterung