Questions tagged «procedural-generation»

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

2
大气伪影对大气的散射
我正在实现行星从太空的大气散射。我一直使用http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter16.html中的Sean O'Neil的着色器作为起点。 除了SkyFromSpace着色器与GroundFromSpace着色器不同之外,我与fCameraAngle有几乎相同的问题,如下所示:http ://www.gamedev.net/topic/621187-sean-oneils-atmospheric-scattering/ 当不在fCameraAngle = 1内部循环中使用时,我从太空着色器中获得了天空的奇异伪像。这些伪影的原因是什么?当fCameraAngle限制为1时,伪像消失。我似乎也缺少O'Neil沙箱(http://sponeil.net/downloads.htm)中的色相。 相机位置X = 0,Y = 0,Z = 500。左侧为GroundFromSpace,右侧为SkyFromSpace。 相机位置X = 500,Y = 500,Z = 500。左侧为GroundFromSpace,右侧为SkyFromSpace。 我发现,根据来源,相机角度似乎处理起来非常不同: 在原始着色器中,SkyFromSpaceShader中的摄影机角度计算为: float fCameraAngle = dot(v3Ray, v3SamplePoint) / fHeight; 而在空间着色器的地面中,摄影机角度的计算公式为: float fCameraAngle = dot(-v3Ray, v3Pos) / length(v3Pos); 但是,在线上的各种消息来源都在修补射线。为什么是这样? 这是一个C#Windows.Forms项目,该项目演示了该问题,并且我已使用该项目来生成图像:https : //github.com/ollipekka/AtmosphericScatteringTest/ 更新:我从O'Neil站点上的ScatterCPU项目中发现,当摄影机位于阴影点上方时,摄影机射线被否定,以便计算从点到摄影机的散射。 更改射线方向的确确实消除了伪影,但引入了其他问题,如下所示: 此外,在ScatterCPU项目中,O'Neil可以防止光线的光学深度小于零的情况: float fLightDepth = Scale(fLightAngle, fScaleDepth); …

3
如何以程序方式(创建)实时(L系统)种植艺术(2D)树?
最近,我编写了一个L系统模块,这使我进一步感兴趣。我也是植物大战僵尸迷,真的很喜欢智慧树的概念。很想创造类似的程序艺术,只是为了娱乐和了解更多。 问题:我应该如何动态地创建艺术树(可能是使用固定摄像机/透视图的2d树)? 理想情况下,我想从一种植物(只有带有叶的茎)开始,并通过对其结构的某种影响(输入/用户操作)动态地使其生长。这些影响可能导致不同类型的分支,分支曲线,其传播,果实的位置,花朵的颜色等。希望它确实充满生命/精神。:) 植物大战僵尸:智慧之树 动态地生长一棵相似的树会很棒,但是会产生更多的变化和动画。 我的背景:程序员,很少使用游戏引擎(Ogre3d,cocos2d,Unity)。尚未真正真正使用openGL进行直接编程,试图解决此问题:)。 我已经准备好花大量的时间,请告诉我有关API的信息?像您这样的专家将如何处理这个问题? 为什么是2D?我认为仅考虑二维即可解决问题。 艺术灵感: 只有树木,有果实和叶子,底部没有灌木 在大的树(可见树枝,绿叶,花朵,果实等),在左边,后面的猴子。 PixelJunk的Eden(艺术风格的灵感)。 分形过程式生成的苹果树 如果您很容易理解这个问题,请告诉我,我可能会进一步详细说明。 我希望对各种方法的讨论对每个人都有帮助。你们真棒。

6
如何使用3d perlin噪声函数生成地形?
我可以使用2d perlin杂讯功能来产生高度值,但我不明白为什么要使用3d perlin杂讯功能。在Notch的博客中,http ://notch.tumblr.com/post/3746989361/terrain-generation-part-1,他提到在我的世界上使用3d perlin噪声函数生成地形。有谁知道该怎么做以及为什么会有用吗?如果传递x,y和z值不表示您已经具有高度?

3
如何在游戏中生成随机的湖泊和河流?
我有一个2D方块建筑游戏,正在尝试制作随机生成的湖泊和河流。我已经研究了Perlin噪声算法,但是无法获得它来生成随机且不错的结果。 我一直在尝试使用python noise库,但是它并不是随机创建地图。 我在该库中缺少一些种子函数来使其更加随机吗?如果我希望它变得更随机,该更改什么变量?如果可能的话,给我一个不太技术的答案,减少数学运算,增加更多python术语。 该地图是2D平铺的地图。这是其他算法的非随机性的一些示例。以下代码连续输出3次。我使用以下方法将八度和频率随机化:freq = 16.0 * random.randint(1, 500000) * 0.000001 + 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 …

3
如何为类似Minecraft的引擎生成漂浮的陆地块?
我正在XNA中创建类似于Minecraft的引擎。我想要做的是创建类似于此视频中所示的浮岛: http://www.youtube.com/watch?v=gqHVOEPQK5g&feature=related 我将如何使用世界生成器复制它?我必须使用一些Perlin噪声算法吗?我不知道这将如何帮助我取得这样的土地质量。 这是我正在使用的perlin噪声发生器的代码: private double[,] noiseValues; private float amplitude = 1; // Max amplitude of the function private int frequency = 1; // Frequency of the function /// <summary> /// Constructor /// </summary> /// public PerlinNoise(int freq, float _amp) { Random rand = new Random(System.Environment.TickCount); noiseValues = new double[freq, …

4
程序行星,高度图和纹理
我目前正在开发OpenGL程序行星生成器。我希望将其用于太空RPG,它将不允许玩家进入行星表面,因此我忽略了与ROAM相关的任何内容。目前,我正在绘制带有VBO的立方体并将其映射到球体上。 我熟悉大多数分形高度图生成技术,并且已经实现了我自己的中点位移版本(在我所知道的情况下没有那么有用)。 我的问题是,程序上生成高度图的最佳方法是什么。我看过libnoise,它使我可以创建可调整的高度图/纹理,但据我所知,我需要生成一个像这样的网。 使平铺变得明显。 有人可以建议我采取最佳路线吗? 任何输入将不胜感激。

1
为什么此过程内容生成而不是其他?
我正在阅读在线过程内容生成一书,在第1章第2页上,有一个PCG是什么的例子,另一个是PCG不是和我不能分开的例子。 根据他们,这是PCG: 游戏引擎中间件,可迅速将游戏世界塞满植被 根据他们的说法,这不是PCG: 一个能够集成自动生成的植被的游戏引擎 同样在第1页上,他们明确表示他们不考虑游戏引擎PCG 这里的一个关键术语是“内容”。在我们的定义中,内容是游戏中包含的大部分内容:关卡,地图,游戏规则,纹理,故事,物品,任务,音乐,武器,车辆,角色等。游戏引擎本身不被视为内容在我们的定义中。 我的猜测是PCG示例是游戏中的代码(或者可以是适用于任何游戏的代码),它可以识别游戏地图并根据其填充植被。对于我来说,不是PCG的示例就像是游戏引擎提供的选项,因为开发人员可以通过用户界面离线添加植被。 最后一个是我的一个非常疯狂的猜测,我敢肯定我是错的,因为乍一看它们听起来都像PCG。请帮助我区分它们。

3
将程序生成的世界与其他世界相匹配
您读过罗杰·泽拉兹尼(Roger Zelazny)的《琥珀编年史》吗? 想象自己在第三人称MMO游戏中玩。您在世界上产生并开始游荡。一段时间后,当您认为已经学会了地图时,便意识到自己处在一个从未见过的地方。您返回到您确定知道的最后一个地方,并且它仍然存在。但是世界其他地方已经发生了变化,您甚至都没有注意到它是如何发生的。 我读过有关程序世界的信息。我已经阅读了有关Perlin噪声和八度音阶,单纯形噪声,菱形平方算法,有关构造板块和水蚀模拟的信息。我相信我对程序化世代的一般方法有一些模糊的理解。 有了这些知识,我不知道如何才能做上面写的事情。我想到的每个想法都会遇到一些理论问题。这是我可以想到的一些想法: 1)“可逆”世代,以种子号作为输入,并完整描述了一个块号 我怀疑是否有可能,但是我想像一个函数,该函数将接收种子并产生数字矩阵,并在此矩阵上构建块。对于每个唯一编号,都有一个唯一的块。第二个函数,获取该唯一的组块编号并生成包含该编号的种子。我试图在下图中制定一个方案: 2)使块完全随机,并在它们之间进行过渡。 正如阿修索建议的那样。这种方法的好处是它是可能的,并且不需要魔术功能:) 我认为这种方法的弊端在于,不可能拥有一个多元化的世界。如果让您说一个仅由一个数字表示的群岛和一个大洲,并且它是相邻的块,那么块的大小就不会等于大块。而且我怀疑是否可以在各个块之间进行漂亮的过渡。我想念什么吗? 因此,换句话说,您正在开发具有程序生成世界的MMO。但是,除了拥有一个世界,您还有许多。您将采用哪种方法来生成世界,以及如何在玩家未注意到过渡的情况下实现玩家从一个世界到另一个世界的过渡。 无论如何,我相信您已经有了大致的想法。你会怎么做?

2
如何生成类似于《帝国时代II》随机地图的随机地图?
我喜欢《帝国时代II》生成随机地图的方式(种类繁多,生物群落过渡不错,地图感觉随机而不混乱),但仍在努力复制样式。我尝试使用例如Perlin噪声,但是所有结果要么太均匀,要么不一样,Perlin值->地形启发法过于敏感和脆弱,无法创建各种世界类型。 我记得AoE2地图类型“未知”广告了“ 100,000张可能的地图”,暗示了一些种子编号的用法,但是我不确定如何使用种子编号来产生我所看到的品种。 我可以使用什么算法和启发式方法来生成类似于AoE2随机图的随机图? 编辑更具体: 进一步思考我的问题,并研究我对AoE2随机地图引擎的喜欢,我认为我最大的问题是管理地图上水和植物生命的分布。我现在看到我也将其与“有意义的生物组转换”联系在一起,但这是一个不同的问题(尽管我希望继续使用Perlin噪声将使其难以解决)。 我添加了几张AoE2随机映射,突出显示了我对它们的映射引擎的喜好,但我自己的努力未能重现。所有屏幕截图均取自随机地图类型“自定义”->“未知”。我没有指示游戏使用特定地理位置,例如群岛。 以下是来自我自己的地图引擎的图像。每个像素对应一个AoE2地图图块。 我的项目的一个难题是我希望地图比AoE2地图大很多倍。因此,无论我使用哪种引擎,都必须能够在每个地图中创建完整的生物群系,而不能像AoE2那样在每个地图中创建一组狭窄的生物群系。 帝国时代II地图 这是一个具有内陆湖泊和类似河流的事物的示例。我喜欢地图上包含大量散布的水的方式,但是水仍然有些集中-有大量土地可用于建立帝国。您无需花费整个游戏就可以在水上规划城市。 这是一个类似的示例,其中游戏足够聪明,可以将岛屿与可穿越的沼泽相连。我无法想象基于噪声的算法将如何在那以及只有那些地方造成沼泽。另外,请注意游戏是如何创造土地的,以便每个玩家都拥有自己的私人大片土地。它并没有创造出一片随机的土地,然后就每位玩家开始时哪怕是最糟糕的猜测。 我喜欢这张地图也大量使用水,但其中不包括许多内陆湖泊。将其与第一个图像进行对比。我喜欢AoE2使用相同的构建块创建完全不同的地理位置的方式。我尝试使用Perlin噪音的尝试在这里失败了-我要么获得了广阔的海洋,使陆地或10,000个湖泊的土地相形见war。我还发现很难同时到达岛屿和相连的大洲(想想北美/南美)。 将此图像与其上方的图像进行对比。他们表明地图的干旱度不取决于水位。第一张图片的地图几乎没有水,但包含森林和草丛。第二张图像的水量适中,却是沙漠。我喜欢那是可能的(想想您的世界既有新墨西哥,又有撒哈拉和哥斯达黎加)。 我自己的地图 我在很多地方都读到,构建地图的一种好方法是对Perlin噪声的多个级别进行分层,每个级别代表不同的数据维度。按照流行的建议,我选择了海拔和湿度,并从此处的Whittaker表中选择了地形类型。 我拍了两个珀林图,通过一个简单的量化每个值成整数if perlin_val < x { i=some_int } else if perlin_val < y...,然后将(海拔,湿度)整数对映射到地形类型表(例如[1,0]->热带沙漠,[1,1 ]->草原)。该系统中包括海洋-海拔= 0定义的海洋。 有很好的变化,并且在许多方面感觉都像真实世界,但是存在一些问题: 首先,海洋深度没有规律。您可能希望靠近岸边的浅水区和更远的深水区,没有哪个韵律或原因 第二,所有的水都集中在海洋中。没有湖泊或河流,因为Perlin噪声不会在大洲中部突然下降到较低的值。 在每个生物群落的数量之间取得平衡非常非常困难。我将此归因于: Perlin噪声遵循正态分布,因此很难估计如何调整每个尺寸映射的概率 试图平衡多个维度很困难-也许我想要更多(2,3),所以我提高了获得(n,3)的几率。好吧,现在我有太多(3,3)了,一切看起来都错了。 当我将噪声放大到足够接近以获取平滑数据时,我没有得到非常完整的Perlin值样本。因此,我需要调整我面前地图的分布,重新加载新的随机地图,并获得截然不同的结果。 我试图通过使用第三组Perlin值制作水来解决河流/湖泊问题。根据水/土地的二元决策,然后将以上所有内容应用于土地。这使控制水的分布变得非常容易(仍然不完美,但是更好),但是引入了一个问题,那就是存在许多没有意义的生物群落过渡。例如,茂密的草原中莫名其妙的沙漠,沙滩上的雪等。由于上述原因,仍然很难控制陆地生物群落的比例。 考虑到上述问题,我尝试了一种更简单的算法,该算法仅将Perlin噪声映射到一个维度。我现在有一系列的地形类型,从0 =深海-> 1 =浅海-> 2 =沙滩...-> N =雪。虽然这产生了岛屿和大洲,并且使平衡每个地形的比例变得容易得多,但地形类型却过于聚集。每个陆地块看起来都像一张海拔图,通常没有分散在其表面的地形类型。每个陆地块都具有大致相同的特征,始终具有相同的顺序,并且始终具有相同的环形形状。

5
如何在2D地图中检测相连的(但逻辑上不同的)水体?
我有一个二维六角形网格图。每个十六进制单元格都有一个高度值,用于确定它是水还是海洋。我正在尝试一种确定和标记水体的好方法。海洋和内海都很容易(使用洪水填充算法)。 但是像地中海这样的水域呢?与较大的水体相连的水体(“海”和“海湾”的区别仅在于洞口的大小)? 这是我要检测的示例(图像中间的蓝色水域,尽管在技术上已连接,但其标签应与左侧较大的海洋体不同): 有任何想法吗?

1
程序网格:UV贴图
我制作了一个程序网格,现在我想对其应用纹理。问题是,我无法按照自己的意愿坚持下去。 想法是在整个网格上仅将纹理绘制一次,这样就不会重复。我应该如何绘制UV才能做到这一点? 我的网格是由56个三角形组成的简单平面。我会添加图片来清除问题,但是由于我的声誉低于10分,所以无法添加。 任何帮助表示赞赏。 编辑(亲切的人给了我投票,谢谢): 认识我的网格物体: 而当纹理(试图重复纹理): 而我的质感: 编辑2: bummzack的指令就像一个护身符一样工作,并且网孔也按我想要的那样纹理化。谢谢。

3
如何生成城市街道网络?
我想为游戏创建一个城市生成器,但是在生成的一开始我就面临一个问题:道路系统。 由于这是一个中世纪世界,所以我不希望像许多现代城市一样制定网格计划。理想情况下,我更喜欢伪随机生成的大型大道和较小街道,在这些地方可能会迷路,但仍需遵循一些逻辑-而不是完全迷宫。 看起来像是自然生长的城镇。 为了简单起见,假设我的城市处于平坦且稳定的地形上,没有任何过河或救济问题。之后,我可以尝试将其集成到解决方案中。 我没有确定我的城市的确切大小或位置,因此,如果您有一个仅适用于具有精确形式(正方形,圆形,矩形等)的城市的解决方案,我会采用。

5
生成的3d树网格
我尚未在这些方面找到问题,如果我错了,请纠正我。 树木(通常是动物)在游戏中很常见。由于其性质,它们是生成程序的良好候选者。 如果可以的话,当然还有SpeedTree。据我所知,它不提供在运行时生成树网格的可能性。然后是SnappyTree,这是一个基于proctree.js的基于webgl的在线树生成器,它是约500行的javascript。 可以使用上面的任何一种(或其他我没有偶然发现的树生成器)来预先创建几十个树状网格-或在3D建模器中从头开始对它们建模-然后随机镜像/缩放它们以获得更多变体.. 但是我宁愿有一个免费的,可链接的树网格生成器。 可能的解决方案: 将proctree.js移植到c ++并处理开源许可证(似乎不是gpl,所以可以做到;作者可能还愿意合作使许可证更加免费)。 我自己基于L系统。 不要打扰,只需使用离线生成的树即可。 使用我尚未发现的其他方法。 2015年更新:最终将proctree.js移植到c ++ https://github.com/jarikomppa/proctree

1
如何轻松创建云纹理贴图?
我在游戏中制作3d行星;这些将被视为“地球”。其中一些将需要云层。我查看了用于创建“地球”的各种Blender 教程,并且他们的云层使用了NASA的地球云图。 但是,我将创建一个由许多程序生成的行星组成的虚构的宇宙。因此,我想使用许多变体。 我希望有一种方法可以程序性地生成云图,例如NASA链接。我还将需要创建气体巨人,因此我还将需要其他类型的云纹理贴图。 如果这太困难了,我可以回过头来创建云图的多种变体。例如,3个代表地球,3个代表天然气巨头,等等。 那么,如何静态创建或以编程方式生成此类云图?

3
一个简单的地图,四个生物群落以及如何分布它们
这是一个基本概念:我有一个Rogue风格的游戏,也许是Dwarf Fortress风格的游戏,它具有随机生成的游戏世界,并且周围散布着多个地牢入口。我已经基本涵盖了地牢,但是我被困在了整个世界的一个方面。 所说的“世界”被视为屏幕的2D地图,应该具有斑点状分布的四个不同主题或生物群落-草原,沙漠,雪地和沼泽,每个主题都有自己的屏幕总数。假设地图为8x8,可提供64个独特的屏幕。其中一半可能是草原,四分之一的沙漠,沼泽和积雪各占四分之一: 减少调色板似乎使积雪和沼泽的颜色相同。最初,底角有八个挡雪板,中间有一个交错的八挡沼泽区。抱歉,请忽略位置标记。 我能得到的最好的是一些蛇形的形状,并且常常与荒谬的组合(例如沙漠在雪地中蛇形)(反之亦然)结合在一起。我一辈子都想不出如何使它变得漂亮又过时,更不用说让它具有气候意义了吗?那么如何像样机一样生成生物群系图? 好的,根据要求:世界确实没有比那个例子大得多,而我需要的只是散布确定主题外观的斑点的方法,但有雪不能触及沙漠的额外限制。屏幕不滚动,并且如果屏幕设置为“沙漠”,则屏幕上将无草。

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.