为了增加场景的表现力,在渲染中添加光照效果必不可少。首先用某种算法对整个场景生成光照渲染效果,然后再将光照渲染效果以纹理的方式来存储,将场景中各个多边形所对应的光照效果存于光照贴图中,这样的话在实时渲染时,只需要对场景在原有纹理渲染的基础上添加多纹理的融合即可渲染出光照效果。然而这样得到的光照贴图是和场景中每个单一多边形相对应的,因此若场景中有N个多边形就需要对应N个光照贴图,这样在渲染时就需要对每个多边形进行纹理绑定操作,受限于硬件的性质,这个操作是比较耗时,因此就影响了整个渲染的效率,于是就需要将每个多边形对应的光照贴图进行合并得到整个场景的光照贴图从而避免渲染时的纹理切换。于是,整个场景光照贴图的生成过程就包括:
1. 场景带有光照的渲染
2. 单个多边形光照纹理贴图的生成
3. 整个场景中多边形光照纹理贴图的合并
场景带有光照的渲染
这个操作是下一步生成每个多边形的光照纹理贴图的关键。一般来说游戏中使用的预处理光照效果都是全局光照,包含阴影、漫射等这些常规渲染管线无法达到的效果。由于采用预处理来生成,故而也就需要光照算法与视点无关,这样才可以对整个场景生成光照效果。辐射度算法就比较符合上述特点,因此就常被用来生成场景的光照效果,而且得到的光照效果很容易与每个多边形进行映射得到光照纹理贴图。
多边形光照贴图的生成