当前位置:   article > 正文

计算机图形学【GAMES-101】6、阴影映射(Shadow Mapping)_games101 阴影

games101 阴影

快速跳转:
1、矩阵变换原理Transform(旋转、位移、缩放、正交投影、透视投影)
2、光栅化(反走样、傅里叶变换、卷积)
3、着色计算(深度缓存、着色模型、着色频率)
4、纹理映射(重心坐标插值、透视投影矫正、双线性插值MipMap、环境光遮蔽AO)
5、几何(距离函数SDF、点云、贝塞尔曲线、曲面细分、曲面简化)
6、阴影映射(Shadow Mapping)
7、光线追踪原理(线面求交、预处理光追加速)
8、辐射度量学与光线追踪
9、蒙特卡洛路径追踪(Path Tracing)(光源采样)
10、材质(BRDF)(折射、菲涅尔项、微表面模型、各向异性材质)
11、渲染前沿技术介绍(双向路径追踪BDPT、MLT、光子映射、实时辐射度、外观建模)
12、相机(视场、曝光、光圈(F-Stop)、薄棱镜近似、CoC、景深)
13、光场、颜色与感知
14、动画(物理模拟、质点弹簧系统、粒子系统、运动学、动作捕捉、欧拉方法)


阴影映射(Shadow Mapping)

之前计算着色的时候,并没有考虑遮挡,即有可能着色点跟光源之间会有别的物体或者是自身的某个部位遮挡住光线,这种情况下应该有阴影产生

ShadowMapping特点

  • 图像空间中计算的,即生成阴影时不需要场景的几何信息
  • 会产生走样现象
  • 只能生成点光源的阴影(硬阴影)

阴影映射的思想

  • 不在阴影里:能被光源和摄像机同时看道
  • 在阴影里:能被相机看到,但不能被光源看到

生成过程

  • Step1:在光源处做光栅化,得到光栅图像(不重要)和深度图(二维数组,每个像素存放深度)
    在这里插入图片描述
  • Step2:从摄像机做光栅化,得到光栅图像和深度图(不重要)
    在这里插入图片描述
  • Step3: 把摄像机得到的图像中的每个像素所对应的世界空间中物体的点投影回光源处,得到该点在光源处的处存放的 深度值 ,将此数值跟该 点到光源的距离 做比较(注意用的是世界空间中的坐标,即透视投影之前的,通过在VS中把MV变换之后的顶点坐标存起来,直接传给PS取得)
    • if (计算距离 ==深度缓存) 则该点不在阴影里
    • if (计算距离 != 深度缓存) 则该点在阴影里**
    • 比如下图,相机处的图像结果里面能看见那个点,用这个点的坐标减去光源的坐标取模得到距离d不等于该点对光源做投影得到的像素位置所存放的深度值z,所以这个点必然在阴影之中
      在这里插入图片描述

遍历所有像素后得到的光栅化阴影计算结果
在这里插入图片描述
光源处光栅化场景的结果图:(只要深度图,不要光栅图像)
在这里插入图片描述
相机处光栅化结果:(只要光栅图像,不要深度图)
在这里插入图片描述

但由于浮点数精度问题,基本不太可能相等,所以会有各种瑕疵。以及老生常谈的采样频率了(阴影贴图分辨率),每个像素做一次or多次采样? 采样率低有锯齿,采样率高耗性能。

硬阴影、软阴影概念

在这里插入图片描述在这里插入图片描述

软阴影的必要条件是光源有一定的大小

在这里插入图片描述


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/768916
推荐阅读
  

闽ICP备14008679号