基于自适应网格扩展波函数坍缩的建筑集群生成方法

文档序号:37156526发布日期:2024-02-26 17:18阅读:49来源:国知局
基于自适应网格扩展波函数坍缩的建筑集群生成方法

本发明涉及游戏设计,尤其涉及一种基于自适应网格扩展波函数坍缩的建筑集群生成方法。


背景技术:

1、程序化内容生成(pcg,procedural content generation)是一种使用算法自动生成内容的方法,而不是手动制作内容。pcg与手工制作的资产相结合,这种方法被称为混合计划,通常通过将人工生成的资产和算法与计算机生成的随机性和处理能力相结合。pcg技术可以分为两类:在线pcg和离线pcg。在线pcg是指内容是在使用媒体时生成的;而离线pcg则是指内容是预先生成的,并且可以被开发人员优化。离线pcg会对所有创建的内容占用更多内存,而且可能更耗时。在线创建使生成更多的内容成为可能。pcg所提供的优势不仅局限于授权游戏设计师提供快速的内容原型创建,而且还可以提供游戏内适应玩家的反应和较小的内存占用。随着pcg技术的不断发展,在高效率下批量生产更多的内容成为研究热点,因此波函数坍缩算法应运而生。

2、波函数坍缩(wfc,wave function collapse)算法是从程序化内容生成的工艺实践中出现的一种基于约束的程序算法。它是根据量子物理学中的波函数坍缩概念而启发而命名的。该算法不仅展示了主要输出,以艺术家提供的来源风格生成的大图像,还展示了一种令人惊讶的类人增量创作模式。wfc是一种独特而新颖的算法,它有着极强的可扩展性,能够很快适应于三维工作。在城市空间布局过程中,wfc可以快速的生成多种符合设计规则的布局方案,提供一种动态的城市空间设计方法。此外,其通过学习“小输入”而产出“大输出”的特性允许开发者能够根据单栋建筑物生成相同风格的建筑物集群,大大加快了建筑集群的生成速度,为建筑集群的生成提供了一种高效可行的程序化生成方案。

3、尽管波函数坍缩算法具有潜在的优势,但仍然可以看到绝大多数wfc的应用都使用规则网格和均匀大小的插槽,而规则对生成的结果有全局影响,因此生成的建筑集群存在限制性。一方面,它要求开发人员对这些基于约束的技术的工作原理有深入的了解。另一方面,对于三维城市,空间分布方式和空间覆盖方式的应用是确保实现场景美观的合格标准。此外,规则的网格不适用于复杂的曲线区域图形。因此,wfc在状态空间上有很大的改进空间,因为wfc工作的唯一要求是每个插槽都有等量的边,并且不一定需要有一个规则的形状。对wfc算法的修改可以为一些完全不同的内容创建基础,但质量仍与原始算法相同。


技术实现思路

1、本发明要解决的技术问题是针对上述现有技术的不足,提供一种基于自适应网格扩展波函数坍缩的建筑集群生成方法,结合当代建筑物集群的特点,从wfc状态空间、建筑物组件形变两方面改善wfc的限制性问题,在算法运行过程中达到建筑物组件无缝连接的效果。

2、为解决上述技术问题,本发明所采取的技术方案是:

3、一种基于自适应网格扩展波函数坍缩的建筑集群生成方法,首先设计曲线图形编辑器,允许用户自由绘制任意形状的曲线图形,该曲线图形作为建筑集群的生成区域;其次,更改wfc的状态空间为自适应网格,能够适应任意形状的曲线图形,同时单元格大小均匀,且近似正方形;最后,针对不规则单元格,使用三线性插值对建筑物组件进行基于笼的变形。

4、进一步地,所述方法具体包括以下步骤:

5、步骤1:曲线图形绘制;

6、使用三阶贝赛尔曲线模拟平滑曲线绘制封闭区域图形d,贝塞尔曲线由以下几种类型的点定义:起始点、终止点或锚点、控制点;

7、步骤2:在绘制的区域图形内撒点;

8、使用泊松圆盘采样算法在曲线图形上进行撒点,以获得一个均匀的点集p=pin+pon,其中,pin定义为区域图形d内部的点集,pon定义为区域图形d边界曲线上的点集;

9、步骤3:对区域图形构建三角形网格;

10、步骤4:对区域图形构建四边形网格;

11、采用三角合并和单元格分解的方法对输出的三角形网格进行四边形化处理,将三角形非结构化网格转为四边形结构化网格,并对网格进行类规则化处理,使其成为一个四边形大小尽可能均匀的网格,获得四边形列表q;

12、步骤5:将自适应网格作为波函数坍缩算法的状态空间;

13、四边形列表q作为波函数坍缩算法的插槽集合slots,令slots=q;

14、步骤6:结合居住人口热力图,使用波函数坍缩算法进行功能区域划分;

15、步骤7:在各功能区域使用对应的建筑物组件应用波函数坍缩算法生成建筑物集群;

16、步骤8:对建筑物组件进行基于笼的变形。

17、进一步地,所述步骤1的具体方法为:

18、给定一个中心点c确定一段贝赛尔曲线的整体位置,则决定第一段曲线的四个点的位置信息为:起始点p0=c-l、终止点p3=c+l以及2个控制点和其中,l为初始步长,用于初始化第一段贝塞尔曲线的起始点和终止点的位置;其余各段贝塞尔曲线的点位置信息由前一段曲线及绘制该段曲线时的终止点位置计算获得,如公式(1)所示;

19、

20、其中,p3i-2和p3i-1为第i段贝塞尔曲线的两个控制点;p3i为绘制过程中添加的锚点,位置信息通过获取用户的输入获得;锚点对应的控制点用来控制曲线的形状,当锚点的位置发生改变时,对应的控制点发生同步的位置变化;三次贝塞尔曲线定义为:b(t)=(1-t)3p0+3t(1-t)2p1+3t2(1-t)p2+t3p3,t∈[0,1],设锚点p:(xp,yp)处的t值为tp,则纵坐标yp=b(tp),锚点p的控制点与的位置信息如公式(2)所示;

21、

22、其中,ppre为锚点p与前一锚点pre的直线距离,b′(tp)为贝赛尔曲线在点p处的导数。

23、进一步地,所述步骤2中获取点集pin的方法为:

24、初始化一个能够覆盖区域图形d的二维背景网格grid,用于存储样本和加速空间搜索;点集pin中每两个点的距离最小值定义为dmin;对于每个单元格cell∈grid,单元格的大小设定为使用二维整数数组i存储背景网格grid中单元格中的样本点xm∈pin的索引m;随机选择的初始样本x0,将其插入网格grid,并使用该索引0初始化活动列表e中;若e非空,选择一个随机索引m;从围绕xm的半径dmin和2dmin之间的球形环中均匀选择最多h个点;对于每个点,检查它是否在现有样本点的距离dmin内;若一个点距离现有样本点足够远,则将其作为下一个样本点xm+1并添加到活动列表e中;如果在h次尝试后没有找到这样的点,则从活动列表中删除m。

25、进一步地,所述步骤2中获取点集pon的方法为:

26、对曲线进行点的重采样处理,点的分布密度由点集pin中的点密度情况决定,定义重采样后的点集对于曲线中的每一段贝赛尔曲线bn(t),n=1,2,3,…,定义两个插值点之间的t的间距为当δt为定值时,δbn(t)的长度也为定值,假设点集pin中的点平均距离为r,则令δbn(t)=r即可求出δt的值;如此,在t∈[0,1]范围内不断地增加δt,获得曲线重采样后的点集pon。

27、进一步地,所述步骤3的具体方法为:

28、将超级三角形△super设为直角三角形,点集p中所有的点均在超级三角形的内部;定义三角形列表为t,对于任一样本点p∈p,根据公式(3)判断其是否在任意三角形外接圆内部;若p位于一个三角形的外接圆内,则需要进行“翻转”操作;

29、

30、其中,a:(xa,ya),b:(xb,yb),c:(xc,yc)为△abc的顶点。

31、进一步地,所述步骤4的具体方法为:

32、步骤4.1:通过三角合并获得四边形;

33、定义该过程生成的四边形列表为quads={q1,q2,…},采用迭代的随机剔除三角形的边的方式,使邻近三角形合并为四边形;

34、引入三角形质量α和四边形变形因子β;三角形质量α定义为三角形的面积与各边平方和之比;对于一个四边形,通过连接对角线,获得四个三角形,四个三角形的α从大到小排列为:α1、α2、α3、α4。变形因子β定义为四个三角形按照降序排列的α值之比,如公式(4)和公式(5)所示;

35、

36、β=α3*α4/α1*α2,α1≥α2≥α3≥α4                (5)

37、其中,为三角形abc的单位法向量,设定正三角形为最优的三角形网格,加入系数使正三角形的α为1;ab、bc、ca为三角形abc的三条边;遍历三角形列表t对应的所有边的列表e,求出剔除各边后生成的四边形的β值,按β值由大到小的顺序剔除相应的边;

38、步骤4.2:通过单元格分解获得四边形;

39、定义剩余三角形为tleft,将三角形△tri∈tleft分裂为五个四边形,将四边形q∈quads分裂为四个四边形,获得四边形列表q以及不规则四边形网格;

40、步骤4.3:四边形网格规则化处理;

41、给定一个四边形q∈q,寻找一个与四边形质心相同的正方形,使四边形顶点与正方形顶点之间的距离的平方和最小,从而找到正方形最合适的角度α,并按照此方向去位移四边形的四个顶点;四边形顶点和正方形顶点之间的平方距离之和如公式(6)所示,最合适的角度α如公式(7)所示;

42、

43、

44、其中,xu、yu为四边形的顶点的横、纵坐标值,x’u、y’u为正方形顶点的横、纵坐标值;v的取值由d″(α)>0决定,顶点的方向力为1/d′(α)。

45、进一步地,所述步骤6的具体方法为:

46、步骤6.1:以居住人口热力图数据为插槽添加权重:

47、判断每个插槽slot∈slots中点处的热力图数据,获得插槽集合slots对应的权重数据weights;权重越大的插槽最有可能成为居住区,在算法运行时具有优先权;

48、步骤6.2:该插槽slot在其对应的组件集合modules={module1,module2,…}中选择住宅区组件的概率增加,引入热力权重后的插槽slot的熵如公式(8)所示,一个组件f被选择的概率如公式(9)所示;

49、

50、

51、其中,wslot表示插槽slot的热力权重,pf为组件f被选择的初始概率,m_dense为人口密集的组件集合,m_sparse为人口稀疏的组件集合;eslot为插槽slot的初始熵值;

52、步骤6.3:在不规则四边形网格上运行波函数坍缩算法,以获得不同的功能区域。

53、进一步地,所述步骤8的具体方法为:

54、将建筑物组件添加在一个虚拟的单位六面体笼中,组件中的点的位置信息将随着笼的形状改变而改变;组件m上的点g∈{g in m},定义笼的顶点集合为c={c000,c001,c010,c011,c100,c101,c110,c111},点g的位置信息如公式(10)所示:

55、gxyz=c000(1-x)(1-y)(1-z)+c100x(1-y)(1-z)+c010(1-x)y(1-z)+c001(1-x)(1-y)z+c101x(1-y)z+c011(1-x)yz+c110xy(1-z)+c111xyz (10)。

56、采用上述技术方案所产生的有益效果在于:本发明提供的基于自适应网格扩展波函数坍缩的建筑集群生成方法,使用自适应网格更改wfc的状态空间,使wfc能够应用于任意形状的区域图形。同时,本发明中的自适应网格具有单元格大小均匀,且接近正方形的特点,使用三线性插值对建筑物组件进行形变,更适用于建筑集群的生产。本发明结合了热力图数据,通过热力图数据影响wfc插槽的坍缩顺序以及插槽选择响应组件的概率,使生成的建筑集群与功能区域划分可以模拟近似实际城市的建筑分布与功能区域划分,更具现实意义,生成的建筑集群可以应用于任何虚拟场景。

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