软阴影与抗锯齿

软阴影与抗锯齿

ID:40894657

大小:293.50 KB

页数:10页

时间:2019-08-10

软阴影与抗锯齿_第1页
软阴影与抗锯齿_第2页
软阴影与抗锯齿_第3页
软阴影与抗锯齿_第4页
软阴影与抗锯齿_第5页
资源描述:

《软阴影与抗锯齿》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、软阴影的实现尝试       软阴影(Soft-Shadow),并非一种图形学算法或技术的代名词。怎么说呢,它是图形学大师们孜孜不倦地追求的更逼近真实的阴影效果。——ZwqXin.com       在已有的阴影DEMO上作改进,是当时很自然的想法。而选择了[ShadowMapDemo2],不知道,算不算是一个失策。CascadedShadowMap技术,从本质上说,只是分区间地调整投影矩阵,根据视距离使用不同分辨率的阴影图,促使效率与效果平衡而已。这是ShadowMap改进算法的一条路,但并非唯一。回想[Shadow

2、Map阴影贴图技术之探Ⅲ],里面我简单地用乒乓式的采样,实现了一下3X3的阴影图模糊——PCF。虽然结果看上去很那个,但这昭示着ShadowMap改进算法的另一条路——图形学中的图像处理,调整阴影图。       在我的上一个阴影DEMO中,主要的shader只有一个,它是在Shadow-Casting阶段完成场景阴影图的分层次贴附。在CPU上完成的是ShadowMap-Generating阶段,因为那里没有涉及像素层面,完全不需要GPU的并行计算能力。但如果要对一张贴图的内容进行像素级的处理……恩,这是通常的想法。但

3、当时脑中另一个突然一闪的想法,让我决定先行对其进行捕获——场景后处理。       一般说的DefferedShading并不等同于这个意义,但就字面来说它们也有那么一点共通。恩,题外话先免了,先暗自打个小算盘:       场景后处理,我是想在最终画面上动手脚。在OpenGL流水线的尾部,无论是否双缓冲,必然是把显存上每个像素格的值传向显示器屏幕上的每个“真·像素”上,表示成颜色(譬如LCD是用彩色滤光片等结构对此转换的,可以理解为每个像素上又有红绿蓝三色子像素balabala……嘛,其实我也不怎么理解啊这些硬件的-

4、-,呃离题了,回来~)。如果把这个覆盖屏幕的“结果”当作贴在一个Screen-Aligned-Quad(屏幕大矩形)的一张纹理,我们在显存-屏幕这个过程之前进行拦截,获得并处理这个“纹理”后再让它传向屏幕。       有这方面基础的朋友都知道,FBO又该出来表演了[学一学,FBO]。把Shadow-Casting的结果写入FBO绑定的一个纹理中,然后自己画一个Screen-Aligned-Quad,贴这个纹理——对这个过程启用shader处理。最后虽然屏幕上本质只有这么一个矩形,但是众多本该直接映射在屏幕上的场景元素

5、已经完美地“被代表”了。看上去丝毫没有河蟹爬过的痕迹……完全没有。       依然是模糊处理。高斯模糊。01//02uniform int BSceneWidth;03uniform int BSceneHeight;04uniform float ishoriz;05   06uniform int samplecount;07uniform float weights;08uniform float sigma;09   10uniformsampler2D BScenemap;11   12void main(

6、)13{14    gl_FragData[0]=BlurFilter(BScenemap,gl_TexCoord[0].xy) ;15}        其中BlurFilter函数是对当前像素,在水平或垂直方向上采样(samplecount),采样值乘以一个高斯分布值而已(公式也就网上常见的,sigma为参数),跟PCF也就差不多那回事。很明显,我们需要在水平方向和垂直方向都模糊一次,这里用2个PASS。我们只需要模糊阴影,因此把阴影部分和场景部分分开写入纹理(MRT),最后再统一。1//CastingShader,

7、rendertotwotextures (MRT)2gl_FragData[0]=vec4(gl_Color.rgb*diffuse.rgb *texColor.rgb,1.0);3     4gl_FragData[1]=shadeFactor; 1//PostProcessingShader,asatexturetothescreen-alignedquad2uniformsampler2D Scenemap;3uniformsampler2D Shademap;4   5void main()6{   7    

8、vec4shadeFact=texture2D(Shademap,gl_TexCoord[1].xy); 8   gl_FragColor=texture2D(Scenemap,gl_TexCoord[0].xy)*shadeFact;9}        写到FBO纹理后,屏幕矩形绑定之:       软是软了,就边界效果而言是很

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。