-
ShadowMap的原理
-
光源和目标点之间的连线没有任何物体遮挡,则目标点没有在阴影中;
-
光源和目标点之间的连线有物体遮挡,则目标点处在阴影中;
-
ShadowMap是一张2D纹理图,用来表述遮挡关系;
-
ShadowMap记录了以光源视角来看,各个可照射角度下离光源最近的物体与光源的距离;
-
-
ShadowMap的产生
-
把光源位置作为视点渲染场景,在pixelShader把每像素与光源的距离写到RenderTarget中
-
一定要打开深度测试,因为要保证:写到RenderTarget上的距离值肯定是(同一视角下)距离光源最近的物体与光源的距离。换句说就是不处在阴影中的点的距离值。
-
-
分两个pass进行渲染
-
第一个pass产生ShadowMap
-
第二个pass正常渲染物体
-
-
如何在第二个pass中判断有无阴影
-
vertexShader中,记录当前顶点对应于ShadowMap中的纹理坐标uv
-
pixelShader中取出uv对应的ShadowMap中的值Di,即:当前视角下,距离光源最近的物体与光源的距离
-
pixelShader中计算当前像素与光源的距离Dii,并且与Di进行比较,大于Di则有阴影。
-
-
如何在第二个pass中取出顶点对应于ShadowMap的纹理坐标
-
ShadowMap的优缺点
-
优点:简单、易于实现。
-
缺点:ShadowMap分辨率不高时,或灯光与物体隔得很近时,在边缘处会产生锯齿。
阴影技术:Shadow Map 初探,布布扣,bubuko.com
阴影技术:Shadow Map 初探
原文:http://blog.csdn.net/spracle/article/details/20077425