ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【UE4】PMC程序化生成戈德堡多面体详解(六边形星球)

2021-07-16 18:01:39  阅读:973  来源: 互联网

标签:面片 const 德堡 多面体 PMC 2.3 UE4 顶点 对偶


游戏实机录屏

【魔方超新星】30天独立开发PCG Minigame《盖亚计划》作品展示,尚有不足,大佬轻喷 


 目录

游戏实机录屏

一、简介

二、设计思路

2.1 Disco Ball

2.2 Fibonacci Sphere

2.3 Goldberg Polyhedron

2.3.1 细分+对偶(最终方案)

2.3.2 对偶+截角(更优)

 三、参考文献


一、简介

        在制作Minigame初期,游戏风格想模仿《文明6》《Polygonal Planet Project》by Oskar Stålberg(PCG巨佬,一人做出震惊业界的《Townscaper》),结合WFC算法程序化生成一些风格不同的星球。

二、设计思路

        球形建模主要包含Disco BallFibonacci SphereGoldberg Polyhedron三种,速览移步最终方案2.3.1。

2.1 Disco Ball

        面片分布不均匀,南北两极过密,放弃该方案。

2.2 Fibonacci Sphere

        立方体投影在球面形成的“斐波那契球体”表面网格分布较为规则,但立方体顶点处面结构也比较特殊,不易存储面片邻接关系,放弃该方案。

2.3 Goldberg Polyhedron

        相比之下,戈德堡多面体面片分布显得十分均匀,但由于六边形无法平铺在球体表面,会出现少量的五边形,类比足球。下面借助Procedural Mesh Component管理Vertice与Triangles数据,进行绘制。

2.3.1 细分+对偶(最终方案)

        1.首先根据二十面体的点面信息,将其绘制出来;

        2.在每条边的中点添加顶点,更新面片信息重新绘制,达成细分的目的;

        3.细分后计算球体半径,将所有顶点位置移动到球面上;

//Icosahedron Info
const float phi = (1 + sqrt(5)) / 2.0;
const float radius = sqrt(1 * 1 + phi * phi);

const float X = 1.f;
const float Z = phi;
const float N = 0.f;

static const TArray<FVector> constVertices =
{
  {-X,N,Z}, {X,N,Z}, {-X,N,-Z}, {X,N,-Z},
  {N,Z,X}, {N,Z,-X}, {N,-Z,X}, {N,-Z,-X},
  {Z,X,N}, {-Z,X, N}, {Z,-X,N}, {-Z,-X, N}
};

static const TArray<FVector> constTriangles =
{
  {0,4,1},{0,9,4},{9,5,4},{4,5,8},{4,8,1},
  {8,10,1},{8,3,10},{5,3,8},{5,2,3},{2,7,3},
  {7,10,3},{7,6,10},{7,11,6},{11,0,6},{0,1,6},
  {6,1,10},{9,0,11},{9,11,2},{9,2,5},{7,2,11}
};

        4.构建细分多面体相对应的对偶多面体(一种多面体的每个顶点均能对应到另一种多面体上的每个面的中心),即可得到戈德堡多面体。求对偶的思路是将细分多面体上每个面的中心点作为对偶多面体上的顶点,细分多面体上与顶点相连的边确定对偶后每个面上的5/6个顶点,通过数学方法对这5/6个顶点的编号进行排序,再确定新的面片关系进行绘制(一个六边形/五边形可以拆分成三个面片)。

        5.最后只需调整半径大小、细分级别,即可获得不同的戈德堡多面体。

 2.3.2 对偶+截角(更优)

        上面的方法精确度不够高,在后期制作时发现面片大小轻微有所不同。由于时间问题,最后也没找到改进的办法。理论上来讲,下述方式会明显提高精确度,但点面关系的维护也会增加难度,感兴趣的小伙伴可以试试,欢迎交流。

 

 三、参考文献

  1. Procedural Planet Generation 2014/09/30 by Andy Gainey —— experilous
  2. Mathematically producing sphere-shaped hexagonal grid —— stackoverflow
  3. Coding Adventure: Procedural Moons and Planets —— Youtube 
  4. 开源Polyhedrons —— OpenProcessing
  5. 开源Geodesic Dome —— OpenProcessing
  6. 对偶Dual polyhedron —— Wikipedia
  7. 戈德堡多面体Goldberg polyhedron —— Wikipedia
  8. 截角Truncation (geometry) —— Wikipia

标签:面片,const,德堡,多面体,PMC,2.3,UE4,顶点,对偶
来源: https://blog.csdn.net/qq_31788759/article/details/118796114

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有