论文部分内容阅读
本文使用OpenGL,利用GPU(Graphic Processing Unit)技术,实现无序场景中半透明物体的正确渲染。OpenGL(Open Graphics Library)是“开放的图形程序接口”,它有非常好的可移植性和跨平台性,并逐渐成为高性能图形开发和交互式视景仿真的国际图形标准。随着GPU功能的不断强大,和它自身高效的并发处理速度,在数据处理领域变得越来越重要。在最近的几年,OpenGL发展迅速,各种GPU的技术层出不穷。随着GPU进入手机、手持游戏设备和游戏机领域,GPU专业知识在今天的竞争环境中显得更为重要。无序透明渲染(Order Independent Transparency)就是其中的一个热门技术。透明是一种重要的渲染效果,它能明显地提高场景的真实感和可视化系统的效率。对于特别的半透明处理,在实际应用中,如游戏,大多采用的是仿真的方式,也就是进行大致的模拟,而不是进行高开销的正确的渲染。主要原因是因为正确渲染要高开销,低效率,和高复杂度。这些极大的限制了这些算法的应用范围。但是,随着硬件显卡芯片性能的升级,其应用领域逐渐扩大,在实时系统中的使用完全正确的透明渲染也将成为可能。随着GPU的发展,可编程图形处理器的出现,各种渲染半透明物件的算法也随着出现,如基于CPU的排序的透明渲染,深度剥离,双层深度剥离,透明权重和,透明平均权重,还有基于GPU排序的无序透明渲染。本文将对双层深度剥离算法进行深入的探讨并实现这一算法。要说到双层深度剥离算法,首先得先解释一下深度剥离,因为双层深度剥离算法是从深度剥离算法的基础上发展改进出来的。深度剥离算法是一个非常健全的无序片段问题的解决方案,它通过对物件的多次渲染,以跟观察者的距离从近到远的顺序,每次剥离出一层,之后将所有剥离出来的颜色再按从后向前的正确顺序进行透明混合,从而保证得到正确的颜色结果。这个算法的缺点是效率不高,对于半透明物件深度复杂度为N的场景,需要进行N次渲染。而双深度剥离,则在此基础上,扩展出最小-最大深度两个最外的颜色层,从而使得每一个物件渲染可以剥离两层,其中,一个方向从前往后,另一个方向是从后往前。而需要渲染的次数也减少到了N/2+1次,在最好的情况下,相比原本的算法改高了将近2倍的速度。