世界を動かす技術を、日本語で。

「マインクラフト」を球体にする

概要

  • Blocky Planet はUnityで開発された、球体上にMinecraft風ボクセルをマッピングする技術デモ。
  • 惑星は 手続き型生成 ・完全破壊可能で、20種以上のブロックを設置・除去可能。
  • 球体構造特有の 設計課題 や歪み対策について詳細に解説。
  • ブロック配置や構造管理のための 独自アルゴリズム と工夫。
  • 本記事は、これらの技術的チャレンジと実装方法に焦点を当てる内容。

Blocky Planet: 球体ボクセル惑星制作の技術的課題

  • Blocky Planet は、Unityエンジン上で制作したMinecraft風の球体ボクセル惑星デモ。
  • 惑星は 手続き型生成 ・完全破壊可能で、20種類以上のブロックを配置・削除可能。
  • Windows向けに最適化した無料ビルドを Itch.io で公開、Web版も用意(動作に若干の不安定さあり)。
  • 開発動機は、Jordan Peckの古い技術デモへの インスパイア と、手続き型ジオメトリやボクセルゲームへの興味。
  • フルゲーム化は未定、サイドプロジェクトとして 随時アップデート 予定。
  • 開発期間は約1ヶ月、週15時間程度の作業時間で実装。
  • 開発環境は Unity 6+C#、Job SystemとBurst Compilerを活用しつつDOTSは未採用。
  • テクスチャはすべて自作、ピクセルアートツールやスクリプトで生成。
  • 質問やアイデアは Reddit投稿 で受付中、要望が妥当なら反映する可能性も。

球体ボクセル惑星の設計課題

  • コードで球体を作るのは簡単だが、 重力方向とブロック面の整合性 が課題。
  • ブロックの垂直面を常に重力方向(惑星中心)に合わせる必要性。
  • 課題は2つ:
    • 2Dグリッドを3D球体へ マッピング する手法
    • 外側へ進むほどブロック幅を 維持 する工夫

球体へのグリッドマッピング

  • Gaussの定理により、平面グリッドを球面へ歪みなく貼るのは 不可能
  • 一般的な地図投影(矩形→球体)は極端な 歪み を生む。
  • ゲーム開発では Quad Sphere (立方体の6面を球面に投影)が主流、歪みが大幅に軽減。
  • Quad Sphere構築手順:
    • 原点中心の立方体を準備
    • 各面をグリッド状に細分化
    • 各頂点を単位球面まで 正規化 して射影
  • デフォルトのQuad Sphereでも歪みは残るため、 事前歪み補正 で面積や角度の保存性を向上。
  • 歪み補正前後でブロック形状の違いが顕著、補正後はより正方形に近いブロック配置。

深度方向の歪み対策

  • 球体では中心に近いほどブロックが 薄く、外側ほど 広く なる問題。
  • 理想は、外側ほど1層あたりのブロック数を 増やす 方法。
  • ただし、各層のブロック端が揃わず、構造物の一貫性が損なわれる。
  • 解決策として、 歪みが大きくなった時のみ 層ごとにブロック数を倍増(最小値2が推奨)。
  • この手法で、各層は「シェル」としてまとまり、外側ほど 指数的に ブロック数が増加。
  • シェルごとに規則的なグリッドを維持でき、コードの効率化にも寄与。

惑星データ構造

  • 平面ボクセルワールドは カラムチャンク+レンダーチャンク で管理(例:Minecraftは16x320x16→16x16x16)。
  • 球体ワールドは 6つの扇型セクター に分割、各セクターを「シェル」で細分化。
    • セクターごとに、中心から外側に向かってシェルが拡大。
    • シェル内のブロック数・層数も外側ほど増加。
  • 効率化のため、可変サイズのシェルをさらに 16x16x16の固定チャンク に分割。
    • 物理シミュレーションや描画での バッチ処理 最適化。

まとめと今後

  • Blocky Planetは、球体上のボクセル配置・深度管理・歪み補正など、 独自の技術的工夫 を実践。
  • シェル構造やQuad Sphere補正、効率的なチャンク分割で 快適なプレイ感拡張性 を両立。
  • 今後も技術的チャレンジや改善案について情報発信を継続予定。

Hackerたちの意見

記事にはキューブスフィアの長方形サイズの違いを避ける方法が書かれてないから、教えるね。悪い方法: - キューブを生成 - 各面を線形補間(lerp)で細分化 - 各ベクトルを正規化して単位球に乗せる いい方法: - キューブを生成 - 球面線形補間(slerp)で細分化 - 完了!キューブスフィアには、特にテクスチャマッピングにおいて面白い幾何学的特性がたくさんあるよ。

すごく美しく書かれていて、イラストも素敵だった。

うん、読むのが純粋に楽しかった。

これがエスキル・スティーンバーグの『Love』の仕組みとも関係あるのかな。球状の「ブロック」ワールドもあったし。

この問題に挑戦する素晴らしい記事だね。マインクラフトとスーパーマリオギャラクシーの両方をプレイしたことがある人は結構いると思うし、こういう考えの流れを持ったことがある人も多いはず。ただ、君はそれを実際のデモまで持っていって、考えをすごく明確に書き残しているね。縦の歪みが一番の問題だと思うけど、各「シェル」の横のタイル配置には満足できる方法がいくつかあるよ。例えば、世界を球ではなくドーナツにすれば、各レベルで完璧なグリッドができる!もちろん、これには内部と外部の間に歪みが生じるから、ドーナツを一回ひねって、歪みの問題を解決しつつ、スターレーター融合装置を発明したことになるね。

スペースエンジニアーズをぜひチェックしてみて。彼らもボクセルに関して似たような球状の問題を抱えてるけど、君が「軌道体」を実装する際にやったほどには進んでないと思う。宇宙やグラフィックス、そしてそれをレンダリングするアルゴリズムに興味がある者として、素晴らしいと思う。問題は知っていたから挑戦しなかったけど、歪みの補正やチャンク処理について考えてみると、掘れる深さを制限すれば(「コア」まで半分)大丈夫だと思う。コアを構成する小さな潰れたブロックには遭遇しないからね。それに、クアッドスフィアについても言及するのが重要だね。これが実現可能にしているんだ。素朴な開発者は緯度経度をsin cosの球面座標にマッピングして終わりにしちゃうけど、自分の極がめちゃくちゃになってることに気づいてないんだ。地図作成の問題だね。WGS84が球体のマッピングには向いてないってことが指摘されてて嬉しいよ。

コアまでの掘削を許可しないことで、変な重力の問題も解決できるね。アストロニアでは惑星のコアで超変な重力があったし、そこで振動して動けなくなることもあった。

これめっちゃ楽しい!もしそれが好きなら、クールなボクセルの惑星間ゲームの基盤ができてるよ。「軌道に入る」楽しさや、近点で速度が増して遠点で減るのを見たり、ロケットのパワーボタン([Space])で降下して着陸するのが楽しかった。マインクラフトとケルバルスペースプログラムの融合ゲームがあったら最高だし、そのためのほとんどの要素はもう揃ってるよ。 :D

「深く掘り下げる」問題を避けるために、まずボクセルでキューブを作って、その後キューブを四次元球体に変えるような歪みをキューブの表面だけじゃなくて内部にも適用するのが可能なのかな。うまく説明できないけど、コードを書いてみるべきかも、笑

一番簡単な方法は、どこかで不変の溶岩に当たることかもしれないね。

これ、別の試みを思い出させるけど、Minetestでのやつだよね: - https://youtu.be/ztAg643gJBA?si=8vDgg0rFCOj9I7no この人は、数学について話してるもっと技術的な動画もあるよ。

すごくいいデモだね。レーザーが大好きで、ボクセルの惑星を丸ごと壊すのがめっちゃ楽しかった。

軌道力学で遊ぶのがちょっと楽しかったよ。最初は惑星のコアの周りを飛び回って、その後は惑星自体の周りを。ある時、宇宙にかなり遠く飛んで、星のオブジェクトを通り過ぎたら、急に暗くなったのがちょっと不安だった。すごくクールなゲームだね!