对于一款游戏来说,场景永远是最难维护的,而场景里面的地形,阴影也是最难管理的。这也是各种地形算法,阴影算法新起的根本原因。没有最优的算法,只有最优的方案,任何解决方案都是在效果和效率之间权衡和取舍。要做到这一点,前提是对相关的算法都有所了解,这里列举出阴影算法相关的技术。
Shadow Volume & Shadow Map:
阴影的实现主要有两种方式,Shadow Volume 和 Shadow Map,我最开始还挺喜欢Shadow Volume,因为它够精确。但事实上这是一种错误的想法,首先效率上Shadow Volume不具备可操作性,没有多少性能的提升空间。其次就是,软阴影会导致Shadow Volume精确的这个优点没有啥优势,现在主流也是Shadow Map。
Shadow Map:
SM的硬伤就是走样问题,这个问题会受到光源和模型的距离影响,一般距离越大走样越严重。而一般来说,室外环境产生阴影的光源正好又是离模型比较远的,这样一来SM的走样更加需要解决。
目前SM针对走样的算法有很多种变体,其中主要包括PCF,PSM系列和ASM系列。
PCF(Percentage-Closer Filtering) :这是一种纯粹的模糊技术,简单意味着效率高,但是它只能通过模糊的方式缓解走样,无法根治。其变种是:PCSS个人觉得这是阴影生成上的必选方案,开销小而且真实 nice!
VSM(variance shadow map 方差SM) :运用了切尔雪夫不等式,通过shadow map中每个象素的深度值期望和方差来计算灰度值。VSM会出现光渗现象,所以出现了一种弥补这个缺陷的算法LVSM。
CSM(convolution shadow map 卷积) :此方法是运用基于阴影重建,因为深度测试要么为0,要么为1 ,从而可以构造出一个x坐标为[-1,1],y坐标为[0,1]的函数,对此函数进行fft变换,运用基准函数(sin和cos)来重新构建Shadow Map 。 此方法占用内存比较多,需要多个render target。直接不考虑。
PCF,VSM,CSM:这三种方案具有相同点,都只是纯粹意义上的模糊,并不能解决根本问题。尽管如此,在选择阴影方案的时候需要这里的其中一种,个人更喜欢PCSS和LVSM看看效率先。
PSM(Perspective Shadow Map 基于透视空间的SM) :在世界空间里,模型的比例是不会发生变化的,但是在透视转换的时候,近处的模型会映射的比较大,而远处的则比较小。远处比较小物体影子也会小一些,这样如果把传统的SM在view空间拍照,变成在透视空间拍照。显然可以把更多的精度留给近处的较大的物体,这种思路的正确的,而且复杂度也不高。但是呢,这种方式只能减缓走样,却不能根除,因为光离模型的距离足够大的话,即便是这样还是会出现走样的情况。在PSM基础上还发展了TSM和LiSPSM两种升级版,如果要采样PSM系列的方式的话,可以采样这两种的其中一种。
ASM(Adaptive Shadow Maps 自适应阴影贴图) :这种处理是在拍照上下功夫,SM在拍照的时候,会直接生成光源内所有的模型的深度。但事实上并不是所有的模型都出现在视锥内,其他的就属于糟蹋了。于是采用通过场景内的模型进行反推,然后求出阴影图,这种方式需要用到四叉树对阴影图进行管理。在效果上它是治根的,但是在效率上它是拖后腿的。在ASM基础杀个还发展了ASSM,RMSM,QVSM,FVSM,PRSM和PSSM,事实上这些都不够快。
CSM(Cascaded Shadow Maps 级联) :虽然阴影的方案很多,但是在个才是大型场景中阴影的必选方案,它在效率和效果上都有不错的表现。巧的是,我在刚才看上面的算法的时候,就想到了这个。它的优点是什么呢?阴影走样的本质是光源离物体太远,所以要解决就需要把光源移近一点,因为我们需要的是光的方向,而不是亮度,所以光离的距离对阴影不产生影响。离近了就照不全了,找不全就把场景分成很多块进行拍照,尽管这种方式需要解决一些问题,但是它从根本上解决了走样这个问题。
总结:CSM + LVSM 或 CSM + PCSS 这两个方案选择谁,主要取决于LVSM 和PCSS 效果和效率上的比较,我还没有实现,貌似是LVSM效率高一些。
相关推荐
但是,如今,利用法律数据的技术正在将法律实践转移到汇总诉讼数据中可观察到的趋势和模式的阴影下。 在本文中,我们描述了促进这种范式转变的工具,并研究了律师如何在诉讼和交易场景中使用它们来预测诉讼结果并...
Mobileye激光雷达技术-机动车辆驾驶辅助系统装置方法汇总,共333份。 1视觉增强导航 1自适应道路模型经理 2使用近红外(NIR)照明和卷帘门构建夜视和其他驾驶员辅助系统(DAS) 2视觉增强导航 3使用近红外(近红外...
全书分6篇共25章,主要内容有C#开发环境的使用、C#语言基础应用、字符串处理技术、数组和集合的使用、面向对象编程技术、数据结构与算法、Windows窗体基础、特色窗体界面、窗体控制技术、MDI窗体和继承窗体、Windows...
2)从用户来看:补偿路径损耗和阴影衰落,适应信道变化。 3、简单讲述基于非竞争的随机接入过程? 第一步:在下行的专用信令中分配随机接入的Preamble; 第二步:在上行RACH上发送随机接入的Preamble; 第三步:在DL_...
地图可以平面或者三维带阴影效果。 杰笛热图使用Swing的TableModel作为其数据模型,所以它很容易与现有的数据源集成。您还可以使用杰笛数据库表格提供的TableModel,这样您就可以用JDBC提供的实时数据。大量的数据...
技术堆栈:html,css,javascript,汇总,react.js,webgl,Three.js,golang,mongodb,nodejs,electron,协议缓冲区。 如果对您有帮助,请以支持我们。 谢谢! v0.6.0即将推出 v0.5.10已发布 发行日期:2020年...
装修小帐本可以计算房间的日照情况,通过设定经纬度和时间,软件可以快速的计算出全年任意一个时刻日照情况,包括每扇门,每扇窗在地面上的阴影投影,便于选择户形和安排家具。 1.2版包含一个标准ActiveX插件,这...
实例150 阴影效果的文字 214 实例151 倾斜效果的文字 214 实例152 渐变效果的文字 215 实例153 缩放效果的文字 216 实例154 辉光效果文字 217 实例155 如何在图片中移动文字 220 4.7 图像动画 221 实例156 ...
实例150 阴影效果的文字 214 实例151 倾斜效果的文字 214 实例152 渐变效果的文字 215 实例153 缩放效果的文字 216 实例154 辉光效果文字 217 实例155 如何在图片中移动文字 220 4.7 图像动画 221 实例156 ...
实例150 阴影效果的文字 214 实例151 倾斜效果的文字 214 实例152 渐变效果的文字 215 实例153 缩放效果的文字 216 实例154 辉光效果文字 217 实例155 如何在图片中移动文字 220 4.7 图像动画 221 实例156 ...
实例150 阴影效果的文字 214 实例151 倾斜效果的文字 214 实例152 渐变效果的文字 215 实例153 缩放效果的文字 216 实例154 辉光效果文字 217 实例155 如何在图片中移动文字 220 4.7 图像动画 221 实例156 ...
本书将最有用的CSS技术汇总在一起,在介绍基本的CSS概念和最佳实践之后,讨论了核心的CSS技术,例如图像、链接、列表操纵、表单设计等。每一章内容由浅入深,直到建立比较复杂的示例。之后本书又着重讨论如何使用DIV...