String Nama
XR_ANDROID_light_estimation
Jenis Ekstensi
Ekstensi instance
Nomor Ekstensi Terdaftar
701
Revisi
1
Dependensi Ekstensi dan Versi
Tanggal Terakhir Diubah
2025-01-17
Status IP
Tidak ada klaim IP yang diketahui.
Kontributor
Jared Finder, Google
Cairn Overturf, Google
Spencer Quin, Google
Levana Chen, Google
Nihav Jain, Google
Salar Khan, Google
Scott Chung, Google
Ringkasan
Ekstensi ini memungkinkan aplikasi meminta data yang merepresentasikan 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 menautkan struktur XrSystemLightEstimationPropertiesANDROID ke XrSystemProperties saat memanggil xrGetSystemProperties.
typedef struct XrSystemLightEstimationPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsLightEstimation;
} XrSystemLightEstimationPropertiesANDROID;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur seperti itu yang ditentukan dalam OpenXR inti atau ekstensi ini.supportsLightEstimationadalahXrBool32, 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
typeharus berupaXR_TYPE_SYSTEM_LIGHT_ESTIMATION_PROPERTIES_ANDROIDnextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur
Membuat handle estimator cahaya
XR_DEFINE_HANDLE(XrLightEstimatorANDROID)
Handle XrLightEstimatorANDROID merepresentasikan estimator cahaya. Handle 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
sessionadalah XrSession yang membuat estimator cahaya.createInfoadalah pointer ke struktur XrLightEstimatorCreateInfoANDROID yang berisi parameter yang akan digunakan untuk membuat estimator cahaya.outHandleadalah pointer ke tuas tempat XrLightEstimatorANDROID yang dibuat ditampilkan.
Aplikasi dapat menggunakan fungsi xrCreateLightEstimatorANDROID untuk membuat estimator cahaya.
- xrCreateLightEstimatorANDROID akan menampilkan
XR_ERROR_FEATURE_UNSUPPORTEDjika sistem tidak mendukung estimasi cahaya. - xrCreateLightEstimatorANDROID akan menampilkan
XR_ERROR_PERMISSION_INSUFFICIENTjika izin yang diperlukan belum diberikan ke aplikasi panggilan.
Handle estimator cahaya yang ditampilkan dapat digunakan dalam panggilan API berikutnya. Jika aplikasi ingin menunjukkan kepada runtime bahwa aplikasi telah selesai mengakses data estimasi cahaya, aplikasi harus menghancurkan handle menggunakan xrDestroyLightEstimatorANDROID.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_light_estimationharus diaktifkan sebelum memanggil xrCreateLightEstimatorANDROID sessionmust berupa handle XrSession yang validcreateInfomust berupa pointer ke struktur XrLightEstimatorCreateInfoANDROIDoutHandleharus berupa pointer ke handle XrLightEstimatorANDROID
Kode Status
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_HANDLE_INVALIDXR_ERROR_LIMIT_REACHED
Struktur XrLightEstimatorCreateInfoANDROID menjelaskan informasi untuk membuat handle XrLightEstimatorANDROID.
typedef struct XrLightEstimatorCreateInfoANDROID {
XrStructureType type;
void* next;
} XrLightEstimatorCreateInfoANDROID;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur seperti itu yang ditentukan dalam OpenXR inti atau ekstensi ini.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_light_estimationharus diaktifkan sebelum menggunakan XrLightEstimatorCreateInfoANDROID typeharus berupaXR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROIDnextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur
Fungsi xrDestroyLightEstimatorANDROID melepaskan estimator dan resource pokok apa pun.
XrResult xrDestroyLightEstimatorANDROID(
XrLightEstimatorANDROID estimator);
Deskripsi Parameter
estimatoradalah XrLightEstimatorANDROID yang sebelumnya dibuat oleh xrCreateLightEstimatorANDROID.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_light_estimationharus diaktifkan sebelum memanggil xrDestroyLightEstimatorANDROID estimatorharus berupa handle XrLightEstimatorANDROID yang valid
Keamanan Thread
- Akses ke
estimator, dan semua nama sebutan turunannya, harus disinkronkan secara eksternal
Kode Status
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
Mengakses data estimasi cahaya
Fungsi xrGetLightEstimateANDROID ditentukan sebagai:
XrResult xrGetLightEstimateANDROID(
XrLightEstimatorANDROID estimator,
const XrLightEstimateGetInfoANDROID* input,
XrLightEstimateANDROID* output);
Deskripsi Parameter
estimator: Menangani XrLightEstimatorANDROID yang dibuat sebelumnya denganxrCreateLightEstimatorANDROID.input: Pointer ke struktur XrLightEstimateGetInfoANDROID.output: Pointer ke struktur XrLightEstimateANDROID.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_light_estimationharus diaktifkan sebelum memanggil xrGetLightEstimateANDROID estimatorharus berupa handle XrLightEstimatorANDROID yang validinputharus berupa pointer ke struktur XrLightEstimateGetInfoANDROID yang validoutputharus berupa pointer ke struktur XrLightEstimateANDROID
Kode Status
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_TIME_INVALID
XrLightEstimateGetInfoANDROID menjelaskan informasi yang diperlukan untuk mendapatkan data perkiraan cahaya.
typedef struct XrLightEstimateGetInfoANDROID {
XrStructureType type;
void* next;
XrSpace space;
XrTime time;
} XrLightEstimateGetInfoANDROID;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur.spaceadalah XrSpace yang menentukan ruang referensi tempat arah cahaya, harmonik bola, dan rotasi cubemap yang ditampilkan dinyatakan.timeadalahXrTimeyang menjelaskan waktu saat aplikasi ingin mengkueri estimasi cahaya.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_light_estimationharus diaktifkan sebelum menggunakan XrLightEstimateGetInfoANDROID typeharus berupaXR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROIDnextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai strukturspacemust berupa handle XrSpace yang valid
Struktur XrLightEstimateANDROID berisi data estimasi cahaya.
typedef struct XrLightEstimateANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrTime lastUpdatedTime;
} XrLightEstimateANDROID;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Struktur yang valid adalah XrAmbientLightANDROID, XrSphericalHarmonicsANDROID, XrEnvironmentLightingCubemapANDROID dan XrDirectionalLightANDROID.stateadalah XrLightEstimateStateANDROID yang merepresentasikan status perkiraan cahaya.lastUpdatedTimeadalahXrTimeyang menunjukkan kapan estimasi terakhir dihitung.
Untuk mendapatkan informasi estimasi cahaya untuk cubemap pencahayaan lingkungan, cahaya sekitar, harmonik sferis, dan cahaya terarah primer, aplikasi dapat merangkai instance dari struktur berikut, XrEnvironmentLightingCubemapANDROID, XrAmbientLightANDROID, XrSphericalHarmonicsANDROID, dan XrDirectionalLightANDROID masing-masing ke XrLightEstimateANDROID::next.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_light_estimationharus diaktifkan sebelum menggunakan XrLightEstimateANDROID typeharus berupaXR_TYPE_LIGHT_ESTIMATE_ANDROIDnextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur. Lihat juga: XrAmbientLightANDROID, XrDirectionalLightANDROID, XrEnvironmentLightingCubemapANDROID, XrSphericalHarmonicsANDROIDstateharus berupa nilai XrLightEstimateStateANDROID yang valid
Struktur XrEnvironmentLightingCubemapANDROID berisi data estimasi cahaya dalam format cubemap tentang pencahayaan lingkungan adegan.
typedef struct XrEnvironmentLightingCubemapANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
const float* cubemapRightImage;
const float* cubemapLeftImage;
const float* cubemapTopImage;
const float* cubemapBottomImage;
const float* cubemapFrontImage;
const float* cubemapBackImage;
uint32_t resolution;
XrQuaternionf rotation;
XrTime centerExposureTime;
} XrEnvironmentLightingCubemapANDROID;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Struktur yang valid adalah XrSphericalHarmonicsANDROID, XrAmbientLightANDROID, dan XrDirectionalLightANDROID.stateadalah XrLightEstimateStateANDROID yang merepresentasikan status perkiraan cahaya.cubemapRightImageadalahfloat*yang merepresentasikan buffer R32G32B32_SFLOAT di sisi kanan cubemap. Perhatikan bahwa ini adalah HDR sehingga nilai float dapat lebih besar dari 1,0.cubemapLeftImageadalahfloat*yang merepresentasikan buffer R32G32B32_SFLOAT di sisi kiri cubemap. Perhatikan bahwa ini adalah HDR sehingga nilai float dapat lebih besar dari 1,0.cubemapTopImageadalahfloat*yang merepresentasikan buffer R32G32B32_SFLOAT dari sisi atas cubemap. Perhatikan bahwa ini adalah HDR sehingga nilai float dapat lebih besar dari 1,0.cubemapBottomImageadalahfloat*yang merepresentasikan buffer R32G32B32_SFLOAT dari sisi bawah cubemap. Perhatikan bahwa ini adalah HDR sehingga nilai float dapat lebih besar dari 1,0.cubemapFrontImageadalahfloat*yang merepresentasikan buffer R32G32B32_SFLOAT di sisi depan cubemap. Perhatikan bahwa ini adalah HDR sehingga nilai float dapat lebih besar dari 1,0.resolutionadalahuint32_tyang merepresentasikan lebar dan tinggi gambar di setiap sisi cubemap.rotationadalah XrQuaternionf yang merepresentasikan rotasi cubemap.centerExposureTimeadalahXrTimeyang menunjukkan waktu pengambilan cubemap. Berguna untuk interpolasi antar-cubemap.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_light_estimationharus diaktifkan sebelum menggunakan XrEnvironmentLightingCubemapANDROID typeharus berupaXR_TYPE_ENVIRONMENT_LIGHTING_CUBEMAP_ANDROIDnextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai strukturstateharus berupa nilai XrLightEstimateStateANDROID yang validcubemapRightImageharus berupa pointer ke nilai float yang validcubemapLeftImageharus berupa pointer ke nilai float yang validcubemapTopImageharus berupa pointer ke nilai float yang validcubemapBottomImageharus berupa pointer ke nilai float yang validcubemapFrontImageharus berupa pointer ke nilai float yang validcubemapBackImageharus berupa pointer ke nilai float yang valid
Struktur XrAmbientLightANDROID berisi data estimasi cahaya tentang cahaya sekitar dalam adegan.
typedef struct XrAmbientLightANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrVector3f intensity;
XrVector3f colorCorrection;
} XrAmbientLightANDROID;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Struktur yang valid adalah XrSphericalHarmonicsANDROID, XrEnvironmentLightingCubemapANDROID, dan XrDirectionalLightANDROID.stateadalah XrLightEstimateStateANDROID yang merepresentasikan status perkiraan cahaya.intensityadalahXrVector3yang merepresentasikan intensitas cahaya sekitar. Setiap komponen vektor sesuai dengan saluran merah, hijau, dan biru.colorCorrectionadalahXrVector3dengan nilai dalam ruang gamma. Komponen demi komponen mengalikan warna render yang dikoreksi gamma dengan nilai ini.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_light_estimationharus diaktifkan sebelum menggunakan XrAmbientLightANDROID typeharus berupaXR_TYPE_AMBIENT_LIGHT_ANDROIDnextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai strukturstateharus berupa nilai XrLightEstimateStateANDROID yang valid
Struktur XrSphericalHarmonicsANDROID berisi harmonik bola yang merepresentasikan pencahayaan adegan.
typedef struct XrSphericalHarmonicsANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrSphericalHarmonicsKindANDROID kind;
float coefficients[9][3];
} XrSphericalHarmonicsANDROID;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Struktur yang valid adalah XrAmbientLightANDROID, XrEnvironmentLightingCubemapANDROID, dan XrDirectionalLightANDROID.stateadalah XrLightEstimateStateANDROID yang merepresentasikan status perkiraan cahaya.kindadalah XrSphericalHarmonicsKindANDROID yang diminta oleh aplikasi.coefficientsadalah arrayfloatdua 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 harmonik bola.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_light_estimationharus diaktifkan sebelum menggunakan XrSphericalHarmonicsANDROID typeharus berupaXR_TYPE_SPHERICAL_HARMONICS_ANDROIDnextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai strukturstateharus berupa nilai XrLightEstimateStateANDROID yang validkindharus 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
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Struktur yang valid adalah XrAmbientLightANDROID, XrSphericalHarmonicsANDROID dan XrDirectionalLightANDROID.stateadalah XrLightEstimateStateANDROID yang merepresentasikan status perkiraan cahaya.intensityadalahXrVector3yang merepresentasikan intensitas cahaya terarah. Setiap komponen vektor sesuai dengan saluran merah, hijau, dan biru.directionadalahXrVector3yang merepresentasikan arah cahaya.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_light_estimationharus diaktifkan sebelum menggunakan XrDirectionalLightANDROID typeharus berupaXR_TYPE_DIRECTIONAL_LIGHT_ANDROIDnextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai strukturstateharus 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 harmonik bola merepresentasikan fungsi radiasi cahaya lingkungan, termasuk kontribusi dari cahaya utama. |
|
Koefisien harmonik bola merepresentasikan fungsi radiasi cahaya lingkungan, tidak 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
Contoh kode berikut menunjukkan cara mendapatkan semua kemungkinan kuantitas 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,
};
XrEnvironmentLightingCubemapANDROID lightingCubemap {
.type = XR_TYPE_ENVIRONMENT_LIGHTING_CUBEMAP_ANDROID,
.next = &ambientLight,
}
XrLightEstimateANDROID estimate = {
.type = XR_TYPE_LIGHT_ESTIMATE_ANDROID,
.next = &lightingCubemap,
};
XrResult result = xrGetLightEstimateANDROID(estimator, &info, &estimate);
if (result == XR_SUCCESS &&
estimate.state == XR_LIGHT_ESTIMATE_STATE_VALID_ANDROID) {
// use directionalLight, totalSh, ambientSh, ambientLight,
// lightingCubemap, 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_ANDROIDXR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROIDXR_TYPE_LIGHT_ESTIMATE_ANDROIDXR_TYPE_DIRECTIONAL_LIGHT_ANDROIDXR_TYPE_SPHERICAL_HARMONICS_ANDROIDXR_TYPE_AMBIENT_LIGHT_ANDROIDXR_TYPE_ENVIRONMENT_LIGHTING_CUBEMAP_ANDROID
Enum Baru
Struktur Baru
- XrLightEstimatorCreateInfoANDROID
- XrLightEstimateGetInfoANDROID
- XrLightEstimateANDROID
- XrDirectionalLightANDROID
- XrSphericalHarmonicsANDROID
- XrAmbientLightANDROID
- XrSystemLightEstimationPropertiesANDROID
- XrEnvironmentLightingCubemapANDROID
Fungsi Baru
Masalah
Histori Versi
- Revisi 2, 17-01-2025 (Salar Khan)
- Menambahkan dukungan cubemap pencahayaan sekitar
- Revisi 1, 16-09-2024 (Cairn Overturf)
- Deskripsi ekstensi awal
OpenXR™ dan logo OpenXR adalah merek dagang yang dimiliki oleh The Khronos Group Inc. dan terdaftar sebagai merek dagang di China, Uni Eropa, Jepang, dan Inggris Raya.