- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[游戏实时渲染技术体积光的表现形式探究
游戏实时渲染技术体积光的表现形式探究散射是一种非常美丽的自然现象,在自然界中光穿过潮湿或者含有杂质的介质时产生散射,散射的光线进入人眼,让这些介质看起来像拢住了光线一样,也就是所谓的体积光。在游戏中体积光是很常用的一种光照特效,主要用来表现光线照射到遮蔽物体时,在物体透光部分泄露出的光柱。由于视觉上给人很强的体积感,所以称之为体积光。体积光特效在现今的中高端游戏中非常常见,优秀的体积光特效在烘托游戏氛围,提高画面质感方面发挥了很大的作用。图中清晨透过树林间隙射出的体积光为游戏增色不少作为一种常用特效,体积光的制作方式多种多样,不同游戏对于处理性能,画面要求和渲染质量要求各不相同,也会使用不同的体积光表现方式。早期游戏中由于机能限制经常使用的是BillBoard贴片和径向模糊这两种方式。在这里简单介绍一下两种方式,重头戏还是后面最新的基于光线追踪的方式。BillBoard贴片BillBoard贴片很容易理解,用PHOTOSHOP生成一个随机的明暗条文,加上遮罩,让它看起来有光条的感觉。将BillBoard放置在场景中光线会泄露出来的区域,这就是最简单的体积光效果。做得精细一点的会再加上UV动画,粒子和远景透明的效果。径向模糊径向模糊是一种后处理的方法。主要用来表现天空中日月星光散射的效果。所谓后期处理就是在游戏画面渲染完毕之后,另外加一次渲染,类似于PHOTOSHOP,但处理的对象是每一帧游戏画面,因为速度要求多使用GPU计算。径向模糊体积光主要流程如下:1:渲染出整个画面2:抽取出画面中高亮的部分3:对高亮部分进行径向模糊4:将径向模糊后的高亮层和原图合并这个流程可以在PS中轻松实现,有兴趣的朋友可以打开PS试一试,我很多时候也会先在PS上试验一些效果,然后再用代码实现。这里简单介绍一下径向模糊的GPU实现,实现非常简单,就是从原本像素的位置开始,向画面中心移动坐标,每移动一次就采样一次,将所有采样叠加在一起就可以了。代码如下:vec2 position = gl_FragCoord.xy / resolution.xy;Position = (position-0.5)*2.;position.y =position.y*resolution.y/resolution.x;vec2 uv = position;//最后颜色vec4 color =vec4(vec3(0.),1.);//采样次数Const int stepNum =12;//每次采样衰减float decay = 0.9;//采样权重float weight = 1.;//坐标移动方向vec2 direction = normalize(uv);for(int i=0; i stepNum ; i++){//移动坐标uv -= direction/float(stepNum) ;vec4 sample = texture2D(iChannel0, uv);sample *=weight ;color += sample;weight *= decay;}这里可以调整移动步幅,采样的数量,移动的方向,会得到不同的效果。因为实现简单,消耗小,效果也不错,径向模糊在很多游戏中都有广泛应用。当然径向模糊的缺点十分明显,如果光源不在画面内,显然径向模糊是没办法执行的。新的视野上面两种方式在游戏制作中已经使用了很长时间,但这绝对不表示体积光效果只能做到这个程度,其实还有很大的进步空间。近期伴随着渲染技术的进步,业界已经开始使用基于光线追踪、阴影贴图等更为精细的渲染技术来实现体积光的效果。尤其是最近几年,Nvidia、寒霜引擎等几家大厂连续在Siggraph和GDC上发表了多篇关于实时体积光渲染的技术论文。这些算法不论是在模型的精密程度还是计算效率,相较于之前都有了质的飞跃,新一代的体积光已经成为3A游戏的标准配置。PS:大厂现在做什么都号称是基于物理,实际和真正的物理学、光学比起来精度差得还是千山万水,个人觉得现在实时渲染的技术基本就和古典绘画的光影分析和制作法差不多,非要谈基于物理就有点牵强了。下面终于要进入正题了,这里会从建模开始一步步深入分析基于光线追踪的体积光算法的各个方面。我们先从如何描述体积光,也就是为算法建立模型开始。因为体积光是我们生活中能看到的现象,我们可以从分析自然现象开始,看能不能得到建模的灵感。首先光自身显然是没有体积的,我们也不可能看见光的形状。那在日常生活中看到的光柱到底是什么,答案很简单其实就空气中的尘埃。空气中布满大量微小的尘埃,我们看到的光柱就是光线击中尘埃后散射到我们眼睛中的。这时候有人就说了,那只要把尘埃模拟出来,放到现在的渲染引擎中就万事大吉了。这当然是最正确的做法,同时却也是最不切实际的做法,因为实时渲染显然不可能在几毫秒内模拟
文档评论(0)