APP下载

基于GPU纹理查找的彩虹实时渲染技术*

2016-09-21覃海宁

关键词:水滴顶点纹理

覃海宁

(广西经贸职业技术学院 信息工程系,广西 南宁 530021)



基于GPU纹理查找的彩虹实时渲染技术*

覃海宁

(广西经贸职业技术学院 信息工程系,广西 南宁 530021)

在实时应用中渲染彩虹不容易,要适应环境变化又要有合理的真实感.文章在Lee图纹理查找表方法的基础上,通过GPU加速彩虹渲染效率,避免了直接应用空气中光的散射方程计算彩虹像素值,取得实时逼真的效果,同时将该方法应用于副虹生成、雾虹生成、潮湿空气等,拓展了它的应用范围.

GPU编程;彩虹生成;Lee图;纹理查找

0 引文

彩虹的实时真实感模拟在动漫游戏、自然灾害预防和救援、科学计算可视化、虚拟现实等领域均有应用.这种大气光学现象是由大量雨滴同时对太阳光的折射及散射生成的.图形学光线传播过程模拟方法中,最重要的是光线跟踪和辐射度方法[1].但这些方法不适合彩虹模拟,因为雨滴颗粒对光能传输的特殊影响没有考虑进去,也就是说传统的图形学建模和绘制方法难以对其逼真模拟.Musgrave在光的折射与色散理论基础上,提出了适合利用光线跟踪及 Z-Buffer 技术绘制的彩虹生成模型,但计算量巨大、生成速度慢[2].Walter根据彩虹光线散射角度,利用Mie散射查找表方法进行采样,绘制出逼真的彩虹,但仍达不到实时绘制的要求[3].Brewer等根据空气中的光学理论,计算出适应不同半径水滴的Lee图作为查找表,生成了真实感较强的彩虹场景,这种方法大量用于游戏开发中[4].笔者则在Lee图纹理查找表技术[4]的基础上,利用GPU编程进一步加速彩虹渲染,并讨论该方法如何与场景进一步结合,考虑副虹生成、雾虹生成、潮湿空气等问题,拓展其应用范围.

1 彩虹的光学原理

当阳光照射到半空中的雨点,光线被折射及反射,在天空上形成拱形的七彩光谱,这种光学现象称为彩虹.如图1所示,阳光进入和退出球形水滴时,不同波长的光(红、橙、黄、绿、蓝和紫)经过不同角度折射、反射、再折射进入观察者眼睛.紫色光折射角度最小从底部出来, 红色光则从彩虹顶部出来.即使同一个彩虹,不同位置看到效果也不同,可将其看作以眼睛为焦点的锥形光.

图1 彩虹成因

2 纹理查找确定彩虹颜色

观察者眼中的色彩取决于哪种颜色被恰好折射到达观察者的眼睛,这依赖于:进入水滴的光线位置和角度、观察者的位置、水滴的半径和位置.如图2所示,观察者眼中的颜色可以通过进入水滴光线与视线两者夹角和水滴半径为变量的方程式来确定,散射角度θ为光线被向后弯曲到观察者眼睛的角度.

图2 光线与视线的夹角

以散射角度θ与水滴半径为变量的函数就是RaymondLee提出空气中光的散射方程[6].以之为基础,使用PhillipLavin创建的MiePlot开源程序[4],可以预计算光散射方程生成Lee图(见图3).Lee图X轴表示水滴半径,Y轴表示光线向后弯曲的夹角即散射角度θ,二者共同索引一幅二维图像,图像中像素颜色可以作为查找纹理描述彩虹任意状态下的颜色.

图3 MiePlot生成Lee图

3 GPU加速彩虹像素颜色计算

渲染彩虹的实质是将其绘制在与屏幕平行四边形上,关键是彩虹像素点的颜色如何确定.分析Lee图纹理查找法,Lee图X轴代表的水滴半径由程序直接指定,Y轴代表的散射角度θ,一条边太阳光是平行垂直于地面入射角保持不变不难取得,另一条边视向量的计算是难点.彩虹渲染过程涉及GPU顶点着色器与像素着色器编程.

视向量从观察者指向水滴,由GPU顶点着色器计算,只要确定了与屏幕平行的四边形中各顶点的视向量,像素视向量就可以由网络三角形顶点均匀夹取来获得.顶点视向量计算必须把屏幕空间转换到性质相同的视裁减空间中.具体是用逆投影矩阵变换,找到视空间中平行四边形的顶点位置,视空间观察点位置为(0,0,0),两点相减即可得每个顶点的非标准化视向量,再对其归一化.同样,用视图矩阵可以计算垂直于场景的光线向量在视空间的值.四边形中每个像素都得到归一化的视向量和光线向量后,就可以点积求散射角θ的余弦值.

平行屏幕四边形中像素颜色在GPU像素着色器计算.图形学中纹理贴图必须将绝对纹理坐标转换成相对纹理坐标,其值范围为[0,1].顶点着色器计算的散射角θ的余弦值,值范围为[1, -1],当角度在0到90度之间时,值范围刚好为[1,0],当角度在90度和180度之间时,余弦值范围为[0, -1],需镜像映射余弦值则刚好和纹理坐标范围一致.再通过设置硬件纹理夹取索引Lee图,就可以查询彩虹任意点纹理颜色了.

4 拓展纹理查找彩虹生成方法

4.1副虹渲染

自然界有时会生成双彩虹,其副虹是光线在水滴内部进行两次反射产生的,如图4所示.本文方法同样适用于双彩虹的效果,只要用MiePlot开源程序重新生成副虹Lee图,与主虹Lee图同时应用即可.图5为瀑布水雾双彩虹效果展示,可见副虹比主虹颜色浅,色彩与主虹相反,紫色在顶部,而红色在底部,与真实效果一致.

图4 副虹成因

图5 瀑布水雾中的双彩虹

4.2雾虹生成

不同天气,生成虹的水滴半径各不相同,比如雾虹的水滴半径就比彩虹的大.本文方法同样适用于渲染雾虹,为了实现更鲜亮的颜色,将MiePlot开源程序生成的查找纹理Lee图手工修饰成图6,使Y轴散射角范围为[180,90],X轴水滴半径范围为[5,800]微米,色彩具有了更广泛的频带,能够产生逼真雾虹效果.

图6 雾虹的增强Lee图

4.3可控空气湿度

空气中的水分含量也决定着彩虹的质量.水分含量高则有更多的水滴折射和反射,更多的彩色进入到观者眼睛产生明亮的彩虹,反之则产生暗淡的彩虹.渲染时,准备单独的湿润感纹理,使用红色分量表示水分含量.潮湿因子范围为[0,1],彩虹像素颜色与潮湿因子相乘,alpha分量可将水分呈现于主天空盒,湿度就可以影响彩虹淡入淡出.

5 结语

图7为本文实验结果,左上角图展示平行于屏幕四边形的原彩虹;顶部中间图展示潮湿纹理,场景物体为黑色,云层以灰阶呈现;右上角图展示潮湿纹理叠加彩虹的颜色;底部左图显示没有彩虹场景;底部中图场景结合了彩虹.以往游戏中渲染彩虹,1600×1200分辨率屏幕彩虹不难被实时生成.笔者依据Mie理论与光散射方程,通过GPU编程实现Lee图查找纹理法彩虹生成,实验结果执行花费很低,能保持在每秒80帧以上的渲染效率,再通过进一步讨论的副虹、雾虹和潮湿空气中彩虹的应用拓展了方法的应用场合,证明本文彩虹渲染方法的有效性,有很高的实用价值.如果场景变化不大,可进一步预先计算彩虹纹理优化程序,将其渲染成立方体贴图,运行时简单地映射彩虹立方体纹理到天空盒,与潮湿纹理混合即可.这种方式只要水滴半径不改变,立方体贴图就不需要改变.当阳光方向变化时,可以旋转的彩虹天空盒,使彩虹仍然保持在逆光位置的中间.

图7 彩虹渲染结果

[1]彭群生,鲍虎军,金小刚.计算机真实感图形的算法基础[M].科学出版社,1999.

[2] Musgrave F K. Prisms and rainbows: A dispersion model for computer graphics. Proceedings of Graphics Interface '89[J]. London, 1989: 227-234 .

[3] Walter B. Simulation and visualization of atmospheric light phenomena induced by light scattering[J].Systems Analysis Modeling Simulation, 2000, 42(2):289-298 .

[4] Brewer C. How to render a real rainbow. In: NVIDIA Technical Report[R]. Santa Clara, 2004: 88-102.

[5]Laven, P. The Optics of a Water Drop: Mie Scattering and the Debye Series[EB/OL]. Retrieved July 19, 2004. http://www.philiplaven.com/index1.html.

[6] Lee, Raymond L. Mie theory airy theory and the natural rainbow[J].Applied Optics, 37(9) .

[责任编辑苏琴]

[责任校对黄祖宾]

Based GPU Acceleration Texture Lookup Real-time Rendering Techniques of Rainbow

QIN Hai-ning

(InformationEngineeringDepartmentofGuangxiEconomic&TradePolytechnic,Nanning530021,China)

Rendering rainbow in real-time applications is not easy, it is necessary to adapt environmental changes and have a reasonable sense of reality, but also to satisfy real-time requirements. In this paper, based on Mie scattering lookup table, using texture lookup method rainbow rendering efficiency by GPU-accelerating, avoiding the direct application of airy light scattering equation to calculate the screen pixel values obtained in real-time realism. The method can also adapt deputy Secondary rainbow, fogbow, moist air problems.

GPU Programming; Rainbow Generation; Lee Diagram; Texture Lookup Table

2016-03-10.

2015年度广西高校科学技术研究项目(项目编号KY2015YB446).

覃海宁(1979-),女,广西桂平人,广西经贸职业技术学院副教授、工程师,研究方向:实时图形学.

TN911. 3

A

1673-8462(2016)02-0077-04

猜你喜欢

水滴顶点纹理
过非等腰锐角三角形顶点和垂心的圆的性质及应用(下)
过非等腰锐角三角形顶点和垂心的圆的性质及应用(上)
利用水滴来发电
基于BM3D的复杂纹理区域图像去噪
水滴轮的日常拆解与保养办法
使用纹理叠加添加艺术画特效
TEXTURE ON TEXTURE质地上的纹理
透过水滴看世界
消除凹凸纹理有妙招!
航天器相对运动水滴型悬停轨道研究