ゲーミングNY旅行 - その1
先日ニューヨークに行ったが、その目的の1つにゲーミング聖地巡礼があった。つまりゲームで見知った場所を実際に訪れて比較したり、その場所の雰囲気を感じてきた。この記事でも巡った場所を中心に比較画像(と所感)を挙げていく。比較といっても見た感じの感想程度で本格的な検証ではないことを注記しておく。
ニューヨークはゲームにとどまらず映画なんかの舞台にも取り上げられている。
この理由には単純に有名で人気な土地であるだけでなくニューヨークの主要な場所がマンハッタンという島であることが大きな理由と考えている。
地図を見ればわかるように陸路はいくらかの橋のみであり、例えば未知の細菌が流行するなどの危険な事態に陥った時にとりあえず橋を封鎖することでオープンワールドゲームの世界の端を自然に表現出来る(バットマンのゴッサムシティもニューヨークが元らしくそこらへんが似ている)。
さてゲーミング聖地巡礼ということで今回主として取り上げるニューヨーク(マンハッタン島)が舞台のゲームを列挙する。
- Crysis2
- Division
- Prototype
この3つ以外にもニューヨークが部分的でも舞台になっているゲームは結構多くwikipediaを見ると過去未来含めて100以上はあるようだ。
以下からは土地ごとの比較画像とともに訪れた時に感じた雰囲気や土地事情について述べていく。
日本でいう渋谷的な所なのかとにかく派手で賑やか。巨大な動画広告が至る所にあり、視界には必ず複数の動画広告が動いている不思議な空間である。余談だが写真にはAnthemの広告があり、ここに広告を入れるということは相当お金をかけているように思える。
数多くある広告の中では特にY字に分かれる道の真ん中の広告が印象的で多くのゲームでもそこらへんは確実に表現しようとしてるように見える。また分かれる部分には「NEW YORK POLICE DEPT」と書かれている交番があり、この場所も同様に再現されている(ただし文字は違う。何か権利的な問題なのかも)。2016年のゴーストバスターズでもこの交番は(画面の端になるが)登場した。
最近発売されたジャンプフォースでもタイムズスクエアが出てきた。
実際
↑画像右側にanthemの赤い広告が見える。中央には交番。
↓下2つは上の画像とは反対側の方向。反対側もY字であり、両方向ともY字になっていることがわかる。
とにかく広告が多い。
crysis2
「NEW YORK CITY POLICE」と書かれている。Crysis2の交番は最も雰囲気が似ている。
Prototype
Y字と広告。
「POLICE DEPARTMENT」と書かれている。
Division
「POLICE STATION」と書かれている。
Y字と広告。
遠めだがY字と広告が表現されている。
ニューヨーク公共図書館
ニューヨークには恐らくヨーロッパ風の建物をそのまま残している場所が多く、この図書館もその1つ。3つの入り口とライオンの像が特徴的。場所はタイムズスクエアから徒歩5分圏内であり、観光名所になっている。
ゴーストバスターズでは内部も登場したが、ゲームで内部まで入れるのは少ないように感じる。ゲームとしては扱いにくいためだろうか。
ちなみに図書館の裏はブライアントパークと呼ばれる公園があり、大抵図書館とセットで再現される。
実際
裏側の公園。春手前だから景観は寂しい。
Crysis2
(余談だがcrysis2は公園と図書館の東西の位置関係が逆になっている。グランドセントラル駅を基準に比較するとわかりやすい)
Division
3つの入り口とライオンの像が見える。
セントラルパーク
マンハッタン島の中心あたりにある巨大な公園。広さは大体縦に4km横に0.8kmであるため、南北に横断しようと思うと徒歩で1時間近くかかることになるぐらい広い。
その広さが扱いにくいのかdivisionでは取り上げられず、crysis2では浮遊島になり、prototypeでは簡素な見た目になってる。反対にAitD5ではセントラルパークが主舞台になっている。
公園内には複数の施設やロケーションがあり、有名な場所の1つとしてBethesda Terraceが挙げられる。その場所は映画だとジョンウィックやアベンジャーズで取り上げられた。
実際
見えにくいが階段を下った奥には像があり、周辺が広場になっている。
広場側から階段方面を撮った写真。
Crysis2
Prototype
左側に広がっているのがセントラルパーク。広大なのがわかる。
Alone in the Dark 5
郵便局&マディソンスクエアガーデン
対面に位置しあう2つの建物はdivisionで有名な場所だろう。タイムズスクエアの南西側に位置する。
当たり前の話だが実際の郵便局内部で歩ける場所はそこまで広くない。
マディソンスクエアガーデンではライブ(1席100~600ドル)やバスケ等が毎日のように開催されている(divisionでも内部が広かったのを覚えているのではないだろうか)。会場ということで武道館以上の収容人数を持つ(参照1、参照2)その広さを生かしてかdivisionでは医療施設になっていた。
実際
ゲームで見る以上に柱の存在感が大きかった。
当たり前だが内部で巡れる場所はdivisionに比べたら圧倒的に少ない。右側に映る部分は全て窓口である。
Prototype
Division
divisionの方が高台で撮っている分、縦の比率はやや違うが左後ろの建物まで再現しているのがわかる。
グランドセントラルターミナル
名前の通り巨大な駅であり、観光名所でもある。
内部が広い空間になっており、巨大な敵を登場させやすいのかcrysis2のボス戦や(記憶が正しければ)スーサイドスクワッドのラストに使われた。
外側の2階部分はアベンジャーズでも登場した。外側2階には残念ながら歩道はなく、実際に近づいて写真を撮ることはできなかった。また駅の後部には巨大なビル(やや台形なのと保険会社MetLifeの文字が特徴)があり、セットで再現されることが多い(Crysis2では似たような名前まで付いている)。
実際
南から撮った写真。奥のビルにMetLifeと書かれているのがわかる。
二階部分(橋の上)に歩道はないため、そこから写真は撮れない。またこの写真は南側から撮ったものであり、橋の真下が入り口となる。
内部は広い空間になっている。なおこの写真は西側から撮った(つまり写真右側が先ほどの南口)。ちなみに写真の後ろ側はアップルストアであり、ここの雰囲気にうまく組み込まれているため訪れた際は一目見てみてほしい(写真撮り忘れた)。
実際では1階方面の道が坂道になっているため、2階方面の坂はゆるやかになっている。対してDivisionでは1階方面の道が平らになっているため、2階方面の坂が急になっている。
Crysis2
サムネイル画像だと小さいが後部のビルにmaxLifeと書かれているのがわかる。
倒壊するmaxLife
Prototype
Division
写真からだとわかりにくいが2階方面の坂が急。
とりあえず今回はここまで。旅行前に再度ゲームをプレイしていたが、帰国後に見返すとDivisionはかなり正確だったのがわかる。ほかのゲームでも周辺の建物は使いまわしでも要所は確実に再現しているため、外観を知っていれば比較せずとも分かるようになっている。
なお3月中旬に訪れたものの公園では雪が残っているぐらいかなり寒く、冬はDivisionみたいに雪が積もるだろうということを身をもって体感した(緯度が青森と同じ)。寒い分東京よりも寒さ対策は万全な感じで、目出し帽をかぶっている人も少なくない。そこらへんの屋台でも防寒具(手袋、マフラー)が10~15ドル程度で売られていた。
残りはまた気が向いたらその2として記事にする。
参考サイト
【お知らせ】ゲームを公開しました
お知らせというには今更ですが、ブログの方が残りやすいのでこちらでも。
記事前半でゲーム概要とか色々、後半で用いたUE4機能の話を色々。
ゲーム、MOD、アート等、SUPERHOPにインスパイアされた作品を作ろうというイベント(ハッシュタグ #MAKEITSUPERHOT)にゲームSUPERHOPを公開しました。
元のSUPERHOTのパズルっぽさを汲み、限られた弾丸でスローモと跳弾を駆使して、レベル内の敵を倒すというパズルとFPSを合わせたゲームです。
PVはこちら。
PCGamerにも取り上げてもらいました。嬉しい!
用いたUE4の機能をいくつかピックアップします。
時間を遅くしつつ、プレイヤーの速度を上げるため、下記の二つを用いました。標準が1.0です。
- Set Global Time Dilation
- CustomTimeDilation
AIM時に表示される赤い線はBeamParticleを用いています。始めと終わりのLocationをBPから指定することで、間を結んでくれる便利なParticleです。
また赤い線の反射ベクトルは"入射のベクトル"と"TraceノードのNormalに手を加えたもの"を乗算等して出しています。現状だと斜めの壁に対応できないものの、sinとかcosが出てきそうだから手を付けていません。
半透明になるマテリアルにはBlendMode→translucentではなく、Maskedにした後DithertemporalAAノードを使って実現しています。通常は不透明だけど動的に透明にする場合はこのノードの方がお勧めです。translucentだと不透明時も影がなく違和感あるので。
AI Move Toについて色々
備忘録らしくちょこっとした内容を。
AI Move Toというノードについて色々。
AIのキャラをスポーンさせる際には従来のSpawn Actorとは別の手順を踏む必要がある。その手順を踏まないとAI Move Toが使えない。
詳細はalwei様の記事にまとまっている。
AI Move Toの4つのoutputピンについて。1つ目の無名ピンは従来のピンと同様に、AI Move Toを実行したら出力される。
2つ目と3つ目のピンは出力されるまで一定の時間がかかる。2つ目は移動を成功したとき、3つ目は何かしらの問題(NavMesh範囲外とか)で目的地に移動不可と判断したときに出力される。例えば3つ目のOn Failピンと入力ピンをつなげると成功するまで実行することができる(もちろん直の繋ぎはマズイ)。
4つ目のMovement Resultは移動結果を詳細に参照できる。3つ目のOn Failピンではただの失敗だが、このピンでは道がないとか、ブロックされたとか、新しいAI Move Toが呼び出されて破棄されたとかの判断ができる。
AI Move Toで行先を指定する方法であるDestination指定とActor指定の違いについて。
基本的にはこれら2つは行先の座標を指定するが、いくらか違いがある。
1つ目に、再度ノードを実行しなくとも、行先の座標が変化する点がある。Destination指定では当然指定した座標に移動して、移動したら終わりになる。
Actor指定の場合、指定されたActorが移動したらAI Move Toで実行開始時の行先座標が更新される。つまりAIは目的のActorにたどり着くまで、Actorを追い続ける。ある種Homingに似ている。
ただし、目的のActorに着いたらAI Move Toは実行を終了するため、終了後にActorが動いてもAIは再度ノードを実行しない限り動かない。
2つ目に、AI Move Toを再度実行したときに、経路計算に違いがありそうという点がある。端的に言えばPawn指定の時の方が経路計算が賢い。
違いが浮き彫りになるのはNav Link Proxy(NavMeshの範囲外で通れる通路を指定できる)を使った時。場合によっては用意したNLPが通るべき中間点として扱われる。
中間点を通った後にAI Move Toを再度呼び出した場合、Destination指定では中間点を通ったことを忘れるため再度通ろうとする。その結果中間点で止まるAIが出来る。
画像上中央の円柱"PointLinks[0].Left"で止まる。
1つ目の話を考慮して、Pawn指定にしておけば困らないのではあるが、どうしてもDestination指定で頻繁にノード呼び出しをしたいとき(例えば"Pawn"では無く"音"に引き寄せられるAI)にこの問題に衝突するだろう。回避方法としては目的座標に空のPawnを生成する方法が挙げられる(これはこれで空のPawnのDestroyについて手間が増える)。
ぷちコンで作ったゲームを公開しよう
ぷちコン第4回も終わり、UnrealFesも終わり、ひと段落つきました。
ぷちコンも4回目ということでもしかしたらUE4でゲームを3,4個作った人もいるかと思います。そこでゲームを公開してみませんか?という意図で記事を書きました。ゲームを動画で終わらせてしまうのはもったいないです。公開してる人もっと増えて
続きを読むUnreal C++でのプログラミング環境についての私的メモ
Event for Diverse Game Engineersでのalwei(@aizen76)さんによる「Unreal Engine 4とUnreal C++でのプログラミング環境について」のメモを載せます。
先に断わっておくと僕はC++どころかプログラミング全般に疎いことと、(メモを残すには)話のペースが早かったため、至らないところが多いと思います。スライドが公開されているので先にそちらを参照してください。
以下、(実演等)スライドに書いていない部分を意識したメモ
○何故C++を使うのか
・パフォーマンス。BPに比べて、何倍の差が出る可能性もありうる。(聞き間違いでなければ十数倍)
・エンジンやエディター拡張。エンジンはフリーで全て読める。自分で拡張したものをgitに上げると採用されることも。
・外部ライブラリやSDKを動かしたい。
・独自デバイスにつなぎたい。例:Kinect
○Unreal C++は素晴らしい。Unreal C++ is Awesome!
・C++を初心者でも使いやすくし、独自の拡張でUnreal Editorとの親和性を高めている。
○ビルドシステム
・Unreal Build Toolというものが全体の管理をしている。
・Mono C#が組み込まれている。管理やリンクなど、複雑な部分まで組み込まれているという。
最終的な情報をVSやXcodeに渡すことによってビルドを完了させている。
○比較的モダンC++
・近年のC++の特徴は大体取り組んでいる。
・ライブラリのコンテナはrange based forに対応。
・あくまでもC++を簡単に扱えるようにするためにC++の難解部分の仕様は避けられている。例:Template Programming
○コーディングルール
・公式ドキュメントにある。(コーディング標準 | Unreal Engine)
・UE4のプロジェクトはこれで統一すれば混乱は少ない。
・ルール自体はC#の標準にかなり近い
・ルールの例:中括弧の改行
○スタンダードライブラリー
・C++のスタンダードライブラリーは使わない。ただし考え方は近い。
・ゲームに特化したライブラリーがある。
・無理にスタンダードライブラリーは使わない方がいい
○コンテナ
・約50種類ある。標準より圧倒的に多い。
・例:std::vector→TArray
○自動化されたコード生成環境
・Unreal Editorが自動で行う。例:新規Actorに名前を付ける。
・追加も楽でミスが少ない。
○完全なメモリー管理とGC搭載
・ガベージコレクション有。
・UObjectを継承したクラスであれば、自動的にUE4のガベージコレクタへ登録
○メモリーの可視化
・スマホ上でも出来る(4本指→コンソールコマンド)
○スマートポインタ
・UObjectでないものはGC対象にならないのでスマートポインタを使う。
ここからはよりUnrealらしい話
○メタ情報
・Unreal C++にとってメタ情報は無くてはならないコア機能。
・BPとの完全な連携も可能
・C++の内容がBPへ追加される。
○ホットリロード
・C++では実行中にコードの書き換え可能
・冗談ではない。
・モジュール化によって、書き換えた場所の部分的な読み直しが可能。
※ここで実演アリ surface Proで動かした。オンボードだが結構サクサク動くとのこと。
・ファイル?→新規C++の追加→新規Actorに名前を付ける。これでC++で書けるアクターを生成。
・C++がエディター上でコンパイルされる。VSでは何もしていない。
・Unrealでもヘッダーの書き換えは時間がかかるので避けた方がいい。
・実行前にマネキンのアクターをレベルに追加した。
・コンパイル後にマネキンにコードを書いて、コンパイルせずに実行(ゲームを動かす)。
・そして実行→コンパイルで、実行中のまま変更が適用された。
・さらに実行中のまま、マネキンにコード追加。コンパイルに失敗した。
・エラー文をダブルクリックすれば問題のコードに飛べる。
・コードで追加した変数はBPにも反映されている。
・UE_LOGによって、ログに文字が表示された。いわゆるPrint
・VSを立ち上げずに、エディター上で書くことも出来る。書きにくいので非推奨。
・エディター上の変数等をダブルクリックするとVSのページに飛べる。
UE4無料化
なんかUE4が無料化されました。ちょっと僕も自分で何いっているか分からないです。
https://www.unrealengine.com/ja/blog/ue4-is-free
ここではUE4が無料化されると...
・ゲーム以外の用途(VRなどの映像作品とか)では完全無料。
・ゲーム用途だと四半期3000ドル越えで5%支払い
→同人ゲームならまず問題ない
・FortniteやUTが無料プレイできる。
・ゲームエンジンをとりあえず触って見たい人にUnity以外の選択肢が増える。(CryEngine?)
とかとか
もうすぐ使い始めてから一年経ちます。Unityをちょっと触って諦めた身としてはかなり触りやすいです。公式のサンプルがとても多いため必要に応じた学習が容易で、ブループリントはもちろん色々な機能がすんなり使えます。
取り合えず触るならUnityではなくUE4でもいいんですよ?軽量化すればノートでも動くかもですよ?
UE4勉強会3-マテリアルの私的まとめ
UE4マテリアルの勉強会に行ってきました。僕自身はマテリアルに少ししか触れていないためそういった視点からのまとめになると思います。つまり深いところはまとめきれていないです。
もんしょさんの公演
公演自体分かりやすいものでしたがマテリアルについては本人のブログにも色々と画像つきで載っているのでそちらもお勧めします。
もんしょの巣穴blog [UE4] マテリアルを作成してみる
ヒストリアさんのリンク集のマテリアル項目にもまとまっています。
[UE4] お役立ちリンク&チュートリアル集 | historia Inc - 株式会社ヒストリア
マテリアルエディタで主に使うのは
・マテリアル入力
・左下の詳細の二つ。まず
○マテリアル入力について
・基本色--ライトの影響を排除した色
・メタリック--金属感
・スペキュラ--テカり、デフォルトの値 0.5が推奨されている。(Unity5だとアルベド、リフレクタンスあたり参照)
・ラフネス--粗さ。スペキュラよりはこちらを使う。金属の傷とかにも
・法線--デフォルトではローカル空間(タンジェント空間?)。ブレンドする際は統一すること。
・エミッシヴ--自己発色光。ライト処理には影響しないはずだがUE4.6でスタティックライト処理は少し変わった?
・オパシティ--不透明度。エディタ画面左下の詳細⇒Blend ModeがTranslucentかAddictiveの時に有効。半透明は処理が重くなるので注意
・オパシティマスク--描画するかしないか?半透明はない? Blend ModeをMaskedの時に有効。例えば一部が消えていく死に方も出来、半透明になる死に方より軽くて済む
・ワールド位置オフセット--ここの値が頂点座標に加算される。見た目の大小を変えられる。ただしコリジョンは変化しない。スカイリム(ゲーム)でやたらでかいけど当たり判定が小さいMODのアレ。
○エディタ左下の詳細
Material Domain マテリアルの使用用途で変わる。
・Surface--通常はこれ。パーティクルもこれ
・Deferred Decal--デカールに使う。デカールとは銃痕や血のり、ペイントの後など貼り付けるもの。
・Light Function--ライト関数として使う。文字を表示するスポットライトとか
・Post Process--ポストプロセスに使う
他にも便利な機能について
○マテリアルインタスタンス(重要)
・通常のマテリアル編集では値を変えるたびに処理(コンパイル)を待つ必要があるので面倒。⇒マテリアルインスタンスならすぐ変えられる
・作り方--マテリアルを右クリック⇒マテリアルインスタンスを作成
・使い方(パラメーターを作る)--マテリアルエディタ上のノードをクリック⇒パラメーターに変換
○動的マテリアル
リアルタイム(ゲーム中)でマテリアルを変更したい場合に使う。BP処理。
BPのノードがName処理なのでスペルミスやパラメーター名を変えた時の変更が面倒。こちらもまとまっています。もんしょの巣穴blog [UE4] Dynamic Material Instanceを使う
○マテリアル関数
マテリアルを関数として一まとめにして管理する。例えば金属的なマテリアルと錆び的なマテリアルで別々の関数を作って、後で混ぜる使い方が出来る。MatLayerBlend_Simpleノードを使用かつ詳細のUseMaterialAttributeにチェック。
さらに便利機能
・BP同様マテリアルにもショートカット。右の一覧(パレット)の右側に英数字が割り振ってある。
・コンテンツブラウザのスタティックメッシュをクリック→マテリアルエディタ左上のマテリアルプレビューの右上のティーポッドをクリックすることでプレビューのメッシュを変えられる。
・ノードを右クリック→"ノードのプレビューを開始"を押すことで途中の処理までをプレビューできる。
○まとめ
・ラフネスと法線が重要
・マテリアルインスタンスがお勧め
・よく使う処理は関数に
Wiseさんの公演
理解出来ていないのでパスします。フォトリアルの機材は高いけど何とか手に入れられる?
DeNAさんの公演
スマホゲームとUE4について。
・マテリアルのShadingModelは制限あり。
・テクスチャは2048*2048まで。2の累乗の正方形がメモリを喰わなくて良い。
・広告もBPでサポート(Show Ad Banner)
・アセットは3D Models for Professionals :: TurboSquidから
・アプリのUDKリモートから入力のみスマホ端末を使うことも可能。つまり一々データを移す必要がない。
・ランキング用のBPも対応。TappyChikenサンプルに入っている?
下田さんの公演
・HLSLからシェーダーのコードを見れる
○マテリアルインスタンスはお勧め
- 共有しやすい
- リアルタイムで編集しやすい
- 使用メモリを減らせる?
○ワールド位置オフセットについて
・マテリアルに3D的な動きを出せる
・ワールド位置に応じた入力をするWorldPositionノードと組み合わせると良いかも。草木のゆれなんかはこれ。
○ペイント機能
これ面白かったです。
・予めVertexColorノードをAdd、Multiなどで噛ませます。
・レベルエディタ画面の左上のモードから二番目ペイントを使うことでVertexColorから入力できます。
・二つのテクスチャをLerpのA、Bにつなぎ、LerpのAlphaをVertexColorのどれかと繋いでペイントすればテクスチャをペイントすることも出来る。例えば岩に苔を浮かばせる等
・VertexColorではRGBAはそれぞれ対等な四つの変数として扱われます。Rだから赤色とかではないです。
・こちらも参照
UE4 メッシュペイントでメッシュにお手軽ペインティング - Let's Enjoy Unreal Engine
○その他機能
・オパシティマスクとWorldPositonを組み合わせて、壁を丸く削るような演出もできる。
・Tessellationでメッシュの角を削れる
・Alt+F8でシェーダー複雑度を見れる 緑⇔赤
・DetailTexturingで近寄った際の細かさを設定できる
・PostProcessのSceneColorから色調補正できる。
個人的な感想
どれも分かりやすくありがたかったです。特に触れていない部分だったので新鮮でした。
欲を言えば、壁を削る演出やUE4フェスのFortNiteのようなゲーム演出での使用例を見たかったです。
間違い等があればブログコメント等で指摘してもらえると幸いです。