まるで『マイクラ』?ボクセル地形を生み出す無料アセット「VoxelPlugin Free」で”地形を掘ったり積み重ねたり”して遊んでみよう

2022.08.02
注目記事ゲームづくりの知識しくみをつくる見た目を良くするマインクラフトお役立ち情報アセットレビュー
この記事をシェア!
Twitter Facebook LINE B!
Twitter Facebook LINE B!

地形を自動生成したり、掘り進んだり、あるいは自由に積み重ねたり。UEマーケットプレイスアセットから無料でダウンロードできる「VoxelPlugin」を使えば、まるで『Micecraft』のような仕組みをゲームエンジンに簡単に取り込むことが可能です。本記事では無料版の「VoxelPlugin Free」を使用し、ボクセル特有の機能である地形を掘る機能を作成するまでの手順をハンズオン形式で紹介します。

TEXT / 神谷 優斗
EDIT / 神山 大輝

目次

無限大の地形生成地形に穴を掘る、ボクセルに変換したメッシュの形状をゲーム内で自由に変えるなどの機能をゲームに取り入れたい時に役立つ「VoxelPlugin Free」。

この仕組みを採用すれば、アイデア次第でクリエイティブ系の作品を自分自身で作ることも可能になります。今回のハンズオンを通して、ボクセルの強みを体験してみましょう。

VoxelPluginで自動生成した地形

ボクセルとポリゴンの違い

そもそも、ボクセルとはいったいなんなのでしょうか?

アンリアルエンジンなど一般的なゲームエンジンで標準的に扱われる3Dデータは「ポリゴン」と呼ばれる形式です。ポリゴンは頂点と、それを繋いだから構成されています。スタティックメッシュやスケルタルメッシュなども、頂点と面によって構成されたポリゴンデータです。

一方で、VoxelPluginでは「ボクセル」形式で3Dデータを扱います。ボクセルは3次元空間上のドット絵のごとく、立方体の積み重ねで形を表現します。ポリゴンにおける頂点や面は体積をもたない(ペラペラ)のに対し、ボクセルは体積を持つのが特徴です。

「ボクセル」だからできることとは

ゲームにおいて、ボクセルデータを使用する最大のメリットは『動的な(リアルタイム)編集が可能』であるということです。

例えば、ポリゴンの頂点を一つ消してみたときを考えてみましょう。その頂点を使っていた面も同時に消えてしまい、メッシュに穴が開いてしまいます。そのままではゲーム的に破綻しているため、「メッシュを作り直す」という必要に迫られますが、処理が難しくゲームではほとんど採用されません。

同様に、ボクセルを一つ消したときを考えましょう。
個々のボクセルは独立した存在であり、消したり増やしたりしても他のボクセルに影響はありませんまた、ボクセルは積み重ねであるため、下図のように中身のデータを持っておくことが可能です。

編集に柔軟に対応できるボクセルであれば、ポリゴンでは困難なゲーム中に物体の形を編集する機能を簡単に実現できるのです。

VoxelPluginで洞窟を掘り進んでみよう

ボクセルの特徴が分かったところで、ここからは実際にVoxelPluginを使って、目の前の地形を掘る処理の実装手順を解説していきます。

プラグインの導入

最初に、VoxelPlugin Freeを使用するためにプロジェクトにプラグインを導入しましょう。マーケットプレイスからVoxelPlugin Freeを入手し、任意のバージョンのアンリアルエンジンにインストールします。

プロジェクトを開き、プラグインメニューからVoxelPlugin Freeのチェックボックスにチェックを入れましょう。

プラグインメニューをエディタ左上の「編集」タブから開き、VoxelPlugin Freeを有効化する

指示に従い再起動すれば、VoxelPluginの導入は完了です。

チェックを入れると再起動を促されるので、「今すぐ再起動」をクリック

新規レベルを作成する

次に、ボクセルの地形を追加するためのレベルを作成します。エディタ左上の「ファイル」タブから「新規レベル」をクリックします。

「新規レベル」をクリックして、レベル作成ウィンドウを表示させる

Basic」を選択し、「作成」をクリックして新規レベルを作成します。

VoxelWorldアクタを配置する

VoxelPluginでは、「VoxelWorld」というアクタがボクセル空間を生み出しています。作成したレベルにVoxelWorldを追加し、元々ある「Floor」アクタを削除しましょう。

「Floor」アクタを削除し、代わりに「VoxelWorld」アクタをレベルの(0, 0, 0)に配置する

これで、VoxelWorldによってボクセルの地面が生成されます。

VoxelWorldアクタの設定を変更する

VoxelWorldアクタの設定を少し変更し、ワールドの見た目をデフォルトからガラッと変えてみましょう。以下のように設定を変更します。

  • Generatorのクラスを「VoxelExample_Cave」へ
    • 山のように地形が生成されるようになります
  • Render Typeを「Cubic」へ
    • Minecraftのようなカクカクした見た目になります
  • Meterial Configを「Multi Index」へ
    • 上の面が草、それ以外の面が土のマテリアルになります

Generatorは地形生成アルゴリズムを、Render Typeはボクセルレンダリングの補完方法を、Material Configはマテリアルのブレンド方法をそれぞれ指定している

サンプルキャラクターの改造

ここまで準備が済んだところで、地面を採掘するキャラクターを作っていきましょう。今回は、プラグインのサンプルコンテンツに存在するキャラクターを改造する形で採掘機能を実装していきます。

サンプルキャラクターのブループリントを開く

コンテンツブラウザに追加されているVoxelPluginのコンテンツフォルダ「Voxel コンテンツ」から「Example」→「CubicDestruction」を開きましょう。

「CubicDestruction_FirstPersonCharacter」というキャラクターBPが存在するので、「コンテンツ」へドラッグアンドドロップし、「ここにコピー」でブループリントをコピーします。

選択したキャラクターブループリントをドラッグ&ドロップすると、移動/コピーメニューが出現するので、「ここにコピー」でコピーする。なおこのブループリントには「『Fire』イベントで視線の先にある球形範囲内のボクセルを削除する」機能が既に実装されており、今回はその機能をこの後の工程で改造する

コンテンツフォルダに移動し、先程コピーしたブループリントを開きましょう。この際、もとのブループリントと区別をつけるため、リネームしておくと良いでしょう。

インプットアクションを修正する

ブループリント内のインプットアクションが上手く紐づけられておらずエラーが発生しているため、修正します。

現時点ではプロジェクトに同名のインプットアクションが存在しないため、エラーが出ている

エディタ左上の「編集」タブから「プロジェクト設定」を開きます。「エンジン – インプット」設定から、既にブループリントにあるものと同じ名前(JumpやMoveForwardなど)のインプットアクションを作成します。その後、同じく「エンジン-インプット」画面上で操作方法を割り当てていきます。

ブループリントにあるものと同名のインプットアクションを「+」ボタンから作成する。その上で、「Fire」のイベントには左クリック、「Turn」(視点移動横)にはマウスX…といったように、ゲームで標準的なキーを各インプットアクションに割り当てる。
アクションマッピングと軸マッピングを間違えないように注意

射撃をフルオートにする

入力がある間は継続的に採掘してもらいたいので、今回は簡易的なフルオート射撃を実装します。

下図のように新しくBool変数を作り、インプットアクション「Fire」でトグルするようにします。射撃処理の部分にはTickを繋ぎ、Fireが押されているときのみ処理が走るようにします。仕組みが分からなくても、下図のブループリントを真似すれば実装できるはずです。

枠のある部分が変更点。画面左下、変数タブ横の「+」からBool変数(Boolean)を作り、「PressedFire」とリネーム。インプット「Fire」が押されているかどうかでTrueをFalseを切り替えている。もともとFireがつながれていた部分は、Tick毎にPressedFireがTrueのときのみ実行するように置き換える

なお、射撃処理の中にあるPlay Soundは毎Tick再生すると非常にうるさいため、消してしまっても構いません。

採掘範囲を決める

もとのブループリントでは削除範囲がランダムに設定されていますが、このままだと範囲が狭く形も歪になってしまうため、定数に置き換えます。「Random Range Float」関数を「Make Literal Float」に置き換え、Valueを300程度にしてみます。

「Random Range Float」のFloatピンをCtrlを押しながらドラッグすると、すべての接続を同時に移動できるので簡単

破片のマテリアルを変更する

射撃処理の後に、岩が砕けたようなビジュアル表現としてCubeのスタティックメッシュがいくつかスポーンするようになっています。現在は違和感のある表現になっているため、修正しましょう。

Create Dynamic Material Instance」関数のParentに、地面と同じ「MI_AerialGrassRock_BrownMudRocks」マテリアルを設定します。

マテリアルの設定は処理の最後の方にある。Parentのプルダウンメニューから目的のマテリアルを選択する

次に、メッシュのスポーン判定処理の回数を減らすため、「For loop」のLast Indexを20程度に指定します。そして、メッシュのサイズを小さくするために「Voxel Size」を除算している部分を250程度の値に指定しておきましょう。

Loop回数を減らすと出現する破片の数も減少する。ここで指定している値は目安なので、各々の裁量で自由に変更しても構わない

これで、採掘時に破片として現れるメッシュが自然な表現になります。以上でキャラクターブループリントの編集は完了です。

作成したキャラクターをデフォルトのポーンクラスに設定する

このままではプレイしてもキャラクターがスポーンしてくれません。コンテンツドロワーを右クリック(もしくは+追加)からブループリントクラスを追加し、新規にGameModeクラスを作成します。続いて、作成したGameModeをダブルクリックし、画面右側にある「Default Pawn Class」に先程編集したキャラクタークラスを設定しましょう。

コンテンツドロワーで「GameModeBase」を継承した新しいブループリントクラスを作成する。コピー元のキャラクターを指定しないように注意

最後に「ワールドセッティング」のゲームモードオーバーライドに先ほど作成したGameModeクラスを指定すれば、プレイ時に作成したキャラクターがスポーンしてくれます。

完成!

以上で今回の作業は完了です。エディタでプレイして実際に動くか確かめてみましょう。

左クリックしている間、向いている方向にある地形を採掘する=ボクセルを削除し破片が発生するようになれば完成

作ったゲームを発展させる方法

今回実装したのはボクセルデータを消去する処理のみですが、それ以外にも様々な機能が用意されています。皆さんの想像力を発揮させて、ゲームをさらに発展させてみましょう。以下にその例をいくつか提案します。

VoxelWorldアクタの設定を変えてみよう

「VoxelWorld」の設定を少し変えるだけでも面白い変化が見られます。

  • Genaratorのクラスを変更すると、生成される地形が変化します。
    有料のPro版では自分でGenaratorアルゴリズムを作成することも可能です。
  • Render Typeを「Marching Cubes」にしてみましょう。
    Cubicのカクカクから非常に滑らかな地形になり、ガラッと印象も変わります。

爆発する敵キャラクターを作ってみよう

今回使用した「Remove Sphere」関数は、球形の範囲内のボクセルを消去する関数です。採掘以外に、爆発のVFXなどと組み合わせてみても面白い表現ができるでしょう。AIの知識がある方は、爆発して周囲の地形を破壊する敵キャラクターを作ってみても良いかも知れません。

地形を盛る処理を作ろう

ボクセルを消す(Remove)処理と同様に、ボクセルを生成する(Add)処理も当然用意されています。キャラクターに追加で、地形を盛る機能を持たせてみましょう。

「Add Sphere」関数の使用例。視線の先の地形が盛り上がっている

「VoxelPlugin」でできること

これまで見てきたように、VoxelPluginを使えばアンリアルエンジンにボクセルの概念を取り入れることができます。通常の機能では実装が難しい、ダイナミックな地形編集が容易に実現できます。

最後に、VoxelPluginの主な機能をいくつか紹介します。

地形のリアルタイム編集

今回実装した機能のように、地形の動的な編集はボクセルの得意とするところです。工夫次第で創造的なプレイを促すゲームを生み出せるでしょう。

地形のリアルタイム編集

今回実装した機能のように、地形の動的な編集はボクセルの得意とするところです。工夫次第で創造的なプレイを促すゲームを生み出せるでしょう。

VoxelPluginを使用すれば、こういったゲームを作ることも可能

Fun with Voxels – Digging and Creation – Smooth Voxel Game Worldより引用

また、VoxelWorldのデータはセーブロードできるため、ゲーム内でせっかく編集したデータが残せない、といったことはありません。

Minecraftのような自動ワールド生成

独自のアルゴリズムを与えることで、Minecraftと同じように無限に広がる地形を自動生成する機能が提供されています。オープンワールドを作成する際の土台として活用するなど、これだけでも導入する価値があると言えます。

生成した地形にZ座標などに応じてアクタをスポーンさせる設定もあり、工夫すれば地面に木を生やすような表現も可能です。工夫次第で創造的なプレイを促すゲームを生み出せるでしょう。

生成された地形に合わせて木や草が生えている

Incognita – Large Scale Procedural Generation with Biomes (Unreal Engine):より引用

マテリアルのブレンド

VoxelWorldでは、異なるマテリアルを5段階でブレンドする独自のマテリアルを使用できます。バイオームの継ぎ目などでも違和感のないマテリアル遷移が実現できるでしょう。

草・石畳・岩のマテリアルが滑らかにつながっているのがわかる

VoxelPluginは現在も精力的な開発が進められており、今後のアップデートにも期待できます。皆さんも是非、VoxelPluginでボクセル世界を作ってみましょう!

マーケットプレイス:Voxel Plugin FREE: dynamic procedural landscape公式サイト
神谷 優斗

コーヒーがゲームデザインと同じくらい好きです

関連記事

『SINoALICE ーシノアリスー』が『シノアリスだったナニカ』に移行するまで。アプリサーバーなしで7年間のプレイ記録を後続アプリへ引き継ぐ【CEDEC2024】
2024.11.20
Unity 6のグラフィックスに関する学習リソースまとめ、Unity Technologiesが公開
2024.11.19
『Mayaリギング 3rd edition』、2024年11月下旬にボーンデジタルから発売
2024.11.19
Blender入門書を卒業したユーザー向けの書籍『プロフェッショナルBlneder』、ボーンデジタルが2024年11月下旬に発売予定
2024.11.18
DATASPELSBRANSCHENがスウェーデン国内のゲーム業界分析レポートを公開。経済打撃に反して、ゲーム業界の収益規模は過去最高規模
2024.11.15
Macの動画編集ソフト「Final Cut Pro」、13年ぶりの新バージョン「11」がリリース。AIを利用した強力なマスク機能や、キャプションの自動生成機能などを搭載
2024.11.15

注目記事ランキング

2024.11.14 - 2024.11.21
VIEW MORE

連載・特集ピックアップ

イベントカレンダー

VIEW MORE

今日の用語

フォワードシェーディング(Forward Shading)
フォワードシェーディング オブジェクト毎にライティングの計算を行い、その計算結果を描画するレンダリング手法。フォワードレンダリングともいう。ディファードシェーディング(Deferred Shading)に比べてポストプロセスの自由度は低いが、(何も物を配置しなかった際にかかる)最低限の描画コストが低く、アンチエイリアス処理などにおいてフォワードシェーディングの方が有効な分野も存在する。
VIEW MORE

Xで最新情報をチェック!