勉強会のレポート(メモ)です。
参加したのはこちら、「Unity道場 7月~ゲーム制作に使う数学を学習しよう~」
会場はユニティ・テクノロジーズ・ジャパンさんです。
資料と動画はUnityLearningMaterialsにて掲載予定です
掲載されました、スライドなどが閲覧できます。
youtubeで配信された動画はこちら、チャットなども見ることができます
Unity道場 2019 7月 ゲーム制作に使う数学を学習しよう
part8まであります
けっこうヘビーですが寝ないように頑張りましょう
わからない方は雰囲気だけ持ち帰っていただいて復習してください
- part1 数式とグラフ
- part2 式の読み方
- part3 対数
- part4 浮動小数点
- part5 RPGで数列
- part6 easing解析
- part7 複素数
- part8 複素数列
- Unityなんでも相談所
- 実際に挑んでみた
- 懇親会
- タイムライン
要点などのメモになります。
講師である安原さんの説明やスライドがわかりやすいので動画を見ることをおすすめします。
part1 数式とグラフ
数式はよくでてきますが、グラフには見方があります
x軸が入力でy軸は出力と捉えるといいかと思います
入力が単純だが出力を変化させたいときに数式は役に立ちます
逆関数
関数を見た時にその逆関数はなにかを意識したほうがいいくらい重要
逆関数はy=x軸に対してくるっと回転させれば、作れる。 #Unity道場
— Yu (@yuma1217_ja) July 25, 2019
まとめ
・f(x)という表記になれよう
・グラフは入力と出力の関係
・逆関数を意識しよう
part2 式の読み方
数式を見るとぱっと目をそらす人が多いが、このパートでは3秒まで持つようにはしたい。
足し算と引き算はおなじようなもの、これには境界があり塊同士は混ざらない。
単位が異なるものはイコールにもならない、意味が区切られる
足し算、引き算と掛け算、割り算には境界がある #Unity道場
— ずきゅ~んたん (@ZuQ9Nn) July 25, 2019
#unity道場 単位の異なるものを足すのはありえない
— ころすけ (@korsk3) July 25, 2019
掛け算か割り算かは塊に対する影響を示す
— Kazushige Mori(Cz_mirror) (@Cz_mirror) July 25, 2019
一見複雑な式でも記号の意味はわからなくても+を境に塊が見えてくる。 #Unity道場
漸化式
通常の式とは異なる
必ず初期値があり、プログラミングに親和性が高い
- 漸化式の考え方はかなりプログラム的
— Nakaji Kohki / リリカちゃん (@nkjzm) July 25, 2019
- 漸化式を一般項(前項に依存しない形)に出来ると強い(確信)
- この例では、正方形の辺を足していくイメージをするとわかりやすいよ
#unity道場 pic.twitter.com/FICrg229a2
まとめ
・足し算引き算と統合は分離されます
・(物理の場合)必ず単位があります これを意識しましょう
・漸化式があります
part3 対数
一番身になる大切な話
指数関数
これの逆関数は何か、これがlogであり対数と呼びます
底の交換
対数で大事なのはこの公式ただ一つ
これだけは覚えた方がいい、プログラミングでも絶対使います
これが対数のなかで唯一超重要なものらしい。 #Unity道場 pic.twitter.com/rqmsYZlF5T
— ねぎたま (@negitamaxyz) July 25, 2019
対数の底の交換は定数倍 #Unity道場
— Kazushige Mori(Cz_mirror) (@Cz_mirror) July 25, 2019
まとめ
・対数は定数倍で底が交換できる
part4 浮動小数点
eがでてきたら、その後ろの数は10のべき乗である
実はfloatの幅は超絶広い
やはり限界はある、主に仮数部
つまり大きな数字に小さな数字が足されているのはまずい
ゲーム開始後ずっとTimeを足し続けるなど
分解能の話。大きな数字を扱うようになるとき、気にしなきゃいけない。 #Unity道場 pic.twitter.com/4YBPSdfzYj
— ねぎたま (@negitamaxyz) July 25, 2019
doubleはもっとすごい
timeとかもdoubleであれば問題ない
その点Doubleってすげぇよな、最後まで仮数部たっぷりだもん。 #unity道場 https://t.co/4Vsc7YONEz
— Nakaji Kohki / リリカちゃん (@nkjzm) July 25, 2019
まとめ
・floatの限界を知ろう
・2進数と10進数の桁の関係を理解しよう
part5 RPGで数列
レベルアップの経験値テーブルの話
等比数列を作りましょう
結構前にレベル制のゲーム作った時にここ参考になったhttps://t.co/GDAfVbqoAj#Unity道場
— ラズ (@Raspberly) July 25, 2019
まとめ
・経験値は指数関数で実装できる
・等比数列を使えるようになりましょう
・対数があれば経験値からレベルを逆算できます
part6 easing解析
Lerpによる線形保管が使われていますが
漸化式から一般項を求めてみましょう
これを求めるとグラフをかけるようになります
これによりフレームレートによらず同じ動きをさせることができます
漸化式じゃなくて一般項の式にできると、フレームレートに依存しない線形補間ができたりする。 #Unity道場 pic.twitter.com/MD9uxnFeHd
— ねぎたま (@negitamaxyz) July 25, 2019
まとめ
・Lerpの動きは等比数列で溶ける
・解き方は調べればでてくるので、解けることをわかっておきましょう
・フレームレートの異なる環境でも対応可能
part7 複素数
これはわからなくていい、虚数がなぜ便利なのかというと複素数があるから
これを理解するのに有効なのが、プログラミングで実装してみること
これをやると気づくことがあります、iが登場しないんです、iは作用だと考えましょう。
複素数はクォータニオンがありますがこちらはわかりやすい動画があります
【Unity道場 博多スペシャル 2017】クォータニオン完全マスター
マンデルブロ集合
古典的で基本なのでおさえておこう
part8 複素数列
最後は安原さんの自由研究で終わり。みんなぽかーんだったけど詳しくはブログを参照とのこと! #unity道場 pic.twitter.com/KBK6zFVrrQ
— Nakaji Kohki / リリカちゃん (@nkjzm) July 25, 2019
まとめ
複雑なのでブログをみてください
Unityなんでも相談所
part4にて以下のような疑問を抱いたので椿さんに聞いてみた。
エンドレスランゲームとかでずっと走り続けるとこうなるのかな#Unity道場
— ラズ (@Raspberly) July 25, 2019
結論からいうとあり得るとのこと。
ただしエンドレスランゲームの場合、プレイヤーの座標は変化せず周りのステージを動かすのが主流らしい。
ステージを動かすのはプレイヤーを動かすよりも処理負荷が高そうだが、そこまで気にならないとのこと。
だいぶ昔ですが、日経ソフトウェアの付録でUnityのサンプルプロジェクトがありました。
ユニティちゃんでゲームを作ろう(日経BP Next ICT選書)
- 作者: 日経ソフトウエア
- 出版社/メーカー: 日経BP社
- 発売日: 2015/02/12
- メディア: Kindle版
- この商品を含むブログを見る
こちらにランゲームが収録されており、
まさにプレイヤーを直接動かすタイプのゲームでしたが、こういうアプローチはよくないらしい。
実際に挑んでみた
スライドでもあった方法でゲームオブジェクトを遠くまで移動させてみます。
使うモデルはユニティちゃんです。なるべく耐えてくださいね。
上昇負荷に耐えられない! #Unity道場
— とりすーぷ (@toRisouP) July 25, 2019
おおよそ700kmを超えたあたりから人の形を保てなくなります。
また1600kmを超えたあたりで以下のようなエラーがでました。
なんでもカメラが遠くまで行きすぎるとこういうエラーがでるっぽい。
懇親会
キタサァン・ランチ #unity道場 pic.twitter.com/1x0BZqImVm
— キタ (@atasfrznnks) July 25, 2019
講師の安原さんもドレスアップ。記念写真も撮れました。
タイムライン
明日の講演資料、これまでになく手間をかけました。補足として書いてた関連ブログ4本(!)も、明日出します。やるだけやったので、あとは楽しんでいきましょう! #Unity道場 https://t.co/PKG6u5DShM
— ヤスハラユウジ (@dsedb) July 24, 2019
ハッシュタグは #unity道場 らしい
— Nakaji Kohki / リリカちゃん (@nkjzm) July 25, 2019
Unity道場 2019 7月 ゲーム制作に使う数学を学習しよう https://t.co/TNbUMj4XLl @YouTubeさんから
Part8まであります。とりあえずPart4まで耐え抜いてください #Unity道場
— のたぐす@Unityエンジニア (@notargs) July 25, 2019
#Unity道場
— Yu (@yuma1217_ja) July 25, 2019
Unityと数学のお話来た。
プログレスバーでx2とxの関数の例え出されてなるほどぉってなった。
最初からかかる時間が決まっているなら、最後の最後に追い上げた方がストレスが無いんじゃないか?って事で、x2乗の挙動でストレスバーを上げた方が良いかも。なるほど
このイメージ分かっていると逆関数の変換を忘れていてもグラフから思い出せそう、有益だ・・・。
— Nakaji Kohki / リリカちゃん (@nkjzm) July 25, 2019
#unity道場 pic.twitter.com/P405k7znLM
2の32乗、32を1/3にすると10
— めいまる@エンジニア (@meimaruEngineer) July 25, 2019
10進数だと10桁程度ってわかる
これ競技プログラミングで便利な知識そう#Unity道場 pic.twitter.com/9A0qukntk9
https://t.co/ZecOfXjqFc #Unity道場
— sotan (@sotanmochi) July 25, 2019
こうなってた理由がやっとわかった#unity道場 https://t.co/FoRTz8KorF
— かにざぶざ (@kanizabuza) July 25, 2019
累積経験知からレベルを逆算することも可能。こういう式変形ができるようになっておくと、プレイヤーのデータとして保持する必要があるのは経験値だけで、レベルは保存する必要がないと判断できる。大事な話だ・・・。 #unity道場 pic.twitter.com/PxPxsM4Sbo
— Nakaji Kohki / リリカちゃん (@nkjzm) July 25, 2019
安原先生「甲子園のスタンドで絵文字を使ってる人にもマンデルブロ集合を使ってアニメーションを作って欲しい」 #unity道場
— 齋藤あきこ (@akiko_saito) July 25, 2019
へぼへぼプログラマだから、恥ずかしながら数学の必要性がわかってなかったです。
— はちるんるん🎀VRフリーランス (@kirakiramushoku) July 25, 2019
今回の講座を聞いて、重要性がわかりました!
勉強しようと思います。
他にも楽しそうな動画がたくさんあったので、unity道場のチャンネルも登録しました。
ありがとうございました!
#unity道場
高校時代の数Ⅲを学んでた頃を思い出してノスタルジックな気分になってる #Unity道場
— はこね (@hakone_san) July 25, 2019
会えるアイドル #unity道場 pic.twitter.com/olvJsMmi42
— 齋藤あきこ (@akiko_saito) July 25, 2019
お疲れでした。難しかったという意見もいただきました。資料も動画も公開されますんで、復習していただけると嬉しいです! #Unity道場
— ヤスハラユウジ (@dsedb) July 25, 2019
講師の安原さんは2月のUnity道場でもシェーダーの講演をしてくださいました。
間違っている箇所、消してほしいツイートがありましたらコメントにお願いします。