天空模型仿真方法
静态天空体
主要是用天空纹理进行贴图,为了渲染能用较好的效果,静态天空体渲染对纹理的要求较高,金泰天空体的优点是在三维产经渲染时不会对程序造成负担,因为它的纹理是一开始载入的,之后无需动态更新,缺点是渲染出来的天空不够逼真。
动态天空体
动态天空体的生成一般有两种方法,第一种是动态的生成天空纹理。一般使用柏林噪声算法生成该种纹理。柏林噪声算法生成的云彩真实感强,但却有个很大的问题,就是嫞其绘制大型纹理的时候,速度不够理想,虽然也有一定程度的实时性,但是一旦将其应用到整个三维场景渲染中,场景的绘制速度就会变得非常慢。
第二种方法是调用天空视频文件充当纹理,该方法虽然速度并不是特别快,但是相比柏林噪声算法,生成纹理的速度要优秀很多。
天空体的实现主要有盒状结构和圆形结构两类方法。盒状的天空体实现起来比较简单,但是其对于天空纹理的质量却要求很高。品质较低的纹理会为渲染后的天空带来较为明显的形变,尤其是在天空的边缘,其形变的情况会更加容
易发现,给用户带来不好的体验。相对于盒状天空体,圆形的天空体虽然复杂度较高,但是這染后的天空却有很强的真实感,因为圆形天空体比盒状天空体更易于生成动态天空体,更易于渲染一些特殊的效果,如天空中随风飘动的云朵,以及一天中不同时间段日照情况等。
天空盒模型
天空盒的思想非常简单,将天空体渲染成种纹理贴图,其中每个纹理被应用到立方体的一面,同时还要确保摄像机始终位于立方体中心。渲染时,映射到天空盒各个面上的纹理将拼接在一起,这样便在在视觉上形成了一个完整
的天空。用来组成天空盒的张纹理,分别对应了立方体的前、后、左、右、顶、底6个面.
使用的时候,将这6张纹理按图的形式拼接起来,组合成一个立方体,渲染时始终将摄像机设置在立方体内部的中心。这样的话,无论摄像机怎样前进后退旋转观察,都会使观察点始终是处在这个盒子的中心,进而给观察者一种视觉上无限远的感觉。
半球型天空盒
地球是球型的,按照“天圆地方”的思想,天空就像半球似的罩在大地上。用半球型天空模型来渲染三维天空显然是更符合真实世界的天空模型。根据数学的球面方程,建立如下模型:
其中P是球面上的某一点,R是球的半径。将上述方程改写为球面坐标系方程,即为
其中θ代表球的经度,其变化范围是0°<=θ<=360°;φ代表球的玮度,其变化范围是0°<=φ<=90°。
相较于天空盒模型,采用半球型天空模型,有不少优点。
第一,因为基于球型方法绘制的天空体表面有更多顶点,在处理雾化效果时,它不会像天空盒模型那样造成诸如当用户视点离雾化效果较近时天空体颜色较淡的问题,半球型天空模型会使雾化效果绘制的更加均匀。而且也能动态的改
变单一顶点的颜色,这样就能设计一些新的特效,例如一天中不同时间段的日照情况。但是,半球型天空模型也有缺点:
1)顶点数目过多,影响渲染速度;
2)三角函数运算过多
曲面天空模型
曲面天空模型既保持半球型天空模型的优点,又很好的弥补其缺点,能够以更快的渲染速度渲染。
曲面天空模型的思路很简单,它近似于把一个被细分平面的4个角点向下拉一定的距离,外形看起来像一个撑开了的降落伞。实际应用中,将其笼罩在需渲染的场景之上,这样就可以模拟三维天空。曲面程度S的计算公式为:
顶点坐标(x,y,z)的计算公式为:
其中i,j代表循环参数, Δ S为曲面细分间隔,间隔越小,分割次数越多,
绘制精度就越高,相应的绘制速度也越慢。
曲面天空模型避免了三角函数的运算,同时顶点的数目比同样精度的半球
型天空模型要少,因而渲染速度会加快。
基于SliverLining的动态天空渲染
SliverLining是幵发出来专门用于三维场景渲染的引擎,主要实现对
天空,云彩以及天气的模拟,引擎可以与OpenGL,DirectX,OGRE,Carmenta等多种图形集成。对天空本身也提供了一个可视化仿真。这里并非是通过简单的蓝色渐变背景绘制来模拟,而是基于实时物理模拟与太阳光谱天文计算太阳的相对位置,从视点的地平线数据开始,模拟散射光线穿过地球大气层而产生的渐变效果。提供对多种云彩的模拟,包括浓积云,
淡积云,积雨云(闪电),层云,卷云,卷积云以及层积云,能带给用户很好的体验。
本文内容参考《三维场景的渲染技术研究与实现》