読者です 読者をやめる 読者になる 読者になる

ほげたつブログ

Unreal Engine 4 を使ってなんかやります

UE4でデバッグする時に自動的にEscapeキーやPauseキーがバインドされる件への対応方法

C89は残念ながら抽選漏れしました。
まぁこればっかりは仕方ないですね。

まだ応募は開始されてませんが、1月にデジゲー博があるようです。
デジゲー博SPECIAL in 闘会議2016 | デジゲー博
せっかく作っているので、こちらに応募しようかなと考えています。
(締め切りが一ヶ月延びたー!ヤッター!)


今回は小ネタです。

続きを読む

UE4のランチャーをCドライブから退避させて空き領域を確保する

この件の詳細です。
今回はUE4と直接関係するものじゃありません。

続きを読む

WebApi プラグイン ver.2.0 を公開しました

hogetatu.hatenablog.com

上記で開発したWebApiプラグインをバージョンアップしました。

プラグインコンセプト

READMEには書いてありますが、ここにも一応載せておきます。

  • HTTPモジュールのラッパー
  • API単位でクラス定義
  • 通信前、進捗、成功時、失敗時、完了時イベントの追加
  • 通信前、通信後に実行する処理をAPIクラスに複数追加できるフィルタ機能

フィルタ機能とは

フィルタ機能はAPIクラスで通信前後に処理を追加できる機能です。
これにより様々な Web API で使用できる汎用的な作りとなっています。

通信前フィルタでできること

  • 通信タイプ(GET、POST、PUT)を変更
  • リクエストパラメータの追加/削除
  • リクエストパラメータのフォーマット(JSON、MessagePack等)を変更

通信後フィルタでできること

  • レスポンスコードの変更
  • レスポンスのフォーマット(JSON、MessagePack等)を変更
  • レスポンスに対する独自パース処理の記述

バージョンアップでの変更内容

宣言通り、上記の対応を行っています。(そこそこ大きな更新です)
合わせていくつかのバグフィックスも入っています。

また、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を実行することができます。

  • シンプルなGET通信
  • シンプルなPOST通信
  • JSON形式でのPOST通信
  • レスポンスをJSON形式で受け取ってパース
  • 失敗通信

www.youtube.com

今後について

一通り入れたいものは入れたので、後はプロジェクト毎に必要なものを PreFilter or PostFilter で用意すれば様々な条件に対応できるかと思います。
(汎用的なフィルタができたらぜひぜひプルリクをお願いします!)

そのため今後は更新頻度は下がると思いますが、保守対応はできるだけ行っていきます。

何かあったらTwitterで声掛けて下さい。
ほげたつ (@HogeTatu) | Twitter

UE4でカメラがキャラクターに近付き過ぎたら半透明にする

METAL GEAR SOLID V: The Phantom Pain をやってて、キャラクターに近付いたらディザリングで半透明っぽくして背景を見せてあげるのが丁寧だなって思ったのでUE4でやってみました。


MGS5のスクリーンショットです。

f:id:hogetatu:20151015221333p:plain


今回作ってみたものはこんな感じになります。

f:id:hogetatu:20151015223047p:plain

ディザリングとは

詳しくはもんしょさんの記事の冒頭で説明されています。

もんしょの巣穴blog [UE4] とりとめのないマテリアルネタ色々

つまりは不透明な物体を細かくドット抜きすることで、擬似的な半透明を表現する手法ですね。
UE4で採用されている Deferred Rendering では半透明を描画するときのコストが大きくなってしまうため、コストを抑えつつ半透明表現をしたい場合にはとても有用です。

実装方法

まず、グレーマンに使われているマテリアル(M_UE4Man_Body)を開きます。
いくつかのマテリアルファンクションを経由して、最終的に「M_UE4Man_Body」というノードに繋がっているのが確認できますね。
ではディザリングするために OpacityMask を変更する必要があるため、その直前に一つマテリアルファンクションを追加します。

f:id:hogetatu:20151015224001p:plain

やっていることはシンプルで、PixelDepth でピクセル深度を取り、距離によって DitherTemporalAA の AlphaThreshold に 0~1 の間で透明度を渡してあげているだけです。
あとは DitherTemporalAA が上手い感じにディザリングしてくれます。
その結果を OpacityMask を上書きする MatLayerBlend_OverrideOpacityMask に渡しています。

※ちなみにさっきMGS5の動画を見ていたら微妙に実装が違いそう(あっちはキャラクターのディザ抜きが均等にかかる)でした。
まぁこっちの手法の方がマテリアルの変更のみでお手軽感はあるので、完全に同じにしたいならBP側でカメラとアクターの距離をダイナミックパラメータとして入力して使用すればよいかと思います。

こんな感じになりました

youtu.be

パンデミック系ゲーム制作進捗(1)

UE4ぷちコンも終わり、ゲーム制作勢の次はデジゲー博ですかね。
自分はデジゲー博には参加していないので、冬コミに向けてゲームを作ってます。(そもそも抽選に通るかわかりませんが。。)
なので不定期に進捗あげていきます。

作っているゲームについて

コンセプトは決まっていますが、レベルデザインの詳細はまだまだ詰め切れていない段階です。
表題にもありますが、人間がゾンビ化していくパンデミック系のゲームです。
ちょっと頭を使うゲームにする予定です。

進捗動画

youtu.be

まだまだ機能実装段階なのでゲーム性も無く、こまけぇこたぁいいんだよ状態ですね。

解説

まだ目立った事はやってないので、特にこれといったものは無いです。

ゾンビの攻撃対象検索処理を物理でやると重い

大量のゾンビを扱うので、単純に物理でやるとフレームレートが落ちてしまいました。
そこで今回は人間(ゾンビ化したものも含む)がゲーム中に増減する事は無い仕様にしたので、レベル開始時にキャッシュした全ての人間リファレンスをゾンビが保持しています。
ゾンビは保持しているリファレンスから距離と方向を見て攻撃対象を検索します。
細かいし基本だけど、なるべく VectorLength じゃなくて VectorLengthSquared を使うとかそういうのもやってますね。

人間とゾンビがそれとなく他人を迂回しながら移動する

CharacterMovementの「Use RVOAvoidance」にチェックを入れて、目標地点までの移動時に他人がいれば迂回するようにしています。
ただ今回はあまりに人が多かったため、キャラクター同士の当たりは取らず、迂回半径も小さくして被り過ぎないようにするくらいにしています。

Unreal Engine AI Tutorial - 2 - Avoidance - Epic Wiki

バージョン管理は大事

稀によくあるのが渾身のBPを不注意で削除してしまい、Undoもできないといった事態です。
コードベースで作っていた時はエディタ機能で自動バックアップをしていたのですが、UE4だとそういうわけにもいかないので泣きを見ます。
これをやってしまうと「またあれ作るのか。。」みたいになってやる気が一瞬で蒸発するので、個人プロジェクトでもバージョン管理はやりましょう。

まだ beta ですが、ソースコントロールには Git を使用しています。
Git は使い慣れている事もあり、特に問題はない感じです。
ただ、UE4はサイズが大きいバイナリを扱うので、ライセンスがあれば Perforce を使ったほうがいいと思います。

気付いてしまったこと


終わりに

せっかくなんで最近の飯画像を載せておきますね。

f:id:hogetatu:20151007133259j:plain

f:id:hogetatu:20151004122208j:plain

f:id:hogetatu:20151006202847j:plain

UE4で全体の描画クオリティの調整

UE4ぷちコンもついに最終日ですね。
今回も見ていて面白い作品がたくさんあって楽しいです。

描画クオリティは調整できる

ゲームを作っていると、どうしてもパフォーマンスを上げたいという場面があり、そういった時は描画クオリティを調整する事も視野に入れる必要があります。
ツイート内にも貼ってありますが、UE4ではコンフィグの設定で描画クオリティを調整できるようになっています。

docs.unrealengine.com

また、これらの設定はコンソールコマンドでランタイムで変更ができるので、場面によって切り替えることも可能です。
これはShippingでも有効なので、ゲームのコンフィグ画面を作ってユーザーに調整させるということもできます。

実際にやってみる

テストで動画を撮ってみました。
ちなみにこの動画はエピックさんのサンプルを使用していますが、あえて描画負荷を上げるために可能な限り静的ライトを排除しています。

youtu.be

解像度スケールを下げると全体がボヤけたり、アンチエイリアスを下げるとジャギが発生したり、ポストプロセスを切るとアンビエントオクルージョンが無効化されたり、ランタイムで描画クオリティが変更されているのがわかりますね。
この場面では解像度スケールを下げることで描画負荷を下げることができそうです。
(シャドウを調整する事でも負荷は下がりそうですが、そうするならライトの位置は調整する必要がありそうですね。)

具体的なやり方はコンソールコマンドを実行するだけなので、もしBPからやりたい場合は以下の様になります。

f:id:hogetatu:20151004033951j:plain

基本的には描画クオリティを落とさず、静的ライトへの変更やオブジェクトの削減、ポストプロセスの変更等で対応するのが望ましいかと思いますが、どうしてもという時には有効かと思います。

第4回UE4ぷちコン用のゲームを作りました。「死者を葬る光速の✟反撃(クロスカウンター)」

f:id:hogetatu:20150923010717j:plain

ぷちコンの概要に関しては以下をご覧下さい。

historia.co.jp

今回のテーマは「反射」!

反射というテーマはとても難しく、自分が参加するのもうーんな感じがあるためスルーしようかと思っていたのですが、「ぷち」な感じの軽いネタが思い付いたので、さらっと作ってみました。

youtu.be

ゲームの内容は動画をご覧下さい。
購入アセットを使用しているため、プロジェクトまるまる配布はできないのですが、実行ファイルは追って配布する予定です。

動画にあった裏テーマとは

VRで遊ぶためのゲームデザインを意識してみました!

参考にしたのはCEDEC2015のVRコンテンツ制作のお話。

www.4gamer.net


これを受けて、以下の事に気を付けながら制作しました。

カメラ操作をプレイヤーから奪わない

ゾンビと戦うゲームなので、攻撃されたら地面に転がってマウントポジションから食われてゲームオーバー…みたいな事をやりたいなと初めは思っていましたが、今回はカメラ操作は行わず、UI表示とSE、画面全体を赤くするポストエフェクトで対応しました。

2DのUIを使わない

これは制作開始からずいぶん悩んで試行錯誤しましたが、最終的に狭い空間の壁にUI表示を行うという実装で落ち着きました。
ライトの配置を考慮する事で、目を引きやすく、VR表示にしても情報が自然に入ってくるようにできたかと思います。

フレームレートは75fpsを維持できるように

これは基本ですね。
最終的に僕の環境(GTX970)で75fpsは軽く維持できるように調整しました。

終わりに

久々のVR対応ゲーム制作で楽しかったです。
軽いネタだったため、トータルで2日くらいで作ることが出来ました。(UE4すごい!)
作ったゲームをVR酔いしやすい人に遊んでもらったところ、酔いもなく楽しんでもらえたようで何よりでした。

WebAPIプラグインを使ってオンラインランキング対応とかも考えたのですが、今回は時間の都合でここまでにします。
もし時間ができたら配布するまでに対応するかもしれません。しないかもしれません。