Namensstring
XR_ANDROID_light_estimation
Erweiterungstyp
Instanzerweiterung
Registrierte Durchwahlnummer
701
Revision
1
Erweiterungs- und Versionsabhängigkeiten
Datum der letzten Änderung
2024-09-18
IP-Status
Es sind keine Ansprüche aufgrund von Urheberrechten bekannt.
Mitwirkende
Jared Finder, Google
Cairn Overturf, Google
Spencer Quin, Google
Levana Chen, Google
Nihav Jain, Google
Übersicht
Mit dieser Erweiterung kann die Anwendung Daten anfordern, die die Beleuchtung der Umgebung um das Headset herum darstellen. Diese Informationen können beim Rendern virtueller Objekte verwendet werden, um sie unter denselben Bedingungen wie die Szene zu beleuchten, in der sie platziert sind.
Systemkapazität prüfen
Eine Anwendung kann prüfen, ob das System die Lichtschätzung unterstützt, indem sie beim Aufruf von xrGetSystemProperties eine XrSystemLightEstimationPropertiesANDROID-Struktur an die XrSystemProperties-Struktur anhängt.
typedef struct XrSystemLightEstimationPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsLightEstimation;
} XrSystemLightEstimationPropertiesANDROID;
Beschreibungen von Mitgliedern
type
ist der XrStructureType dieser Struktur.next
istNULL
oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind in OpenXR oder dieser Erweiterung nicht definiert.supportsLightEstimation
ist einXrBool32
, das angibt, ob das aktuelle System die Lichtschätzung unterstützt.
Eine Anwendung kann prüfen, ob das System die Lichtschätzung unterstützt, indem sie XrSystemProperties beim Aufruf von xrGetSystemProperties um die Struktur XrSystemLightEstimationPropertiesANDROID erweitert.
Wenn das System die Lichtschätzung nicht unterstützt, wird XR_FALSE
für supportsLightEstimation
und XR_ERROR_FEATURE_UNSUPPORTED
von xrCreateLightEstimatorANDROID zurückgegeben.
Gültige Verwendung (implizit)
- Die Erweiterung XR_ANDROID_light_estimation muss aktiviert sein, bevor XrSystemLightEstimationPropertiesANDROID verwendet werden kann.
type
mussXR_TYPE_SYSTEM_LIGHT_ESTIMATION_PROPERTIES_ANDROID
sein.next
mussNULL
oder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.
Light-Estimator-Handle erstellen
XR_DEFINE_HANDLE(XrLightEstimatorANDROID)
Der Handle XrLightEstimatorANDROID steht für einen Lichtempfänger. Über diesen Handle kann mit anderen 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
session
ist die XrSession, die den Licht-Estimator erstellt.createInfo
ist ein Verweis auf eine XrLightEstimatorCreateInfoANDROID-Struktur mit Parametern, die zum Erstellen des Lichtestellers verwendet werden.outHandle
ist ein Verweis auf einen Handle, über den der erstellte XrLightEstimatorANDROID zurückgegeben wird.
Die Anwendung kann die Funktion xrCreateLightEstimatorANDROID verwenden, um einen Lichtempfänger zu erstellen.
- Wenn das System die Lichtschätzung nicht unterstützt, gibt xrCreateLightEstimatorANDROID
XR_ERROR_FEATURE_UNSUPPORTED
zurück. - xrCreateLightEstimatorANDROID gibt
XR_ERROR_PERMISSION_INSUFFICIENT
zurück, wenn der aufrufenden Anwendung die erforderlichen Berechtigungen nicht gewährt wurden.
Der zurückgegebene Handle für den Lichtermittler kann in API-Aufrufen verwendet werden. Wenn eine Anwendung der Laufzeit mitteilen möchte, dass der Zugriff auf Daten zur Lichtschätzung beendet ist, muss sie den Handle mit xrDestroyLightEstimatorANDROID löschen.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_light_estimation
muss aktiviert sein, bevor xrCreateLightEstimatorANDROID aufgerufen wird. session
muss ein gültiger XrSession-Alias sein.createInfo
muss ein Zeiger auf eine XrLightEstimatorCreateInfoANDROID-Struktur sein.outHandle
muss ein Verweis auf einen XrLightEstimatorANDROID-Handle sein.
Rückgabecodes
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
Die Struktur XrLightEstimatorCreateInfoANDROID beschreibt die Informationen zum Erstellen eines XrLightEstimatorANDROID-Handles.
typedef struct XrLightEstimatorCreateInfoANDROID {
XrStructureType type;
void* next;
} XrLightEstimatorCreateInfoANDROID;
Beschreibungen von Mitgliedern
type
ist der XrStructureType dieser Struktur.next
istNULL
oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind in OpenXR oder dieser Erweiterung nicht definiert.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_light_estimation
muss aktiviert sein, bevor XrLightEstimatorCreateInfoANDROID verwendet werden kann. type
mussXR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROID
sein.next
mussNULL
oder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.
Die Funktion xrDestroyLightEstimatorANDROID gibt die estimator
und alle zugrunde liegenden Ressourcen frei.
XrResult xrDestroyLightEstimatorANDROID(
XrLightEstimatorANDROID estimator);
Parameterbeschreibungen
estimator
ist ein XrLightEstimatorANDROID, der zuvor mit xrCreateLightEstimatorANDROID erstellt wurde.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_light_estimation
muss aktiviert sein, bevor xrDestroyLightEstimatorANDROID aufgerufen wird. estimator
muss ein gültiger XrLightEstimatorANDROID-Handle sein
Threadsicherheit
- Der Zugriff auf
estimator
und alle untergeordneten Handles muss extern synchronisiert werden.
Rückgabecodes
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTED
XR_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
estimator
: Handle zu einem XrLightEstimatorANDROID, der zuvor mitxrCreateLightEstimatorANDROID
erstellt wurde.input
: Zeiger auf eine XrLightEstimateGetInfoANDROID-Struktur.output
: Verweis auf eine XrLightEstimateANDROID-Struktur.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_light_estimation
muss aktiviert sein, bevor xrGetLightEstimateANDROID aufgerufen wird. estimator
muss ein gültiger XrLightEstimatorANDROID-Handle seininput
muss ein Verweis auf eine gültige XrLightEstimateGetInfoANDROID-Struktur sein.output
muss ein Zeiger auf eine XrLightEstimateANDROID-Struktur sein
Rückgabecodes
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
In XrLightEstimateGetInfoANDROID werden die Informationen beschrieben, die zum Abrufen von Daten zur Lichtschätzung erforderlich sind.
typedef struct XrLightEstimateGetInfoANDROID {
XrStructureType type;
void* next;
XrSpace space;
XrTime time;
} XrLightEstimateGetInfoANDROID;
Beschreibungen von Mitgliedern
type
ist der XrStructureType dieser Struktur.next
istNULL
oder ein Zeiger auf die nächste Struktur in einer Strukturkette.space
ist der XrSpace, der den Referenzraum definiert, in dem die zurückgegebene Lichtrichtung und die sphärischen Harmonischen ausgedrückt werden.time
ist dieXrTime
, die die Zeit angibt, zu der die Anwendung die Lichtschätzung abfragen möchte.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_light_estimation
muss aktiviert sein, bevor XrLightEstimateGetInfoANDROID verwendet werden kann. type
mussXR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROID
sein.next
mussNULL
oder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.space
muss 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;
Beschreibungen von Mitgliedern
type
ist der XrStructureType dieser Struktur.next
istNULL
oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Gültige Strukturen sind XrAmbientLightANDROID, XrSphericalHarmonicsANDROID und XrDirectionalLightANDROID.state
ist der XrLightEstimateStateANDROID, der den Status der Lichtschätzung darstellt.lastUpdatedTime
ist derXrTime
, der angibt, wann die Schätzung zuletzt berechnet wurde.
Um Informationen zur Lichtschätzung für Umgebungslicht, sphärische Harmonische und das primäre Richtungslicht zu erhalten, können Anwendungen Instanzen der folgenden Strukturen XrAmbientLightANDROID, XrSphericalHarmonicsANDROID und XrDirectionalLightANDROID jeweils an XrLightEstimateANDROID::next koppeln.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_light_estimation
muss aktiviert sein, bevor XrLightEstimateANDROID verwendet werden kann. type
mussXR_TYPE_LIGHT_ESTIMATE_ANDROID
sein.next
mussNULL
oder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. Siehe auch: XrAmbientLightANDROID, XrDirectionalLightANDROID, XrSphericalHarmonicsANDROIDstate
muss ein gültiger Wert für XrLightEstimateStateANDROID sein
Die Struktur XrAmbientLightANDROID enthält Daten zur Lichtschätzung für das Umgebungslicht in der Szene.
typedef struct XrAmbientLightANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrVector3f intensity;
XrVector3f colorCorrection;
} XrAmbientLightANDROID;
Beschreibungen von Mitgliedern
type
ist der XrStructureType dieser Struktur.next
istNULL
oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Gültige Strukturen sind XrSphericalHarmonicsANDROID und XrDirectionalLightANDROID.state
ist der XrLightEstimateStateANDROID, der den Status der Lichtschätzung darstellt.intensity
ist einXrVector3
, das die Intensität des Umgebungslichts darstellt. Jede Komponente des Vektors entspricht den roten, grünen und blauen Kanälen.colorCorrection
ist einXrVector3
mit Werten im Gamma-Raum. Multiplizieren Sie die Farbe Ihres gammakorrigierten Renderings komponentenweise mit diesen Werten.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_light_estimation
muss aktiviert sein, bevor XrAmbientLightANDROID verwendet werden kann. type
mussXR_TYPE_AMBIENT_LIGHT_ANDROID
sein.next
mussNULL
oder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.state
muss ein gültiger Wert für XrLightEstimateStateANDROID 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;
Beschreibungen von Mitgliedern
type
ist der XrStructureType dieser Struktur.next
istNULL
oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Gültige Strukturen sind XrAmbientLightANDROID und XrDirectionalLightANDROID.state
ist der XrLightEstimateStateANDROID, der den Status der Lichtschätzung darstellt.kind
ist die von der Anwendung angeforderte XrSphericalHarmonicsKindANDROID.coefficients
ist ein zweidimensionalesfloat
-Array mit 9 Zeilen und 3 Spalten. Die drei Spalten entsprechen den Farbkanälen Rot, Grün und Blau. Jeder Kanal hat 9 Koeffizienten für sphärische Harmonische.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_light_estimation
muss aktiviert sein, bevor XrSphericalHarmonicsANDROID verwendet werden kann. type
mussXR_TYPE_SPHERICAL_HARMONICS_ANDROID
sein.next
mussNULL
oder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.state
muss ein gültiger Wert für XrLightEstimateStateANDROID seinkind
muss ein gültiger Wert für XrSphericalHarmonicsKindANDROID sein
Die Struktur XrDirectionalLightANDROID enthält Daten zur Lichtschätzung.
typedef struct XrDirectionalLightANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrVector3f intensity;
XrVector3f direction;
} XrDirectionalLightANDROID;
Beschreibungen von Mitgliedern
type
ist der XrStructureType dieser Struktur.next
istNULL
oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Gültige Strukturen sind XrAmbientLightANDROID, XrSphericalHarmonicsANDROID und XrDirectionalLightANDROID.state
ist der XrLightEstimateStateANDROID, der den Status der Lichtschätzung darstellt.intensity
ist einXrVector3
, das die Intensität des gerichteten Lichts angibt. Jede Komponente des Vektors entspricht den roten, grünen und blauen Kanälen.direction
ist einXrVector3
, das die Lichtrichtung darstellt.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_light_estimation
muss aktiviert sein, bevor XrDirectionalLightANDROID verwendet werden kann. type
mussXR_TYPE_DIRECTIONAL_LIGHT_ANDROID
sein.next
mussNULL
oder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.state
muss ein gültiger Wert für XrLightEstimateStateANDROID sein
Die Aufzählung XrSphericalHarmonicsKindANDROID gibt der Laufzeit an, welche Art von sphärischen Harmonischen von der Anwendung angefordert wird.
typedef enum XrSphericalHarmonicsKindANDROID {
XR_SPHERICAL_HARMONICS_KIND_TOTAL_ANDROID = 0,
XR_SPHERICAL_HARMONICS_KIND_AMBIENT_ANDROID = 1
} XrSphericalHarmonicsKindANDROID;
Die Enumerationen haben folgende Bedeutungen:
Enum |
Beschreibung |
|
Die sphärischen harmonischen Koeffizienten stellen die Leuchtdichtefunktion des Umgebungslichts dar, ohne den Beitrag des Hauptlichts. |
|
Die sphärischen harmonischen Koeffizienten repräsentieren die Leuchtdichtefunktion des Umgebungslichts, einschließlich des Beitrags des Hauptlichts. |
Die Aufzählung XrLightEstimateStateANDROID gibt der Laufzeit an, welche Art von sphärischen Harmonischen die Anwendung anfordert.
typedef enum XrLightEstimateStateANDROID {
XR_LIGHT_ESTIMATE_STATE_VALID_ANDROID = 0,
XR_LIGHT_ESTIMATE_STATE_INVALID_ANDROID = 1
} XrLightEstimateStateANDROID;
Die Enumerationen haben folgende Bedeutungen:
Enum |
Beschreibung |
|
Die Lichtschätzung ist gültig. |
|
Die Schätzung für die Beleuchtung ist ungültig. |
Beispielcode für die Lichtschätzung
Im folgenden Beispielcode wird gezeigt, wie Sie alle möglichen Werte für die Lichtschätzung aus der Laufzeit abrufen.
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,
};
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
XrLightEstimator
Die Aufzählung XrObjectType wurde um Folgendes erweitert:
XR_OBJECT_TYPE_LIGHT_ESTIMATOR_ANDROID
Die Aufzählung XrStructureType wurde um folgende Elemente erweitert:
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
Neue Enums
Neue Strukturen
- XrLightEstimatorCreateInfoANDROID
- XrLightEstimateGetInfoANDROID
- XrLightEstimateANDROID
- XrDirectionalLightANDROID
- XrSphericalHarmonicsANDROID
- XrAmbientLightANDROID
- XrSystemLightEstimationPropertiesANDROID
Neue Funktionen
Probleme
Versionsverlauf
- Revision 1, 16.09.2024 (Cairn Overturf)
- Erste Beschreibung der Erweiterung