[这里是我对模板阴影算法的一些个人的总结和经验- ephtracy -]

模板阴影算法是以网格几何体为对象,以屏幕分辨率为精度渲染的阴影算法,
这些都决定了它的一些天生的优点和劣势, 先说优势:
1. 不需要高端显卡来实现,因为只需要相应的API具备模板缓冲即可,而这又是基本配置;
2. 阴影的精度很高,边缘清晰,因为这个算法的精度只依赖于几何体的精度和屏幕的分辨率;
3. 光源的类型和位置对性能没有决定性的影响,无论是点光源,聚光灯还是平行光源,只是在构建阴影体时稍有区别;

这些都可以和阴影图算法做一个比较
1. 需要显卡具备优良的片段处理能力和对大尺寸高精度纹理的支持;
2. 由于阴影图分辨率的缘故边缘锯齿十分明显,几乎天生就是为软阴影渲染存在的;
3. 点光源需要渲染6张阴影图,而平行光源由于覆盖的范围太广而需要诸如CSM的算法;

但劣势往往和优势是相生的
-------
1. 通常应该采用的Z-Fail的算法需要生成一个封闭体,这需要渲染大量的三角形,占用极高的填充率
-------
2. 因为前期的计算工作都在CPU端,所以会占用很多CPU的开销,虽然可以使用SSE的并行能力大幅提高效率
-------
3. 涉及的对象仅限于几何体构建的物体,而无法渲染在片段中生成的物体,譬如带有Alpha通道的镂空物体,如树叶,或是体渲染的物体,应用Displace Mapping的地形等等
-------
4. 由于依赖于几何体的轮廓构建阴影体,所以如果希望避免阴影出现明显的棱角,必须提高几何体三角形的数量;
-------
5. 但即便如此,自阴影的棱角边缘依然是破坏光源移动阴影变化时的连贯性的重要因素;
-------
6. 阴影边缘过于清晰(即所谓的硬阴影)反倒不真实,
尤其是多光源时,这种明显的分界都会带来视觉上的不适感;
而这是因为这是一个逻辑算法,无法产生半影区中间的过渡,
如果考虑模糊,因为这又是一个基于屏幕空间的算法,所以只能采取在屏幕空间模糊的方法,
但这样远近阴影的模糊程度是一样的,而且与视点相关,
并且很多不该有阴影的地方也有了阴影,反之亦然
-------

即便如此,尽管模板阴影渐渐地退出历史舞台,但是依然会作为一个经典的阴影算法而存在着,
而且经过Doom3时期的完善,这套算法已经相当的完善和优雅了。

[详细理论补充中...]
因为这个算法的基本原理是利用模板缓冲实现对像素是否处于封闭几何体(即阴影体)的内部的测试,
所以这个算法的实现和优化也都围绕着阴影体的构建和内部测试这两个重要步骤
具体的细节和链接待补充中,不过相信你可以在Intel和Nvidia的网站中找到相关的理论基础和实现
-----------------------------------------------------------
以下是我以前关于这方面研究的一些程序截图,
希望可以帮助加深对这一技术的印象,
其中使用了一些Doom3和3DSMAX中的模型;





转载于:https://www.cnblogs.com/ephtracy/archive/2009/08/10/1542518.html

[OpenGL] Stencil Shadow Algorithm相关推荐

  1. OpenGL point shadow点阴影的实例

    OpenGL point shadow点阴影 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <glad/glad.h> #inclu ...

  2. OpenGL stencil test模板测试的实例

    OpenGL stencil test模板测试 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <glad/glad.h> #incl ...

  3. Unity Shader: 理解Stencil buffer并将它用于一些实战案例(描边,多边形填充,反射区域限定,阴影体shadow volume阴影渲染)

    本文示例项目Github连接:https://github.com/liu-if-else/UnityStencilBufferUses 最近有两次被人问到stencil buffer的用法,回答的含 ...

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

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

  5. 【OpenGL】Shader技巧集合

    这篇文章将收集unity中使用shader的相关技巧和特效,会不断地更新内容.关于在Unity中使用shader的介绍,请参考<[OpenGL]使用Unity来学习OpenGL> 常用的内 ...

  6. OpenGL三维图形编程技术(转)

    人们对三维图形技术的研究已经经历了一个很长的历程,而且涌现了许多三维图形开发工具,其中SGI公司推出的GL(Graphics Library)三维图形库表现尤为突出,它易于使用且功能强大.随着计算机技 ...

  7. 南邮 | 计算机图形学大作业:Skybox + Shadow volume

    计算机图形学期末大作业:实现 Skybox 天空盒,以及 Shadow volume 阴影体. 写在前面 本人才疏学浅,水平有限,只实现了 Skybox ,Shadow volume 没有完全实现(我 ...

  8. OpenGL完整教程专栏完整目录

    OpenGL完整教程专栏完整目录 专栏说明如下 专栏目录 专栏说明如下 内容:OpenGL完整教程 数量:314篇博文(2023年2月15日截止) 更新时间至:2023年2月15日(后续加上去的博文, ...

  9. OPenGL模板缓冲区示例程序

    模板测试是把像素存储在模板缓冲区的值与一个参考值进行比较.根据测试的结果,对模板缓冲区中得这个值进行相应的修改. Note:模板测试只有在存在模板缓冲区的情况下才会执行,如果不存在模板缓冲区,模板测试 ...

最新文章

  1. java doc 编写
  2. #pragma once与 #ifndef的区别 (转)
  3. [CommunityServer]看RBAC的一方景象
  4. VMware虚拟机不能上网的解决方法
  5. sasl java_javaSASL_SSL帐号密码方式访问kafka
  6. HbuliderX + vue项目(初始化创建) - 准备篇
  7. ${pageContext.request.contextPath}和request.context
  8. 博士生“凡尔赛”大赏:全程靠自己发了篇SCI,导师发奖金拿到手软
  9. 基于python的计算基因组_【ROSALIND】【练Python,学生信】05 计算DNA序列GC含量
  10. python相关性分析
  11. Android Car - 开机画面
  12. 抗光幕布为什么深受家庭用户青睐?
  13. SD-WAN 与传统 WAN
  14. python 压缩图片为指定大小
  15. 微信小程序时间加法_微信小程序获取系统时间、时间戳、时间时间戳加减
  16. B2B商业模式以及交易模式
  17. 面向金融行业项目实施及开发。
  18. 淘宝数据库负责人介绍淘宝数据库设计
  19. 建立您的初创企业:通过URL邀请他人
  20. 控制用计算机应具有特点,国开(中央电大)专科《可编程控制器应用》网上形考、机考试题及答案...

热门文章

  1. 因为计算机中丢失crlutl,crlutlintl.dll
  2. 我的世界手机版javaui材质包_传奇世界中变版手机版下载-传奇世界中变版手机版最新下载...
  3. 微信抢红包算法 java_java 实现仿照微信抢红包算法,实测结果基本和微信吻合,附demo...
  4. php is_subclass_of,PHP_PHP is_subclass_of函数的一个BUG和解决方法,is_subclass_of的作用: 复制代码 - phpStudy...
  5. c语言剪枝函数,[求助]关于剪枝算法
  6. html密码验证 并跳转页面,vuejs 实现前后端分离登录验证和页面自动跳转
  7. 51单片机c语言教程温度计,单片机课程设计-数字温度计.doc
  8. 云计算机的优点,介绍云的优点和注意事项
  9. 2021泌阳高考成绩查询,驻马店教育局网站2021年泌阳中招成绩查询系统
  10. 对10亿个数据去重java_JAVA 8 新特性