生成的3d树网格


16

我尚未在这些方面找到问题,如果我错了,请纠正我。

树木(通常是动物)在游戏中很常见。由于其性质,它们是生成程序的良好候选者。

如果可以的话,当然还有SpeedTree。据我所知,它不提供在运行时生成树网格的可能性。然后是SnappyTree,这是一个基于proctree.js的基于webgl的在线树生成器,它是约500行的javascript。

可以使用上面的任何一种(或其他我没有偶然发现的树生成器)来预先创建几十个树状网格-或在3D建模器中从头开始对它们建模-然后随机镜像/缩放它们以获得更多变体..

但是我宁愿有一个免费的,可链接的树网格生成器。

可能的解决方案:

  • 将proctree.js移植到c ++并处理开源许可证(似乎不是gpl,所以可以做到;作者可能还愿意合作使许可证更加免费)。
  • 我自己基于L系统。
  • 不要打扰,只需使用离线生成的树即可。
  • 使用我尚未发现的其他方法。

2015年更新:最终将proctree.js移植到c ++ https://github.com/jarikomppa/proctree


5
如果您想自己动手,我建议您阅读Prusinkiewicz和Lindenmeyer所著的“植物的算法之美”一书,该书可在algorithmicbotany.org/papers/#abop上找到。该书和网站还列出了许多有关虚拟植物学世代的研究论文。
2012年

我已经使用WebGL创建了一个名为3DFlora的在线工具。它具有80多个参数,可让您将结果下载为obj文件。您可以用它创建几乎任何种类的植物。在此处查看:3dflora.sina-s.com
user2002741

Answers:


12

尽管我的大多数演示都比较老,但我在这一领域已经做了很多工作:

(2010年Flash)
http://genesisbbs.com/appstem.html(点击并拖动鼠标)
http://genesisbbs.com/appstem2.html
(directX 2006)
http://vimeo.com/5206795

如果您这样做很有趣,我强烈建议您自己滚动。您几乎肯定会需要使用四元数。了解它们非常困难,但是您无需太深入地使用它们。将四元数想像为具有额外成分的向量:旋转。如果您希望植物随着生长而扭转和旋转,则需要四元数。

其他要学习的内容:
利希滕贝格图
拉普拉斯算子
Voronoi图
最近的邻居算法(使用谷歌搜索)

我(个人)不鼓励使用L系统,而不是为所生长的地方规定语法,例如[seed-> [root] / [trunk-> branch-> [flower / leaf]]。L系统不利于响应环境刺激,例如阳光的方向,重力,障碍物等。

至于速度问题,可以实时生成一棵树。但是出于存储目的和性能考虑,如果您要处理森林,则可能只希望生成一小组树并将其实例化。

除了用于Maya等的高端树生成器外,大多数现有的树生成器都不是那么好(IMHO)。

我也强烈建议使用体素来生成树(如果需要,可以使用网格划分皮肤)。体素的优势在于,您可以使用拉普拉斯(Laplacian)增长和各种自动机等功能轻松模拟增长算法(不是Conway的生活游戏,但是其他规则会产生有趣的结果)。


3

就我个人而言,我可能会从预先生成的树开始,并且只有在我拥有一个有脚踢的森林渲染引擎(包括灌木,草,蘑菇和其他东西)之后,我才开始寻找是否需要更多的可变树网格。

话虽如此,您可以看看ngPlant。它包含一个GPL程序树建模器应用程序,但是完成所有繁重任务的库均已获得BSD许可。它是用C ++编写的。

对于森林渲染,有(MIT许可)分页几何食人魔渲染引擎。


3

过程树的主要问题不是生成它们,而是在运行时每帧渲染一次。这就是为什么您会在AAA游戏中看到许多相同的树的原因,不是因为它们不能实现或编写创建独特树的技术,而是意味着您必须减少游戏的其他功能负载跑步。

如果您有许多相同的树,则可以旋转它们并可能对其进行均匀缩放,以使它们在每个角度看起来都不同,并且由于它们是相同的,因此可以对其进行实例化,以节省每帧宝贵的毫秒数。

只是想一想这个问题,可能会有一个快乐的媒介-您如何生成一些不同的树部分,树干,树枝,树叶等。但是所有这些都以模块化方式组合在一起,例如乐高积木。这样,您可能会有许多组合,因此会有一些非常独特的树,但是您也可以实例化所有许多部分,以便更快地运行游戏。


除了分段的想法之外,这个答案并没有真正添加任何新内容。
Jari Komppa

3
当OP非常感谢时,总是很不错。对于QandA网站,您的帖子显然没有问题。除了这个答案,直接解决您的要点。
SirYakalot

是的,我亲自去过,很抱歉。
Jari Komppa 2012年

1

一段时间前,我偶然发现了tree [d] ...我只用了很少的时间就测试了一个项目,但这仅仅是因为我停止了开发-该工具为您提供了广泛的生成器选项,可以和,据我所知,速度相当快。链接在下面。

缺点是它不是您可以合并的树生成器。您必须预先生成几棵树,然后在运行时放置它们以修改其唯一性,然后修改数据。

重要的是,TreeD是免费使用的,并且您可以将自己制作的树(商业的或免费的)包括在自己的项目中,只要它们不是模型包,纹理包,3D模型生成器或纹理生成器即可。


很高兴看到其他免费生成器,即使它是库格式。
Jari Komppa

1

这是一个小巧的解决方案,我已经在项目中使用了它,可以告诉您,它足够快地动态生成树,为什么运行游戏。它当然没有详细说明,但是如果您除去广告牌,它可能会很整洁。

http://ltrees.codeplex.com/


对于XNA用户而言,这似乎是一个不错的解决方案。
Jari Komppa
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.