XR_ANDROID_light_estimation
Ciąg znaków nazwy
XR_ANDROID_light_estimation
Typ rozszerzenia
Rozszerzenie instancji
Zarejestrowany numer wewnętrzny
701
Wersja
1
Stan ratyfikacji
Nie ratyfikowano
Zależności rozszerzeń i wersji
Data ostatniej modyfikacji
2025-03-13
Stan adresu IP
Brak znanych roszczeń dotyczących własności intelektualnej.
Twórcy
Jared Finder, Google
Cairn Overturf, Google
Spencer Quin, Google
Levana Chen, Google
Nihav Jain, Google
Salar Khan, Google
Scott Chung, Google
Omówienie
To rozszerzenie umożliwia aplikacji żądanie danych reprezentujących oświetlenie otoczenia w świecie rzeczywistym wokół zestawu słuchawkowego. Aplikacja może używać tych informacji do oświetlania wirtualnych obiektów w takich samych warunkach jak w przypadku sceny w świecie rzeczywistym, w której są umieszczone.
Uprawnienia
Aplikacje na Androida muszą mieć w pliku manifestu uprawnienia android.permission.SCENE_UNDERSTANDING_COARSE, ponieważ to rozszerzenie udostępnia informacje o oświetleniu otoczenia. Uprawnienie android.permission.SCENE_UNDERSTANDING_COARSE jest uznawane za niebezpieczne. Aby korzystać z tych funkcji, aplikacja musi prosić o uprawnienia w czasie działania:
(poziom ochrony: niebezpieczny)
Sprawdzanie możliwości systemu
Struktura XrSystemLightEstimationPropertiesANDROID jest zdefiniowana w ten sposób:
typedef struct XrSystemLightEstimationPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsLightEstimation;
} XrSystemLightEstimationPropertiesANDROID;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur. W podstawowej specyfikacji OpenXR ani w tym rozszerzeniu nie zdefiniowano takich struktur.supportsLightEstimationtoXrBool32, który wskazuje, czy bieżący system obsługuje szacowanie oświetlenia.
Aplikacja może sprawdzić, czy system obsługuje szacowanie oświetlenia, rozszerzając strukturę XrSystemProperties o strukturę XrSystemLightEstimationPropertiesANDROID podczas wywoływania funkcji xrGetSystemProperties .
Jeśli środowisko wykonawcze zwraca XR_FALSE dla supportsLightEstimation , musi zwrócić XR_ERROR_FEATURE_UNSUPPORTED z funkcji xrCreateLightEstimatorANDROID .
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_ANDROID_light_estimationmusi być włączone przed użyciem XrSystemLightEstimationPropertiesANDROID. -
typemusi mieć wartośćXR_TYPE_SYSTEM_LIGHT_ESTIMATION_PROPERTIES_ANDROID -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur.
Tworzenie uchwytu narzędzia do szacowania oświetlenia
XR_DEFINE_HANDLE(XrLightEstimatorANDROID)
Dane szacowania oświetlenia są generowane przez środowisko wykonawcze i udostępniane aplikacji za pomocą uchwytu XrLightEstimatorANDROID.
Ten uchwyt może być używany do uzyskiwania dostępu do informacji o szacowaniu oświetlenia za pomocą innych funkcji w tym rozszerzeniu.
Funkcja xrCreateLightEstimatorANDROID jest zdefiniowana w ten sposób:
XrResult xrCreateLightEstimatorANDROID(
XrSession session,
XrLightEstimatorCreateInfoANDROID* createInfo,
XrLightEstimatorANDROID* outHandle);
Opisy parametrów
sessionto XrSession, która tworzy estymator światła.createInfoto wskaźnik struktury XrLightEstimatorCreateInfoANDROID zawierającej parametry, które mają być użyte do utworzenia narzędzia do szacowania oświetlenia.outHandleto wskaźnik do uchwytu, w którym zwracany jest utworzony obiekt XrLightEstimatorANDROID.
Aplikacja używa funkcji xrCreateLightEstimatorANDROID do utworzenia estymatora oświetlenia.
- Środowisko wykonawcze musi zwracać wartość
XR_ERROR_FEATURE_UNSUPPORTED, jeśli system nie obsługuje szacowania oświetlenia. - Środowisko wykonawcze musi zwrócić wartość
XR_ERROR_PERMISSION_INSUFFICIENT, jeśli wymagane uprawnienia nie zostały przyznane aplikacji wywołującej.
Jeśli aplikacja chce poinformować środowisko wykonawcze, że zakończyła dostęp do danych szacowania oświetlenia, musi zniszczyć uchwyt za pomocą funkcji xrDestroyLightEstimatorANDROID .
Prawidłowe użycie (domyślne)
- Przed wywołaniem funkcji xrCreateLightEstimatorANDROID musi być włączone rozszerzenie
XR_ANDROID_light_estimation. -
sessionmusi być prawidłowym uchwytem XrSession -
createInfomusi być wskaźnikiem struktury XrLightEstimatorCreateInfoANDROID -
outHandlemusi być wskaźnikiem do uchwytu XrLightEstimatorANDROID.
Kody zwrotne
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
Struktura XrLightEstimatorCreateInfoANDROID zawiera informacje potrzebne do utworzenia uchwytu XrLightEstimatorANDROID.
typedef struct XrLightEstimatorCreateInfoANDROID {
XrStructureType type;
const void* next;
} XrLightEstimatorCreateInfoANDROID;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur. W podstawowej specyfikacji OpenXR ani w tym rozszerzeniu nie zdefiniowano takich struktur.
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_ANDROID_light_estimationmusi być włączone przed użyciem XrLightEstimatorCreateInfoANDROID. -
typemusi mieć wartośćXR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROID -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur . Zobacz też: XrCubemapLightEstimatorCreateInfoANDROID , XrPointLightsEstimatorCreateInfoANDROIDX1
Funkcja xrDestroyLightEstimatorANDROID jest zdefiniowana w ten sposób:
XrResult xrDestroyLightEstimatorANDROID(
XrLightEstimatorANDROID estimator);
Opisy parametrów
estimatorto obiekt XrLightEstimatorANDROID utworzony wcześniej przez funkcję xrCreateLightEstimatorANDROID .
Funkcja xrDestroyLightEstimatorANDROID zwalnia estimator i wszystkie zasoby bazowe.
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_ANDROID_light_estimationmusi być włączone przed wywołaniem funkcji xrDestroyLightEstimatorANDROID. -
estimatormusi być prawidłowym uchwytem XrLightEstimatorANDROID.
Bezpieczeństwo wątków
- Dostęp do
estimatori wszystkich uchwytów podrzędnych musi być synchronizowany zewnętrznie.
Kody zwrotne
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
Dostęp do danych szacowania oświetlenia
Funkcja xrGetLightEstimateANDROID jest zdefiniowana w ten sposób:
XrResult xrGetLightEstimateANDROID(
XrLightEstimatorANDROID estimator,
const XrLightEstimateGetInfoANDROID* input,
XrLightEstimateANDROID* output);
Opisy parametrów
estimatorto uchwyt do obiektu XrLightEstimatorANDROID utworzonego wcześniej za pomocą funkcji xrCreateLightEstimatorANDROID .inputto wskaźnik struktury XrLightEstimateGetInfoANDROID.outputto wskaźnik struktury XrLightEstimateANDROID.
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_ANDROID_light_estimationmusi być włączone przed wywołaniem funkcji xrGetLightEstimateANDROID. -
estimatormusi być prawidłowym uchwytem XrLightEstimatorANDROID. -
inputmusi być wskaźnikiem do prawidłowej struktury XrLightEstimateGetInfoANDROID. -
outputmusi być wskaźnikiem struktury XrLightEstimateANDROID.
Kody zwrotne
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
Struktura XrLightEstimateGetInfoANDROID jest zdefiniowana w ten sposób:
typedef struct XrLightEstimateGetInfoANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
} XrLightEstimateGetInfoANDROID;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur.spaceto XrSpace określający przestrzeń odniesienia, w której wyrażony jest zwrócony kierunek światła i harmoniczne sferyczne.timetoXrTime, które opisuje czas, w którym aplikacja chce wysłać zapytanie o szacowanie oświetlenia.
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_ANDROID_light_estimationmusi być włączone przed użyciem funkcji XrLightEstimateGetInfoANDROID. -
typemusi mieć wartośćXR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROID -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur. -
spacemusi być prawidłowym identyfikatorem XrSpace.
Struktura XrLightEstimateANDROID zawiera dane szacowania oświetlenia:
typedef struct XrLightEstimateANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrTime lastUpdatedTime;
} XrLightEstimateANDROID;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur. Prawidłowe struktury to XrAmbientLightANDROID , XrSphericalHarmonicsANDROID i XrDirectionalLightANDROID .stateto XrLightEstimateStateANDROID reprezentujący stan szacowania oświetlenia.lastUpdatedTimetoXrTime, która wskazuje, kiedy ostatnio obliczono szacunkową wartość.
Jeśli w przypadku każdej struktury szacowania oświetlenia pole state ma wartość XR_LIGHT_ESTIMATE_STATE_INVALID_ANDROID, wszystkie pozostałe pola w strukturze są dowolne, co oznacza, że ich wartości są niezdefiniowane.
Aby uzyskać informacje o szacunkowej wartości jasności otoczenia, harmonicznych sferycznych i głównego światła kierunkowego, aplikacje mogą łączyć instancje tych struktur: XrAmbientLightANDROID, XrSphericalHarmonicsANDROID i XrDirectionalLightANDROID odpowiednio z XrLightEstimateANDROID :: next .
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_ANDROID_light_estimationmusi być włączone przed użyciem funkcji XrLightEstimateANDROID. -
typemusi mieć wartośćXR_TYPE_LIGHT_ESTIMATE_ANDROID -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur . Zobacz też: XrAmbientLightANDROID , XrCubemapLightingDataANDROID , XrDirectionalLightANDROID , XrPointLightsANDROIDX1 , XrSphericalHarmonicsANDROID -
statemusi być prawidłową wartością XrLightEstimateStateANDROID.
Struktura XrAmbientLightANDROID zawiera dane szacunkowe dotyczące jasności otoczenia w scenie.
typedef struct XrAmbientLightANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrVector3f intensity;
XrVector3f colorCorrection;
} XrAmbientLightANDROID;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur. Prawidłowe struktury to XrSphericalHarmonicsANDROID i XrDirectionalLightANDROID .stateto XrLightEstimateStateANDROID reprezentujący stan szacowania oświetlenia.intensityto XrVector3f reprezentujący jasność otoczenia. Każdy składnik wektora odpowiada odpowiednio kanałom czerwonego, zielonego i niebieskiego.colorCorrectionto XrVector3f z wartościami w przestrzeni gamma. Jeśli renderowanie odbywa się w przestrzeni kolorów gamma, pomnóż je komponent po komponencie przez ostateczny obliczony kolor po renderowaniu. Jeśli renderowanie odbywa się w przestrzeni liniowej, najpierw przekonwertuj wartości na przestrzeń liniową, podnosząc je do potęgi 2,2, a następnie pomnóż poszczególne komponenty przez ostateczny obliczony kolor po renderowaniu.The purpose of pname:colorCorrection is to make a scene appear natural and blend with the real world.
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_ANDROID_light_estimationmusi być włączone przed użyciem XrAmbientLightANDROID. -
typemusi mieć wartośćXR_TYPE_AMBIENT_LIGHT_ANDROID -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur. -
statemusi być prawidłową wartością XrLightEstimateStateANDROID.
Struktura XrSphericalHarmonicsANDROID zawiera harmoniczne sferyczne reprezentujące oświetlenie sceny.
typedef struct XrSphericalHarmonicsANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrSphericalHarmonicsKindANDROID kind;
float coefficients[9][3];
} XrSphericalHarmonicsANDROID;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur. Prawidłowe struktury to XrAmbientLightANDROID i XrDirectionalLightANDROID .stateto XrLightEstimateStateANDROID reprezentujący stan szacowania oświetlenia.kindto XrSphericalHarmonicsKindANDROID, o który prosi aplikacja.coefficientsto dwuwymiarowa tablicafloato wymiarach 9 wierszy i 3 kolumn. 3 kolumny odpowiadające kanałom kolorów: czerwonemu, zielonemu i niebieskiemu. Każdy kanał ma 9 współczynników harmonicznych.
coefficients są używane w specjalnej funkcji, która przyjmuje kierunek jako dane wejściowe i zwraca kolor światła pochodzącego z tego kierunku. Więcej informacji znajdziesz w tym dokumencie .
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_ANDROID_light_estimationmusi być włączone przed użyciem XrSphericalHarmonicsANDROID. -
typemusi mieć wartośćXR_TYPE_SPHERICAL_HARMONICS_ANDROID -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur. -
statemusi być prawidłową wartością XrLightEstimateStateANDROID. -
kindmusi być prawidłową wartością XrSphericalHarmonicsKindANDROID
Wyliczenie XrSphericalHarmonicsKindANDROID określa środowisku wykonawczemu, jakiego typu harmonicznych sferycznych żąda aplikacja.
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;
Wartości wyliczeniowe mają następujące znaczenia:
Opis typu wyliczeniowego
XR_SPHERICAL_HARMONICS_KIND_TOTAL_ANDROID
Współczynniki harmonicznych sferycznych reprezentują funkcję luminancji światła otoczenia, z wyłączeniem wpływu światła głównego.
XR_SPHERICAL_HARMONICS_KIND_AMBIENT_ANDROID
Współczynniki harmonicznych sferycznych reprezentują funkcję luminancji światła otoczenia, w tym wkład głównego światła.
Struktura XrDirectionalLightANDROID zawiera dane szacowania oświetlenia.
typedef struct XrDirectionalLightANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrVector3f intensity;
XrVector3f direction;
} XrDirectionalLightANDROID;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur. Prawidłowe struktury to XrAmbientLightANDROID , XrSphericalHarmonicsANDROID i XrDirectionalLightANDROID .stateto XrLightEstimateStateANDROID reprezentujący stan szacowania oświetlenia.intensityto XrVector3f reprezentujący natężenie światła kierunkowego. Każdy składnik wektora odpowiada kanałom czerwonego, zielonego i niebieskiego.directionto XrVector3f reprezentujący kierunek światła.
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_ANDROID_light_estimationmusi być włączone przed użyciem XrDirectionalLightANDROID. -
typemusi mieć wartośćXR_TYPE_DIRECTIONAL_LIGHT_ANDROID -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur. -
statemusi być prawidłową wartością XrLightEstimateStateANDROID.
Wyliczenie XrLightEstimateStateANDROID wskazuje stan oszacowania oświetlenia zwróconego przez środowisko wykonawcze.
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;
Wartości wyliczeniowe mają następujące znaczenia:
Opis typu wyliczeniowego
XR_LIGHT_ESTIMATE_STATE_VALID_ANDROID
Oszacowanie oświetlenia jest prawidłowe
XR_LIGHT_ESTIMATE_STATE_INVALID_ANDROID
Oszacowanie oświetlenia jest nieprawidłowe
Przykładowy kod do szacowania oświetlenia
Poniższy przykładowy kod pokazuje, jak uzyskać z czasu działania wszystkie możliwe wartości szacowania oświetlenia.
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));
Nowe typy obiektów
Nowe polecenia
Nowe struktury
- XrLightEstimateANDROID
- XrLightEstimateGetInfoANDROID
- XrLightEstimatorCreateInfoANDROID
Rozszerzanie XrLightEstimateANDROID :
Rozszerzanie XrSystemProperties :
Nowe wartości w polu enum
Nowe stałe wyliczeniowe
XR_ANDROID_LIGHT_ESTIMATION_EXTENSION_NAMEXR_ANDROID_light_estimation_SPEC_VERSIONRozszerzanie XrObjectType :
XR_OBJECT_TYPE_LIGHT_ESTIMATOR_ANDROID
Rozszerzanie 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
Problemy
Historia zmian
Wersja 1, 16.09.2024 r. (Cairn Overturf)
- Wstępny opis rozszerzenia