妹でもわかるUnrealEngine4

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

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

UMGで画像の枠線部分に設定するMarginの値

historia.co.jp

妹「前に一回見たんだけど、どこだったかわからなくなってた記事があって、長年探してたんだけど、ついに発見することが出来た」

「ウィンドウみたいな画像の、枠線の大きさを変えずに拡大するやつ?」

妹「それで早速やってみたんだけど、なんか……Marginっていう数字が何なのかさっぱりわかんないんだけど」

docs.unrealengine.com

妹「マニュアルにも書いてないような?」

「そういう時は試してみるしかないですな」

f:id:una_unagi:20170315002007p:plain

「まずこういう感じの、きっちりサイズを計って色を塗った画像を用意した」

f:id:una_unagi:20170315002101p:plain

「で、この画像で確認したところ、上下左右のマージンを0.25にすると上手くいった。これより小さくすると、枠線が太くなるから、これがギリギリの数字」

妹「ということは?」

「体の長さを1として、25%分だから0.25。テクスチャのUV値とかと同じ方式」

妹「縦と横の長さが違う時は?」

「縦横それぞれの長さに対する比率。さっきの縦に2倍に伸ばしたら、左右は0.25、上下は0.125を指定すればOK

遺伝的アルゴリズムを使った動画

「今日は体調がいまいちなので軽めのメニューで、遺伝的アルゴリズムを使った動画を少し紹介しようと思う」

www.youtube.com

「まずオセロ。場所ごとに有利かどうかを設定して、石が置ける中で一番有利なポイントに置くAI。これをいくつかの種類作って、優秀なやつを生き残らせるという仕組み。理屈が非常に明快でわかりやすい」

妹「カドに置きたいし、カドの隣には置きたくないみたいな?」

「そう。ただ実際はカドに置かない方がいい状況というのも当然あるけど、この遺伝子の仕組みだといくら学習してもそういうのはわからない。状況に関係なくそのマスが良いか悪いかってことだけでの判断」

www.youtube.com

「これも面白い。物理エンジンを使って、人型のキャラクターを歩かせるというもの」

妹「これも遺伝子を何にするのか難しそうな」

「この動画では、4つのポーズを繰り返し実行するというルールにして、それぞれのポーズ(関節の角度)が遺伝子になってる。もっとスムーズに動かすには、これを8種類とかに増やしたり、あるいは地面との距離とか体の傾きによる動きを遺伝子化してもいいのかもしれない」

妹「遺伝子の力でひたすら繰り返せば自動的に強くなるのかと思ってたけど、そういうものでもないのか」

遺伝的アルゴリズムの場合、遺伝子の設計自体が最終的なAIの強さを左右するから、複雑なルールに対応するにはどうしても複雑な遺伝子が必要になる。ただルールが単純で、でもどのやり方がベストかはわからない……みたいな場合には十分使える」

ブループリント製のマッチ箱脳(2)

f:id:una_unagi:20170313002327p:plain
f:id:una_unagi:20170313002337p:plain

「昨日の分に学習の仕組みと、あと現在のマッチ棒状況の表示機能を加えた。コレでニューラルネットワーク的なアレになったはず。今回はマッチ箱Aを整数型、マッチ箱B・C・Dを構造体として作った。ただ構造体は一部だけ書き換えるのが面倒くさいので、2つの整数に分けた方が良かったかも。あとB・C・Dは配列にした方が楽なはず」

妹「なんで配列にしなかったの?」

「別々の変数の方がニューラルネットワークな感じなブループリントになるかなあ、と思ったんだけど、別にそうでもなかった」

f:id:una_unagi:20170313002526p:plain
f:id:una_unagi:20170313002531p:plain

「5つの問題について5セット学習した段階で、正しい解答が出せるようになった。とはいえコレは元々マッチ棒で、つまり手作業で再現出来ることを意図した仕掛けだから、プログラムでやるには簡単すぎるんだけど」

妹「値段とマッチ棒の数を同じにすれば、何も学習する必要ないよね」

「全ての状況に対応出来る答えが人間にもわからない、でも総当りでやるとすごい時間かかる、という場合でないと学習させる意味あんまりない。あと、不完全な答えしか出せないAIを作る目的にも使える。例えば敵の思考ルーチンとかは、あんまり完璧な答えを出されると困る場合がある」

妹「強すぎて勝てないから?」

「それもあるし、段階的に強さを変化させたい場合もある。イージーモード的な。上手く手加減させるのは難しい。完璧なAIだけど20%の確率でランダムな行動をする、みたいなやり方もあるけど、これだとなんかやらせっぽい。学習途中のAIの方がしっくりくるかもしれない」