标签: procedural-generation

如何开始程序生成?

程序生成最近引起了人们的关注(由Spore,MMO等),它似乎是一种有趣/强大的编程技术.

我的问题是这些:

  • 您知道任何使用程序生成技术的中型项目吗?
  • 什么语言/类别的语言最适合程序生成?
  • 你能用程序生成"严肃"的代码吗?(即不是游戏)

procedural-generation

141
推荐指数
8
解决办法
14万
查看次数

在Python中实现“波浪折叠函数”算法的问题

简而言之:

我在Python 2.7中执行Wave Collapse Function算法的实现存在缺陷,但是我无法确定问题所在。我需要帮助来找出我可能会丢失或做错的事情。

什么是波崩函数算法?

它是Maxim Gumin在2016年编写的一种算法,可以从样本图像生成程序模式。您可以在此处(2D重叠模型)和此处(3D切片模型)看到它的实际效果。

实施目标:

将算法(2D重叠模型)简化为本质,并避免原始C#脚本的冗长和笨拙(令人惊讶的是,它很长且难以阅读)。这是尝试使该算法更短,更清晰和pythonic版本。

此实现的特征:

我正在使用处理(Python模式),这是一种用于视觉设计的软件,可简化图像处理(没有PIL,没有Matplotlib等)。主要缺点是我仅限于Python 2.7,并且无法导入numpy。

与原始版本不同,此实现:

  • 不是面向对象的(处于当前状态),因此更易于理解/更接近伪代码
  • 使用一维数组而不是二维数组
  • 使用数组切片进行矩阵处理

算法(据我了解)

1 /读取输入位图,存储每个NxN模式并计数它们的出现。(可选:具有旋转和反射的增强图案数据。)

例如,当N = 3时:

在此处输入图片说明

2 /预计算并存储模式之间的所有可能的邻接关系。在下面的示例中,图案207、242、182和125可以与图案246的右侧重叠

在此处输入图片说明

3 /创建一个具有输出尺寸的数组(称为Wwave)。这个阵列的每个元素是一个数组保持状态(TrueFalse每个图案的)。

例如,假设我们在输入中计算了326个唯一模式,并且希望输出尺寸为20 x 20(400个单元)。然后,“ Wave”数组将包含400个(20x20)数组,每个数组包含326个布尔值。

开始时,所有布尔值都设置为,True因为在Wave的任何位置都允许使用每个模式。

W = [[True for pattern in xrange(len(patterns))] for cell in xrange(20*20)]
Run Code Online (Sandbox Code Playgroud)

4 /使用输出的尺寸创建另一个数组(称为H)。该数组的每个元素都是一个浮点数,在输出中保留其对应单元格的“熵”值。

此处的熵是指香农熵,它是根据Wave中特定位置的有效模式数量来计算的。单元格的有效模式(True在Wave中设置为)越多,其熵就越高。 …

python algorithm markov-chains procedural-generation

52
推荐指数
2
解决办法
966
查看次数

数学问题:星系的程序生成

我将制作一个完全由程序生成的太空/交易/战斗游戏.但是,我知道将整个星系的所有细节存储在记忆中是不可能的.因此,我一直认为我可以使用种子来生成太阳系,并且从太阳系中,您可以使用跳跃门来前往其他太阳系.问题是,如果我从起始太阳系跳到另一个太阳系,我需要能够回到具有完全相同特征(行星,小行星等)的完全相同的起始太阳系.

基本上,我需要能够从一个数字生成整个星系.从生成一个太阳系的那个数字开始,我需要能够生成所有其他太阳系,这些太阳系从第一个和所有与之相连的太阳系连接起来,依此类推.如果我回到它们,每个太阳系必须保持完全相同的特征.此外,每个太阳系的链接数量可以是随机的,也可以是固定的,您的选择.随机会更好.

procedural-generation

43
推荐指数
6
解决办法
2万
查看次数

优化Haskell中的数值数组性能

我正在为类似MineCraft的世界开发地形生成算法.目前,我正在使用基于"Simplex Noise Demystified"[PDF]文章中的实现的单纯形噪声,因为单纯形噪声应该比Perlin噪声更快并且具有更少的伪像.这看起来相当不错(见图),但到目前为止它也很慢.

在此输入图像描述

运行噪声功能10次(我需要不同波长的噪声,如地形高度,温度,树位置等),每个块中的块(16x16x128块)有3个八度的噪声,或大约100万次调用噪声功能总共需要700-800毫秒.尽管算法中没有明显昂贵的操作(至少对我而言),但这对于以任何体面的速度生成地形的目的而言至少是一个数量级太慢.只是楼层,模数,一些数组查找和基本算术.下面列出了算法(用Haskell编写).SCC评论用于分析.我省略了2D噪声函数,因为它们的工作方式相同.

g3 :: (Floating a, RealFrac a) => a
g3 = 1/6

{-# INLINE int #-}
int :: (Integral a, Num b) => a -> b
int = fromIntegral

grad3 :: (Floating a, RealFrac a) => V.Vector (a,a,a)
grad3 = V.fromList $ [(1,1,0),(-1, 1,0),(1,-1, 0),(-1,-1, 0),
                     (1,0,1),(-1, 0,1),(1, 0,-1),(-1, 0,-1),
                     (0,1,1),( 0,-1,1),(0, 1,-1),( 0,-1,-1)]

{-# INLINE dot3 #-}
dot3 :: Num a => (a, a, a) -> a -> a -> a -> …
Run Code Online (Sandbox Code Playgroud)

floating-point polymorphism performance haskell procedural-generation

36
推荐指数
1
解决办法
3366
查看次数

2D平铺地图生成

我正在开发一个2D磁贴引擎,此时我正在研究地图生成算法.

我试过通常涉及简单高度图生成的基本方法

  • 山一代
  • 柏林噪音
  • 钻石广场

但我总是遇到同样的问题:这种算法在处理也有高度组件的平铺地图时似乎很合适,但这不是我的情况.

我基本上有精灵,如草,海,沙漠等等,但它们不应该根据生成的高度放在地图内部但是像

  • 一切都从海洋开始
  • 岛屿被放置在地图的中间(这是我尝试过的算法失败的地方)
  • 沙漠生成(它们应该像周围的随机点)
  • 产生了山脉和丘陵链(它们应该像蛇一样)

我应该尝试什么样的方法?

我通过开发专门的算法来解决子组件的问题(比如沙漠,山丘和山脉)来做我需要的事情(比如山从一个点开始然后跟随一个有可能转向的方向)但是我没有成功基本岛屿(可以定制为只是一个pangea或多个大小的程度).

只是为了给你一个实用的想法我正在寻找的东西就像文明算法:

替代文字

algorithm 2d procedural-generation tile

28
推荐指数
2
解决办法
2万
查看次数

随机二维拼贴地图生成算法

任何人都可以告诉我一种方法来生成像我的世界中的岛屿结构或山丘结构?

我只是为随机形状生成寻找合适的理论,但它应该保持一个定义的基本模式..

喜欢:岛屿应该是圆形的,但形状和规模各不相同(最小/最大宽度和高度).

或:河流不应该是直线,它们应该有曲线和随机宽度.

甚至:生成某种森林,其中树木以一种用户仍然可以穿过森林的方式放置(我认为这是一个简单的森林,只是说树周围的一些块应该保持空白,如果代码试图放入最后一个周围的树木更多)

我可以用什么样的数学来做这些事情?

我会很高兴有一些教程或参考的链接.我在网上搜索了几个小时,但我能找到的只是一些书籍,比如"游戏数学"或其他东西,但我的预算设定为零.

编辑:

首先,我很抱歉我的不好意思.

中学我想感谢你们所有人的答案.这些都是很好的参考,我会花很多时间深入研究.

c# algorithm xna procedural-generation terrain

22
推荐指数
1
解决办法
6万
查看次数

JavaScript simplex/perlin噪音

我正在尝试在JavaScript中创建一个perlin/simplex/value噪声函数,它将产生类似于以下内容的结果:

在此输入图像描述 (注意:此图像已经应用了阈值.我希望它没有阈值.)

我已经在互联网上看了2天了.有很多链接可以解释噪声和很多代码,但JavaScript中没有,每当我尝试转换它时,我都会得到奇怪的结果.以下是我的一些尝试:

我认为问题的一部分可能源于在JavaScript中使用按位运算符,其中很难强制执行数字类型.

我正在寻找的是一个工作的例子,JavaScript噪音(无论什么类型).

我也愿意为有关参数的任何信息提供奖励,这些信息可能导致类似于我发布的图像(阈值之前)或任何优化提示的模式,因为我需要尽可能快地运行(尽管如此).

javascript algorithm procedural-generation perlin-noise simplex-noise

17
推荐指数
4
解决办法
2万
查看次数

程序生成低聚树

我正在寻找一种能够生成低多边树的算法或产品.语言无关紧要.我已经搜遍过,并且有很多"树生成"算法,但它们迎合了更加逼真的树木,而不是相反.

这是我想要动态生成的树的类型: 低聚例子

即使只是生成看起来像树顶部的blob的算法也会有所帮助.

algorithm procedural-generation unity-game-engine

17
推荐指数
1
解决办法
5524
查看次数

在2D中以程序方式生成"blob"图形的好方法

我想以计算速度快的方式创建一个"blob".这里的blob被定义为像素的集合,可以是任何形状,但都是连接的.例子:

.ooo....  
..oooo..  
....oo..  
.oooooo.
..o..o..  

...ooooooooooooooooooo...  
..........oooo.......oo..  
.....ooooooo..........o..  
.....oo..................  


......ooooooo....  
...ooooooooooo...  
..oooooooooooooo.  
..ooooooooooooooo  
..oooooooooooo...  
...ooooooo.......  
....oooooooo.....  
.....ooooo.......  
.......oo........  
Run Code Online (Sandbox Code Playgroud)

在哪里 是死空间,o是标记的像素.我只关心"二进制"生成 - 像素是ON还是OFF.因此,例如,这些看起来像一些想象中的番茄酱或虚构细菌或任何有机物质.

什么样的算法可以实现这一目标?我真的很茫然

language-agnostic graphics procedural-generation noise

15
推荐指数
2
解决办法
4844
查看次数

如何使用3d perlin噪声函数生成地形?

我可以使用2D Perlin噪声函数来包围我的头来生成高度值,但我不明白为什么会使用3D Perlin噪声函数.在Notch的博客中,他提到使用3D Perlin噪声函数在Minecraft上生成地形.有谁知道这将如何做以及为什么它会有用?如果你是路过x,yz值没有暗示你已经拥有的高度?

procedural-generation terrain perlin-noise minecraft

14
推荐指数
3
解决办法
1万
查看次数