欢迎来到天天文库
浏览记录
ID:40894657
大小:293.50 KB
页数:10页
时间:2019-08-10
《软阴影与抗锯齿》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
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纹理后,屏幕矩形绑定之: 软是软了,就边界效果而言是很
此文档下载收益归作者所有