ShadowMap

OpenGL基础之Shadow Mapping

现有的实时渲染的阴影计算都是tricky的,还没有完美的阴影计算算法。但是有几种很不错的方法来计算阴影,这些方法或多或少都有一些问题,需要我们在实现的时候注意。

在现有的视频游戏领域,有一种称为shadow mapping的方法。该方法简单易懂,开销也低,可以提供一个不错的阴影效果,并且可以很方便地扩展到高级的阴影算法(OSM,CSM)。

shadow mapping的原理是:

我们从光源位置处渲染一遍场景(即将视点放在光源位置,渲染一次场景),所有在该视锥体中看到的物体,都是被光照照到的;所有没被看到的物体都是位于阴影中的。如图

OpenGL基础之Shadow Mapping

图中所有蓝色的片元都是被光照点亮的,而黑色的则处于阴影当中。

通过这种对比,我们可以利用深度图,来比较像素是否处于阴影当中,实现的方法是:

pass1:我们从光源位置渲染一遍场景,取得场景的深度buffer,输出为一张depth map或者叫shadow map的纹理;

学习OpenGL ES之ShadowMap(二)

本文将为大家解决上一篇文章《学习OpenGL ES之ShadowMap(一)》留下来的问题。

Shadow acne

在上一篇文末,我们看到了有问题的阴影效果,我们常把这种问题称为Shadow acne,在不该出现阴影的地方出现了亮暗相间的条纹。我们通过下面这张图解释产生问题的原因。

学习OpenGL ES之ShadowMap(二)

学习OpenGL ES之ShadowMap(一)

本文将为大家介绍3D实时阴影技术ShadowMap,又称为阴影贴图技术。下面是效果图。

学习OpenGL ES之ShadowMap(一)

学习OpenGL ES之ShadowMap(一)

原理介绍

我们在了解ShadowMap这项技术之前,先来了解一下什么是阴影。在现实生活中,阴影伴随着光而生。下面这张图演示了在平行光下,影子是如何形成的。

同步内容
--电子创新网--
粤ICP备12070055号