Chapter 218 · 3D 图形

IBL 与环境

立方图环境同时是天空与间接光源:六张等尺寸面组成天空盒,预计算的辐照度 / 预滤波 / BRDF 三件套构成静态 IBL。

218

创建环境

xge3d_environment_desc_t ed = { 0 };
ed.srgb = 1;                       // 颜色立方图
for (int f = 0; f < 6; ++f) ed.faces[f] = &tFaces[f];  // +X,-X,+Y,-Y,+Z,-Z

xge3d_environment *pSky;
xge3dEnvironmentCreate(&ed, &pSky);

tDesc.environment = pSky;   // 渲染时借用;NULL 则无天空

六面的行列朝向遵循 GL 立方图约定(头文件注释给出了每个面的左→右、上→下世界轴对),岛屿示例在 CPU 上程序化生成六面渐变天空再交给引擎。环境的 CPU 拷贝在创建时完成,首次渲染一次性上传。

静态 IBL 三件套

xge3d_ibl_desc_t ibl = { 0 };
ibl.irradiance   = tCosineFaces;      // 余弦卷积 / π,线性 RGBA8
ibl.prefiltered  = tGgxMips;          // GGX 全 mip 链,roughness 0..1
ibl.level_count  = tMipCount;
ibl.brdf         = &tBrdfLut;         // R=scale G=bias;X=NdotV Y=roughness
xge3dEnvironmentSetIBL(pSky, &ibl);

tDesc.ibl_intensity = 1.0f;        // 0 关闭间接光
离线生成:辐照度/预滤波贴图由离线工具从环境图卷积产出(工具不入运行库);EnvironmentSetIBL 事务式拷贝预计算数据,传 NULL 移除 IBL 但保留天空面。