Questions tagged «procedural-generation»

程序生成是基于算法和计算而不是手动构建内容的过程。

1
平滑体素地形
作为个人项目,我正在尝试制作一个地形生成器,以创建看起来像《城堡物语》平滑地形的地形。 如果您以前没有看过,请在这里: 如您所见,它是块和“平滑”块的组合。 我试图模仿这种外观的方法是为每个表面块提供一个迷你高度图。通常这是可行的,但存在一些问题,产生如下所示的地形: 问题是每个块都是1x1x1,但是有时特定位置的高度为负或>1。在这种情况下,我将其裁剪并将高度设置为0或1。 为了更好地说明我的意思,下面是一个图: 为了生成高度,我基本上做了: genColumn(int x, int z) { int highestBlockY = (int)noise2d(x, z); bool is_surface = true; for(int y = max_height - 1; y >= 0; y--) { Block b; if(is_surface) { b = Block.Grass; b.HasHeightMap = true; // generate heightmap for(int ix = 0; ix …

1
如何停止Substance的运行时纹理缓存?
如果您关闭缓存,一次修改一个公开的变量,频繁地对其进行修改,甚至只有在尝试对其进行2或3次修改之后,Substance Engine的过程纹理似乎就会非常快速地更新。 但是,我基本上希望相反。例如,单位有一个“血”变量,在受到伤害时会在身上产生不同的血液;还有一个“战役”变量,会产生划痕和凹痕,但在恢复时不会恢复原状。 因此,要强制不缓存变量,我必须将其设置为某个虚拟值,然后恢复为正常值,然后调用RebuildTexturesImmediately。 我该如何告诉Substance在运行时不要缓存变量,所以我可以更改一次并快速重新生成纹理?

3
不断发展的地形生成器
我最近才问这个问题,得出的结论似乎是,尚未真正使用基因编程(GP)进行程序游戏内容创建。我想改变那个。 我相当确定可以部署GP来帮助查找新的地形生成器。我要解决的问题是如何实现? 所有GP都有一些可以归纳为所有GP的基本部分(父母选择,重组,突变,存活)。我可以自己解决这些问题。问题出现在特定问题部分。这些就是您在代码中表示问题的方式(通常使用一棵树),以及如何评估生成器的性能(可以是一个或多个值)。 简而言之,这些问题是: 您将如何以可以解析为树的方式表示地形生成器? 这将产生什么样的地形?(高度图,顶点图...) 基于hightmap的信息越少越好。 用什么来评估解决方案的适用性? 例如:我们想要有趣的地形,因此我们可以让其中一个值为地形上每个顶点的法线平均变化。

3
如何生成类似焦土的地形?
我是一名网络开发人员,我渴望开始编写自己的游戏。 为了熟悉起见,我canvas现在选择了JavaScript和element。 我想生成一些像焦土中的地形。 我的第一次尝试使我意识到,我不能只是随机分配y值。高峰和低谷必须有一定的理智。 我已经用Google搜索了一下,但是我找不到足够简单的东西或者使用了错误的关键字。 能否请您告诉我示例中将使用哪种算法生成某些东西,同时牢记我对游戏编程是完全陌生的(因为无论如何,2003年还是使用Visual Basic制作Breakout)?

2
轴对齐空间划分:将空间划分为随机矩形吗?
我需要一种将3d空间划分为随机轴对齐的盒子形状的方法。目前,我目前正在划分2d空间用于测试目的。我想到的最直接的方法是定义一个大小为(1,1)的矩形,然后将所有现有矩形递归地分成两个在X轴和Y轴之间交替的不平坦矩形。 这里的问题很明显。这种方法会导致拉伸线变长(以红色标记) 我想要的是更自然的外观(我提供了一个示例) 看,从上到下或从左到右没有长的直线。 唯一的限制是我可能希望限制矩形的最小大小,而不影响大小的粒度。也就是说,如果最小的rect是1平方厘米,而不是秒,则最小的房间不应是2平方单位。 因此,理想情况下,算法应满足以下三个约束: 矩形不是无限小。 矩形尺寸不是最小矩形尺寸的离散乘积。也就是说,如果最小的rect是3平方单位,则不将较大的rect约束为6、9、12等正方形单位,因此可以是3.2或4.7。 该算法以多项式时间运行(需要快速计算)。

2
如何随机生成基于2D磁贴的侧向滚动地形?
我想使用以下tileset随机生成2D Sidecroller游戏的地图: 我发现了一些有关位屏蔽过程的好文章,例如:http : //www.angryfishstudios.com/2011/04/adventures-in-bitmasking/ http://www.saltgames.com/2010/a-bitwise -适用于贴图的方法/ 我喜欢使用位掩码/碎片掩码而不是执行巨大的if子句或switch语句的想法。 但是,我在可视化整个过程时遇到了麻烦,这些文章都没有提到随机化。 我的图块以多种不同的方式组合在一起,而不仅仅是我所链接的示例中的图块看起来的一种方式。 例如,这里仅是一些示例: 由于我的图块可以通过许多不同的方式组合在一起,因此我认为8位遮罩无法正常工作。因此,我正在考虑使用更大的位掩码。类似于char [8]或char 4。 如果有人可以显示一般算法外观的一些伪代码/示例,我将不胜感激。

2
菱形方形地形生成问题
根据本文,我已经实现了菱形平方算法:http : //www.lighthouse3d.com/opengl/terrain/index.php?mpd2 问题是我在地图上到处都是陡峭的悬崖。递归地细分地形时,它发生在边缘: 来源如下: void DiamondSquare(unsigned x1,unsigned y1,unsigned x2,unsigned y2,float range) { int c1 = (int)x2 - (int)x1; int c2 = (int)y2 - (int)y1; unsigned hx = (x2 - x1)/2; unsigned hy = (y2 - y1)/2; if((c1 <= 1) || (c2 <= 1)) return; // Diamond stage float a …

4
如何确保RTS中的程序级别合理?
想要改善这篇文章吗?提供此问题的详细答案,包括引文和答案正确的解释。答案不够详细的答案可能会被编辑或删除。 我已经看到对称性和连贯性在RTS关卡设计中很重要,但是我很懒,并且想做程序生成的关卡。 通过程序为RTS创建关卡时,如何确保产生公平的竞争环境?

4
程序生成,游戏更新和蝴蝶效果
注意:我几天前在Stack Overflow上问了这个问题,但是视图很少,没有任何响应。想通了,我应该问gamdev.stackexchange。 这是关于在不破坏先前生成的内容的情况下通过多个发布后更新来维护程序生成系统的一般问题/建议。 我正在尝试寻找信息和技术来避免在创建游戏程序内容时出现“蝴蝶效应”问题。当使用种子随机数生成器时,可以使用重复的随机数序列来创建可重现的世界。尽管有些游戏只是在生成后将生成的世界保存到磁盘上,但是过程生成的强大功能之一是您可以依靠数字序列的可再现性以相同的方式多次创建区域,从而无需使用坚持不懈。由于我的特定情况的限制,我必须最小化持久性,并且需要尽可能地依赖纯种子浓缩物。 这种方法的主要危险在于,即使在程序生成系统中进行最微小的更改,也可能导致蝴蝶效应,从而改变整个世界。这使得在不破坏玩家正在探索的世界的情况下更新游戏变得非常棘手。 我用来避免此问题的主要技术是在多个阶段设计过程生成,每个阶段都有自己的种子随机数生成器。这意味着每个子系统都是独立的,如果发生故障,将不会影响世界上的所有事物。但是,即使在游戏的孤立部分中,它似乎仍有很大的“破损”潜力。 解决此问题的另一种可能方法是在代码中维护生成器的完整版本,并针对给定的世界实例继续使用正确的生成器。虽然这对我来说似乎是一场维护噩梦,但我很好奇是否有人真的这样做。 因此,我的问题确实是要求提供一般建议,技术和设计模式来解决这种蝴蝶效应问题,尤其是在发行后的游戏更新中。(希望这不是一个广泛的问题。) 我目前正在Unity3D / C#中工作,尽管这是一个与语言无关的问题。 更新: 感谢您的答复。 看起来越来越像静态数据是最好和最安全的方法,而且当无法存储大量静态数据时,在生成的世界中进行长时间的活动将要求对使用的生成器进行严格的版本控制。在我的情况下,限制的原因是需要基于移动的云保存/同步。我的解决方案可能是找到存储有关基本事物的少量紧凑数据的方法。 我发现暴风城的“笼子”概念是思考事物的一种特别有用的方式。笼子基本上是一个种子点,可防止微小变化(例如,将蝴蝶笼中)的影响。

3
梯田山特征
我希望复制几天前在投资组合/博客网站上发现的程序性地形效果。 引用该地点,通过“将[最终高度]与某个高度范围内的某些阻尼值相乘,以创建美丽的峡谷特征”来生成梯田。 我想知道,有人能提供更多技术示例或程序来解决此问题吗?在过去的一周中,我一直在研究和学习很多有关程序性地形/纹理方法和实践的方法,但是我仍然没有遇到任何能详细解释什么是“夹紧”的东西,并且我开始感到沮丧。

3
名字产生
我正在制作一个游戏(或至少打算这样做),并且我需要一种方法来自动为NPC“老板”生成名称(详细说明与此处无关)。喜欢的东西,这是我的意思一个很好的例子。 我的想法是,我可以按国籍建立姓名数据库,也许是第一对/最后一对,并使用被忽略的姓名列表随机分配姓名,这样我就不会像荷马·辛普森那样受到起诉。 这样做的问题是,我需要建立一个庞大的名称数据库才能正常工作。除非有人已经免费提供了一个名称列表,否则它将永远或花费金钱。 我还有另一个想法,我随机制作成对的元音和辅音,翻转几对,然后将它们加在一起,但是有一个快速的程序可以生成这样的名称: Seermeecpa Cime Ofmiahwumafi 戈齐迪 扩展 (对于任何对代码感兴趣的人,您都可以在这里看到它) 这些...有点口。好吧,除了“ Gozidi”,那个人可以工作。不过,成功率显然不是很高。 我可以做些什么来使名称听起来更好(请参见下文),还是应该开始制作该列表?我能以某种方式模仿人类决定一个名字是否正派的方式,至少准确一些吗?我非常喜欢这样的事情,而不是在大列表中查找。 我所说的“更细”是指听起来像实际名称,而不是字符的随机组合(公平地说)。它们可以来自任何文化(或听起来像它们),无论是真实的还是虚构的,什么都可以,只要您像我这样刻板的愚蠢,单语的美国人都能说出它们而没有太多麻烦。 如果您需要进一步说明,请继续询问。我不太确定该放在哪里。 附录:据我所知,确实没有标签完全适合这个问题。如果到过这里的人更长久可以推荐一些,那就太好了。

2
使用L系统以程序方式生成城市
我目前正在制作一款专注于程序生成内容的应用。到目前为止,我已经使用单纯形噪声成功实现了地形和地图形状的程序生成。我对它的外观感到非常满意。现在,我正在尝试为城市做同样的事情。我只需要生成街道和建筑物的2D布局即可。我研究了它,似乎大多数人都建议使用L系统。但是我似乎无法将他们的头缠住。我得到了概念,但没有将实现转化为代码。是否有人提供用于程序生成城市的L系统的代码示例,或有关处理城市的其他方法的建议?

2
如何在libgdx中实现按程序生成的图块?
我正在libgdx中创建一个简单的自上而下的Zelda式游戏,我想实现程序生成的基于图块的地牢,类似于此。 Libgdx确实有一个名为TiledMap的类,这似乎可以满足我的需求,但是官方文档之外的文档显示TiledMaps只能与.tmx文件(即预先设计的地图)一起使用。我做了很多谷歌搜索都无济于事,所以我在这里要求最后的希望是希望有人对使用libgdx进行动态生成的瓦片地图有经验。 编辑:能否将StaticTiledMapTiles与上面链接到的教程结合使用以实现我的目标? 谢谢!

1
如何确保游戏可以完成
我不确定要描述的正确术语是什么,所以如果这是一个重复的问题,我们深表歉意。但是是否有术语/算法来确保游戏相对于无限滚动条而言是“可完成的”。我所说的可完成的意思是,如果我有一个游戏,当屏幕试图追赶他们时,用户必须不断跳出障碍物,那么我将如何确保用户始终可以找到一个新的障碍物理论跳到? 我知道从理论上讲,我会检查用户可以跳多高,并确保该范围内有障碍物,但是还有其他东西吗?即在放置新块时避免昂贵的检查,以确保它们不重叠等? 我正在专门查看html5 / js,但我想知道是否有针对此的术语或我可以调查的特定类型的算法? 谢谢

2
使用3D Perlin Noise生成时如何去除浮动地形?
我目前正在使用3D Perlin Noise与Marching Cubes结合生成随机地形。 我的问题似乎在于缩放噪声函数以在我的地形中获得合理的高度。如果仅使用一个八度音程,则显然会插入与噪声有关的所有点,从而获得相当平滑的数据。但是,要获得悬垂/凹面/锯齿状的地形,我必须使用振幅变化的多个八度音和/或将结果值缩放到我想要的“最大”高度。 我可能会丢失一些东西,但是通过使用具有3D Perlin噪声的行进立方体,我经常得到一些浮动的地形。 关于如何纠正此问题或是否有其他噪声函数可以用来获得我所描述的结果的任何想法?我想要丘陵/山谷/山脉/湖泊/等。无需将浮动位与其他映射区分开。我相信,这与Minecraft的地形在生成时偶尔会漂浮在天空中的情况类似。 感谢您的协助,神话

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.