瞭解如何使用光源預估功能 您的網站或應用程式
必要條件
請務必瞭解基本 AR 概念 以及如何在繼續操作前設定 ARCore 工作階段。
以適當的模式為每個工作階段設定一次 API
針對您要使用的模式,為每個工作階段設定一次亮度估算。
環境 HDR
// Configure the session's lighting estimation mode for // AR_LIGHT_ESTIMATION_MODE_ENVIRONMENTAL_HDR. ArConfig* config = NULL; ArConfig_create(session, &config); ArSession_getConfig(session, config); ArConfig_setLightEstimationMode(session, config, AR_LIGHT_ESTIMATION_MODE_ENVIRONMENTAL_HDR); ArSession_configure(session, config); ArConfig_destroy(config);
環境強度
// Configure the session's lighting estimation mode for // AR_LIGHT_ESTIMATION_MODE_AMBIENT_INTENSITY. ArConfig* config = NULL; ArConfig_create(session, &config); ArSession_getConfig(session, config); ArConfig_setLightEstimationMode(session, config, AR_LIGHT_ESTIMATION_MODE_AMBIENT_INTENSITY); ArSession_configure(session, config); ArConfig_destroy(config);
已停用
// Disable the session's lighting estimation mode. ArConfig* config = NULL; ArConfig_create(session, &config); ArSession_getConfig(session, config); ArConfig_setLightEstimationMode(session, config, AR_LIGHT_ESTIMATION_MODE_DISABLED); ArSession_configure(session, config); ArConfig_destroy(config);
使用從光線預估中取得的值
如要使用從光電估計取得的數值,請取得每個影格的光度預估值。
// Get the current frame. ArFrame* ar_frame = NULL; if (ArSession_update(session, ar_frame) != AR_SUCCESS) { LOGE("ArSession_update error"); return; } // Get the light estimate for the current frame. ArLightEstimate* ar_light_estimate = NULL; ArLightEstimate_create(session, &ar_light_estimate); ArFrame_getLightEstimate(session, ar_frame, ar_light_estimate); ArLightEstimateState ar_light_estimate_state; ArLightEstimate_getState(session, ar_light_estimate, &ar_light_estimate_state); // Check that the light estimate is valid before proceeding. if (ar_light_estimate_state != AR_LIGHT_ESTIMATE_STATE_VALID) { LOGE("ArLightEstimateState is not valid."); ArLightEstimate_destroy(ar_light_estimate); return; }
接著取得目前設定的環境 HDR 照明元件:
環境 HDR
// Get intensity and direction of the main directional light from the current // light estimate. float direction[3]; ArLightEstimate_getEnvironmentalHdrMainLightDirection( session, ar_light_estimate, direction); float intensity[3]; ArLightEstimate_getEnvironmentalHdrMainLightIntensity( session, ar_light_estimate, intensity); // Get ambient lighting as spherical harmonics coefficients. float ambient_spherical_harmonics[27]; ArLightEstimate_getEnvironmentalHdrAmbientSphericalHarmonics( session, ar_light_estimate, ambient_spherical_harmonics); // Get HDR environmental lighting as a cubemap in linear color space. ArImageCubemap cubemap_textures; ArLightEstimate_acquireEnvironmentalHdrCubemap(session, ar_light_estimate, cubemap_textures); int width = -1; int height = -1; int32_t format = -1; for (int i = 0; i < 6; ++i) { ArImage* image_ptr = cubemap_textures[i]; // We can access the cubemap texture data through ArImage APIs. ArImage_getWidth(session, image_ptr, &width); ArImage_getHeight(session, image_ptr, &height); ArImage_getFormat(session, image_ptr, &format); // Acquired image must be released with ArImage_release once it is no // longer needed. ArImage_release(image_ptr); } ArLightEstimate_destroy(ar_light_estimate);
環境強度
// Get the pixel intensity of AR_LIGHT_ESTIMATION_MODE_AMBIENT_INTENSITY mode. float pixel_intensity; ArLightEstimate_getPixelIntensity(session, ar_light_estimate, &pixel_intensity); // Get the pixel color correction of // AR_LIGHT_ESTIMATION_MODE_AMBIENT_INTENSITY mode. float color_correction[4]; ArLightEstimate_getColorCorrection(session, ar_light_estimate, color_correction); ArLightEstimate_destroy(ar_light_estimate);
使用環境 HDR API 確保能源保育
從表面反射的光線,能源保育原則是 但它的衝擊力遠不如預期此規則是 強制轉譯,但在舊版中通常省略 電玩遊戲和行動應用程式的轉譯管線
如果採用採用 Environmental HDR 的實體型算繪管道 估算時,只需確保在生產過程中使用實體材料 以及虛擬物件
如果不是使用實體型管道,則有幾個 選項:
最理想的解決方案是遷移至實體型管道。
不過,如果無法解決問題,建議將時間相乘 是否來自能源保育的非物理性物質 。這樣做可確保至少使用 BRDF 陰影模型 可以轉換成實際資料每個 BRDF 都有不同的因素 -- 例如,差異反射的值為 1/Pi。