【问题标题】:Icosphere versus Cubemapped SphereIcosphere 与 Cubemapped Sphere
【发布时间】:2015-10-03 15:00:07
【问题描述】:
我正在研究为我打算编写代码的游戏引擎生成行星,我想知道以程序方式生成行星的最佳方法是什么。 (在性能方面。)到目前为止,我看到Icosphere 和Cubemapped Sphere 弹出最多,但我想知道两者中哪一个生成速度更快。我的问题特别针对 LOD,因为我希望有类似于 No Man's Sky 的游戏玩法。
提前致谢。
【问题讨论】:
标签:
c#
unity3d
rendering
procedural-generation
procedural
【解决方案1】:
我会说八面体球体是最好的,但由于它们都是Platonic Solids,它们将是相似的,所以过早的优化可能不值得。 (这是 Unity 中的 tutorial)
八面体的可能优点是面是三角形(与立方体不同),并且在 3d 空间中每个象限都有一个三角形(与 icosphere 和立方体不同)。
八面体(和 icospheres)比立方体更快的原因在于它的面已经是一个三角形(而立方体有一个正方形的面)。为八面体、二十面体或立方体添加细节通常意味着将每个三角形变成四个较小的三角形。在这一代中,您创建了三个新顶点,它们的位置需要进行归一化,以便网格仍然正确地内接在单位球体中。
镶嵌立方体
八面体和二十面体可以使用查找表来获取此归一化因子(与立方体相反),因为每次迭代的数字都是一致的。
假设您可以编写自定义网格格式,您可以通过四叉树数组(大小为 4、8 或 20)存储给定行星的网格(因为每个三角形可选地细分为四个额外的三角形)。 (这本质上是一个 LOD 系统,但您需要根据与相机的距离定期确定是否对网格进行细分或减少部分网格。)该系统可能是瓶颈,因为必须在运行时重新计算网格.