Skip to content

momomo-official/m-crft

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 

Repository files navigation

m-crft

m-crftは3Dサンドボックスゲームです。
3DCGはDxLibを使って実装されています。
Windowsでのみ動きます。LinuxとMacには対応していません。
Screenshot

なぜm-crftを作ってるの?目的は?

  • 3DCGの表現技法を一通り扱ってみるための題材として
    • 水がどんどんきれいになっていくのが楽しい
  • ボクセルエンジンの最適化を楽しむため
  • もももがかわいいため

m-crftの特徴

  • 無限の広さを持つ世界。
  • パーリンノイズによる自然な地形。4つのバイオームがあります。
  • Shaderによる基本的な3DCG表現。(影、光、水面反射など)
  • マルチプレイ対応!チャットも可能。
  • 便利なコマンドにより、ブロックによる建築がサポートされます。

ダウンロード

実行バイナリは以下のリンクからダウンロードできます。
[TODO:link]

開発環境

Visual Studio 2017 CommunityとDxLibを使って開発しています。
ソリューションファイルが含まれているので、Cloneすればそのまま動かすことができます。
ただし、DxLibの設定は各自で行っていただく必要があります。DxLibの設定はこちらのリンクを参照してください。
Cドライブ直下にDxLibのプロジェクトに追加すべきファイル_VC用が置いてあるものとしてプロジェクトの設定をしてあります。
Cドライブ直下にない場合はDxLibの設定を行ってください。

操作方法

a:          左に移動  
s:          後ろに移動  
d:          右に移動  
w:          前に移動  
e:          インベントリを開く 
/:          コマンドモードを開く  
f:          ダッシュキー。このキーを押しながらasdwを押すと高速移動。spaceを押すと大ジャンプ。  
space:      ジャンプ  
右クリック:  ブロック設置  
左クリック:  ブロック破壊  
マウス移動:  カメラの方向を変える  
ホイール:    アイテムを変更 

実装について

世界の設計

Worldは9×9のChunkの集まりです。Chunkは16×16×256個のBlockの集まりです。Worldを構成するChunkの数は実行中に変更することができます。プレイヤーがWorldの中心のChunkから別のChunkへと移動するたびに、必要なChunkを最生成、またはメモリから読み出します。

地形生成

地形はパーリンノイズに従って生成されます。ただ純粋にパーリンノイズを用いているのではなく、川や海に面した地形が不自然にならないよう高さを調整したり、洞窟をつくるための調整はしています。

バイオーム

今のところ4つだけです。

マルチプレイ

マルチプレイはDxLibの通信機能を用いて行われています。

メッシュ構築

メッシュの数はレンダリング時間に大きな影響を与えます。そのため、なるべく少ないメッシュで世界を構築することが求められます。
m-crftでは、Greedy Meshというメッシュ構築アルゴリズムを用いています。
以下のURLを参考にしました。
[https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/]

Shader

Shaderを用いて、以下のことを表現しています。

  • 水面反射
  • さざ波
  • アンビエントオクルージョン
  • ライトブルーム・ゴッドレイ
  • フォグ
  • カラーライト

影は、深度バッファシャドウアルゴリズムを用いて表現しています。

水面反射

ScreenShot 水面反射はScreen Space Reflection(ssr)を用いて表現しています。
よく用いられるのはカメラを水面の下に持ってきて、そこから得られる画像を水面に描画する方法ですが、この方法は水面が一定の高さにあるシーンでしか用いることができません。
ssrを用いると画面外にある物体を水面に反射させることはできませんが、ある程度のクオリティの描画結果を得ることができます。

さざ波

動的法線マップを用いて表現しています。以下のような方法です。

  • ハイトマップを作成
  • 波動方程式に基づいて波のシミュレーションを行い、ハイトマップを次の状態に更新
  • ハイトマップに基づいて法線マップを作成
  • 法線マップを水面にテクスチャマッピング

アンビエントオクルージョン

アンビエントオクルージョンは、遮蔽度を表現するための技法です。
以下のURLを参考にしました。
[http://0fps.wordpress.com/2013/07/03/ambient-occlusion-for-minecraft-like-worlds/]

ライトブルーム・ゴッドレイ

ScreenShot
太陽に関する表現技法です。ライトブルームは太陽をまぶしく見せる表現、ゴッドレイは木漏れ日のような表現です。
以下のURLを参考にしました。
[http://maverickproj.web.fc2.com/pg65.html]

フォグ

ScreenShot 遠景には距離フォグをかけています。以下のURLを参考にしました。
[https://wgld.org/d/webgl/w060.html]

カラーライト

ScreenShot 以下のURLを参考にしました。
[https://www.seedofandromeda.com/blogs/29-fast-flood-fill-lighting-in-a-blocky-voxel-game-pt-1]

Releases

No releases published

Packages

No packages published