ものららい 2022/04/06 18:21

ブロック構造の背景(地面)を作ってみた


こんにちは🍎

今回はちょっと変わった内容にしようということでしたので、背景周りの内容にします。

3D空間上でのゲームで背景というと、なんだか地形や建物をモデリングしたりなどものすごい大変なイメージありますよね…🐄、2Dのマップ制作でも大変なのにそれに輪をかけてとてもとても大変なイメージが付きまとって苦しみが…🍏。

実際、自分も「ゲーム用の軽くて最適化したモデル」を作るのをなるべくやりたくないなぁって常々思ってるくらいで、日々なんかいい方法ないかな?って色々回避する方法を考えてたりします。(ここら辺のもやもやがあるのでビルボードでキャラクターを表示する方式でゲームを作ってたりします…)

でもあんまり頭だけで考えても、そうそういいアイデアが浮かぶことは無いので、まず挫折しないくらい簡単な所から…とシンプルな昔からあるタイルを敷いてく方法の「マップチップ的な感じで地面を作ろう」くらいの所から始めてみました。(一応3D空間上でやるのでマイクラみたいな感じのやつ)


となると、まずやらないといけないのは素材になるブロックを作る事なので、メッシュのUVをいじれるMeshUvControl.csを使用して各6面の柄を任意の物に変えられるCubeっぽい物をブロックのひな型として編集できる機能を作成しました。(平たく言うと6面箱状になるようにUVの調整できる板ポリ配置した物)


Scenes/Scene_BlockCreateEditor

Assets/Script/Tool/
Tool_BlockBase.cs ブロックの作成ツール
Tool_QuadBase.cs 平面ブロックの作成ツール

上記のシーン、Scene_BlockCreateEditorを開くとブロックを作るシーンが開かれます。

このシーンは基本、再生とかは行わないでエディタ内の操作だけでブロックを作っていきます、左Hierarchyの項目内にBlockBaseとQuadBaseというオブジェクトがあるのでこちらをコピペしてからコピーの方でブロックの編集&作成を行います。


コピペするとデフォルトの状態のブロックのひな型ができますのでMeshUV_Lengthの項目にチップの最大数、MeshUV_UpからMeshUV_Rightまでに表示したいチップの番地を入力する事で柄の表示ができます。


柄の設定を行って城壁にしてみました。

これでブロックの作成の準備が整ったので、次はブロック化してみましょう。
Pathに保存したい場所を入力して「アセットに保存」ボタンを押すとPathの場所に保存されます。

ちなみにブロック化したものは一個のメッシュになっていますので、後で微調整したくなった場合ブロックのメッシュだけを調整した物に入れ替えると、配置の方のデータを作り直さなくていいので楽です。



保存されたものをステージ上に配置してみました。(右奥の)
ブロックの作成はこれだけなので、次はブロックの塊を作る作業に移行します。


Scenes/Scene_BlockLayoutEditor

Assets/Script/Tool/
Tool_CombineBlockParts.cs 子すべてのメッシュを結合するルール
Tool_BlockDuplicate.cs ブロックやオブジェクトを指定個数分生成するツール
Tool_ObjectChange.cs 指定のオブジェクトと入れ替えるツール

Scene_BlockLayoutEditorシーンで先ほど作ったブロックを配置してみました。
こちらも先ほどのブロック作成シーンと同じようにCombineBlockPartsBaseをコピーしてからコピー先を編集していきます。

CombineBlockPartsBaseの子の要素のBlockDuplicateはオブジェクトを指定数分XYZに配置していくツールで、一応ブロック用に作っている機能ですが一応オブジェクトならブロック以外も使えるようになってます。

画像の場合X3、Y1、Z3なのでL字型の配置がされてますよね、通常は数値を増やしていっても一方向に伸びてくだけなのですが、FillModeのチェックを入れると下の画像のように中身の詰まった感じの箱型の配置をしてくれるようになります。


一応ですが、Tool_CombineBlockPartsは子に存在するメッシュすべてを一つにする機能なので、CombineBlockPartsBaseの中に入っていればBlockDuplicateの中とか関係なくメッシュ結合の対象内になります。

とりあえず配置ができたのでCombineBlockPartsBaseを選択して、Tool_CombineBlockPartsコンポーネントのPathを設定後「アセットに保存」を押してみましょう。



先ほど生成されたブロックの塊をシーンに配置してみました。

一応、このメッシュの結合を行わなくても、BlockDuplicateの配置そのままでブロックを使用する事は出来ますが、ブロックのままの状態だと重なったところの面がそのままなので、データ的にも描画的にもたくさん配置するとかなりの負荷になってしまいます、それを防ぐために結合時に重なる面や埋もれてる面は自動的に削除する処理を入れていますので、結合したメッシュは負荷が削減されていると思います。


ということで、現状のグレーの背景から地面っぽいブロックで似たような地面を作ってみました。



ちょっと歩いてみましたが…、遠景にちょっと違和感感じますよね…🐄


動画だと若干わかりにくいので補足。

ブロックを敷き詰めた感じの構造物を作ると、アンチエイリアスの設定やミップマップが悪さするみたいで、遠景が格子状になってしまってますね…うっ🐄

これ自体はアンチエイリアスやミップマップを切れば出なくなるのですが、人によってはこれらを切るのはちょっと…っていうのもありそうなので何か別の解決策あればいいんですけど、現状はわからないのですみません。

とりあえずここで止まっててもどうしよもないので、今回はその二つを切って見た目をマシにする方向で対応します。

アンチエイリアスはEdit→Project Settings→QualityメニューのAnti AliasingをDisabledにすると切ることができます。

ミップマップはAssets内のテクスチャを選択すると項目が出てくるのでチェックを外してApplyすると切れます。



あまりすっきりした感じではありませんが、これで遠景の格子状は消えます。



ちょっと最後らへんはそれてしまいましたが、これで背景少しは作りやすくなったかな?とか思ってます、…実際ここまでしても背景作るの面倒なのであんまり解決!と胸を張って言えない感じしますが、あんまり考えてもしょうがないので、次回からこの範囲で何か出来る事をコツコツやっていきたいと思います。


最後に、今回の実際動作するアセットフォルダも置いておきますので、アセットフォルダを空プロジェクトに入れれば確認できます。

2022_04_07_Assets.zip (971.96kB)

ダウンロード

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

最新の記事

記事のタグから探す

月別アーカイブ

記事を検索