构建沙画模拟系统的方法与流程

文档序号:12034249阅读:573来源:国知局
构建沙画模拟系统的方法与流程

本发明涉及虚拟现实的技术领域,尤其涉及基于c#语言开发的粒子运动模拟的技术。



背景技术:

沙画艺术是21世纪刚刚兴起的一种与舞台艺术相结合的表演形式,它突破了传统艺术,创意神奇、画面绝美,配合优美的背景音乐,天衣无缝的表演令人震惊。但是由于沙画制作的设备专业性强,工具不易携带等问题的存在,使得沙画在日常的传播与兴起中受到了一定的限制。

在数字媒体艺术不断兴起的今天,利用计算机来设计模拟绘画软件已经成为一种热潮。而因为沙画相比于其他绘画种类来说,它的绘画方式比较特殊,所以在模拟沙画绘制方面还有很大的改善空间。



技术实现要素:

为给人们提供接触沙画了解沙画的机会,本发明旨在提供一种构建沙画模拟系统的方法,以实时模拟沙画。

为了将计算机技术与传统艺术完美结合,使用电脑能够更加真实地创作出沙画,本发明重点研究真实沙画的绘制,即基于细节真实感沙画的绘制。解决的难点在于一是沙画绘制手法丰富多样,如何应用计算机编程为不同的绘制手法设计合理的算法来接近真实效果,二是现实生活中的沙粒是运动的,如何考虑尽可能多的因素去模拟真实的沙粒运动而提高系统的真实有效性。三是如何利用计算机使得沙画系统在基础的操作之上为用户增加新的乐趣。

为此,本发明采用以下技术方案:

一种构建沙画模拟系统的方法,包括以下步骤:

1)定义各类沙画手法的属性;

2)描述沙粒的高度

采用三维柱状图来描述沙粒的高度;

3)描述沙粒的运动

采用方向场描述沙粒的运动,该方向场被定义为在半圆形区域边缘上的发散模式,将半圆形区域周围方向场简化为四个方向,用以描述沙粒的不均匀分布;

4)采用自适应算法计算沙粒堆积;

5)采用自适应算法计算沙粒塌陷。

所述步骤2)中描述沙粒高度的具体步骤如下:

2.1)将m*n分辨率的画布看做一张二维网格,其中的一个像素坐标为(i,j),此处0≤i≤m-1,0≤j≤n-1;

2.2)用每一个像素表示沙粒;

2.3)沙粒运动之后,在每个像素上形成一个沙柱,沙柱的高度值由hij表示;

2.4)在制作沙画的过程中,某像素上沙柱的高度值越大,便赋予该像素的亮度值越小,反之亦然,即用像素的亮度值的大小来表示该像素处堆积的沙粒高度。

所述步骤3)中描述沙粒运动的具体步骤如下:

3.1)将笔触末端的半圆形区域等分成四个部分,四个方向均垂直于半圆弧向外;

3.2)对每个部分根据实际测量结果得出占全部末端沙粒的权重,即取其每个方向上小圆弧的数值的算数平均值作为该方向上的比例值。

所述步骤4)中的计算沙粒堆积的具体步骤如下:

4.1)对用户绘制时每一笔的接触区域中被清空的沙粒进行总量统计,在重新堆积区域内进行扩散增加的沙粒数量,即为接触区域被清空的沙粒数量;

4.2)由于重新堆积的沙粒会因为重力和摩擦力的综合作用在轮廓曲线附近呈中间高两端低的大致对称分布,且在中间部分达到堆积的峰值,这个分布效果与概率论中的正态分布曲线类似,所以计算截面处堆积的沙粒增加的高度和采用正态分布表示;

4.3)选用数值正态分布函数来确定沙粒对应位置沙粒的堆积高度。

所述步骤5)中的计算沙粒塌陷的具体步骤如下:

采用平滑处理的方法减少相邻高度差来模拟沙粒的塌陷现象,即在堆积后对和周围沙粒柱高度相差大的沙粒柱进行关于高度的平滑化处理,即采用平滑处理的方法减少相邻高度差来模拟沙粒的塌陷现象。

进一步地:

利用rgba模型来模拟彩沙,其步骤如下:

对图像中各个像素的亮度值进行统计操作;

按照测量亮度大小对图像中的像素进行排序,对有相近亮度值的像素进行分类并统计个数,将亮度值接近的视为同一类颜色,并统计相近颜色的像素在图像中总的像素里所占的比例;

某沙粒像素(i,j)处的颜色值通过控制面板设置的rgba值进行改变,其中,r表示颜色的红色分量,g表示颜色的绿色分量,b表示颜色的蓝色分量,a表示不透明度的α分量;

沙粒高度用hij表示,当hij=0时,表示无沙粒,颜色设为采光台自身的颜色;当hij逐渐增大时,颜色的明度降低,使得颜色发生变化,从而体现沙粒的堆积效果。

本发明的贡献主要有两大方面:

1技法方面:通过观察在真实沙台上每个沙画绘制手法的使用与呈现效果,定义一套基于细节的沙画绘制技法包含沙画绘制的七种技法,铺沙、勾沙、撒沙、抹沙、点沙、划沙、捏沙,使得沙画绘制更加真实。除此之外,引入高度场和方向场的概念实现快速仿真,利用rgba模型来模拟彩沙。

2沙画的模拟算法:自适应算法主要包括沙粒堆积算法和沙粒塌陷算法两个关键的方法,它们实时有效地模拟沙粒运动的细节。

附图说明

图1为高度场方法示意图;

图2为勾沙真实结果示意图;

图3为漏沙示意图;

图4为勾沙示意图;

图5为捏沙示意图;

图6为沙粒像素颜色参数设置的三个例子;

图7为沙画模拟系统界面,其中:(a)颜色参数设置、(b)用户界面、(c)工具栏的一部分;

图8为方向场示意图,其中:(a)勾沙、(b)抹沙、(c)捏沙;

图9中,(a)为勾沙示意图,(b)为正态分布;

图10为7种沙画绘制技法模拟,其中:(a)铺沙(b)漏沙(c)点沙(d)勾沙(e)抹沙(f)划沙(g)捏沙;

图11为每一个像素将被划分为k*k分辨率的子像素来处理沙粒运动示意图。

具体实施方式

本发明是一种构建沙画模拟系统的方法,包括以下步骤:

1)定义各类沙画手法的属性;

2)描述沙粒的高度

采用三维柱状图来描述沙粒的高度;

3)描述沙粒的运动

采用方向场描述沙粒的运动,该方向场被定义为在半圆形区域边缘上的发散模式,将半圆形区域周围方向场简化为四个方向,用以描述沙粒的不均匀分布;

4)采用自适应算法计算沙粒堆积;

5)采用自适应算法计算沙粒塌陷。

所述步骤2)中描述沙粒高度的具体步骤如下:

2.1)将m*n分辨率的画布看做一张二维网格,其中的一个像素坐标为(i,j),此处0≤i≤m-1,0≤j≤n-1;

2.2)用每一个像素表示沙粒;

2.3)沙粒运动之后,在每个像素上形成一个沙柱,沙柱的高度值由hij表示;

2.4)在制作沙画的过程中,某像素上沙柱的高度值越大,便赋予该像素的亮度值越小,反之亦然,即用像素的亮度值的大小来表示该像素处堆积的沙粒高度。

所述步骤3)中描述沙粒运动的具体步骤如下:

3.1)将笔触末端的半圆形区域等分成四个部分,四个方向均垂直于半圆弧向外;

3.2)对每个部分根据实际测量结果得出占全部末端沙粒的权重,即取其每个方向上小圆弧的数值的算数平均值作为该方向上的比例值。

所述步骤4)中的计算沙粒堆积的具体步骤如下:

4.1)对用户绘制时每一笔的接触区域中被清空的沙粒进行总量统计,在重新堆积区域内进行扩散增加的沙粒数量,即为接触区域被清空的沙粒数量;

4.2)由于重新堆积的沙粒会因为重力和摩擦力的综合作用在轮廓曲线附近呈中间高两端低的大致对称分布,且在中间部分达到堆积的峰值,这个分布效果与概率论中的正态分布曲线类似,所以计算截面处堆积的沙粒增加的高度和采用正态分布表示;

4.3)选用数值正态分布函数来确定沙粒对应位置沙粒的堆积高度。

所述步骤5)中的计算沙粒塌陷的具体步骤如下:

采用平滑处理的方法减少相邻高度差来模拟沙粒的塌陷现象,即在堆积后对和周围沙粒柱高度相差大的沙粒柱进行关于高度的平滑化处理,即采用平滑处理的方法减少相邻高度差来模拟沙粒的塌陷现象。

进一步地:

利用rgba模型来模拟彩沙,其步骤如下:

对图像中各个像素的亮度值进行统计操作;

按照测量亮度大小对图像中的像素进行排序,对有相近亮度值的像素进行分类并统计个数,将亮度值接近的视为同一类颜色,并统计相近颜色的像素在图像中总的像素里所占的比例;

某沙粒像素(i,j)处的颜色值通过控制面板设置的rgba值进行改变,其中,r表示颜色的红色分量,g表示颜色的绿色分量,b表示颜色的蓝色分量,a表示不透明度的α分量;

沙粒高度用hij表示,当hij=0时,表示无沙粒,颜色设为采光台自身的颜色;当hij逐渐增大时,颜色的明度降低,使得颜色发生变化,从而体现沙粒的堆积效果。

下面对本发明作具体描述。

通过真实沙画手法调研以及在现实中沙台上的实际操作效果的观察,本发明将沙画手法分为7类,分别为“铺沙”、“漏沙”、“点沙”、“勾沙”、“抹沙”、“划沙”、“捏沙”。

在表1中,分别定义了这7种手法各自的属性,包括样式、绘画/铺沙,接触位置,接触应置图示,笔触大小等。

表1

在整个沙画模拟系统中,最重要的是对沙粒的定义以及运动描述。如何描述沙粒模型和绘制技术样式对最终结果的仿真程度和仿真系统的算法效率都有很大影响。基于这些对仿真程度和算法效率的考虑,高度场和方向场被引入到本发明的系统中。此外,在沙粒堆积和沙粒塌陷的模拟中,有对沙粒准确的分布和自适应算法。

高度场方法采用三维柱状图的高度来描述沙粒的高度,当沙粒受到物体碰撞或挤压时,接触区域内沙粒高度会随之改变,以此来描述沙粒的运动。如图1所示,将m*n分辨率的画布看做一张二维网格,其中一个像素的坐标用(i,j)表示,此处0≤i≤m-1,0≤j≤n-1;用每一个像素表示沙粒,沙粒运动之后每个像素上形成一个沙柱,沙柱的高度由hij表示,根据实际沙画绘制结果,得出画布上某像素的沙柱高度值越大,该点亮度值越小;反之亦然,即用像素的亮度值的大小来表示该处堆积的沙粒高度。

根据我们细致的观察,在实际沙粒运动中,运动方向上末端的沙粒总会比起始端的沙粒显得多,随着手指对沙粒的操作能够明显地看到被清空的沙粒分布于两端的数量变化。清参见图2,从三个圆圈中的沙粒状态中,可以很明显地看出中间的圆圈堆积的沙粒最多,而两边的圆圈内的沙粒相对较少。运动所具有的惯性及运动过程中产生的摩擦力使得沙粒在不考虑其他外界因素的前提下,会因方向原因而发生变化。因此,为了更好地模拟沙粒运动时的不均匀分布,本发明定义了方向场的概念。如图8所示,不均匀的分布主要集中在每一笔路径末端的手指覆盖的半圆形区域。因此,方向场被定义为在半圆形区域边缘上的发散模式。

不同的沙画技法在绘制效果上虽然差别很大,但实质上都是沙粒通过运动产生的堆积和塌陷的结果。由引入的高度场可得,过程中沙粒的变化都反映在沙柱高度场的变化。以下是七种技法的设计原理。

铺沙是沙画绘制中的常用技法,它的目的是将沙子均匀地平铺在沙画台上,常为沙画绘制最开始的步骤。

漏沙是在沙台原有的基础上添加新的沙粒,使得沙粒堆积,中间部分的沙堆当高度到达一定阈值时沙粒按照箭头方向向周围滑落,如图3所示。在漏沙过程中,设定一个变量ne来记录堆积沙粒的总量,当一笔画完,根据观察结果,漏沙的积累结果与正态分布曲线非常相似,如图3所示。

勾沙是指接触部分的沙粒清空,按照一定比例分配到清空区域两侧,两侧沙粒得到堆积呈现正态分布,如图4。勾沙在本质上与点沙,抹沙,划沙没有区别,但勾沙是对沙粒的连续清空,点沙可以看做是“断点式”的勾沙,抹沙可以看做为“加粗版”的勾沙,而划沙是若干个手指一起作画时所使用的技法,多用作画河流,云朵,可以看做是“多重复制”的勾沙。

捏沙是两根手指对沙粒的作用,是将两侧沙堆的像素的亮度值加到中间沙堆的像素亮度值上,使得中间部分高耸,两侧清空(如图5所示)。

其实,虽然不同的沙画技法产生的绘制效果差别很大,但在算法上,他们的本质都是通过实现沙粒的重新堆积和沙粒塌陷两个过程而实现的。

在真正的沙画中,沙画的颜色是构建各种美丽和艺术效果的重要因素。彩沙的实现通常分为两类:一个是沙台背景的颜色;另一个是沙粒本身的颜色。在本发明中,为了模拟彩沙效果,提高真实性,将颜色因素考虑进算法中。

图6所示是三种彩沙颜色的实例,通过调整r,g,b,a的值来改变沙粒颜色,在这里,“r”表示颜色的红色分量,“g”表示绿色分量,“b”表示蓝色分量,“a”表示不透明度的α分量(α分量一般用作不透明度参数,可以用百分比、整数或者像rgb参数那样用0到1的实数表示)。用户可以根据确认键的按钮颜色来判断是否是自己需要的彩沙颜包,方便高效。

彩沙步骤如下:

1.根据hsb模型表示图像,对于图像中各个像素点的亮度值进行统计操作。

2.按照测量亮度大小对图像中的像素进行排序,将与有相近亮度值的像素点进行分类并统计个数,将亮度值较为接近的视为同一类颜色,并统计相近颜色的像素点个数在图像中总的像素点个数所占的比例,用ti%表示,其中i=0,1,…,n-1,n为颜色块类别数目,i为颜色块类别索引值。ti的取值区间为[0,100]。模拟算法实际执行过程时,取n=16。

3.某沙粒像素点(i,j)处的颜色值通过控制面板设置rgba值进行改变,沙粒高度用hij表示。当hij=0时,表示无沙粒,颜色为采光台自身的颜色;当hij逐渐增大时,颜色的明度降低,使得颜色发生变化,体现了沙粒的堆积效果。

本发明的主要思想在于构建一个实时有效的沙画模拟系统,从界面的设计,到沙画技法的模拟,再到绘制过程中沙粒运动的模拟,以及彩沙功能等,力求尽可能给用户带来真实的沙画绘制体验。

为使本发明的目的、技术方案和优点更加清楚,以下结合附图及具体实施例,对本发明做进一步地详细说明。

本发明沙画模拟系统界面分为三部分(如图7(b)所示):上面黑色部分为工具栏,汇集了各种功能的按钮;下面是绘制区域;在绘制区域的左上角部分是设置沙粒颜色的按钮。工具栏包括“铺沙”、“漏沙”、“勾沙”、“抹沙”、“划沙”、“点沙”、“捏沙”等不同沙画绘制手法的选择按钮,除此之外工具栏还添加“开始”、“保行”、“撤销”、“退出”等功能(如图7(c)所示)。在颜色设置部分,可以通过调整rgba的值来改变沙粒颜色(如图7(a)所示)。

高度场方面:

将m*n分辨率的画布看做一张二维网格,其中一个像素点坐标用(i,j)表示,其中0≤i≤m-1,0≤j≤n-1;将每一个像素点上的沙粒称之为沙柱,坐标为(i,j)的像素点上沙柱的高度用hij来表示。根据实际沙画绘制结果,得出画布上某点沙柱高度值越大,该点亮度值越小;反之亦然。据此规律,定义沙画中坐标为(i,j)的像素点上沙柱高度hij与该点亮度值iij之间的关系如式(1)所示:

关系如式(1)所示:

其中,k为用户定义的正常常数,用于调节高度值的大小;且imin≤iij≤imax,imin与imax分别为初始画布亮度的最小值与最大值。

通常情况下,当沙画画布上没有沙粒时,各像素点的亮度值将为最大,并且等于画布的亮度值。实验证明,亮度最大值imax与沙画画布在没有沙粒情况下的亮度值io代替imax,则式(1)变为:

由式(2)可以看出,当某像素点的亮度值取画布自身的默认初始化亮度值时,该点的高度为,这与真实情况也是吻合的。

方向场方面:

如图8所示,不均匀的分布主要集中在每一笔路径末端的手指覆盖的半圆形区域。因此,方向场被定义为在半圆形区域边缘上的发散模式。受到画布分辨率的限制,颗粒的两个相邻方向之间的差异不应该太小。因此,在实际应用中,半圆形区域周围的方向场可以简化为四个主要方向,以描述沙粒的不均匀分布,如图8所示。通过收集和分析真实沙盘上的数据,获得不同方向的沙粒分布,如图2所示。本文测量了勾沙结束时沙子每个方向的像素值,并计算了每个方向沙粒分布的比例系数。图8中a~c分别表示勾沙,划沙,捏沙时的末端沙粒分布,本质上是一样的状态。为了简化概念,将笔触末端的半圆区域等分成四个部分,四个方向均垂直于半圆弧向外,每个部分根据实际测量结果得出占全部末端沙粒的权重,分别为p1,p2,p3,p4。

像素(i,j)处的方向场矢量为d(i,j),其相应的权重可以根据每个小圆弧相对于沙粒清空区域周围的整个弧的占有率来计算。假设方向d(i,j)的权重是pm,其中m是方向的索引,n是算法中的方向数。pm可以表示为公式3:

如上所述,在实际计算中,方向数n设定为4。权重pm表示为公式4:

受方向场影响,不同的沙粒分布引起每个像素处沙柱高度场随之变化。设沙柱密度为ρ,沙柱总质量为m,像素(i,j)处增加的沙柱高度变化量为δh(i,j),底面积为δs,未考虑方向场时的沙柱高度变化量为δhl(i,j)。沙柱质量m计算如式5所示:

高度差δh(i,j)可以表示为公式6:

将公式5代入到公式6,得到公式7:

设边缘上某个像素表示的沙柱高度为h(i,j),在沙粒经过绘制路径运动之后沙柱的新高度为h′(i,j),表示如式8所示:

h′(i,j)=h(i,j)+δh(i,j)(8)

综上所述,将方向场简化为四个方向上的小圆弧,并根据真实数据中沙粒分布情况分别反复测量数次,并取其每个方向上小圆弧的数值的算数平均值作为该方向上的比例值,即p1,p2,p3,p4。

自适应算法融入技法算法方面:

自适应算法是融合在每个沙画技法的算法设计中的,因为每一个手法都需要自适应,自适应包括沙粒堆积和沙粒塌陷。

自适应算法能够展示沙画更多细节的原因在于沿着绘制路径受沙粒运动影响的区域中的每一个像素将被划分为k*k分辨率的子像素来处理沙粒运动。在实际操作中,我们的模拟系统中将k值设为2,如图11所示,“1”用于标记受流动粒子影响的子像素区域,值“0”表示不受影响的像素区域。这有利于在模拟沙粒流动时获得更多细节,特别是沙粒堆积和塌陷的模拟。

沙粒堆积算法如下:

1.根据用户绘制时每一笔时区域被清空的沙粒进行总量统计,在重新堆积区域φ内进行扩散增加的沙粒数量即接触区域被清空的沙粒数量。

2.由根据先验知识,重新堆积的沙粒会因为重力和摩擦力的综合作用在轮廓曲线l附近呈中间高两端低的大致对称分布,且在中间部分达到堆积的峰值,这个分布效果与概率论中的正态分布曲线类似,所以计算截面处堆积的沙粒增加的高度和用正态分布表示。

在绘制时,用户手指接触沙粒,会给接触区域的沙粒一个作用力,使得沙粒向周围扩散,从而接触区域的沙粒被清空,如图9(a)所示(是沙粒清空区域,φ是沙粒重新堆积区域,红虚线框部分是受到绘制影响的区域),即图2的横截面。施加在接触区域周围的沙子上的力,使得该区域和相邻区域中的沙子扩散到周围,并且接触区域中的沙子将被清除,如图9(a)所示。

由于实际上沙粒是不可压缩的,所以每个沙柱有着相同的密度ρ,如公式5中所示。在区域中的沙粒的总量ht由公式9得出:

hij是指在像素点(i,j)处的沙柱高度。

每一个正态分布所需沙粒he,即截面处堆积的沙粒增加的高度和,与沙粒总量ht可以表示为式(10):

其中,n为被清空区域中像素点数目,σ为正态分布标准差。

在现实世界中,在进行沙画绘制时只有漏沙会增加沙粒对沙画台的沙粒总数量产生改变外,其他的沙画手势都是不会改变沙粒总数量的,即沙粒总数量是恒定的,因而,在重新堆积区域φ内进行扩散增加的沙粒数量即为接触区域被清空的沙粒数量。根据先验知识,重新堆积的沙粒会因为重力和摩擦力的综合作用在轮廓曲线l附近呈中间高两端低的大致对称分布,且在中间部分达到堆积的峰值,这个分布效果与概率论中的正态分布曲线类似,如图9(a)所示,因而,我们选用数值更加精确的正态分布函数来确定沙粒对应位置沙粒的堆积高度.其中,堆积的沙粒的对应的每个像素值的高度场变化δhij可以表示为式(11):

其中,d为像素点(i,j)到曲线l的最短欧拉距离,σ为正态分布标准差。

沙粒塌陷算法

当沙粒进行堆积后,会由于重新堆积的沙粒的重力作用,使得堆积后的部分表面沙粒出现一个崩塌现象,而发生崩塌现象的根本原因是因为相邻沙柱高度差相差较大,所以我们的自适应塌陷即在堆积后对和周围沙粒柱高度相差大的沙粒柱进行一个高度的平滑化处理,即采用甲滑处理的方法减少相邻高度差来模拟沙粒的塌陷现象。此塌陷过程仅需对两区域ω+φ中高度差大的像素点沙柱的高度进行平滑化处理即可,该平滑化过程如式(12)与(13)、(14)所示:

δhij=hij-ahij(13)

其中,ahij为像素点(i,j)的八邻域中所有像素点沙柱高度值的算数平均值,δhij为该像素点(i,j)处沙柱高度hij与ahij之差,ε是一个高度差阈值,只有当差值大于阈值后沙粒才会向四周塌陷。

结果如图10所示。

彩沙功能

在最开始,本文是根据hsb模型表示图像,对其中各个像素点的亮度值进行统计操作。按照亮度大小对图像中的像素进行排序,将与有相近亮度值的像素点进行分类并统计个数,将亮度值较为接近的视为同一类颜色,并统计相近颜色的像素点个数在图像中总的像素点个数所占的比例,用ti%表示,其中i=0,1,…,n-1,n为颜色块类别数目,i为颜色块类别索引值。值得注意的是此处比例ti的取值区间为[0,100]。模拟算法实际执行过程时,取n=16。

某沙粒像素点(i,j)处的颜色值通过控制面板设置rgba值进行改变,沙粒高度使用hij表示。当hij=0时,表示无沙粒,颜色为采光台自身的颜色;当hij逐渐增大时,颜色的明度降低,使得颜色发生变化,体现了沙粒的堆积效果。

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