投稿記事

進捗の記事 (62)

がぷがぷ工房 2023/05/10 22:02

painRe:inのロードシステムについて

こんばんは、がぷがぷ工房です。

今日はステージ構成の話をさせていただきます。
ゲームの開発での後悔話が多いので、開発に興味がある方は是非ご覧ください。

painRe:inのローディングの仕組み

「painRe:in」のステージは、ストリーミングロードを使用しています。
これは言うなれば、オープンワールドの様なもので
「エリア1」「エリア2」「エリア3」で区切られてはいますが
「エリア1」はずっと地続きで設計されています。


この全てを一度にロードすると凄く大きな負荷になってしまうので
主人公の位置から、必要なステージのユニットのみをロードしています。
ドアに入る前にゲームが重くなることがあると思いますが、
このタイミングでドアの先にあるエリアを読み込んでいる感じです。

なぜこの仕組みにしたのかというと、
ずばり「オープンワールドゲームへの憧れ」でした。
広大なフィールドで、主人公が好きな場所へ行ける仕組みを基盤として作ってしまえば
どんなゲームでも作れるハズだと、私は思っていました。
しかし現実は甘くありませんでした・・・orz

ストリーミングロードの落とし穴

①エリアが二つ読み込まれる地点が発生してしまう
例えば「ステージ1」で「ステージ2」を読み込ませた時に
「ステージ1」を削除してしまうと、主人公は奈落へと落ちていきます。
主人公が「ステージ1」を離れるまで「ステージ1」を保持しておく必要があります。
この間、ゲームは「ステージ1」と「ステージ2」を同時に読み込んでいる状況となり
非常に描写コストが上がります。
②ロードフリーズ
先に言った通り、ステージを読み込む時にゲームにフリーズが生じています。
このフリーズを極力少なくするために、事前にステージを読み込むなどの処理を入れていましたが(現在は入れていません)ほとんど改善しませんでした。
③ステージ構成に自由が利かない
「エリア1-1」から「エリア1-5」は地続きで設計されています。
「エリア1-2」が「エリア1-1」の領域に入った場合、「エリア1-1」が読み込まれてしまい、二つのエリアが重なり合ってしまいます。
他のエリアと干渉しないか調べながらステージを作る必要があり、これは大きな障害です。
④Zファイティング
これが私が最も今のシステムに後悔している要素です。
Unityは、ゲームオブジェクトが原点から遠くなる程に誤差が生じます。
通常はほとんど気になりませんが「painRe:in」にとってはこれが致命的でした。
この影響により、ステージのスタート地点から離れるにつれて主人公の見た目に違和感が生じます。


例えば、「ゴブリンの巣窟」の「ステージ4」は原点からおおよそ500mの距離あります。
この地点で、肌にぴっちりと密着させている靴下がチラついています。
※これはandroid版でのみ発生していると思われます。
原点から離れたゲームオブジェクトのポジションに、ごくわずかな誤差が生まれ
靴下と素肌の正しい描写が出来ずにチラ付いているという感じです。
これは不具合ではなく、Unityの仕様だと思います。

次作へ思いをはせて

今作はこのまま製作を進めたいと思っています。
次作では、ステージのユニットを明確に切り分けて
主人公が原点座標からあまり離れないような仕組みにしたいです。

しかし、それぞれのエリアの最後には、この仕組みだから出来る特別なステージを用意しています。
少しだけ楽しみにしてお待ちください。

進捗


「エリア1」にある「釣り天井トラップ」のパワーアップバージョンを作りました。

このトラップは即死では無いのですが
オーバーキル状態だとバラバラになります。
(こんなものに潰されたら流石に即死であるべきでしょうか・・・。)

串刺しビリビリもあります

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

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

がぷがぷ工房 2023/05/09 21:34

傷痕と表情のバグとロボットアーム

こんばんは、がぷがぷ工房です。

Android版でのリアルタイム傷痕描写バグについて

「リアルタイム傷痕」を追加してからAndroid版で主人公の肌が変色する不具合が発生しています。


これが発生するのはゲームの起動後、1回目にステージに入った時起こる現象で、
一度ステージから抜けて、もう一度ステージを選択すると直ると思います。

実は何度か修正を加えているのですが、改善出来ずに今までズルズル引っ張っている厄介な不具合です。
この「リアルタイム傷痕」の仕組みは
①攻撃された位置を取得する
②身体のテクスチャを一度取り出し、攻撃された位置に傷痕のテクスチャを貼って保存する
③保存したテクスチャをキャラクターの身体のテクスチャに上書きする

という感じで、とてもコストが掛かる処理をしています。
(しかもこの処理が攻撃される度に行われています)
ボディのメッシュに沿わせて傷痕のデカールを貼ると言うのは、ボーンとリギングされて動く身体にデカールを貼るには相性が悪く
どうしてもテクスチャを直接弄る必要があって今の仕組みになりました。

現状ですと、攻撃された位置の特定もあまりうまいこと処理できておらず
変な位置に傷が付いたり、逆に腹部を刺されたのに傷が付かなかったりと
不満が多い機能の一つです。

この機能については大幅な見直しを検討していますが
最新のバージョンでは、初期設定が「リアルタイム傷痕」ではなく
「シンプル傷痕」になっています。

※現在は「シンプル傷痕」が推奨設定になっているという意味です。

こちらはダメージの蓄積によって体のテクスチャが差し替えれるだけなので、かなり低コストで動作します。
ですが、「シンプル傷痕」の所為でキャラクターの身体テクスチャを差し替えられない問題もあります、例えばキャラクターに陰毛を生やしたり、タトゥーを入れたり、下着後の日焼けを付けたり、そういう要素に対応できないのです。

「傷痕」については改善を目指してシステムの変更を予定していますが、
低スペックPCや、Android版では「シンプル傷痕」を利用することをお勧めします。
「Settings」の「R-18G」設定から変更できます。

変顔バグ

前々回くらいに、表情の仕組みを大きく変更したのですが
その後から表情が正常に戻らないバグが発生しています。
Unity上ではエラーは出ていませんし
正直、低い確率で表情が残ると言うのは面白いかもしれないと思っていました。


しかし、アヘ顔に固定されてしまうと、次にもう一度アヘ顔になるまでベロが出た状態になってしまったります。
正直これは見てられないので、修正を入れようと思っています。
(それと、舌が黒いのもかなり気になるので修正します)

進捗

現在最優先として「エリア3-3」の制作に当たっています。
「エリア3-3」は「ライン工場」の様なステージになっていて
数種類のロボットアームがトラップとして仕掛けられています。


本来これは、ステージに登場する「ホバータレット」の製作工場ですが
主人公がアームに捕まると、「ホバータレット」にするべき施工を施されてしまいます。
ちなみに、ロボットアームにはそれぞれ役割が決まっていて
「穴あけ」「掘削」「充電」「爆破(?)」があります。(増えるかも?)
どれも中々に残虐なイベントになっていると思います。


どの程度まで開発が進むかはまだ分かりませんが
次回のアップデートで「エリア3-3」が追加されます。

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

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

がぷがぷ工房 2023/05/05 13:14

爆発でバラバラ

こんにちは、がぷがぷ工房です

突然、作りたくなったのでバラバラを作ってみました。

バラバラ

ステージ1のウッドボックス、ステージ2の大砲、ステージ3のエネルギータンクなどの爆発物があります。
あまりダメージはありませんし、さほど脅威はありません。
そこに何か付加価値を付けたいと思ったので、バラバラを実装することにしました。



次回のアップデートから、オーバーキルモードの状態で爆発物のダメージを受けると主人公がバラバラに吹き飛びます。
本当は衣装を反映してバラバラにしたかったのですが、それは技術的にとても難しかったので、妥協しました・・・。
(バラバラになるほどの衝撃を受けたら衣装も吹き飛ぶハズなので良しとしました)



バラバラについては、爆発だけではなく非常に高い破壊力を持った攻撃を受けた際にも起きるようにしたいと思っています。
ですが、前も言った通り理不尽な即死は避けたいので、オーバーキルモードをうまく活用していきたいところです。

スクリーンショットを撮影していて気が付いたのですが
敵にイベント攻撃をされてる時にも砲弾に当たってバラバラになってしまいました。
小悪魔のイベント攻撃では不具合は出ませんでしたが
これは予期せぬ不具合の温床になりうるので、イベント中はバラバラにならない処理を入れるかもしれません。

それとバラバラもR-18GのSettingで表示/非表示を切り替えられるようにする予定ですので、四肢○断が苦手な方もご安心ください?


以前、斬首を実装した時に
「断面をもっと作り込んで欲しい」というご意見を頂きました。
時間が掛かってしまい申し訳ありませんが、
首や胴体の断面のテクスチャは差し替える予定なのでもうしばらくお待ちください。

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

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

がぷがぷ工房 2023/05/04 14:36

144hzモニターの不具合と腹パン

こんにちは、がぷがぷ工房です。

60fps固定が機能していない

私はゲームを作成していますが、ゲーミングモニターは使っていませんでした。
なので今でも60hzで開発しています。

painRe:inには60fpsモードが用意されているので60fps以上の環境でも、60fpsに固定してもらえれば快適に遊べると思っていました。
しかし先日、「144hzモニターで60fps固定が機能していない」という報告いを頂きました。
そこでゲーミングモニターを使っている別のユーザーさんに聞いたところ「たしかに60fpsに固定されていない」という返答を頂きました。

この件については現在調査中ですが、そもそも60hzの開発環境ではデバックもまともに出来ないので144hzのモニターを発注しました。
届き次第、この不具合の修正に取り掛かりたいと思いますm( _ _ )m

腹パン

「ステージ1-5」に追加された新しい敵のコンセプトは「腹パン」です。
リョナゲーといえば腹パン、なので原点回帰のような気持ちで
多数の腹パン攻撃を準備しています。

この敵のパンチはコンクリートにクレーターを作る程の威力があります。
それを表現する為に、石の破片や、粉塵、クレーター、画面の揺れといったもので、重厚感のあるハンマーパンチを再現しています。



強力な腹パンを食らうと子宮が飛び出すことがあります

今はまだ見せられませんが、顔面パンチも用意しています。

ですが、問題は凌○イベントです・・・。
「腹パン先行」で作成した敵なので、どのような凌○をさせるべきか・・・全く思いついていません。
普通の凌○はあまり増やしたくないと思っているので・・・
急所攻撃の様なものを凌○イベントとして追加する予定です。

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

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

がぷがぷ工房 2023/05/02 20:41

ライティングの苦悩と進捗

こんばんは、がぷがぷ工房です。

少し前のバージョンから、プレイヤーの頭部に光源を設定していました。
しかしこのライトが多くの場面で違和感をもたらしていたのでVer0.033で削除しました。

ちなみにこの光源は3Dゲームで時々見かける手法で、
キャラクターの周りを明るくしたり、キャラクターの顔を照らすことで影を飛ばし綺麗に見せるという効果があったりします。

私がこのライトを使っていた理由は
ステージのスペキュラ(光沢)を見せる為のものでした。

Unityの光源

Unityの光源には3種類あって
RealTime:リアルタイムに影を描写する(一番重い)
Bake:事前に影を描写する(一番軽い)
Mixed(ShadowMask):近くの影をリアルタイムで描写し、遠くの影は事前に計算する(比較的軽い)
この3種類の特徴から、Bakeで良いんじゃないかと思っていました、とにかく軽いので・・・。
しかしBakeには一つ大きなデメリットがあって、それはスペキュラ(光沢感)が出せないことです。

スペキュラー

スペキュラーはマテリアルに設定された光沢感です。
スペキュラはリアルタイムな光源でしか機能しないので、RealTimeもしくはMixedのライトを使う必要があります。
なので「ゴブリンの洞窟エリア」でMixedライトを利用しています、
洞窟の壁に艶があるだけでかなりクオリティが向上したように見えるのです。
Bakeライト


Mixedライト

ですがやはり重いです・・・、
それと、URPというローエンド向けのレンダリングパイプラインではリアルタイムなライトを同時に8つ描写することしかできません。
洞窟エリアのライトが時々点滅するのはこれが原因です。
Mixedはとても理想的な仕組みではあるのですが、安定性に欠けているという印象を受けます。

ステージ専用ライトの追加

次回の更新では新しくスペキュラを見せる為のライトをテストしたいと思っています。
スペキュラ用ライトOFF


スペキュラ用ライトON

このライトはカメラから正面方向にスポットで照射され
おおよそ100mの範囲にリアルタイム光を当てます。
あくまでステージのみを照らすもので、キャラクターには影響しません。
更にオプションからこのライトのON/OFFと強度を調整出来るようにします。
これによってBakedライトで構成されたステージはよりパフォーマンスが上がり
尚且つ質感を表現することが出来ます。
モバイル端末ではライトをOFFにすることで更にパフォーマンスを上げることも出来ます。

なぜスペキュラーにこだわるのか

「そもそもスペキュラーが必要なのか」という話ですが
painRe:inで使われている3Dmodelのほとんどに、Albedo(色)、Metal(スペキュラー),Normal(おうとつ)が設定されています。
しかしBakedライトを使用した場合、metalとNormalの情報はほぼ機能しない状態になります。


例えばこのスクリーンショットでは、素材の質感はAlbedとEmission(Bloom)と影とAmbient Occlusion(壁の角に強い影を落とす)が見て取れます。
ですがこれは本来求めている絵ではなく
全体にライトを当てることで全く違った絵になります。

ライトがステージを照らしただけで壁がマットな質感になり、エネルギータンクはガラスの様な質感に見えて、足元のタイルの目地はこんもりと浮かび上がり、地面に落ちている血液にも立体感が出たと思います。

このようにUnityではリアルタイムなライトを当てないと多くの情報が失われてしまいます。

まとめ

この問題は結局まだ解決していないのですが・・・
個人的にはMixedライトを多用してコストを上げてリアルな質感を表現するよりも、
Speculer専用のライトを設置して、無理やりにでも誇張された質感を表現した方が良いのかなぁと思っています。
その方が少しだけリッチなゲームにみせかけられるかもしれません。

進捗

現在は「エリア1-5」と「エリア3-3」を同時に勧めています



「エリア3」はロボット系のステージにしたいのですが
アームの操作やロボットの制作でかなり難儀しております・・・。

次回の更新は「エリア3-3」追加と「エリア1-5」のギミック追加になると思います。

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

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

2 3 4 5 6 7 8

記事のタグから探す

月別アーカイブ

記事を検索