String Nama
XR_ANDROID_light_estimation
Jenis Ekstensi
Ekstensi instance
Registered Extension Number
701
Revisi
1
Dependensi Ekstensi dan Versi
Tanggal Terakhir Diubah
2024-09-18
Status IP
Tidak ada klaim IP yang diketahui.
Kontributor
Jared Finder, Google
Cairn Overturf, Google
Spencer Quin, Google
Levana Chen, Google
Nihav Jain, Google
Ringkasan
Ekstensi ini memungkinkan aplikasi meminta data yang mewakili pencahayaan lingkungan dunia nyata di sekitar headset. Informasi ini dapat digunakan saat merender objek virtual untuk meneranginya dalam kondisi yang sama dengan adegan tempat objek tersebut ditempatkan.
Memeriksa kemampuan sistem
Aplikasi dapat memeriksa apakah sistem mendukung estimasi cahaya dengan mengaitkan struktur XrSystemLightEstimationPropertiesANDROID ke XrSystemProperties saat memanggil xrGetSystemProperties.
typedef struct XrSystemLightEstimationPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsLightEstimation;
} XrSystemLightEstimationPropertiesANDROID;
Deskripsi Anggota
type
adalah XrStructureType dari struktur ini.next
adalahNULL
atau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur semacam itu yang ditentukan di OpenXR inti atau ekstensi ini.supportsLightEstimation
adalahXrBool32
, yang menunjukkan apakah sistem saat ini mendukung estimasi cahaya.
Aplikasi dapat memeriksa apakah sistem mampu mendukung estimasi cahaya dengan memperluas XrSystemProperties dengan struktur XrSystemLightEstimationPropertiesANDROID saat memanggil xrGetSystemProperties.
Jika sistem tidak dapat mendukung estimasi cahaya, sistem akan menampilkan
XR_FALSE
untuk supportsLightEstimation
, dan XR_ERROR_FEATURE_UNSUPPORTED
dari xrCreateLightEstimatorANDROID.
Penggunaan yang Valid (Implisit)
- Ekstensi XR_ANDROID_light_estimation harus diaktifkan sebelum menggunakan XrSystemLightEstimationPropertiesANDROID
type
harus berupaXR_TYPE_SYSTEM_LIGHT_ESTIMATION_PROPERTIES_ANDROID
next
harus berupaNULL
atau pointer yang valid ke struktur berikutnya dalam rantai struktur
Membuat nama sebutan pengestima cahaya
XR_DEFINE_HANDLE(XrLightEstimatorANDROID)
Nama sebutan XrLightEstimatorANDROID mewakili estimator cahaya. ID ini dapat digunakan untuk mengakses informasi estimasi cahaya menggunakan fungsi lain dalam ekstensi ini.
Fungsi xrCreateLightEstimatorANDROID ditentukan sebagai:
XrResult xrCreateLightEstimatorANDROID(
XrSession session,
XrLightEstimatorCreateInfoANDROID* createInfo,
XrLightEstimatorANDROID* outHandle);
Deskripsi Parameter
session
adalah XrSession yang membuat estimator cahaya.createInfo
adalah pointer ke struktur XrLightEstimatorCreateInfoANDROID yang berisi parameter yang akan digunakan untuk membuat estimator cahaya.outHandle
adalah pointer ke handle tempat XrLightEstimatorANDROID yang dibuat ditampilkan.
Aplikasi dapat menggunakan fungsi xrCreateLightEstimatorANDROID untuk membuat estimator cahaya.
- xrCreateLightEstimatorANDROID akan menampilkan
XR_ERROR_FEATURE_UNSUPPORTED
jika sistem tidak mendukung estimasi cahaya. - xrCreateLightEstimatorANDROID akan menampilkan
XR_ERROR_PERMISSION_INSUFFICIENT
jika izin yang diperlukan belum diberikan ke aplikasi pemanggil.
Handle estimator cahaya yang ditampilkan mungkin akan digunakan dalam panggilan API. Jika aplikasi ingin menunjukkan ke runtime bahwa aplikasi telah selesai mengakses data estimasi cahaya, aplikasi harus menghancurkan handle menggunakan xrDestroyLightEstimatorANDROID.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_light_estimation
harus diaktifkan sebelum memanggil xrCreateLightEstimatorANDROID session
harus berupa nama sebutan channel XrSession yang validcreateInfo
harus berupa pointer ke struktur XrLightEstimatorCreateInfoANDROIDoutHandle
harus berupa pointer ke handle XrLightEstimatorANDROID
Kode Status
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
Struktur XrLightEstimatorCreateInfoANDROID menjelaskan informasi untuk membuat handle XrLightEstimatorANDROID.
typedef struct XrLightEstimatorCreateInfoANDROID {
XrStructureType type;
void* next;
} XrLightEstimatorCreateInfoANDROID;
Deskripsi Anggota
type
adalah XrStructureType dari struktur ini.next
adalahNULL
atau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur semacam itu yang ditentukan di OpenXR inti atau ekstensi ini.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_light_estimation
harus diaktifkan sebelum menggunakan XrLightEstimatorCreateInfoANDROID type
harus berupaXR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROID
next
harus berupaNULL
atau pointer yang valid ke struktur berikutnya dalam rantai struktur
Fungsi xrDestroyLightEstimatorANDROID merilis estimator
dan
resource pokok apa pun.
XrResult xrDestroyLightEstimatorANDROID(
XrLightEstimatorANDROID estimator);
Deskripsi Parameter
estimator
adalah XrLightEstimatorANDROID yang sebelumnya dibuat oleh xrCreateLightEstimatorANDROID.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_light_estimation
harus diaktifkan sebelum memanggil xrDestroyLightEstimatorANDROID estimator
harus berupa handle XrLightEstimatorANDROID yang valid
Keamanan Thread
- Akses ke
estimator
, dan setiap nama sebutan turunan, harus disinkronkan secara eksternal
Kode Status
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_HANDLE_INVALID
Mengakses data estimasi cahaya
Fungsi xrGetLightEstimateANDROID ditentukan sebagai:
XrResult xrGetLightEstimateANDROID(
XrLightEstimatorANDROID estimator,
const XrLightEstimateGetInfoANDROID* input,
XrLightEstimateANDROID* output);
Deskripsi Parameter
estimator
: Handle ke XrLightEstimatorANDROID yang dibuat sebelumnya denganxrCreateLightEstimatorANDROID
.input
: Pointer ke struktur XrLightEstimateGetInfoANDROID.output
: Pointer ke struktur XrLightEstimateANDROID.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_light_estimation
harus diaktifkan sebelum memanggil xrGetLightEstimateANDROID estimator
harus berupa handle XrLightEstimatorANDROID yang validinput
harus berupa pointer ke struktur XrLightEstimateGetInfoANDROID yang validoutput
harus berupa pointer ke struktur XrLightEstimateANDROID
Kode Status
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
XrLightEstimateGetInfoANDROID menjelaskan informasi yang diperlukan untuk mendapatkan data estimasi cahaya.
typedef struct XrLightEstimateGetInfoANDROID {
XrStructureType type;
void* next;
XrSpace space;
XrTime time;
} XrLightEstimateGetInfoANDROID;
Deskripsi Anggota
type
adalah XrStructureType dari struktur ini.next
adalahNULL
atau pointer ke struktur berikutnya dalam rantai struktur.space
adalah XrSpace yang menentukan ruang referensi tempat arah cahaya yang ditampilkan dan harmonik sferis dinyatakan.time
adalahXrTime
yang menjelaskan waktu saat aplikasi ingin membuat kueri estimasi cahaya.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_light_estimation
harus diaktifkan sebelum menggunakan XrLightEstimateGetInfoANDROID type
harus berupaXR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROID
next
harus berupaNULL
atau pointer yang valid ke struktur berikutnya dalam rantai strukturspace
harus berupa nama sebutan XrSpace yang valid
Struktur XrLightEstimateANDROID berisi data estimasi cahaya.
typedef struct XrLightEstimateANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrTime lastUpdatedTime;
} XrLightEstimateANDROID;
Deskripsi Anggota
type
adalah XrStructureType dari struktur ini.next
adalahNULL
atau pointer ke struktur berikutnya dalam rantai struktur. Struktur yang valid adalah XrAmbientLightANDROID, XrSphericalHarmonicsANDROID, dan XrDirectionalLightANDROID.state
adalah XrLightEstimateStateANDROID yang mewakili status estimasi cahaya.lastUpdatedTime
adalahXrTime
yang mewakili waktu estimasi terakhir dihitung.
Untuk mendapatkan informasi estimasi cahaya untuk cahaya ambient, harmonik bola, dan cahaya terarah utama, aplikasi dapat membuat rantai instance struktur berikut, XrAmbientLightANDROID, XrSphericalHarmonicsANDROID, dan XrDirectionalLightANDROID masing-masing ke XrLightEstimateANDROID::next.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_light_estimation
harus diaktifkan sebelum menggunakan XrLightEstimateANDROID type
harus berupaXR_TYPE_LIGHT_ESTIMATE_ANDROID
next
harus berupaNULL
atau pointer yang valid ke struktur berikutnya dalam rantai struktur. Lihat juga: XrAmbientLightANDROID, XrDirectionalLightANDROID, XrSphericalHarmonicsANDROIDstate
harus berupa nilai XrLightEstimateStateANDROID yang valid
Struktur XrAmbientLightANDROID berisi data estimasi cahaya tentang cahaya sekitar di tampilan.
typedef struct XrAmbientLightANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrVector3f intensity;
XrVector3f colorCorrection;
} XrAmbientLightANDROID;
Deskripsi Anggota
type
adalah XrStructureType dari struktur ini.next
adalahNULL
atau pointer ke struktur berikutnya dalam rantai struktur. Struktur yang valid adalah XrSphericalHarmonicsANDROID dan XrDirectionalLightANDROID.state
adalah XrLightEstimateStateANDROID yang mewakili status estimasi cahaya.intensity
adalahXrVector3
yang mewakili intensitas cahaya sekitar. Setiap komponen vektor sesuai dengan saluran merah, hijau, dan biru.colorCorrection
adalahXrVector3
dengan nilai dalam ruang gamma. Komponen-komponennya akan mengalikan warna render yang dikoreksi gamma dengan nilai ini.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_light_estimation
harus diaktifkan sebelum menggunakan XrAmbientLightANDROID type
harus berupaXR_TYPE_AMBIENT_LIGHT_ANDROID
next
harus berupaNULL
atau pointer yang valid ke struktur berikutnya dalam rantai strukturstate
harus berupa nilai XrLightEstimateStateANDROID yang valid
Struktur XrSphericalHarmonicsANDROID berisi harmoni sferis yang mewakili pencahayaan tampilan.
typedef struct XrSphericalHarmonicsANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrSphericalHarmonicsKindANDROID kind;
float coefficients[9][3];
} XrSphericalHarmonicsANDROID;
Deskripsi Anggota
type
adalah XrStructureType dari struktur ini.next
adalahNULL
atau pointer ke struktur berikutnya dalam rantai struktur. Struktur yang valid adalah XrAmbientLightANDROID dan XrDirectionalLightANDROID.state
adalah XrLightEstimateStateANDROID yang mewakili status estimasi cahaya.kind
adalah XrSphericalHarmonicsKindANDROID yang diminta oleh aplikasi.coefficients
adalah arrayfloat
dua dimensi dengan dimensi 9 baris dan 3 kolom. 3 kolom yang masing-masing sesuai dengan saluran warna merah, hijau, dan biru. Setiap saluran memiliki 9 koefisien harmonis sferis.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_light_estimation
harus diaktifkan sebelum menggunakan XrSphericalHarmonicsANDROID type
harus berupaXR_TYPE_SPHERICAL_HARMONICS_ANDROID
next
harus berupaNULL
atau pointer yang valid ke struktur berikutnya dalam rantai strukturstate
harus berupa nilai XrLightEstimateStateANDROID yang validkind
harus berupa nilai XrSphericalHarmonicsKindANDROID yang valid
Struktur XrDirectionalLightANDROID berisi data estimasi cahaya.
typedef struct XrDirectionalLightANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrVector3f intensity;
XrVector3f direction;
} XrDirectionalLightANDROID;
Deskripsi Anggota
type
adalah XrStructureType dari struktur ini.next
adalahNULL
atau pointer ke struktur berikutnya dalam rantai struktur. Struktur yang valid adalah XrAmbientLightANDROID, XrSphericalHarmonicsANDROID, dan XrDirectionalLightANDROID.state
adalah XrLightEstimateStateANDROID yang mewakili status estimasi cahaya.intensity
adalahXrVector3
yang mewakili intensitas cahaya arah. Setiap komponen vektor sesuai dengan saluran merah, hijau, dan biru.direction
adalahXrVector3
yang mewakili arah cahaya.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_light_estimation
harus diaktifkan sebelum menggunakan XrDirectionalLightANDROID type
harus berupaXR_TYPE_DIRECTIONAL_LIGHT_ANDROID
next
harus berupaNULL
atau pointer yang valid ke struktur berikutnya dalam rantai strukturstate
harus berupa nilai XrLightEstimateStateANDROID yang valid
Enumerasi XrSphericalHarmonicsKindANDROID mengidentifikasi ke runtime, jenis harmonik sferis yang diminta aplikasi.
typedef enum XrSphericalHarmonicsKindANDROID {
XR_SPHERICAL_HARMONICS_KIND_TOTAL_ANDROID = 0,
XR_SPHERICAL_HARMONICS_KIND_AMBIENT_ANDROID = 1
} XrSphericalHarmonicsKindANDROID;
Enum memiliki arti berikut:
Enum |
Deskripsi |
|
Koefisien harmonis bola merepresentasikan fungsi radian cahaya lingkungan, tidak termasuk kontribusi dari cahaya utama. |
|
Koefisien harmonis bola merepresentasikan fungsi radian cahaya lingkungan, termasuk kontribusi dari cahaya utama. |
Enumerasi XrLightEstimateStateANDROID mengidentifikasi ke runtime, jenis harmonik sferis yang diminta aplikasi.
typedef enum XrLightEstimateStateANDROID {
XR_LIGHT_ESTIMATE_STATE_VALID_ANDROID = 0,
XR_LIGHT_ESTIMATE_STATE_INVALID_ANDROID = 1
} XrLightEstimateStateANDROID;
Enum memiliki arti berikut:
Enum |
Deskripsi |
|
Estimasi cahaya valid |
|
Estimasi cahaya tidak valid |
Contoh kode untuk estimasi cahaya
Kode contoh berikut menunjukkan cara mendapatkan semua kemungkinan jumlah estimasi cahaya dari 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,
};
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));
Jenis Objek Baru
XrLightEstimator
Enumerasi XrObjectType diperluas dengan:
XR_OBJECT_TYPE_LIGHT_ESTIMATOR_ANDROID
Enumerasi XrStructureType diperluas dengan:
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
Enum Baru
Struktur Baru
- XrLightEstimatorCreateInfoANDROID
- XrLightEstimateGetInfoANDROID
- XrLightEstimateANDROID
- XrDirectionalLightANDROID
- XrSphericalHarmonicsANDROID
- XrAmbientLightANDROID
- XrSystemLightEstimationPropertiesANDROID
Fungsi Baru
Masalah
Histori Versi
- Revisi 1, 16-09-2024 (Cairn Overturf)
- Deskripsi ekstensi awal