Ogre中的动态阴影技术详解
1. 动态阴影简介
在3D场景渲染中,阴影是重要的空间线索,对场景的感知真实度和用户满意度有极大贡献。不过,3D图形的实时阴影计算即便有强大的硬件加速,仍然成本高昂。目前,Ogre支持两种主要的动态阴影生成类型:模板阴影和纹理阴影,每种类型又有调制和加法两种变体。
1.1 阴影技术概述
在使用Ogre的阴影技术前,需要了解以下几点:
- 场景中只能使用一种阴影技术,且应在渲染场景前设置(理想情况是创建场景管理器实例时)。
- 通过调用 SceneManager::setShadowTechnique()
设置阴影技术,可选参数有 SHADOWTYPE_STENCIL_ADDITIVE
、 SHADOWTYPE_STENCIL_MODULATIVE
、 SHADOWTYPE_TEXTURE_ADDITIVE
或 SHADOWTYPE_TEXTURE_MODULATIVE
。
- 阴影默认是禁用的。
- 对象的阴影投射和接收由其材质控制,也可在对象本身进行控制。默认情况下,启用阴影后所有对象都会投射阴影,半透明或透明对象默认不投射阴影,但可设置半透明材质投射阴影。
- 由于模板阴影算法的特性,半透明/透明对象要么投射完全实心的模板阴影,要么不投射阴影,除非使用纹理阴影(纹理阴影默认处理透明度)。
- 灯光可以设置为不投射阴影,不同灯光类型和阴影技术的兼容性如下表所示:
| 阴影技术 | 点光源 | 聚光灯 | 平行光 |
|