您当前所在位置:首页>>CF活动大全

cf小平助手《RTR4th》(总结七)

来源:CF装备助手|发布时间:2022-10-25 17:52:03|浏览次数:71

cf一键领取登录入口

阴影 (Shadows)

参与过游戏开发的同学一定都多多少少了解过甚至实现过阴影这种渲染技术。最简单的无非在角色模型的脚底下贴个图,实现了所谓的高效性。在好多年以前,这种做法可谓是风靡全球的,不管是MMO、还是单机游戏,更有甚者,甚至于连阴影都不舍得给玩家看看,所以给人一种极度不真实的感觉。时至今日,还有不少手游依然采用同样的做法。

而下面介绍的部分阴影算法,也算是现在较为广泛的以及流行的,至少曾经流行过。

平面阴影(Planar Shadows)

对于其他实时阴影来说,这种阴影应该算是在少数需要绘制阴影的应用场景中的高效一种阴影的,一句话描述,其实就是在保持其他性能损耗的同时,对需要绘制阴影的模型对象,再进行一次pass,将它以一定的角度压扁在指定平面上。一般情况下,有多少个模型,会增加多少个pass。

这基本上算是所有阴影算法之中,最简单的了。

下面是一些关于Planar shadow的实现。

Unity3D Planar Shadows(平面阴影 CG Shader 04)tgerm.org/U3D-Cg-04/
平面阴影www.jianshu.com/p/9015863b6060
Untiy 3d ShaderLab平面阴影(一)gad.qq.com/article/detail/27818
http://qiankanglai.me/2016/12/23/planar-shadow/index.htmlqiankanglai.me/2016/12/23/planar-shadow/index.html
Planar Shadow | Loading & Learningqiankanglai.me/2016/12/23/planar-shadow/index.html
钱康来的Planar Shadowqiankanglai.me/2016/12/23/planar-shadow/index.html
【D3D11游戏编程】学习笔记十九:平面阴影的渲染 - CSDN博客blog.csdn.net/bonchoix/article/details/8507823

曲面阴影(Shadows on Curved Surfaces)

将Planar Shadow扩展到曲面的一种简单方式其实就是生成的阴影图像作为投影纹理(Projective Texture)使用。

从光的地方作为视点去思考这个阴影的问题。

光线照射的地方应该总是明亮的,它的光彩照耀不到的之处,皆为阴影。

将其渲染成一张纹理,之后我们将纹理投影到接收阴影的表面,我们将这些表面叫做receivers,那么在这些receivers上,为了要渲染这一张纹理,我们要想一个办法,为这些receivers上的顶点生成一个与之对应的(u, v)。

怎么生成这个(u, v)?当然是通过CPU在Application stage生成。

投影纹理映射(Projective Texture Mapping)gad.qq.com/article/detail/35093

渲染的时候,它就在receivers表面上应用投影纹理。

另外,它还有一个可能比较让你操心的难点,哪些表面才是哪个物体的receivers呢?

阴影锥(Shadow Volumes)

随便看看就好,过时了。

Shadow Volumnzh.wikipedia.org/wiki/%E9%98%B4%E5%BD%B1%E4%BD%93
http://developer.download.nvidia.com/books/HTML/gpugems/gpugems_ch09.htmldeveloper.download.nvidia.com/books/HTML/gpugems/gpugems_ch09.html

阴影贴图(Shadow Map)

这个算法至今还是不少应用的,此外,它还有一系列的衍生算法。

例如,Unity默认使用的Cascaded Shadow Maps(CSM),与CSM原理一样,但是分开发表的还有:Parallel-split shadow map(PSSM)。

这是一个叫威廉姆斯(Williams)的人在40年前提出来的,这个算法主要是基于z-buffer的renderer可以使用在任何对象快速产生阴影的方法。

主要的思想是,在可以产生阴影的光源的位置,对场景进行渲染,光源处可以直接看到的,就是可以被照亮的,而其他的,全都在阴影里面。

怎么判断可以直接看到?还记得z-buffer的作用吧?没错,就是这货!

我们这时候其实并不需要从这个角度渲染出来的任何Color,我们可以对color buffer进行关闭,同样,我们并不需要lighting、texturing。

上面的思想换成程序员可以理解的话来说,就是在光源位置放置一个相机,相机方向与光照方向相同,以此为基,进行渲染,渲染的时候,只需要z-buffer。

在z-buffer中的每一个Pixel都包含了最接近光源的对象的z-depth,而这张z-buffer,则被称为shadow map、shadow depth map、或者是shadow buffer。

然后只有shadow depth map并不足够,我们要知道,某一点是否处于阴影,归根到底终究是需要判断,某一个点的depth是否比shadow depth map的depth要大,如果大于shadow depth map的depth,自然就是处于阴影中。而这个过程,自然需要将它变换到light space进行比较。

Shadow Map 原理和改进blog.csdn.net/ronintao/article/details/51649664
阴影贴图zh.wikipedia.org/wiki/%E9%98%B4%E5%BD%B1%E8%B4%B4%E5%9B%BE
ShadowMap - CSDN博客blog.csdn.net/u010897187/article/details/49468571

Percentage-Closer Filtering

PCF是Shadow map的一种简单的扩展,它主要用于实现假soft shadows。这种技巧也可以用来改善一下Shadow map分辨率不足带来的问题,其实跟纹理放大(Texture magnication)的方式有点类似。

cf手游美化助手

Shadow map容易分辨率不足的一个原因是,很多个屏幕像素仅与之一个点对应,这样会导致,类似于在某一区域块上,有一种块状的阴影,这个效果看起来有些像Point filter,但它的想法不是从Shadow depth map中获取单个sample,而是通过附近4个sample来。

Percentage Closer Filteringogldev.atspace.co.uk/www/tutorial42/tutorial42.html
GPU Gemsdeveloper.nvidia.com/gpugems/GPUGems/gpugems_ch11.html

Percentage-Closer Soft Shadows

cf英雄级武器领取

这个其实就是PCSS。

这里提供了一些更加详细的资料。

(PDF)shadow_PCSS.pdfdeveloper.download.nvidia.com/shaderlibrary/docs/shadow_PCSS.pdf
(PDF)Percentage_Closer_Soft_Shadows.pdfhttp.download.nvidia.com/developer/presentations/2005/SIGGRAPH/Percentage_Closer_Soft_Shadows.pdf
GL-PCSSgithub.com/pboechat/PCSS
https://github.com/TheMasonX/UnityPCSSgithub.com/TheMasonX/UnityPCSS

TheMasonX/UnityPCSS

Unity-PCSSgithub.com/TheMasonX/UnityPCSS

Filtered Shadow Maps

在使用Percentage-Closer Filtering(PCF)时一般不能提前对Shadow Map进行模糊处理,这会导致PCF计算不准确,而Variance Shadow Maps(VSM)则没有这样的限制。VSM存储的Shadow Map不仅包括深度,还有深度的平方,这时可以对Shadow Map做过滤,然后利用切比雪夫不等式计算出大于当前深度的概率上限,也就是阴影区的概率。

切比雪夫不等式zh.wikipedia.org/wiki/%E5%88%87%E6%AF%94%E9%9B%AA%E5%A4%AB%E4%B8%8D%E7%AD%89%E5%BC%8F
https://www.qiujiawei.com/shadow-1/www.qiujiawei.com/shadow-1/

Variance Shadow Maps

http://www.punkuser.net/vsm/www.punkuser.net/vsm/
Variance Shadow Mapswww.punkuser.net/vsm/
(PDF)VarianceShadowMapping.pdfdeveloper.download.nvidia.com/whitepapers/2007/SDK10/VarianceShadowMapping.pdf

Volumetric Shadow Techniques

别把这个跟Shadow Volume搞混了。

Self-Shadowing对于例如云彩啊、头发啊,之类的对象要实现真实渲染的话,是至关重要的一种表现。而这些用于举例的对象,都有一个特征:要么很细小,要么半透明。那么,在单深度的shadow map来说,已经不适合了。

于是呢,有一种叫deep shadow maps的概念就出来了。

deep shadow mapsgraphics.stanford.edu/papers/deepshadows/deepshad.pdf

Irregular Z-Buffer Shadows

Irregular Z-bufferen.wikipedia.org/wiki/Irregular_Z-buffer

Other Applications

这里提及的最后一类阴影技术叫Screen-space shadows。

总结,Shadow mapping或其变种是目前来说最为常见的算法。例如上文所说的Unity所采用的CSM。

PCF可以让你的阴影更加柔和;PCSS是一种非常真实的soft shadow,PCSS及其变体可以根据投射阴影距离光源的距离来决定阴影的柔化程度。例如GTA5、孤单惊魂4,都用了这个技术。

此外,还有不断进行革新的阴影技术。

比如下面这个Convolution Shadow Maps。

http://jankautz.com/publications/csmEGSR07.pdfjankautz.com/publications/csmEGSR07.pdf

最后,推荐一篇。

一鸣道长:实时渲染中的软阴影技术432 赞同 · 18 评论文章

一句话看完版

把上文的链接都点开,然后关闭就可以了。

青狐秀水:《RTR4th》(总结 六)15 赞同 · 0 评论文章

小苹果cf活动助手封号不

©版权所有 2015-2023 珍惜CF辅助 XML地图 TXT地图
友情链接: CF活动助手一键领取