[返回博客](/cn/blog) # 阴影可视化（第 1 部分，共 2 部分）

Andrew Markovich 六月 05, 2020 [\#.dwg](/cn/blog/tag/dwg) [\#rendering](/cn/blog/tag/rendering)

<a class="a2a_button_facebook"></a><a class="a2a_button_twitter"></a><a class="a2a_button_linkedin"></a>

得益于 ODA Kernel 中新增的阴影功能，您可以计算并绘制场景中光源的阴影。本系列主题描述了如何为现有 .dwg 文件启用阴影，以及如何配置阴影渲染以获得最佳效果。

![example with shadows](/files/inline-images/shadows%20room%20example.jpg)如果图形场景包含光源，阴影可以为现有图形场景增加额外的真实感。如果启用了照明（对于着色和真实感视觉样式），则可以渲染阴影。阴影由 OdGiShadowParameters 类表示，并作为光源参数的一部分进行管理。

#### 为光源启用阴影

首先，为场景中投射阴影的光源启用阴影：

```
void configureLightSourceShadow(OdDbLight *pLight)
{
  OdGiShadowParameters shadowParams = pLight->shadowParameters();
  shadowParams.setShadowsOn(true);
  shadowParams.setShadowType(OdGiShadowParameters::kShadowMaps);
  shadowParams.setShadowMapSize(256);
  shadowParams.setShadowMapSoftness(1);
  pLight->setShadowParameters(shadowParams);
}
```

每个光源都可以有自己的阴影参数。光源在 OdDbDatabase 中表示为 OdDbLight 实体。

阴影参数包含以下用于主要属性的设置方法：

- 可以调用 setShadowsOn() 方法来启用或禁用配置光源的阴影。
- 可以调用 setShadowType() 方法来设置阴影类型。GL2 渲染器始终调用阴影贴图，不支持其他模式，因此建议始终将此参数设置为 kShadowMaps。
- 可以调用 setShadowMapSize() 方法来设置阴影贴图纹理的大小。更大的纹理尺寸会增加阴影细节，但需要额外的资源并使最终阴影更清晰。更小的纹理尺寸会减少阴影细节，但使最终阴影更平滑。
- 可以调用 setShadowMapSoftness() 方法来设置阴影平滑度。目前支持四个平滑阶段：

| 0 | 禁用平滑。 |
| :--- | :--- |
| 1 | 使用 3x3 高斯模糊核进行平滑。 |
| 2 | 使用 5x5 高斯模糊核进行平滑。 |
| ≥3 | 使用 7x7 高斯模糊核进行平滑。 |

由于模糊是在 GPU 端执行的，因此高斯核大小之间没有严重的性能差异；此参数主要影响模糊效果的量（模糊区域的大小）。

#### 为视觉样式启用阴影

每个启用了 Phong 模型照明的视觉样式都可以用于显示阴影，但并非所有默认视觉样式都默认启用了阴影属性。

```
void enableVisualStyleShadows(OdDbVisualStyle *pVisualStyle)
{
  pVisualStyle->setTrait(OdGiVisualStyleProperties::kDisplayShadowType, (OdInt32)OdGiVisualStyleProperties::kShadowsFull);
}
```

要启用视觉样式阴影，请将 kDisplayShadowType 属性设置为 kShadowsNone 以外的值。建议使用 kShadowsFull 设置。此外，建议启用逐像素照明，因为逐面和逐顶点照明不足以显示所有阴影贴图细节。

#### 默认视口照明

最初，使用的是默认视口照明，您需要禁用它：

```
void defaultDefaultLights(OdDbViewport *pViewport)
{
  pViewport->setDefaultLightingOn(false);
}
```

如果启用了默认视口照明，渲染器将绘制它而不是场景光源，结果您将看不到场景光源的任何阴影。

本系列的下一个主题将描述如何基于每个实体处理阴影，以及阴影如何受不同光源类型和属性的影响。

## 今天就开始行动

**免费试用 ODA 软件 60 天。  
无风险，无需信用卡。**

[免费试用](https://www.opendesign.com/cn/free-trial)
