买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】一种实时渲染中的水面仿真方法_北京工业大学_201910442598.2 

申请/专利权人:北京工业大学

申请日:2019-05-25

公开(公告)日:2022-11-29

公开(公告)号:CN110163945B

主分类号:G06T15/00

分类号:G06T15/00

优先权:

专利状态码:有效-授权

法律状态:2022.11.29#授权;2019.09.17#实质审查的生效;2019.08.23#公开

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

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

全文数据:一种实时渲染中的水面仿真方法技术领域本发明涉及一种实时渲染中的水面仿真方法,属于计算机图形学实时渲染领域,应用于视频游戏,交互艺术,实时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高光反射方法,得到当前片元对应的高光反射颜色;其中,光的反射方向可以由世界空间下法线向量与光的入射方向通过反射计算得到。光的入射方向可以直接通过图形编程接口获得。高光颜色与光滑度系数由使用者自行设置,方便及时调整最终效果。视角方向获取方式同步骤4。Phong高光反射方法参见后文;6对步骤2获得的水底折射颜色、步骤3获得的水面反射颜色、步骤4获得的菲涅尔系数以及步骤5获得的高光反射颜色进行计算,得到该片元对应的最终的颜色。在这一步中,具体的计算方式为:水面反射颜色×菲涅尔系数+水底折射颜色×1-菲涅尔系数+高光反射颜色=该片元对应的最终颜色进一步地,片元法线生成模块所需的输入数据、操作步骤与生成的结果如下文所示。首先,该模块所需要的数据为:水面波纹的法线纹理、该片元对应的法线纹理坐标、世界空间中该片元对应的切线向量、世界空间中该片元对应的副切线向量、世界空间中该片元对应的法线向量、时间变量、用户输入的沿纹理X轴方向的采样间隔与沿纹理Y轴方向的采样间隔。接下来,为操作步骤:1用用户输入的沿纹理X轴方向的采样间隔与沿纹理Y轴方向的采样间隔组成二维向量;2将步骤1获得的二维向量乘以时间变量,获得采样间隔;3将步骤2获得的采样间隔加上该片元对应的法线纹理坐标,获得第一个采样位置;4将步骤2获得的采样间隔减该片元对应的法线纹理坐标,获得第二个采样位置;5用步骤3获得的采样位置对水面波纹的法线纹理进行采样,获得颜色值,然后将该颜色值映射为切线空间中的法线向量。映射原理为公知,可参考《UnityShader入门精要》7.2.2小节;6用步骤4获得的采样位置对水面波纹的法线纹理进行采样,获得颜色值,然后将该颜色值映射为切线空间中的法线向量。映射原理为公知,可参考《UnityShader入门精要》7.2.2小节;7将步骤5,6获得的切线空间中的法线向量相加并标准化为单位向量,获得最终切线空间中采样得到的法线向量。标准化过程为公知,请参考线性代数相关资料;8将世界空间中该片元对应的切线向量、世界空间中该片元对应的副切线向量、世界空间中该片元对应的法线向量组合为矩阵,该矩阵可将切线空间中向量转换到世界空间中。具体组合方式为公知,可参考《UnityShader入门精要》4.6.2小节;9将步骤8得到的矩阵乘以步骤7获得的切线空间中法线向量,得到该片元对应的世界空间中的法线向量;总的来说,该模块最终输出了该片元对应的切线空间中的法线向量以及世界空间中的法线向量。进一步地,水底颜色生成模块所需的输入数据、操作步骤与生成的结果如下文所示。首先,该模块所需要的数据为:该片元切线空间中的法线向量、扭曲系数用户自定义得到、第二个宏观步骤中第2步得到的最终的图像中除水面本身之外的场景图像、当前水面片元在主摄像机的屏幕空间位置、以及除水面本身外的场景图像的像素大小。接下来,为操作步骤:1将由该片元切线空间中的法线向量的x和y分量组成的二维向量、扭曲系数用户自定义得到、除水面本身外的场景图像的像素大小的x和y分量组成的二维向量对应相乘,得到偏移量向量;2将步骤1得到的偏移量向量乘以当前水面片元在主摄像机的屏幕空间位置的z分量再加上由当前水面片元在主摄像机的屏幕空间位置对应的x和y分量组成的二维向量得到一个二维向量;3将步骤2得到的二维向量除以当前水面片元在主摄像机的屏幕空间位置的w分量,得到一个二维向量;4用该二维向量对除水面本身外的场景图像进行取样,得到该片元对应的水下折射颜色;总的来说,该模块最终输出了该片元对应的水下折射颜色。进一步地,水面反射颜色生成模块所需的输入数据、操作步骤与生成的结果如下文所示。首先,该模块所需要的数据为:世界空间下该片元对应法线方向、水面平面的倒影图像、该片元对应的在主摄像机屏幕空间中的位置。接下来,为操作步骤:1用该片元对应的在主摄像机屏幕空间中的位置加世界空间下该片元对应法线方向,获得一个二维向量;2用该二维向量对水面平面的倒影图像取样,获得该片元对应的倒影颜色;3总的来说,该片元最终输出了该片元对应的水面反射颜色。进一步地,以下为菲涅尔简化公式,生成该片元对应地菲涅尔系数。其中,fλ设置为0,u表示视角方向和当前片元对应的法线向量的点积。Fλu=fλ+1-fλ1-u5进一步地,以下为Phong高光反射公式,计算该片元对应地高光颜色。其中为光的反射方向,它通过光相对于片元的方向和当前片元对应的法线向量得出;为视角方向;mgloss为光滑度系数,取值为22;mspecular为高光反射颜色;clight为光照颜色。以下代码为在CgHLSL中对该公式的实现,以供参考。fixed3specular=_LightColor0.rgb*_Specular.rgb*powsaturatedotmyLightReflectDir,myviewDir,_Gloss;进一步地,水面颜色混合模块可以生成水面最终的颜色。该模块根据菲涅尔系数混合了反射颜色与折射颜色,生成了该片元对应的初步的水面的颜色。在这一步中,具体的计算方式为:水面反射颜色×菲涅尔系数+水面折射颜色×1-菲涅尔系数+高光反射颜色=该片元对应的最终颜色本发明包含的三个算法模块和四个方法或部分依赖关系如图6所示。水面反射颜色生成模块依赖倒影摄像机与片元法线生成模块;水底颜色生成模块、菲涅尔系数生成方法依赖于片元法线生成模块;水面颜色混合方法依赖于水面反射颜色生成模块、水底颜色生成模块和菲涅尔系数生成方法;水面最终颜色混合方法依赖于水面反射颜色生成模块、水底颜色生成模块、菲涅尔系数生成方法以及高光反射颜色生成方法。与现有技术相比,本发明的有益效果:1本发明可以提高实时渲染中水面的真实感,参见图7,8,9,10间的对比。从整体效果来看,本项目水面效果比举例的两个官方效果更好。具体体现在加入了水面高光反射、更明显的波浪效果以及更加明显,可以调节的菲涅尔效应效果。具体分析请参见后文对于相关附图的说明。2本发明可以流畅运行在当前主流的个人消费级设备上,具体分析请参见后文对于相关附图的说明。详细的数据解释请参见附图说明后的对于图7-图13的说明。附图说明图1本发明的总体渲染流程图。图2本发明的倒影摄像机获取倒影图像流程图。图3本发明的主摄像机中有关水面的渲染流程图。图4本发明的主摄像机中水面平面的片元着色器生成片元的流程图。图5本发明的片元着色器中各模块或方法关系结构图。图6本发明的所有模块或方法关系结构图。图7Unity官方第二代水面着色器效果图以及测试结果。图8本发明的水面仿真方法效果图以及测试结果。图9本发明的水面仿真方法效果图2。图10Unity官方第四代水面着色器效果图以及测试结果。图11Unity官方第二代水面在UnityProfiler中的测试结果。图12本发明的水面仿真方法在UnityProfiler中的测试结果。图13Unity官方第四代水面在UnityProfiler中的测试结果。图14一种基于Unity平台的组织结构。具体实施方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施案例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施案例只用以解释本发明,并不用于限定本发明。首先,结合图1,2,3,4及其在发明内容中的解释,本领域工程师应该可以较为清晰的使用各种语言或平台构建出水面效果。在此,为了使实施方式更加清晰,本发明会根据在Unity平台下的实际案例的代码组织结构图来进一步说明本发明的实施方式。图14说明了一种基于Unity平台的组织结构。其中,水面平面作为Unity中的一个对象,下会挂载水面特效C#脚本以及水面特效UnityShader。其中,C#在Unity平台下,主要操控的对象是CPU。C#脚本在这里主要的功能就是通过获取Unity平台提供的资源、水面平面中所包含的部分信息,并控制CPU,计算得到水面平面的倒影图像,传送给水面特效UnityShader。对于水面特效UnityShader来说,它主要操控的对象是GPU。它在这里主要的功能就是通过Unity使用Unity平台提供的各项资源、水面特效C#脚本传来的倒影图像以及水面平面本身包含的信息,控制GPU使得其可以计算得到整个水面平面的最终效果,并传递到屏幕上,形成整个水面的图像。下面,将对图7-图13进行详细解释,以支持有益效益所涉及的结论。首先是对效果进行的解释。由于仿真所具有的艺术性,所以当我们在对比真实感的时候,往往会掺入主观判断。所以,在这里,我们仅根据水面涉及的仿真的自然现象的数量和质量进行对比。从图7中,我们可以看到反射、折射、水面波纹以及菲涅尔效应。我们可以发现,由于水面波纹会产生大量棕色区域,所以反而显得该水面十分凌乱,而这影响了我们对于菲涅尔效应的观察。从图8,9中,我们可以看到,本发明的水面模拟效果有反射、折射、水面波纹、菲涅尔效应以及高光反射。相比于图7,至少不会显得十分琐碎,并且波浪也比较自然;高光反射也可以让人注意到环境中的太阳光。此外,由于没有凌乱的波浪的影响,菲涅尔效应也更加明显;我们能够较为容易的看到近处的水底,却很难看到远处的水底这就是菲涅尔效应的模拟。从图10中,我们看到的是比较平滑的水面,从这个水面上,我们能够看见折射、反射、水面波纹以及菲涅尔效应。但是与本项目对比之后,我们会发现,它的菲涅尔效应较弱。并且很难调节,因为Unity官方水面某个位置的菲涅尔系数大都是根据图片纹理取样得出,而非通过菲涅尔简化公式实时算出。除了效果之外,本项目还将各个水面的性能在同一场景下进行了对比。本测试的测试环境为,CPU:IntelCorei7-8750H、RAM:16.0GB、GPU:NVIDIAGTX10603GBMax-Q。具体结果如下:其中,比较重要的三个指标为CPUUsage,GPUUsage与Graphics后面的帧率。其中,一个画面的流畅与否,既由CPU所决定又由GPU所决定。因为CPU负责收集三维或二维的数据,而GPU负责把这些数据渲染成二维的具有立体感的画面。其中,在CPUUsage中的Rendering分量的具体含义即为CPU收集需要渲染的数据和命令的过程占用的时间。这个分量和GPU的各个分量共同决定了渲染速度。此外,在Statistics中的Graphics帧率可以看作是渲染的最终结果,即每秒绘制的图像数量。理论上,对于大部分游戏来说,帧率到达30帧以上,人就会感觉这个游戏是流畅的。通过对比,我们可以发现,本项目的水面从性能上来说也优于Unity官方给出的两种水面。首先从整体来看,Unity官方第二代水面的帧率始终保持在120帧左右;本项目水面的帧率保持在130帧左右;而Unity官方第四代水面的帧率保持在100帧左右。从CPU的资源分配上来看,Unity官方的水面消耗在垂直同步的性能更多一些。这个功能主要是为了让显示器的刷新和显卡的工作同步起来,以免画面撕裂。而本项目的水面主要是脚本处理和收集所需渲染的信息的过程消耗了CPU资源。此外,在GPU消耗方面,总的来看,这三个特效大同小异。但是本水面让GPU资源主要消耗在了后期处理上,而另外两个水面让GPU资源主要消耗在了其他问题上。以上所述,仅为本发明的具体实施方式,但本发明的保护范围不局限于此,任何属于本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。

权利要求: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所述的实时渲染中的水面仿真方法,其特征在于,所述的片元法线生成模块所需的输入数据、操作步骤与生成的结果具体如下:该模块所需要的数据为:水面波纹的法线纹理、该片元对应的法线纹理坐标、世界空间中该片元对应的切线向量、世界空间中该片元对应的副切线向量、世界空间中该片元对应的法线向量、时间变量、用户输入的沿纹理X轴方向的采样间隔与沿纹理Y轴方向的采样间隔;接下来,为操作步骤:1用用户输入的沿纹理X轴方向的采样间隔与沿纹理Y轴方向的采样间隔组成二维向量;2将步骤1获得的二维向量乘以时间变量,获得采样间隔;3将步骤2获得的采样间隔加上该片元对应的法线纹理坐标,获得第一个采样位置;4将步骤2获得的采样间隔减该片元对应的法线纹理坐标,获得第二个采样位置;5用步骤3获得的采样位置对水面波纹的法线纹理进行采样,获得颜色值,然后将该颜色值映射为切线空间中的法线向量;6用步骤4获得的采样位置对水面波纹的法线纹理进行采样,获得颜色值,然后将该颜色值映射为切线空间中的法线向量;7将步骤5,6获得的切线空间中的法线向量相加并标准化为单位向量,获得最终切线空间中采样得到的法线向量;8将世界空间中该片元对应的切线向量、世界空间中该片元对应的副切线向量、世界空间中该片元对应的法线向量组合为矩阵,该矩阵可将切线空间中向量转换到世界空间中;9将步骤8得到的矩阵乘以步骤7获得的切线空间中法线向量,得到该片元对应的世界空间中的法线向量;最终输出了该片元对应的切线空间中的法线向量以及世界空间中的法线向量。5.根据权利要求2所述的实时渲染中的水面仿真方法,其特征在于,所述的水底颜色生成模块所需的输入数据、操作步骤与生成的结果具体如下:该模块所需要的数据为:该片元切线空间中的法线向量、扭曲系数、第二个宏观步骤中第2步得到的最终的图像中除水面本身之外的场景图像、当前水面片元在主摄像机的屏幕空间位置、以及除水面本身外的场景图像的像素大小;接下来,为操作步骤:1将由该片元切线空间中的法线向量的x和y分量组成的二维向量、扭曲系数用户自定义得到、除水面本身外的场景图像的像素大小的x和y分量组成的二维向量对应相乘,得到偏移量向量;2将步骤1得到的偏移量向量乘以当前水面片元在主摄像机的屏幕空间位置的z分量再加上由当前水面片元在主摄像机的屏幕空间位置对应的x和y分量组成的二维向量得到一个二维向量;3将步骤2得到的二维向量除以当前水面片元在主摄像机的屏幕空间位置的w分量,得到一个二维向量;4用该二维向量对除水面本身外的场景图像进行取样,得到该片元对应的水下折射颜色;该模块最终输出了该片元对应的水下折射颜色。6.根据权利要求2所述的实时渲染中的水面仿真方法,其特征在于:所述的向水面反射颜色生成模块所需要的数据为:世界空间下该片元对应法线方向、水面平面的倒影图像、该片元对应的在主摄像机屏幕空间中的位置;接下来,为操作步骤:1用该片元对应的在主摄像机屏幕空间中的位置加世界空间下该片元对应法线方向,获得一个二维向量;2用该二维向量对水面平面的倒影图像取样,获得该片元对应的倒影颜色;总的来说,该片元最终输出了该片元对应的水面反射颜色。

百度查询: 北京工业大学 一种实时渲染中的水面仿真方法

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。