计算机图形学中,实时阴影分两类:Shadow Volume和 Shadow Maps。其本质为找到屏幕中未被光源照射到的象素,在绘制光照物体时,忽略这些象素。阴影的要素由光源,遮挡物与接受物组成。遮挡物也是阴影接受物之一。
阴影与阴影空间的形成: 以光源为中心(或为方向),凡是被遮挡物表面遮挡掉的空间,都处于阴影之下。在没有接受物时,此空间分为两个部分。光照空间和阴影空间。阴影空间为:光源与遮挡物面向光源轮廓形成的不规则无限大的锥。 此时,阴影只存在于遮挡物本身的背光面上。当此空间中有分离的第三个物体,且有部分处于阴影空间中时,第三个物体成为阴影接受物,其面向光源表面会有遮挡物的影子。同时其本身也是遮挡物。
屏幕空间阴影:共同的想法都是力图在已光栅化物体的屏幕DEPTH BUFFER中,用某种光线与遮挡物之间关系形成的光栅图形象素,与此象素所在位置的深度值做比较。从而判断出此象素是否处于阴影空间中。
Shadow Volume(阴影体)就是此处定义的阴影空间。阴影体由从光源到面向光源遮挡物轮廓边组成的若干三角面组成。还需要加上遮挡物面向光源的所有三角形。它是阴影体的盖子。Shadow Volume绘制的目标,就是判断一个物体,是否处于阴影空间之中。把物体所有位于阴影体的象素都标记出来。不被渲染。
由于无限远投影VOLUME,和VOLUME CAP以及Z-FAILED的结合使用,改进了VOLUME的近截面穿透,镜头在VOLUME内正确阴影绘制等硬伤,已经趋于成熟。
在控制填充率方面的加速有:
double surface stencil rendering:由硬件一次性绘制完STENCIL BUFFER里的锥;否则要分里外面分别渲染两次。
depth range culling:由硬件检测深度范围内才进行STENCIL的操作。
volume culling:图中白点是光源,白盒子是光源AABB,蓝色是SCREEN SPACE的AABB。黄色是遮挡物。可以看到阴影体与光源AABB相交的点在SCREEN SPACE中构成了绿色的AABB。这才是真正需要进行STENCIL 操作的地方。使用SISSOR TEST进行优化。

几何方面的优化:
aotu gen volume in  vertex shader :使用VERTEX SHADER直接在显卡内生成VOLUME三角形
非封闭网格volume generation:非封闭网格的volume如今也可以解决了。
静态预计算volume: 没啥说的,相对不动的光和遮挡物结队就先把volume算出来存着了。

Shadow Volume对于遮挡物几何拓扑关系信息的要求,是此方法最大弊病。无论skin还是变形mesh,甚至只要物体或灯一动,都必须重新背面剔除着寻找轮廓,重新生成volume三角形等等繁重几何体力劳动。由于算法所注定,用volume者,身心具勤也....

Soft Shadow Volume: 软阴影方面,利用volume的几何属性,可以根据面光源大小,真的切出些模仿半影空间来。来看看画条轮廓边的阴影如何做:

多的就不记录了。一般来讲,太复杂的算法,除非硬件真死命支持,否则生命力很难说。。。
Shadow Maps, 顾名思义,就是阴影图。其本质定义,应该叫Depth Maps(深度图)。记录了遮挡物表面象素到光源的距离。实际SHADOWMAPS就是做了个判断,在光源投影坐标系里(就是把相机屏幕摆到光源前,观察点就在光源),遮挡物和接受物都投影在光源透视平面(相机屏幕)。两物体在屏幕上会有重合的点,比较这两个点的实际位置离光源哪个更远。再概括讲,就是判断从光源射出的光线,是先遇到了遮挡物,还是先遇到了接受物。如果先遇到遮挡物,那么这条光线延伸线的地方如果有接受物,则接受物这个地方就在阴影下。

SHADOWMAP的变形改进算法,主要致力于解决走样问题。有限空间,SHADOWMAP一般也就512X512。
透视SHADOWMPA,著名的PSM,它本身瑕疵多多,限制很大。难为被咬牙切齿的咒骂为骗局。确实光PSM在游戏实用工程上还是比较难。但其创造性的打开一个局面,即,shadowmaps不光只可以和视觉透视一样采用正常透视绘制,也可以无所不用其极的变形绘制shadowmaps的空间。也就有了后来的梯形shadow maps,光源空间透视shadow mpas,对数shadow maps等方法.甚至还引发了irregular shadow maps等奇思怪想。发明一种新光栅化方法,加速shadow maps...有这功夫,还不如发明一种自动64X64采样的柔化shadow maps功能,或者自动shadow cubemaps,把点光源的shadow maps自动化。
因为Perspective shadow maps,Light-space perspective shadow,Trapezoidal shadow maps,Practical Logarithmic Shadow Maps的思路都大体一样,所以查一篇就清楚一大片。不多说。
切分shadow maps,想法也很直接,既然一个shadowmap分辨率有限,就想办法按照空间(Z)多分出几块来,每个部分用不同分辨率的画。类似Adaptive shadow maps,Plural sunlight buffers,Tiled shadow maps。
变形+切分:Dual paraboloid类似环境贴图,但这回是把周围360球型世界映射到双抛物面上。PSM with cube maps可以模拟点光源的阴影。点光源是shadowmaps的死穴。犹如shadow volume的几何密集劳动...把周围场景分6次绘制进一个CUBE MAP。。。听着就很辛苦...

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/puzzy3d/archive/2006/08/17/1076599.aspx

Realtime Shadow Rendering Log相关推荐

  1. Real-Time Skin Rendering

    Wrap Lighting 最简单的Trick就是这个方法.假设uniform光照,把原本的 N ⋅ L N\cdot L N⋅L变成 N ⋅ L + w r a p 1 + w r a p \fra ...

  2. 《Real-Time Rendering 4th Edition》全文翻译 - 第3章 图形处理单元(GPU)(中)3.4 ~ 3.6

    不闹情绪了--好好学习,拯救世界-- 实时渲染(第四版)Real-Time Rendering (Fourth Edition) 第3章 图形处理单元(GPU) Chapter 3 The Graph ...

  3. Real-Time Rendering——Chapter 15Non-Photorealistic Rendering非真实感渲染15.1 Toon Shading15.1卡通阴影

    "Using a term like 'nonlinear science' is like referring to the bulk of zoology as 'the study o ...

  4. 简述Shadow Mapping和Shadow Volume的新方法

    简介 阴影渲染在真实感图形渲染中非常重要,它作为一种视觉上的提示,将场景的空间结构和物体的相对关系反馈给用户.研究表明,阴影的有无对用户认知空间物体位置具有重要作用[1].然而,实时.高清的阴影渲染始 ...

  5. [转]Nvidia 的Shadow 文章收集

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://phoenixzz.blogbus.com/logs/121660419.html Shadowing is a key ...

  6. GPU Gems1 - 14 透视阴影贴图(Perspective Shadow Maps: Care and Feeding)

    开篇先说,这文章好难懂啊,到现在也没完全弄明白,有大佬的话欢迎指点.这篇大体意思是对Perspective Shadow Maps进行部分优化.GEMS这书这点是真挺蛋疼,很多文章都是对某项技术的优化 ...

  7. Unity3d 屏幕空间人体皮肤知觉渲染次表面散射Screen-Space Perceptual Rendering Subsurface Scattering of Human Skin...

    之前的人皮渲染相关 前篇1:unity3d Human skin real time rendering 真实模拟人皮实时渲染 前篇2:unity3d Human skin real time ren ...

  8. Unity3d 屏幕空间人体皮肤知觉渲染次表面散射Screen-Space Perceptual Rendering Subsurface Scattering of Human Skin

    之前的人皮渲染相关 前篇1:unity3d Human skin real time rendering 真实模拟人皮实时渲染 前篇2:unity3d Human skin real time ren ...

  9. Unity阴影(Shadow)、Shadowmap

    Unity阴影(Shadow) 在Unity中,阴影(Shadow)是用于模拟场景中物体之间相互遮挡和光照效果的特性.阴影可以增加场景的真实感,并在视觉上提供深度和空间感. Unity提供了几种阴影投 ...

最新文章

  1. 通过web sql实现增删查改
  2. java学习与总结:索引
  3. 【CyberSecurityLearning 29】Linux下命令帮助、压缩、vim、软件安装
  4. 忘记目标 潜心做事([日] 端河光二)
  5. 低门槛彻底理解JavaScript中的深拷贝和浅拷贝
  6. VB调用VC DLL函数
  7. python 按行写入_Python中将变量按行写入txt文本
  8. Matlab图形修饰之色彩处理
  9. jQuery 插件 autocomplete 的使用
  10. 三大有限元分析软件(ABAQUS、ANSYS、MSC)的优缺点是什么?应如何选择?
  11. 深海迷航坐标传送代码_《深海迷航》秘籍代码怎么用及深海迷航代码大全
  12. 【Git】675- 让你的 commit 更有价值
  13. 读书百客:《千秋岁·淡烟平楚》赏析
  14. 【Alist + Teracloud】WebDAV免费畅游互联网个人方案总结,一些支持WebDAV的应用推荐
  15. 【数模之文本文件操作】
  16. 数据说话:众安保险土豪式融资的背后
  17. Linux在vi/vim编辑文件时(104键)键盘右边数字键输入异常解决方法
  18. C语言windows.h库的常用函数(三)
  19. 读书笔记 | 国富论(卷二)
  20. 用QEMU模拟运行 WIndows 98 SE (2004.12.31更新)

热门文章

  1. 中学计算机教学叙事范文,初中地理教育叙事范文
  2. php用空格分隔的字符串对比,探讨各种PHP字符串函数的总结分析
  3. java设置面板的大小_java – 设置面板的大小
  4. centos系统中,相同的shell命令,直接在命令行中可以执行,在.sh文件中运行不了的原因
  5. 【windows】下Anaconda详细安装过程
  6. 计算机网络原理201810自考,2018年10月自考04741计算机网络原理试卷及答案
  7. 浏览器和驱动版本对应关系
  8. 自考计算机专业,自考计算机
  9. 计算机专业毕业后现状,计算机专业怎么样_毕业生道出现状_“千万”别学
  10. 计算机辅助普通话测试试题及答案,普通话测试试题及答案