開発雑記まとめ
NonetEnsemble魔法仕掛けの迷宮のSwitch版をリリースと並行して
こそこそ裏で開発している次回作である「アクションゲームB(仮称)」の開発状況のまとめ
(Twitterで呟いたものが中心)
2020年夏頃
前々々作の主人公であるソウちゃんです
魔法仕掛けの迷宮では頭身の低いキャラを使用していて
Blenderで使用できるアクションに向いたキャラクターがいないので
過去作のキャラクターを練習がてらリモデリングしました
この子はもう登場出番はないので正規のキャラクターができるまでの代理です
地面がグラデーションで構成されるのは
比較的簡単な処理でゲームでよく使用されるのですが
トゥーン調のゲームに合わないのでオリジナルのシェーダーを書いてました
風のタ●トみたいなトゥーンに憧れましたが
シェーダーでなんとかするにはちょっと技術不足だったのでお蔵入りです
2020年秋頃
近年の流行りを取り入れようとしてサンドボックス要素を取り入れようと思い
試行錯誤している段階です
(サンドボックスとは簡単に言うとMine●raftみたいなブロックで構成されたゲーム)
ステージをモデリングするより楽と見せかけて
自動生成系はかなりプログラムのハードルが高いです
魔法仕掛けの迷宮のダンジョン生成で辛さを学んだはずなのにどうして…?!
2022年夏頃
そして時は飛んで2年…!何があった!?
Switchへの移植作業で時空が歪んでる
地形生成プログラムがすさまじくカオスだったので書き直したりして
16×16マスをチャンクとして管理することでより多く表示ができるようになった
(なお1マス=1mとする)
ちなみにこの時点では1チャンクを生成するのに2秒かかっていた
仮に128㎡を生成しようとすると72秒かかる計算になる
これではゲームにならない
テクスチャについてはTriPlanar Texture Mappingという技術を使用して
どの方向から見ても綺麗にテクスチャがはれるマッピングを導入した
話すと長くなるので興味があったらググってみてほしい
ブロックに種類を設けて、種類によってテクスチャがかわるテストをした
テクスチャがかわる仕組みについては
いわゆるブレンドテクスチャと呼ばれる手法を用いている
この方法の問題点は4種類しかテクスチャを混ぜれないことだ
ゲームによっては数多くのテクスチャを混ぜているがどうやってるのだろうか…?
わかる人はコメントで教えてほしい!
2022年秋頃
地形だけだと建造物が表現できないのでブロックも表現できるようにした
地形と比べるとわりかし簡単だった
2023年現在
本来ならばフィールドの広さは512㎡ほしいが
とりあえず最低限である128㎡で開発を進める
頂点を結合したほうが早そうだが結合する処理がめちゃくちゃ重たいので見送った
これによって大体1チャンクあたり0.04秒あたりの処理となった
128㎡の場合は約2.5秒しかかからないことになる
しかし目標である512㎡の場合は16倍である40秒かかることになる
まだまだ課題は多い…
次に導入したのはLODとよばれる遠くのオブジェクトを簡略化して表示する処理
(それについでにフォグも導入した)
ボタンひとつでポチーとなるほど簡単な処理ではなく
自動生成したメッシュでLODを作成する資料が少なくてだいぶ苦労した
これによって読み込みが高速化することはないが(むしろ遅くなる)
普段の処理が大きく軽減されるので広いフィールドを表現するには欠かせない処理である
ただ現段階では欠点があり地形に利用する場合は
距離によって隙間が空いてしまう現象が起きるのでなんらかのケアが必要なこと
いい加減でこぼこした地形にはうんざりしたので
パーリンノイズと呼ばれるノイズを使って自然な地形を作るテストをしてみた
本来はパーリンノイズには難しい計算が必要なのだが
そこはUnityなので難しい計算は全部お任せした
ただ純粋に使用しただけではMine●raftのようなワクワクする地形はできず
改めてMine●raftのすごさを実感する
地表部部分を草、中間を土、下層を石と設定したが
地表からは99%が草というつまらない景色になる問題を抱えている
テクスチャの問題もあるが地表が少々寂しいので草を生やしてみた
今まで触ったことがなかったがジオメトリシェーダーというの利用している
簡単に言うと頂点の位置を無理矢理書き換えたりする処理だ
サンプルのプログラムでは1ポリゴン当たり1つの草しか生えないので
けっこう気持ち悪いことになっている
地面のテクスチャが明るすぎると指摘されたのでテクスチャを差し替え
ジオメトリーシェーダーを改良して任意の本数の草を生やせるようになった
実際はこんなに複雑な地形でプレイヤーが遊ぶことはないが
横向きに生えている草に違和感を感じる
草