基于虚拟点光源的复杂真实感三维场景渐进交互式绘制方法与流程

文档序号:17118655发布日期:2019-03-15 23:34阅读:193来源:国知局
基于虚拟点光源的复杂真实感三维场景渐进交互式绘制方法与流程

本发明属于虚拟三维场景绘制技术领域,涉及一种基于虚拟点光源的复杂真实感三维场景渐进交互式绘制方法。



背景技术:

真实感三维场景全局光照效果绘制在影视特效制作、虚拟现实、电脑游戏等领域有着广泛的应用。全局光照可以分成直接光照和间接光照两部分。全局光照等于直接光照与间接光照之和。高质量的真实感三维场景全局光照效果绘制非常费时。在影视特效制作中,往往利用计算机技术绘制虚拟三维场景,以便获得各种特效画面。由于影视特效制作对画面品质要求很高,因此通常绘制三维场景全局光照效果的时间很长。在设计三维场景的虚拟相机拍摄参数(即视点观察参数)或者几何对象位置参数时,设计师往往需要进行多次调整才能得到满意的结果。然而,设计师在通过显示程序发出交互控制命令来调整视点观察参数或者几何对象位置参数的过程中,通常需要先看到绘制画面结果(至少部分结果)才能进一步决定如何修改参数,这就要求能够及时地给设计师显示三维场景绘制画面。对于绘制时间很长的复杂真实感三维场景,如果能够以不断动态渐进精化的方式在设计师面前显示三维场景画面,则有助于设计师快速地获得三维场景画面的感官认识,从而激发艺术创作灵感。发表在《computergraphicsforum》期刊2014年33卷1期上的论文《scalablerealisticrenderingwithmany-lightmethods》讲述了使用虚拟点光源实现真实感三维场景全局光照效果绘制的方法,其中介绍了使用随机走步法(randomwalk)创建虚拟点光源的技术。2009年发表在“vision,modeling,andvisualizationworkshop”会议论文集上的论文《real-timeindirectilluminationwithclusteredvisibility》介绍了对虚拟点光源进行k-means聚类的方法,可以实现对虚拟点光源进行聚类,形成若干个簇。本发明提供一种基于虚拟点光源的复杂真实感三维场景渐进交互式绘制方法,以动态渐进精化方式显示复杂三维场景的全局光照效果画面,以实现快速获得复杂三维场景全局光照效果画面感官认识的目的。



技术实现要素:

本方法的目的在于,提供一种基于虚拟点光源的复杂真实感三维场景渐进交互式绘制方法,实现复杂真实感三维场景全局光照效果画面的渐进交互式绘制与显示,使三维场景设计师能够快速获得三维场景画面视觉效果反馈。

本方法的技术方案是这样实现的:基于虚拟点光源的复杂真实感三维场景渐进交互式绘制方法,其特征在于,需要在计算机系统中执行计算机绘制线程程序和计算机显示线程程序,具体步骤如下:

step101:通过计算机绘制线程程序在计算机系统的全局共享内存中创建一个命令队列cmdq,把命令队列cmdq设置成空队列;通过计算机绘制线程程序在计算机系统的全局共享内存中创建一个计数器counter,把计数器counter的值设置成0;

step102:在计算机绘制线程程序中,根据三维场景模型以及光源ls的参数,使用随机走步法从光源出发跟踪npath条光线传输路径,创建mvpl个虚拟点光源a001,在此过程中计算出每个虚拟点光源a001的所在位置坐标pos、所在位置法向量vn、所在位置的表面双向反射分布函数brdf、光入射方向vi和光通量φ;把虚拟点光源a001的所在位置坐标pos、所在位置法向量vn、所在位置的表面双向反射分布函数brdf、光入射方向vi以及光通量φ与虚拟点光源a001关联在一起;

step103:在计算机绘制线程程序中,使用k-means聚类技术对步骤step102中创建的mvpl个虚拟点光源a001进行聚类,得到ncls个簇a002,每个簇a002包含若干相似的虚拟点光源a001;在执行k-means聚类操作时,虚拟点光源a001到簇a002的中心的距离计算公式为d=w1δx+w2δα,δx表示虚拟点光源a001的所在位置到簇a002的中心位置的欧氏距离,δα表示虚拟点光源a001的所在位置法向量vn与簇a002的法向量之间的夹角;

step104:在计算机绘制线程程序中,根据三维场景模型、光源ls的参数以及视点观察参数,使用光栅化与阴影映射技术绘制三维场景,得到三维场景的可视区域在光源ls的照射下的直接光照图像a003;把直接光照图像a003保存在计算机系统的全局共享内存中;如果全局共享内存中不存在间接光照图像indimag,则在计算机系统的全局共享内存中创建直接光照图像a003的一个副本并重命名为间接光照图像indimag,同时把间接光照图像indimag的每个像素的值更改为0;

step105:在计算机显示线程程序中,读取全局共享内存中的直接光照图像a003,把直接光照图像a003转换成可以在显示器上显示的三维场景图像画面并显示在显示器上;

step106-a:在计算机绘制线程程序中,执行如下操作:

step106-a-1:在计算机绘制线程程序中,判断全局共享内存中的命令队列cmdq是否为空,如果为空,则转步骤step106-a-2,否则转步骤step106-a-3;

step106-a-2:如果全局共享内存中的计数器counter的值大于mcnt,则转步骤step106-a-4,否则执行以下操作:

针对步骤step103中得到的每个簇a002,按均匀分布从每个簇a002中随机选取一个虚拟点光源a001,共得到ncls个虚拟点光源a001,用通过随机选取产生的这ncls个虚拟点光源a001照射三维场景,根据三维场景模型、视点观察参数以及这ncls个虚拟点光源a001的所在位置坐标pos、所在位置法向量vn、所在位置的表面双向反射分布函数brdf、光入射方向vi和光通量φ参数值,使用光栅化与阴影映射技术绘制三维场景,得到三维场景的可视区域在这ncls个虚拟点光源a001的照射下的间接光照图像b001;令i0表示全局共享内存中的间接光照图像indimag的第row行、第col列像素的值,令i1表示间接光照图像b001的第row行、第col列像素的值,令nct表示计数器counter的值,把全局共享内存中的间接光照图像indimag的第row行、第col列像素的值更新为i0×nct/(1+nct)+i1/(1+nct),其中row=1,2,…,mpix,col=1,2,…,npix,mpix表示间接光照图像b001的像素行数,npix表示间接光照图像b001的像素列数;令计数器counter的值增加1,即counter=counter+1;转步骤step106-a-4;

step106-a-3:执行如下步骤:

step106-a-3-1:从全局共享内存中的命令队列cmdq的队首取出一个交互控制命令a004,判断交互控制命令a004是否为关闭绘制程序命令,如果是,则转步骤step107,否则根据交互控制命令a004对三维场景模型和视点观察参数执行变换更新操作;

step106-a-3-2:如果命令队列cmdq不为空,转步骤step106-a-3-1,否则把全局共享内存中的计数器counter的值设置成0,把全局共享内存中的间接光照图像indimag的所有像素的值赋值为0,转步骤step102;

step106-a-4:转步骤step106-a-1;

step106-b:在计算机显示线程程序中,执行以下操作:

step106-b-1:在计算机显示线程程序中,读取全局共享内存中的直接光照图像a003和间接光照图像indimag,把直接光照图像a003与间接光照图像indimag相加在一起的结果转换成可以在显示器上显示的三维场景图像画面并显示在显示器上,接收设计师发出的交互控制命令a004,把交互控制命令a004添加到计算机系统的全局共享内存中的命令队列cmdq的队尾;

step106-b-2:转步骤step106-b-1;

step107:三维场景绘制结束,终止计算机绘制线程程序和计算机显示线程程序。

如图1所示,从步骤step101至步骤step105,计算机绘制线程程序和计算机显示线程程序按照步骤step101至步骤step105的顺序先后执行相应操作;计算机绘制线程程序执行步骤step106-a和计算机显示线程程序执行步骤step106-b是并行的。计算机绘制线程程序和计算机显示线程程序可以对计算机系统的全局共享内存执行读和写操作,对于共享数据的读取采用操作系统的信号量机制实现互斥。

本发明使用计算机绘制线程程序实现三维场景画面绘制操作,使用计算机显示线程程序实现三维场景画面显示操作,计算机绘制线程程序和计算机显示线程程序能够并行执行。只要设计师未使用交互控制命令修改三维场景模型和视点观察参数或者发出关闭绘制程序命令,计算机绘制线程程序就用渐进迭代方式不断精化间接光照绘制结果,同时计算机显示线程程序也能动态显示间接光照不断精化后的全局光照效果画面;设计师可以随时使用交互控制命令修改三维场景模型和视点观察参数,计算机绘制线程程序会响应设计师的修改操作,绘制修改后的三维场景画面;只要在足够长的时间内,设计师不使用交互控制命令来修改三维场景模型和视点观察参数或者发出关闭绘制程序命令,计算机绘制线程程序就能最终绘制出高品质的全局光照效果画面。因此本发明的积极效果是,使用本发明绘制真实感三维场景,设计师能随时使用交互控制命令来修改三维场景模型和视点观察参数,同时不断获得越来越精化的三维场景全局光照效果绘制画面,以便既能快速地获得三维场景画面视觉效果反馈,又能方便地得到高品质的全局光照效果绘制画面。

附图说明

图1为计算机绘制线程程序和计算机显示线程程序要执行的步骤及其在时间轴上的位置示意图。

具体实施方式

为了使本方法的特征和优点更加清楚明白,下面结合具体实施例对本方法作进一步的描述。在本实施例中,考虑如下虚拟房间三维场景:在房间中放着10张桌子和10把椅子,桌子上放着水果、书、围棋等众多物体,房间的天花板上有一个光源向下照射三维场景。计算机系统的cpu选择intel(r)xeon(r)cpue3-1225v3@3.20ghz,内存选择金士顿8gbddr31333,硬盘选择buffalohd-ce1.5tu2;计算机操作系统选用windows7,软件编程工具选用vc++2010。

本方法的技术方案是这样实现的:基于虚拟点光源的复杂真实感三维场景渐进交互式绘制方法,其特征在于,需要在计算机系统中执行计算机绘制线程程序和计算机显示线程程序,具体步骤如下:

step101:通过计算机绘制线程程序在计算机系统的全局共享内存中创建一个命令队列cmdq,把命令队列cmdq设置成空队列;通过计算机绘制线程程序在计算机系统的全局共享内存中创建一个计数器counter,把计数器counter的值设置成0;

step102:在计算机绘制线程程序中,根据三维场景模型以及光源ls的参数,使用随机走步法从光源出发跟踪npath条光线传输路径,创建mvpl个虚拟点光源a001,在此过程中计算出每个虚拟点光源a001的所在位置坐标pos、所在位置法向量vn、所在位置的表面双向反射分布函数brdf、光入射方向vi和光通量φ;把虚拟点光源a001的所在位置坐标pos、所在位置法向量vn、所在位置的表面双向反射分布函数brdf、光入射方向vi以及光通量φ与虚拟点光源a001关联在一起;

step103:在计算机绘制线程程序中,使用k-means聚类技术对步骤step102中创建的mvpl个虚拟点光源a001进行聚类,得到ncls个簇a002,每个簇a002包含若干相似的虚拟点光源a001;在执行k-means聚类操作时,虚拟点光源a001到簇a002的中心的距离计算公式为d=w1δx+w2δα,δx表示虚拟点光源a001的所在位置到簇a002的中心位置的欧氏距离,δα表示虚拟点光源a001的所在位置法向量vn与簇a002的法向量之间的夹角;

step104:在计算机绘制线程程序中,根据三维场景模型、光源ls的参数以及视点观察参数,使用光栅化与阴影映射技术绘制三维场景,得到三维场景的可视区域在光源ls的照射下的直接光照图像a003;把直接光照图像a003保存在计算机系统的全局共享内存中;如果全局共享内存中不存在间接光照图像indimag,则在计算机系统的全局共享内存中创建直接光照图像a003的一个副本并重命名为间接光照图像indimag,同时把间接光照图像indimag的每个像素的值更改为0;

step105:在计算机显示线程程序中,读取全局共享内存中的直接光照图像a003,把直接光照图像a003转换成可以在显示器上显示的三维场景图像画面并显示在显示器上;

step106-a:在计算机绘制线程程序中,执行如下操作:

step106-a-1:在计算机绘制线程程序中,判断全局共享内存中的命令队列cmdq是否为空,如果为空,则转步骤step106-a-2,否则转步骤step106-a-3;

step106-a-2:如果全局共享内存中的计数器counter的值大于mcnt,则转步骤step106-a-4,否则执行以下操作:

针对步骤step103中得到的每个簇a002,按均匀分布从每个簇a002中随机选取一个虚拟点光源a001,共得到ncls个虚拟点光源a001,用通过随机选取产生的这ncls个虚拟点光源a001照射三维场景,根据三维场景模型、视点观察参数以及这ncls个虚拟点光源a001的所在位置坐标pos、所在位置法向量vn、所在位置的表面双向反射分布函数brdf、光入射方向vi和光通量φ参数值,使用光栅化与阴影映射技术绘制三维场景,得到三维场景的可视区域在这ncls个虚拟点光源a001的照射下的间接光照图像b001;令i0表示全局共享内存中的间接光照图像indimag的第row行、第col列像素的值,令i1表示间接光照图像b001的第row行、第col列像素的值,令nct表示计数器counter的值,把全局共享内存中的间接光照图像indimag的第row行、第col列像素的值更新为i0×nct/(1+nct)+i1/(1+nct),其中row=1,2,…,mpix,col=1,2,…,npix,mpix表示间接光照图像b001的像素行数,npix表示间接光照图像b001的像素列数;令计数器counter的值增加1,即counter=counter+1;转步骤step106-a-4;

step106-a-3:执行如下步骤:

step106-a-3-1:从全局共享内存中的命令队列cmdq的队首取出一个交互控制命令a004,判断交互控制命令a004是否为关闭绘制程序命令,如果是,则转步骤step107,否则根据交互控制命令a004对三维场景模型和视点观察参数执行变换更新操作;

step106-a-3-2:如果命令队列cmdq不为空,转步骤step106-a-3-1,否则把全局共享内存中的计数器counter的值设置成0,把全局共享内存中的间接光照图像indimag的所有像素的值赋值为0,转步骤step102;

step106-a-4:转步骤step106-a-1;

step106-b:在计算机显示线程程序中,执行以下操作:

step106-b-1:在计算机显示线程程序中,读取全局共享内存中的直接光照图像a003和间接光照图像indimag,把直接光照图像a003与间接光照图像indimag相加在一起的结果转换成可以在显示器上显示的三维场景图像画面并显示在显示器上,接收设计师发出的交互控制命令a004,把交互控制命令a004添加到计算机系统的全局共享内存中的命令队列cmdq的队尾;

step106-b-2:转步骤step106-b-1;

step107:三维场景绘制结束,终止计算机绘制线程程序和计算机显示线程程序。

如图1所示,从步骤step101至步骤step105,计算机绘制线程程序和计算机显示线程程序按照步骤step101至步骤step105的顺序先后执行相应操作;计算机绘制线程程序执行步骤step106-a和计算机显示线程程序执行步骤step106-b是并行的。计算机绘制线程程序和计算机显示线程程序可以对计算机系统的全局共享内存执行读和写操作,对于共享数据的读取采用操作系统的信号量机制实现互斥。

在本实施例中,w1=0.7,w2=0.3,npath=800000,mcnt=160,ncls=20。

在步骤step102中,在跟踪完npath条光线传输路径后,会在这些光线传输路径与三维场景几何对象的交点位置处创建一系列虚拟点光源,虚拟点光源的总数是mvpl。直接光照图像a003和间接光照图像b001具有相同的像素行数;直接光照图像a003和间接光照图像b001具有相同的像素列数;mpix实际表示在用光栅化与阴影映射技术绘制三维场景时的虚拟相机的像素行数,npix实际表示在用光栅化与阴影映射技术绘制三维场景时的虚拟相机的像素列数。

在步骤step106-a-2中,用ncls个虚拟点光源a001照射三维场景,三维场景的可视区域在这ncls个虚拟点光源a001的照射下的间接光照图像b001是,从这ncls个虚拟点光源a001发出的光直接到达可视区域后产生的光照贡献。由于虚拟点光源产生的光照贡献本质上是间接光照,因此本方法用间接光照图像b001来描述三维场景的可视区域在这ncls个虚拟点光源a001的直接照射下的光照结果。设计师可以通过计算机显示线程程序发出“关闭绘制程序命令”、“修改三维场景模型和视点观察参数命令”两类交互控制命令。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1