2017-12-15 31 views
2

頂点とエッジのグラフとして表され、各頂点が3D空間に位置し、各エッジがトンネルを表す洞窟システムを想像してみてください。あるいは、エッジが道路を表し、頂点がコーナーと交差点を表しているとします。要点は、幾何学的データのグラフがあり、そのデータの周りの任意の構造を外挿することができることです。これらのものを3Dでレンダリングするために、どのアルゴリズムがメッシュを生成できますか?3Dグラフから手続きメッシュを生成する

似たようなトピックの素晴らしいYoutubeビデオです:Unite 2015 - A coder's guide to spline-based procedural geometry。それは分岐がなくても1つのポイントから別のポイントに移動するだけの簡単なケースを扱っていますが、確かに同様の概念がグラフベースの3D構造をレンダリングするのに使用されます。

+0

これは '[graph-algorithm]'としての資格がありません。とにかく面白い問題(だから+1)私はこれをどのように攻撃するだろうアプローチで答えを追加しました。 – Spektre

答えて

2
  1. スタートは、円形の洞窟

    を作成すると、あなたは、開始点としてSmoothly connecting circle centersを使用することができます。 次に、円をいくつかの異なる形に変更することで、ランダム性とプロファイルのような洞窟を追加します。また、グラフ交差点に基づいて半径(または幅)を調整することもできます。後で適切なテクスチャを作成するために、UVマッピングも保存することを忘れないでください。これは、円筒軸をUとし、円の角度パラメータをVとすると簡単です。これはbump/normal mappingTBNマトリックスとしても使用できます。

    これの主な問題は、グラフの交点になります。交差するチューブを滑らかに接続するメッシュを作成する必要があります。たとえば、いくつかの洞窟「部屋」があります。各頂点のどの頂点がどの頂点にあるのかを知るために、頂点を円のパラメータ角度で並べる必要があります。また、適切なポリゴンの巻付けをしても、プログラム的に接続できます。

    この方法で、ジオメトリを生成できるはずです。

  2. は、オブジェクトを追加し、あなたはどちらかが完全にランダムであるか、私はバイオームを作成するために、ここでRandom Island generator行ったように、いくつかの物理的なアプローチを使用することができるため

    を備えています。だから、あなたは奥行きや水からどれくらい離れているか、植生や物をどれだけ深く作り出しているかといったいくつかのルールを追加/活用することができます。

  3. 入力はいくつかの特定の洞窟面積あたりの種子とあなたのグラフであるように、それをコード化しようと一緒に#2#1を入れたとき

    を一般化します。こうすることで、洞窟の各部分を別々に繰り返し作成することができます。グラフにこのシードを追加するだけです。

    滑らかな遷移を作成するには、ネイバーの洞窟領域も生成し、それらの間の接続を補間する必要があります。

    もう一つの選択肢は、バイオームなしで均一な洞窟環境を持ち、洞穴の内部にはるかに多くの辺の領域に物を追加することです。

[注]

今、あなたは明らかに、入力としてグラフを得たが、あなたがランダムにそれを生成することができません念のためにあまりにも参照してください。

洞窟の壁をよりリアルにするには、ダイヤモンド&半径のモジュレーションのためのスクエア(アイランドジェネレーターのリンクから)は、平均化が角度パラメータの方向に循環的に行われるようにします。その結果、マップはシリンダーサーフェスに追加されるとシームレスになります。