妹でもわかるUnrealEngine4

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

UNREAL FEST WEST 2018 の電車でGO!! 動画が面白い

youtu.be

www.youtube.com

www.youtube.com

www.youtube.com

www.youtube.com

「先日のアンリアルフェスの動画を見てるんだけど、これはなかなか勉強になるよ……」

妹「例えば?」

「まだ全部は見れてないんだけど、たとえば電車でGO!! の動画とか凄いよ。お役立ち情報いっぱい。ウィジェットに文字を表示する時にカクツキが出にくくする方法とか。エンジン改造しないとできない部分もあるけど」

妹「それはできないやつなんでは……」

「いやでも出来る部分も多いよ。あとゲームを4画面で動かすのとかね。正面と左右と、あと手前にUI用のも。それぞれ寸法が違うから、つながって見えるように計算してるとことか凄かった」

妹「4画面のゲームって作れるの?」

「そういう機能はないんじゃと思ってたんだけど、見た感じでは原理的には作れそうだった。フルスクリーンにせずにわざと大っきいウィンドウにして画面をまたぐようにする。これはお絵かきソフトとかでもそうだし、UE4のエディタでもそうなんだけど、最大化ボタン押すより手動の方が大きく出来るから」

妹「でも画面が足りなかったらはみ出しちゃうんでは」

アーケードゲームだからウィンドウの並び順とか固定できてるんで、普通のパソコン用ゲームだと各自でディスプレイの並べ方も大きさも数も違うから、この方法だと厳しいかも。自分専用とかならまったく問題ない」

denshadego.net

「ただ1つ問題があって……この筐体が近所にないというか、長崎には置いてないみたいんだよね……」

TEXT型のCONTAINSの不思議な仕様

配列作成時の無限ループについて - UE4 AnswerHub

「昨日ちょっと体調が悪かったからAnswerHub見てたら、Text型の配列のCONTAINSが上手く動かないという話を見かけて、実際試したら動かなかったのでText型だとまずいってのはわかったんだけど、何か気になるので更に追加で調べてみた」

f:id:una_unagi:20180522225753p:plain
どちらもIntegerからのToText

「これが問題を再現するためのコードなんだけど、明らかに違うTextが生成されてるし、==で比較すればfalseなのに、なぜかCONTAINSで調べるとtrueになる」

妹「CONTAINSってなんだっけ?」

「配列の中にそれがあるかどうか、あればtrueを返すノードなんだけど、無いのにtrueを返してしまう。そして実験するとさらなる問題がわかってきた」

f:id:una_unagi:20180522230211p:plain
どちらもStringからのToText

「StringからToTextしても同じ結果になる。ただし、StringからのToTextと、IntegerからのToTextだったら別と判定するらしく」

f:id:una_unagi:20180523215204p:plain
StringからのToTextと、IntegerからのToTextで比較

「こうすると、同じ文字列なのにCONTAINSの結果はfalseになる。この実験の結果わかることはText型を生成するノードが同じならCONTAINS的に同じと判断されるらしい」

f:id:una_unagi:20180522230929p:plain
MakeLiteralTextで作ったテキストは正常に判断される

api.unrealengine.com

Unreal Engine | FText

「どうしてこういうややこしいことになってるかというのは、たぶんText型の性質の問題なんだろうけど、具体的なところはよくわからない。CONTAINS以外にもそういう変な挙動をする部分があるかも」

妹「バグってことはないの?」

「たぶん違うと思う」

妹「でもそうすると、どう気をつけたらいいのか。ウィジェットとかTextじゃないと駄目なやつ結構あるでしょ?」

文字が同じかどうかということについてText型をあてにしないということかなあ。そういう場合はStringでやる。実際問題としてText型を使うのって翻訳する時に便利だからで、でも翻訳することで違う文字になったり、同じ文字になったりする可能性もある。表示しない部分には翻訳が必要ないからStringでいい」

Paragonキャラのポリゴン数

「一昨日やってたUnreal Japan Streamの録画がもう見れるようになってた」

www.youtube.com

「前半部分とか見逃したから確認をしてたんだけど、そこでポリゴン数の話があった。ポリゴン数をどれぐらいにすればいいかっていう」

妹「あー、それ知りたい」

「……どれぐらいにすればいいかっていうのは難しいんだけど、PS4で動くParagonのキャラはこれぐらいですよ、という目安にはなると」

妹「PS4がどれぐらいかわからん……わたしのパソコンはいったい……」

「たしか妹が使ってるやつはGTX750で、PS4のはRadeonHD 7870じゃないかと言われてるから、ポリゴン性能はほぼ同じかなあ」

妹「意外と高性能だった!」

「ただPS4専用にカスタマイズしてあるらしいし、CPUとか色々前提が違うから、もうちょっと下になるとは思うけど」

妹「負けてた……」

f:id:una_unagi:20180519231917p:plain

「で、実際に見てみると、Shinbiというキャラは6万ポリゴンほどだった。Triangleって書いてるから三角ポリゴン換算だと思うけど」

妹「6万ポリゴン……は多いの?」

「同時に出るキャラ数とかでも違うだろうし……だからこれぐらいでというのがむずかしいんだろうけど」

f:id:una_unagi:20180519235006p:plain

「ちなみに前に妹が作ったとんびは、最終的に1万ポリゴンの状態になってた。見た目が維持出来る範囲でギリギリまで下げた感じだけど、あのゲームの場合とんび以外にキャラがいるわけでもないし、もっと多くてもよかったのかも」

f:id:una_unagi:20180519235226p:plain

「ちなみにShinbiにはいくつかメッシュが設定されてて、カメラからずっと遠くにいくと5000ポリゴンのモデルが表示される設定」

妹「ああ……減らすとこうなっちゃうよね……」

f:id:una_unagi:20180519235240p:plain

「遠くで見ればわからない。いくら遠くでちっちゃく映ってるだけでも、最低5000ポリゴン分の処理が必要だということでもあるけど」

妹「人間だとやっぱりいっぱいあった方がいいのかな」

「他の例でいうと、最近流行ってるVRChatというアプリがあって、これはアバターを自作できるんだけど、2万ポリゴン以内という制限があるらしい。同時に表示されrう人数が多かったり、VRで表示する時の負荷の問題かなと思うけど」