UE4 - Actorレプリケーションのパケットをキャプチャしてみる
こちらは「UE4 Advent Calendar 其の弐」2日目の記事です。
Unreal Engine 4 (UE4) 其の弐 Advent Calendar 2015 - Qiita
今回のお題は「Actorレプリケーションのパケットをキャプチャしてみる」です。
続きを読むUE4 - NavigationMeshのランタイムビルドにかかるコストを減らす
デジゲー博はとても楽しかったです。
次は出展者として参加したいですねぇ。
今回のネタは「ゲーム中に状態が変化して NavigationMesh のビルドにかかる時間がボトルネックになるから対処しよう」です。
アンサーハブでも嘆いている人がいますね。
Navigation Mesh Rebuild At Runtime causing 20-40 fps loss - UE4 AnswerHub
続きを読むUE4でデバッグする時に自動的にEscapeキーやPauseキーがバインドされる件への対応方法
C89は残念ながら抽選漏れしました。
まぁこればっかりは仕方ないですね。
まだ応募は開始されてませんが、1月にデジゲー博があるようです。
デジゲー博SPECIAL in 闘会議2016 | デジゲー博
せっかく作っているので、こちらに応募しようかなと考えています。
(締め切りが一ヶ月延びたー!ヤッター!)
今回は小ネタです。
続きを読むUE4のランチャーをCドライブから退避させて空き領域を確保する
会社PCのCドライブが枯渇しててつらたん。原因はUE4ランチャーのキャッシュ済みアセット(60GB以上)。ランチャーごとDドライブに待避してシンボリックリンクで繋げたら動作したので完全勝利だ。
— ほげたつ (@HogeTatu) October 26, 2015
この件の詳細です。
今回はUE4と直接関係するものじゃありません。
WebApi プラグイン ver.2.0 を公開しました
上記で開発したWebApiプラグインをバージョンアップしました。
プラグインコンセプト
READMEには書いてありますが、ここにも一応載せておきます。
フィルタ機能とは
フィルタ機能はAPIクラスで通信前後に処理を追加できる機能です。
これにより様々な Web API で使用できる汎用的な作りとなっています。
通信前フィルタでできること
- 通信タイプ(GET、POST、PUT)を変更
- リクエストパラメータの追加/削除
- リクエストパラメータのフォーマット(JSON、MessagePack等)を変更
通信後フィルタでできること
- レスポンスコードの変更
- レスポンスのフォーマット(JSON、MessagePack等)を変更
- レスポンスに対する独自パース処理の記述
バージョンアップでの変更内容
WebApiプラグインは
・リクエスト/レスポンスに対して関連するインスタンスを引数に受け取る変更
・form形式のPOST通信対応
・デモプロジェクト整備
は予定にあります。
— ほげたつ (@HogeTatu) October 18, 2015
宣言通り、上記の対応を行っています。(そこそこ大きな更新です)
合わせていくつかのバグフィックスも入っています。
また、READMEも更新しました。
日本語
UE4Plugin_WebApi/README.jp.md at master · HogeTatu/UE4Plugin_WebApi · GitHub
英語
UE4Plugin_WebApi/README.md at master · HogeTatu/UE4Plugin_WebApi · GitHub
デモプロジェクトに関して
ようやく整備できました。
リポジトリに含まれる WebApiDemo がデモプロジェクトです。
「UE4_WebApi/WebApi」を「UE4_WebApi/WebApiDemo/Plugins」にコピーし、VisualStudioでビルド後、各デモAPIを実行することができます。
今後について
一通り入れたいものは入れたので、後はプロジェクト毎に必要なものを PreFilter or PostFilter で用意すれば様々な条件に対応できるかと思います。
(汎用的なフィルタができたらぜひぜひプルリクをお願いします!)
そのため今後は更新頻度は下がると思いますが、保守対応はできるだけ行っていきます。
何かあったらTwitterで声掛けて下さい。
ほげたつ (@HogeTatu) | Twitter
UE4でカメラがキャラクターに近付き過ぎたら半透明にする
METAL GEAR SOLID V: The Phantom Pain をやってて、キャラクターに近付いたらディザリングで半透明っぽくして背景を見せてあげるのが丁寧だなって思ったのでUE4でやってみました。
MGS5のスクリーンショットです。
今回作ってみたものはこんな感じになります。
ディザリングとは
詳しくはもんしょさんの記事の冒頭で説明されています。
もんしょの巣穴blog [UE4] とりとめのないマテリアルネタ色々
つまりは不透明な物体を細かくドット抜きすることで、擬似的な半透明を表現する手法ですね。
UE4で採用されている Deferred Rendering では半透明を描画するときのコストが大きくなってしまうため、コストを抑えつつ半透明表現をしたい場合にはとても有用です。
実装方法
まず、グレーマンに使われているマテリアル(M_UE4Man_Body)を開きます。
いくつかのマテリアルファンクションを経由して、最終的に「M_UE4Man_Body」というノードに繋がっているのが確認できますね。
ではディザリングするために OpacityMask を変更する必要があるため、その直前に一つマテリアルファンクションを追加します。
やっていることはシンプルで、PixelDepth でピクセル深度を取り、距離によって DitherTemporalAA の AlphaThreshold に 0~1 の間で透明度を渡してあげているだけです。
あとは DitherTemporalAA が上手い感じにディザリングしてくれます。
その結果を OpacityMask を上書きする MatLayerBlend_OverrideOpacityMask に渡しています。
※ちなみにさっきMGS5の動画を見ていたら微妙に実装が違いそう(あっちはキャラクターのディザ抜きが均等にかかる)でした。
まぁこっちの手法の方がマテリアルの変更のみでお手軽感はあるので、完全に同じにしたいならBP側でカメラとアクターの距離をダイナミックパラメータとして入力して使用すればよいかと思います。
こんな感じになりました
パンデミック系ゲーム制作進捗(1)
UE4ぷちコンも終わり、ゲーム制作勢の次はデジゲー博ですかね。
自分はデジゲー博には参加していないので、冬コミに向けてゲームを作ってます。(そもそも抽選に通るかわかりませんが。。)
なので不定期に進捗あげていきます。
作っているゲームについて
コンセプトは決まっていますが、レベルデザインの詳細はまだまだ詰め切れていない段階です。
表題にもありますが、人間がゾンビ化していくパンデミック系のゲームです。
ちょっと頭を使うゲームにする予定です。
解説
まだ目立った事はやってないので、特にこれといったものは無いです。
ゾンビの攻撃対象検索処理を物理でやると重い
大量のゾンビを扱うので、単純に物理でやるとフレームレートが落ちてしまいました。
そこで今回は人間(ゾンビ化したものも含む)がゲーム中に増減する事は無い仕様にしたので、レベル開始時にキャッシュした全ての人間リファレンスをゾンビが保持しています。
ゾンビは保持しているリファレンスから距離と方向を見て攻撃対象を検索します。
細かいし基本だけど、なるべく VectorLength じゃなくて VectorLengthSquared を使うとかそういうのもやってますね。
人間とゾンビがそれとなく他人を迂回しながら移動する
CharacterMovementの「Use RVOAvoidance」にチェックを入れて、目標地点までの移動時に他人がいれば迂回するようにしています。
ただ今回はあまりに人が多かったため、キャラクター同士の当たりは取らず、迂回半径も小さくして被り過ぎないようにするくらいにしています。
スケルタルメッシュから炎を出すには
バージョン管理は大事
稀によくあるのが渾身のBPを不注意で削除してしまい、Undoもできないといった事態です。
コードベースで作っていた時はエディタ機能で自動バックアップをしていたのですが、UE4だとそういうわけにもいかないので泣きを見ます。
これをやってしまうと「またあれ作るのか。。」みたいになってやる気が一瞬で蒸発するので、個人プロジェクトでもバージョン管理はやりましょう。
まだ beta ですが、ソースコントロールには Git を使用しています。
Git は使い慣れている事もあり、特に問題はない感じです。
ただ、UE4はサイズが大きいバイナリを扱うので、ライセンスがあれば Perforce を使ったほうがいいと思います。
終わりに
せっかくなんで最近の飯画像を載せておきますね。