AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

VRモード実験

f:id:yasu9780:20170311194916p:plain

VRモードを実験してみた。
カメラを二つにして左右視差を作って表示。カメラ視点移動を右アナログパッドから重力センサーに変更。

スマホ実機でも動かしてみたけど、さほどFPSは落ちませんね。ほぼ変わらないかも。
2画面だけど表示領域は増えてないし。50体のキャラの描画に負荷がかかってるからカメラ二つになっても大差ない感じか。
SkinnedMeshやAnimatorの計算処理は、最後の描画カメラが増えてもいっしょだしね。

視線変更できるのは面白いけど、ぐるぐる回らないいけないので、右パッドでも視線が回るようにしたい。
あと、上を見上げるとカメラが地面にめり込んで、Occlusionで、部屋自体が非表示になったり。
カメラの操作処理もだいぶ手を入れないいけない。
FPSならこのへんが簡単なんだけど、TPSはいろいろ面倒だねえ(´・ω・`)



GoolgeVRも試してみたけど、色々仕様が複雑だし、視線入力を使わないんだなら、わざわざ使う必要ないかなと思う。
別に樽上に歪ませる意味がないでしょう。
これが、視野角を向上させるために特殊なレンズを搭載したヘッドセットを用意して、レンズで歪んだ周辺画像が元の画像にになるように
あらかじめ周辺部を歪ませておく。みたいなことをやるなら、大いに意味があると思うんだけど。
っていうか、こういう処理をやるCardboardを作ってほしい。
どこかの研究所のレベルではやっている記事を見たけど。
オキュラスとかHTC VIVEはやってるんだろうけど。


要するに、視野角を向上させる特殊レンズ+レンズ歪みを補正してあらかじめ歪ませるグラフィックライブラリの二つがあれば実現できるだよね。
レンズは100円ショップで調達できないから、量産効果が無いと安くならないかもしれないけど。

オーバーロード二期制作決定!

news.nicovideo.jp

キタ━━━━(゚∀゚)━━━━!!

素直に嬉しい。

そうだ、映画公開してたんだ。明日にでも見に行くかな?

原作小説も凄く面白くて全巻読んでるんですが、ただただ、最新作のドワーフの洞窟襲撃の話は、今までと比較してちょっと面白さダウンしたかな?
と個人的に感じて、すこし熱が冷めてしまった。


圧倒的に強い主人公と部下たちで、完全にインフレした状況で面白い話を展開しているのは凄い作品と思うんだけど、
オーバーロードで不満な点は、
プレアデスの活躍シーンがいまいち少ない。キャラが多すぎるって話もあるかもしれないけど、多すぎるキャラに対して、見せ場を作らないといけないから
見せ場担当以外は、ばっさり出番が無くなるんですよね。
ちなみにWEB公開版はまだ読んでません。

二期は、トカゲ編に何話割り当てるのかが問題ですね。
公式の設定資料集のインタビューだと監督はトカゲ編をドキュメンタリータッチでがっつり描きたいみたいだけど。



公開映画館は都内で二つか( ゚Д゚)

角川シネマ新宿	
池袋シネマ・ロサ

どっちも行ったことが無い。
日舞台挨拶あったのか。全然チェックしてなかった。
RWBYの映画は頑張って舞台挨拶ticket取ったんだけど。



オーバーロード好きだけど、岡本倫も好きだから、エルフェンリートとか極黒のブリュンヒルデとかも好きなんですよ。
共通するのは、「誰も死なないドラマに緊張感はない」
死ぬときは死ぬ。それが大事。


www.youtube.com

www.youtube.com

XBOX360有線コントローラー

なぜかFreetelReiで使えなかった(´・ω・`)
USB OTGには対応してるはずなんだけど、四つの認証ボタンが点滅したまま。

手持ちのL-G04EはUSBホスト機能がないから買ったのになあ。
Reiで、HDDとかUSBメモリとかは問題はなく使えるので、USBホスト機能はあるとは思うんだけど。


XBOX360パッドはPCでは問題なく動くので、PC用にして、GameSirのパッドをスマホに刺してデバッグしましょう。


ASUSタブレットXBOX360コントローラー使えた。
やっぱりメジャーメーカーが無難だな。
Reiじゃなくて、Asusスマホ買っておけば良かったなあ
ただ、このASUSタブレットって重力センサーをなぜか搭載してないんだよな。

blg.freetel.jp

OTG(USBホスト機能)に対応している端末はありますか。

KIWAMI2、KIWAMI、RAIJIN、REI、Priori 4、Priori3Sが対応しています。

OTGcheckerってアプリで確認したら、Android6.0自体はOTGのAPI持ってるけど、機械が対応してないって結果が出たんですけど?
本当にREIはOTG対応してますかね?
Freetelはちょっと信用できないな。
事前にOTG対応を確認して買ったのに、がっかりですよ。

欧米人はシミュレーターが好きだからオープンワールドゲームを好む

play.google.com

このバス運転手のシミュレーターゲームは、ダウンロード数 500万から1000万ですよ。
はじめ桁を間違ったかと思った。

シミュレーターという分野は海外をターゲットに考えれば、ものすごい可能性があると思う。

play.google.com
同じ会社の消防車は100~500万ダウンロード


単なるレースゲームなんていくらでもあるし、もう作っても仕方がないと思うけど、仕事する車と考えると面白い素材はいくらでもある。
A列車で行こうみたいな方向は、シムシティを電車に特化したものだと思うけど、
上記のバス運転手の場合、マクロな視点ではなく、運転手としてのミクロ視点に面白さがあると思う。
その面白さは、実際に乗客が乗ってくる様子だったり、乗客を運んで、客が満足することにたいする、仕事としての満足感。

むかし、プレイステーションのシンプルシリーズでTAXIゲーム買ったけど、なんにも面白くなかったんですよね。
タクシー運転手としての楽しさが何も表現されてなかった。
sinplelove.jp


シミュレーターという分野は、決まったことをやらされるのではなく、そこに必要なのは計算された自由度だと思う。
そして、欧米人はなぜかそれが好きなんだと思う。
だから、GTAみたいなオープンワールドなゲームが好き。
日本人だと、明確なミッションがあって、ぎちぎちにやることが決まってないと、「何が面白いのか解らない」状態になってしまう。
この違いはどこからくるのか分からないけど、
一般に日本人は制限された環境で工夫するのが好きで、優れている。



Twitterが日本で特に普及しているのは、限られた文字数で表現する限られた場が、日本人に向いているんだと思う。
それは俳句や短歌などの文化とリンクしていると思う。
だけど、現代人が俳句や短歌を日ごろやっているわけではない。
まず、限定された環境で工夫するという方向の能力がまずあって、それが表現されたものとして、かつての短歌や俳句。現在のTwitterなんだろう。


だから、自由度の高い世界で、なんでもできる楽しさは、日本人はあまり解らないのかもしれない。
それはどっちかが正しいというものではなく、文化の違いなんだろう。


こんな例もある。
交通標識で、日本だと「ここを通行してはダメ」と書いてる。ネガティブリスト
欧州だと「安全を確認して渡れ」になる。ホワイトリスト
日本人の歩行者は、車がまったく通ってないでも信号を守る(大阪は違ったけど)
ネガティブリストに囲まれて暮らしているので、ネガティブリストの中で、できる工夫の追及に慣れているのかもしれない。
欧州は、ホワイトリストで暮らしているから、自由度の高さを好むし、行動制限を嫌う。

www.afpbb.com


車が来てないのに、信号を守るって考え方は、悪く言えば、自分の頭で考えていない。
リスクを取らない思考につながっている。
車にひかれないために信号があるのであって、信号を守ることが目的ではない。
手段と目的の逆転が日本では起きている。
結局は、コミュニケーション重視の稲作文化と、他者を出し抜いて成果を追求する狩猟文化の違いなのだろうか?




psgamenet.blog.jp

欧米人はリアルシミュレーションを好むから、3Dがどんどんリアルになる
日本人は、アニメ的な離散的なデジタルな表現を好むから、リアルな物理シミュレーションを目標にしない。
一枚絵で見ると、明らかにホライゾンというゲームの方が優れて見える。
だけど、遊んでみた時の操作性とか、感情の表出とか、そういうゲーム性は、おそらく任天堂が勝っているんだと思う。
遊んでないので想像だけど。

浮世絵には遠近法が無く、表現したいものをデフォルメして強調して表現する。だから立体視的なリアルはないけど、伝わってくるものがある。
漫画やアニメで目がでかいのは、人間が、他人の目に注目していることを表している。
海洋堂のカプセルフィギュアの冷蔵庫は、そのままスケールで小さくなっているわけではなく、つなぎ目の部分は大きくなっている。
そのままスケールを小さくすると、重要な部分の情報が削げ落ちてしまう。だから、小さくするにはデフォルメがいる。

漫画やアニメは、現実の世界を情報圧縮しているわけだけど、そこに重要な部分の強調と削減が働いている。見せたいものを見せ、見せる必要のないものは見せない。
そのフィルターに作家性が表現されている。


盆栽や、日本式庭園は、デフォルメされた自然であって、本物の自然ではない。手乗り自然。所有できる自然を日本人は好む。
だからカプセルトイやフィギュアが好きで、アニメや漫画も流行る。

しかし、ディズニーやピクサー洋ゲーはリアルな自然模倣を追求している。
世界的な規模では、リアルな自然模倣を好む人口が圧倒的に多いのかもしれない。
日本的な手乗り文鳥を好む趣味を好む欧米人もいるかもしれないけど。


突き詰めると、自然を飼いならすものと考えるキリスト教のような世界と、もっと原始的な自然と共生する八百万な日本の違いかもしれない。
でも、自然と共生するという志向がなぜ盆栽を好むのか。盆栽なんて人工物みたいなもの。ある意味、キメラ。

情報をデフォルメして無理やり小さくして、そこに小宇宙を表現する。
欧米人は小さくするって意思が無いと思うんだよね。小さくするなじゃくて、リアルに再現することに目標がある。

FreetelReiスマホで40fpsキタ━━━━(゚∀゚)━━━━!!

f:id:yasu9780:20170309201006j:plain

校舎裏で40fps行くようになった!
LODでキャラクターは全員非表示状態になっている
ただし、非表示でも、移動やキャラ同士の交流などAI機能は働いている。
ここの負荷を下げるためには、1fpsごとにやらないで、0.4secごとに処理するなど間引きをしている。

キャラが表示されてくるとfpsは下がるが、10fpsを切るようなことはない。
これなら操作性として合格点と思う。


AsusAtom搭載7インチタブレットだと最大瞬間で50fps超えた。よしよし('ω')
f:id:yasu9780:20170309203333j:plain

モバイルで高速化の探求

学校シミュレーターはほぼほぼ完成して、後はモバイルの速度さえ十分でれば公開できるとこまで来ました。

skinnedMeshなキャラ50人ぐらい。
背景の3Dモデルは、SetPassCall80くらい。


スマホで15fpsぐらい。キャラが少ない校舎裏で20fpsぐらい。
動きが混んでくると10fpsぐらい。


いったい何に負荷がかかっているのか? プロファイラーを使うとプロファイラー自身の負荷でよく解らない。

仮説1)表示が重い
仮説2)CPUがパワーを食っている


キャラを8人ぐらいに減らすと、33fpsぐらい出る。
背景の3Dモデルは問題ない。問題なのは、キャラクター。


LODとして、距離15より遠い場合に、髪の毛、メガネを非表示にする。効果なし
LODとして、Animatorをfalseにする。効果なし
移動中は、NavMeshを止める。ゴールを見つける場合だけnavMeshをenableにする(その代わり、CharacterControllerに変更)。効果がない


移動をcharacterControllerを止める。
30fps超える!

お前か! お前が遅い犯人か!

真犯人=CharacterController(もしくはNavMeshAgent状態のtransform.positionの更新)

ジョイパッドのAxis

リアルパッドの話ですが、左アナログパッドは各社でほぼ統一されているようですが、右アナログパッドはバラバラな模様。
うちのGameSirのパッドだと、スマホのUSBホストに刺すと、上下の動きが左右になっていて、左右の動きは上下に反映されません。
(PCで刺すとAxis4,5なのでXbox360と同じ模様
これはInput設定で、どのAxisの値を見て動かしているか次第です。

PCにつけた場合と、スマホにつけた場合でaxisが変わってるのでややこしい。



この記事が参考になりますが、右パッドの仕様違いはソフトからはわからないので、設定画面でユーザーに変更してもらうしかないのでしょう。
Unityでゲーム開発 -左右スティックを使う方法-

・ELECOM JC-PS101USV+PS2アナログコントローラ(DUALSHOCK 2)純正品
左右:3rd
上下:4th

・ホリパッド3 PRO. ブラック HP3-105
左右:3rd
上下:4th

・ELECOM JC-U2912FBKゲームパッド
左右:3rd
上下:5th

・Logicool Rumble Gamepad F510
左右:4th
上下:5th

※参考までに Xbox360コントローラは,左右:4th,上下:5thらしいです


ちなみに、左右axis3 上下axis4にしたら、GameSirのジョイパッドで行けました。


設定画面にAXIS変更ボタンを作って、Axis3,4→Axis3,5→Axis4,5と切り替えられるようにしました。

                if (b == 25) //axis
                {
                    if(axis==0)
                    {
                        axis = 1;
                        GameObject.Find("/Canvas/SetupMenu/Button25/Text").GetComponent<Text>().text = "RightPad\nAxis 3,4";
                    }
                    else
                    if (axis == 1)
                    {
                        axis = 2;
                        GameObject.Find("/Canvas/SetupMenu/Button25/Text").GetComponent<Text>().text = "RightPad\nAxis 3,5";
                    }
                    else
                    {
                        axis = 0;
                        GameObject.Find("/Canvas/SetupMenu/Button25/Text").GetComponent<Text>().text = "RightPad\nAxis 4,5";
                    }
                }


右アナログパッドを見ているカメラのスクリプトで、

                if(Main.axis==0) // axis 4,5
                {
                    ax2 = main.joystickRx();//axis4
                    ay2 = main.joystickRy();//axis5
                }
                else
                if (Main.axis == 1) // axis 3,4
                {
                    ax2 = main.joystickAxis3();//axis3
                    ay2 = main.joystickRx();//axis4
                }
                else // axis 3,5
                {
                    ax2 = main.joystickAxis3();//axis3
                    ay2 = main.joystickRy();//axis5
                }

という感じで切り替えました。
ゲームセーブするときはaxis設定も保存しておきます。




業界標準って感じなので、XBOX360有線パッドをAmazonで注文しました。明日届きます。コンビニ受け取りです( ゚Д゚)今、ヤマト運輸たいへんみたいだし
XBOX360無線パッドは持ってるんですが、電池がいつのまにか切れてたり、自動電源OFFが働いて使いずらい。
XBOX ONEのジョイパッドが一時期安くなってたと思うんですが、また高くなってますね。