Chapter 217 · 3D 图形

阴影

一个太阳加两个聚光的深度阴影,1-4 级联由一份设置结构体全权控制——分辨率、级联数、偏置与过滤半径。

217

启用阴影

// 灯要开 casts_shadow(方向/聚光有效)
xge3d_light_desc_t tSun = xge3dLightDefault(XGE3D_LIGHT_DIRECTIONAL);
tSun.casts_shadow = 1;

// 渲染描述里带阴影设置;NULL 则完全跳过 shadow pass
xge3d_shadow_settings_t tShadow = xge3dShadowDefault();
tShadow.resolution = 2048;
tShadow.cascades   = 4;        // 1..4
tDesc.shadows = &tShadow;
xge3dRender(pRenderer, pScene, &tDesc, &tStats);

调参直觉

  • distance:阴影覆盖的相机远界。级联把这段距离按 split_lambda 非线性切成 cascades 段,近处密远处疏。
  • bias / normal_bias:痤疮与漏光的拉锯。先调 normal_bias。
  • filter_radius / blend:级联间过渡与柔化半径,掩盖接缝。
  • 预算:XGE3D_MAX_CASCADES 4、XGE3D_MAX_SHADOW_SPOTS 2——一个方向光 + 两个聚光阴影。

渲染统计 xge3d_render_stats_t 里有 shadow_draw_calls 与 shadow_maps,实时验证阴影开销;LOD 与阴影使用同一相机层级选择。