質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

1022閲覧

マインクラフトのネザーの様な地形はどういうプログラムで生成されているのでしょうか?

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2022/12/23 07:51

サンドボックスゲームを作ってみようとしており、1ブロック毎に描画の必要のあるポリゴンのみ判定して形成するプログラムを組みました。
そして地形を作ろうとして悩んでいます。

マインクラフトの現世(オーバーワールド)の地表面みたいなものは、
等間隔に高度情報をランダムに設定し、三角形の頂点から頂点へ三角関数で曲線状にブロックを配置し、内部も曲線で埋めるプログラムを組んで、
一応山や斜面のような地形を広々と作れるようになりました。

しかしネザーのような2~3層も曲線の地面や天井が折り重なっている地形を作りたい場合、どういう発想のプログラムを組めばいいのか見当もつかず困っています。

あまり難しい理論は理解できないので、簡易的、疑似的にこうすれば似たものが作れるかもしれないくらいのお話でも構いません。助言を頂けますと助かります。
またこうした地形を色々作りたい場合におすすめの検索ワード、技術書などがありましたらそちらも教えて下さいますと助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

ネザーは地下としてブロックの詰まった地形を生成して、その後「一定範囲の
ブロックをくり抜く処理」を加えることで空洞を表現しているのではないでしょうか。

くり抜き構造のバリエーションによって細長い洞窟、地下の開けた空間、切り立った崖なども表現できるようです。

複数のブロック構造を論理差、論理積で組み合わせることでさらに複雑な地形を表現できると思います。

参考

https://www.alanzucconi.com/2022/06/05/minecraft-world-generation/

  • 英語、バイオーム生成の総まとめとして良さそうです
  • こちらの記事には以下のような説明があり、回答で参考にしました(日本語翻訳はMS Edgeブラウザの自動翻訳機能を使用)

山と洞窟はまったく同じ技術で作られています:前者は空気を土に置き換えて建てられ、後者は土を空気に置き換えることによって彫られます。

Cave(=洞窟)で記事内検索すると洞窟生成周りの話が読めるかと思います。

http://marupeke296.com/ALG_No3_PerlinNoize.html

  • 日本語、地形生成に関するノイズアルゴリズムの解説

https://www.youtube.com/watch?v=ob3VwY4JyzE

  • 英語、とりあえず画面だけ見ても理解できる
  • ノイズで高さマップを作って地形データを生成する流れがわかりやすいかと思います

[追記: 2022/12/27]
https://youtu.be/9e5GcmOf4fU?t=213

  • 日本語、3Dノイズによる地下地形の生成について触れています
  • プレイヤーが歩くなだらかな地形と3Dノイズ地形の和集合・差集合で考えてみるといいかもしれない

投稿2022/12/23 10:18

編集2022/12/27 03:44
tor4kichi

総合スコア771

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/12/23 11:11

英語はわかりませんでしたが動画を双方見させていただき、見るだけでも勉強になりました。 ネザーはくり抜き型かもしれないんですね。 洞窟など小さくくり抜くためのプログラムは数種類組んでますが、ここまで巨大な空洞はくり抜けないので別に知識を得る必要がありそうです。 ありがとうございます。
guest

0

正しい方法かは分かりませんが次のような方法はどうでしょうか。

地面の部分は普通にオーバーワールドと同じ方法で作り、天井側はオーバーワールドの上下反転バージョンを生成する。

間違っていたらすみません。

投稿2022/12/23 07:56

ghf.liza

総合スコア38

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/12/23 10:25

回答ありがとうございます。 層になる部分のみ天井を上下反転型で付け、その上を地面として形成し、層にならない部分とは生成の処理を変えれば良いのかもですね。 不自然な浮島が発生しないように設計し、壁面の違和感を補完する方法を何か考えればいいのかもしれません。 色々考える事ができます。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問