基于Shadow Map的阴影实现
0、简介
Shadow Mapping是一种基于图像空间的阴影实现方法,其优点是实现简单,适应于大型动态场景;缺点是由于shadow map的分辨率有限,使得阴影边缘容易出现锯齿(Aliasing);关于SM的研究很活跃,主要围绕着阴影抗锯齿,出现了很多SM变种,如PSM,LPSM,VSM等等,在这里http://en.wikipedia.org/wiki/Shadow_mapping可以找到很多SM变种的链接;;SM的实现分为两个pass,第一个pass以投射阴影的灯光为视点渲染得到一幅深度图纹理,该纹理就叫Shadow Map;第二个pass从摄像机渲染场景,但必须在ps中计算像素在灯光坐标系中的深度值,并与Shadow Map中的相应深度值进行比较以确定该像素是否处于阴影区;经过这两个pass最终就可以为场景打上阴影。这篇文章主要总结一下自己在实现基本SM的过程中遇到的一些问题以及解决方法,下面进入正题。
1、生成Shadow Map
为了从灯光角度渲染生成Shadow Map,有两个问题需要解决:一是要渲染哪些物体,二是摄像机的参数怎么设置。对于问题一,显然我们没必要渲染场景中的所有物体,但是只渲染当前摄像机视景体中的物体又不够,因为视景体之外的有些物体也可能投射阴影到视景体之内的物体,所以渲染Shadow Map时,这些物体必须考虑进来,否则可能会出现阴影随着摄像机的移动时有时无的现象,综上,我们只需要渲染位于当前摄像机视景体内的所有物体以及视景体之外但是会投射阴影到视景体之内的物体上的物体,把它们的集合称为阴影投射集,为了确定阴影投射集,可以根据灯光位置以及当前的视景体计算出一个凸壳,位于该凸壳中的物体才需要渲染,如图1
基于Shadow Map的阴影实现相关推荐
- Unity Shader - Custom SSSM(Screen Space Shadow Map) 自定义屏幕空间阴影图
文章目录 思路 实践 获取光源空间ShadowMap[A] 获取屏幕空间的深度图[B] 获取SSSM(Screen Space Shadow Map) 绘制一个全屏的Quad[C] 输出SSSM RT ...
- 阴影映射(Shadow Map)的研究(三)
阴影映射(Shadow Map)的研究(三) 最近为了自己制作的项目可是吃了不少苦头,这其中关键的一点就是想要实现阴影映射(Shadow Map).为了实现目标,我参考了网络上很多相关的资料,也看了一 ...
- 联级阴影贴图CSM(Cascaded shadow map)原理与实现
联级阴影贴图CSM(Cascaded shadow map)原理与实现 CSM是利用分层的ShadowMap技术,实现大场景的阴影算法.示意图如下图: 我们通过给眼视锥分片,为每个分片生成一个相同分辨 ...
- Shadow Map阴影贴图技术之探 【转】
这两天勉勉强强把一个shadowmap的demo做出来了.参考资料多,苦头可不少.Shadow Map技术是目前与Shadow Volume技术并行的传统阴影渲染技术,而且在游戏领域可谓占很大优势.本 ...
- 阴影映射(Shadow Map)的研究(一)
阴影映射(Shadow Map)的研究(一) 这段时间在搭好自己的框架后,就开始马不停蹄地研究阴影映射的内容了,说起阴影映射,倒不如说shadow map更容易被专业人士所接受.shadow map是 ...
- [工作积累] shadow map问题汇总
1.基本问题和相关 Common Techniques to Improve Shadow Depth Maps: https://msdn.microsoft.com/en-us/library/w ...
- Shadow Map 原理和改进 【转】
http://blog.csdn.net/ronintao/article/details/51649664 参考 1.Common Techniques to Improve Shadow Dept ...
- Cascaded Shadow Map(CSM)中的一些问题
Cascaded Shadow Map(CSM)是目前引擎中主流的阴影技术,效率与效果均不错.它与传统的单张Shadow Map的区别主要在于将视锥体进行了层次的分解,每一层单独计算相关的SM,这样在 ...
- Shadow Map在DirectX9.0 SDK Sample 的实现方法
很宝贵的资料,总结的相当不错.目前原创作者未知,如有知情者肯请告知,感激不尽~ 一.前言 这个教程主要面对DirectX9.0的初学者,文中代码说明部分以DirectX9.0c SDK(Augus ...
最新文章
- 实习小白::(转) Cocostudio动画编辑器的使用
- 借助液态金属传感器和AI,这次机械手可能真的找到感觉了
- mysql命令行语句_MySql命令行命令和SQL语句
- 将线程pid转成16进制_硬件资讯 | AMD 线程撕裂者 5000 系 CPU 将包含 16 核版本
- 在WPF中实现平滑滚动
- Should i Backup all my domain controllers
- PyTorch 1.5 发布,与 AWS 合作 TorchServe
- Windows版Qt
- 设计一个按优先数调度算法实现处理器调度的程序_计算机中的程序都是怎么运行的,来深入了解一下吧...
- C 怎么读取Cpp文件_python之调用C加速计算(一)
- 通过继承来实现注解方式的属性注入
- 普林斯顿微积分读本篇十五:积分方法
- hibernate 注解方式 属性mappedBy详解
- ROS:机器人系统设计(连接摄像头、Kinect、激光雷达、URDF建模)
- 组合数学 —— 常用组合公式
- linux sed 添加空行,sed之添加空行
- 解决tomcat在pycharm中的初始化报错“ Failed to transfer file”“could not create folder”“(Permission denied)”
- 什么是同类群组联合学习 (FLoC)?
- 【期末复习】信息安全技术(含答案)
- Delphi变成小技巧——直接将excel当做表来显示