一种实时渲染中的水面仿真方法技术

技术编号:21954782 阅读:19 留言:0更新日期:2019-08-24 18:44
本发明专利技术涉及一种实时渲染中的水面仿真的方法,属于计算机图形学领域,旨在解决现有水面实时渲染仿真技术中无法兼顾真实感与计算效率的问题。本发明专利技术主要包含七个算法模块或部分,即:倒影摄像机、片元法线生成模块、水面反射颜色生成模块、水底颜色生成模块、菲涅尔系数生成方法、高光反射颜色生成方法、水面颜色混合方法。本发明专利技术通过上述算法模块或者部分的配合,可以得到最终的水面效果。本发明专利技术可应用于主流实时三维编程接口:OpenGL或DirectX。此外,本发明专利技术所采用的方法,在不涉及水体本身物理模拟,不涉及水面下观察的三维交互应用中,能够兼顾真实感与计算效率。

A Method of Water Surface Simulation in Real-time Rendering

【技术实现步骤摘要】
一种实时渲染中的水面仿真方法
本专利技术涉及一种实时渲染中的水面仿真方法,属于计算机图形学实时渲染领域,应用于视频游戏,交互艺术,实时3D环境模拟或场景设计行业。
技术介绍
近年来,随着硬件设备与娱乐产业的发展,人们愈加重视三维显示效果,其中实时渲染得到的三维显示效果尤其引人注目。在实时渲染的三维场景中,水面效果拥有广泛的应用场景。只要涉及到有关日常生活或者自然场景的模拟,就必然会涉及到水面效果的模拟。为了便于理解,在此简单介绍图形学基本知识。我们以高阶着色器语言(HLSL)为例,简单介绍渲染管线和空间变换。首先,高阶着色器语言能够让我们使用可编程的图形硬件,让我们可以控制物体的形状,外观和运动方式。一个管线是一系列并行执行并且顺序固定的步骤。每一个步骤会接收到来自前一个步骤的输入,并把结果输出到下一个紧邻着的步骤。就如同一个装配流水线一样,有许多的汽车在同时被制造和装配,但他们处于同一条线的不同阶段。整体来说,一个渲染流水线会被输入一个3D场景的描述,以及一个有方向,有位置的虚拟摄像机。这个渲染流水线只能就是整个的把摄像机看到的东西,转化成2D图像的流程。在本方法中,只涉及对于顶点着色器阶段和片元着色器阶段的编程。比如顶点着色器,在基本几何图元被组装完成之后,这些顶点会被给到顶点着色器阶段。顶点着色器可以被看做一个函数,它的输入是一个顶点,它的输出也是一个顶点。每一个需要被画出来的顶点都会流经这个顶点着色器。又比如片元着色器,一个片元着色器会为每一个像素片元执行一次,并且,它会使用被插值的顶点属性作为输入的数据,去计算颜色。一个像素着色器可以很简单,比如就是附上一个固定的颜色。当然,它也可以很复杂,比如去计算逐像素的光照、反射和阴影效果。接下来,我们介绍图形管线中涉及到的空间变换的基本概念。总的来说,将一个三维的场景映射到二维需要涉及一下几个空间及变换。模型空间、世界空间、观察空间、裁剪空间以及屏幕空间。从模型空间到世界空间的变换叫模型变换、从世界空间到观察空间的变换叫观察变换、从观察空间到裁剪空间的变换叫投影变换、从裁剪空间到屏幕空间的变换叫屏幕映射。现有水面模拟技术往往存在两个极端,一类更加关注水体运动的科学性,如水面顶点如何在风力,水下作用力等多种影响下运动,进而科学地表达出水面波纹的效果;这一类水面模拟主要存在两个问题,第一个问题是这类技术往往会忽略其他同样可以显著增强水面真实性的效果,如:水面周围环境的反射、水面的高光、水下环境的折射、菲涅尔现象等;第二个问题在于其相对庞大的计算量,由于其通过改变水面的每一个顶点位置并结合漫反射模型得到水面波纹效果,这样会显著增加需要绘制的基本图元数量,进而使得显卡负担增加;此外,由于顶点位置是根据动态的物理参数计算得出的,所以它也会显著增加CPU的计算负担。综上,这一类效果往往是在专业的图形工作站上渲染出来的,它们很难应用在家用台式机,笔记本电脑,或者移动设备上。另一类水面模拟技术更加关注计算效率,这类效果更加专注于如何在所有设备上运行,所以一般会舍弃一些水面效果,如:菲涅尔效应、高光模型甚至环境反射。但是,随着硬件的发展以及简化的菲涅尔计算公式以及简化的高光模型的理论提出,这些理论也应该可以应用到这些水面模拟技术之中,去增加水面的真实感。
技术实现思路
针对上述现有技术的问题,本专利技术目的在于提供一种可以兼顾计算效率与真实感的实时水面仿真技术,其旨在解决当前水面模拟技术无法兼顾这两种特点的问题。为达到上述目的,本专利技术采用的技术方案如下:一种基于OpenGL或DirectX图像应用编程接口的水面渲染流程。宏观来看包含两个步骤,即:倒影摄像机获取场景倒影图像、主摄像机渲染出包含水面的场景图像;与七个算法模块或部分,即:倒影摄像机、片元法线生成模块、水面反射颜色生成模块、水底颜色生成模块、菲涅尔系数生成方法、高光反射颜色生成方法、水面颜色混合方法。进一步地,所述第一个宏观步骤可以分成以下八个步骤,其中8由图像应用编程接口自动处理,见图2:1)创建倒影摄像机。这一步要完全复制主摄像机,作为倒影摄像机。完全复制的含义即为将主摄像机的位置与朝向数据复制给新建的倒影摄像机;2)获得关于水面平面的反射矩阵。这一步输入世界空间中的水面平面的四维向量表示,根据线性代数的镜面反射原理,计算得到在世界空间中的关于水面平面的反射矩阵;3)获得当前倒影摄像机的观察变换矩阵;4)反射矩阵右乘观察变换矩阵;5)用步骤4获得的矩阵替代当前倒影摄像机的观察变换矩阵。这一步得到的结果相当于让所有物体的顶点在从世界空间中转换到摄像机观察空间之前,先进行了关于水面平面的镜像变换;6)把表示当前水面平面的四维向量从世界空间变换到倒影摄像机观察空间。具体原理可参考线性代数中的空间变换;7)将步骤6得到的水面平面四维向量作为近裁平面,修改倒影摄像机的投影矩阵。具体方法和原理可参考《游戏编程精粹5》第2章,第2.6节的内容;8)倒影摄像机将视锥体内的场景渲染成水面平面的倒影图像。图形编程接口会自动访问倒影摄像机的投影矩阵,并自动执行该过程;进一步地,所述第二个宏观步骤可以分成以下七个步骤,其中2,5,7由图形应用编程接口自动处理。4,6由工程师自行编程并由图形应用编程接口自动调用,见图3:1)设置水面平面的渲染顺序,使其在场景中其他物体之后渲染;2)依据渲染顺序,将排在水面平面之前的物体渲染到最终的图像中;3)将此前倒影摄像机渲染出的二维图像与水面建立起关联。即:使得我们可以通过水面对象访问存储有倒影摄像机渲染出的二维图像数据;4)输入渲染管线上一步的数据,进行水面顶点着色器处理,将产生的数据输出到下一步骤;在这一步中,通过编写好的水面顶点着色器,逐顶点的处理每个顶点附带的信息,获得水面中每个点在主摄像机裁剪空间中的位置、世界空间中的位置、世界空间中该顶点对应的切线向量、世界空间中该顶点对应的副切线向量、世界空间中该顶点对应的法线向量、该顶点对应的屏幕位置、该顶点对应的法线纹理坐标;5)图元组装,光栅化与插值;6)输入渲染管线上一步的数据,水面片元着色器处理,将产生的数据输出到下一步骤。在这一步中,通过水面平面的片元着色器,依据之前获得的信息,得到每个水面平面片元的颜色及深度信息;7)更新主摄像机渲染的图像中的对应于水面平面位置的像素;进一步地,第二个宏观步骤的第6个步骤可以分成以下六个步骤,步骤间依赖关系见图4,只要符合依赖关系,步骤间顺序可以随意调换:1)向片元法线生成模块输入其所需的数据,获得当前片元的,在切线空间下或世界空间下的法线向量。具体解释参见后文对于模块的描述;2)向水底颜色生成模块输入其所需的数据,获得当前片元对应的水底折射颜色。具体解释参见后文对于模块的描述;3)向水面反射颜色生成模块输入其所需的数据,获得当前片元对应的水面反射颜色。具体解释参见后文对于模块的描述;4)获得视角方向和当前片元对应的世界空间下的法线向量的点积。对该点积使用下文中所述的菲涅尔简化公式方法,得到当前片元对应的菲涅尔系数。视角方向可以通过访问摄像机对应内置参数得到;5)对当前片元对应的光的反射方向、高光颜色、视角方向以及光滑度系数使用Phong高光反射方法,得到当前片元对应的高光反射颜色;其中,光的反射本文档来自技高网
...

【技术保护点】
1.一种实时渲染中的水面仿真方法,其特征在于,包含两个宏观步骤,即:倒影摄像机获取场景倒影图像步骤,以及主摄像机渲染出包含水面的场景图像的步骤,所述第一个宏观步骤可以分成以下八个步骤,其中8)由图像应用编程接口自动处理:1)创建倒影摄像机,用于完全复制主摄像机,作为倒影摄像机;2)获得关于水面平面的反射矩阵,具体为:这一步输入世界空间中的水面平面的四维向量表示,根据线性代数的镜面反射原理,计算得到在世界空间中的关于水面平面的反射矩阵;3)获得当前倒影摄像机的观察变换矩阵;4)反射矩阵右乘观察变换矩阵;5)用步骤4获得的矩阵替代当前倒影摄像机的观察变换矩阵;6)把表示当前水面平面的四维向量从世界空间变换到倒影摄像机观察空间;7)将得到的平面四维向量作为近裁平面修改倒影摄像机的投影矩阵;8)倒影摄像机将视锥体内的场景渲染成水面平面的倒影图像;所述第二个宏观步骤可以分成以下七个步骤,其中2,5,7由图形应用编程接口自动处理;4,6由工程师自行编程并由图形应用编程接口自动调用;1)设置水面平面的渲染顺序,使其在场景中其他物体之后渲染;2)依据渲染顺序,将排在水面平面之前的物体渲染到最终的图像中;3)将此时渲染出的二维图像与水面建立起关联;4)输入渲染管线上一步的数据,进行水面顶点着色器处理,将产生的数据输出到下一步骤;5)图元组装,光栅化与插值;6)输入渲染管线上一步的数据,水面片元着色器处理,将产生的数据输出到下一步骤。7)更新主摄像机渲染的图像中的对应于水面平面位置的像素。...

【技术特征摘要】
1.一种实时渲染中的水面仿真方法,其特征在于,包含两个宏观步骤,即:倒影摄像机获取场景倒影图像步骤,以及主摄像机渲染出包含水面的场景图像的步骤,所述第一个宏观步骤可以分成以下八个步骤,其中8)由图像应用编程接口自动处理:1)创建倒影摄像机,用于完全复制主摄像机,作为倒影摄像机;2)获得关于水面平面的反射矩阵,具体为:这一步输入世界空间中的水面平面的四维向量表示,根据线性代数的镜面反射原理,计算得到在世界空间中的关于水面平面的反射矩阵;3)获得当前倒影摄像机的观察变换矩阵;4)反射矩阵右乘观察变换矩阵;5)用步骤4获得的矩阵替代当前倒影摄像机的观察变换矩阵;6)把表示当前水面平面的四维向量从世界空间变换到倒影摄像机观察空间;7)将得到的平面四维向量作为近裁平面修改倒影摄像机的投影矩阵;8)倒影摄像机将视锥体内的场景渲染成水面平面的倒影图像;所述第二个宏观步骤可以分成以下七个步骤,其中2,5,7由图形应用编程接口自动处理;4,6由工程师自行编程并由图形应用编程接口自动调用;1)设置水面平面的渲染顺序,使其在场景中其他物体之后渲染;2)依据渲染顺序,将排在水面平面之前的物体渲染到最终的图像中;3)将此时渲染出的二维图像与水面建立起关联;4)输入渲染管线上一步的数据,进行水面顶点着色器处理,将产生的数据输出到下一步骤;5)图元组装,光栅化与插值;6)输入渲染管线上一步的数据,水面片元着色器处理,将产生的数据输出到下一步骤。7)更新主摄像机渲染的图像中的对应于水面平面位置的像素。2.根据权利要求1所述的实时渲染中的水面仿真方法,其特征在于,第二个宏观步骤的第6个步骤分成以下六个步骤,只要符合依赖关系,步骤间顺序可以随意调换:1)向片元法线生成模块输入其所需的数据,获得当前片元的在切线空间下以及世界空间下的法线向量;2)向水底颜色生成模块输入其所需的数据,获得当前片元对应的水底折射颜色;3)向水面反射颜色生成模块输入其所需的数据,获得当前片元对应的水面反射颜色;4)获得视角方向和当前片元对应的世界空间下的法线向量的点积,对该点积采用菲涅尔简化公式方法,得到当前片元对应的菲涅尔系数;5)对当前片元对应的光的反射方向、高光颜色、视角方向以及光滑度系数使用Phong高光反射方法,得到当前片元对应的高光反射颜色;6)对步骤2获得的水底折射颜色、步骤3获得的水面反射颜色、步骤4获得的菲涅尔系数以及步骤5获得的高光反射颜色进行计算,得到该片元对应的最终的颜色,具体计算公式如下:水面反射颜色×菲涅尔系数+水底折射颜色×(1-菲涅尔系数)+高光反射颜色=该片元对应的最终颜色。3.根据权利要求1所述的实时渲染中的水面仿真方法,其特征在于,所述的倒影摄像机可以生成倒影图像。4.根据权利要求2所述的实时渲染中的水面仿真方法,其特征在于,所述的片元法线生成模块所需的输入数据、操作步骤与生成的结果具体如下:该模块所需要的数据为:水面波纹的法线纹理、该片元对应的法...

【专利技术属性】
技术研发人员:任柯燕严嘉睿侯义斌
申请(专利权)人:北京工业大学
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1