桐生映司(仮)開発日記

開発の日常を書いていきます

mrubyでの30日開発日記(14日目)

今日やったこと

  • 数学

今日の発見

 GWが始まったので、時間が取ってやる数学とアルゴリズムを学びます。正直、いまのレベルだとゲームづくりをする際に数学をやりながらゲームを作るのは時間的にも無理があります。ですから、GW中は主に数学とアルゴリズムを中心にやり、その間の時間にゲームを作っていこうと思います。
 こうのようになった理由は、やはり僕自身の数学の圧倒的な知識のなさにあります。というのも、僕自身が前も言った通り数学が高校1年生の前半で止まっていることがあります。
 アルゴリズムに関して言えば、今後の3Dの描画で高速のアルゴリズムが必要となります。ですので、アルゴリズムを正確に記述できるようにしなければなりません。
 そして、これからのゲーム作りをするにあたっては数学とアルゴリズムを使うような機会が増えていきます。ですので、時間がある時にやれるだけのことはやっていきます。
 とりあえず、仮面ライダーW仮面ライダービルドを出力させるためにはこの2つが絶対に必要です。
 ですので、なんとかしてやってみます。出力ができたら、仮面ライダーWvs仮面ライダービルド作ってみたいな。
 明日から旅行なので、2日ブログは休みます。
 では

Ciao!

mrubyでの30日開発日記(13日目)

今日やったこと

発見したこと

 明日からGWなので、やることの方向性を決めました。

  • 数学を学ぶ
  • アルゴリズムを学ぶ
  • ゲームを作る
  • ドキュメントを作る

 この方針にした理由は、この先のゲーム作成で「数学」と「アルゴリズム」を多用しなければならないとわかったからです。(当たり前ですけど)
 kawasaki.rbでの話をしたら、アルゴリズムの必要性や、数学の必要性、メモリの必要性、ドキュメントの必要性が実感できたからです。それまで本ではこれらが必要だということは知ってはいましたが、実感が伴っていませんでした。
 実感が伴ったおかげでモチベーションは上がりました。
 明日からGWなので、やれるところまでやります!

kawasaki.rb

medium.com

Ciao!

mrubyでの30日開発日記(11日目)

今日やったこと

  • 数学
  • すこしだけ、mruby-gameの作成
  • kawasaki.rbで発表

今日の成果

 今日は、kawasaki.rbで発表させていただきありがとうございました!
 とてもよい経験になりました!ネタで始めたゲーム製作もこうやってやるのはたのしいです!
 とはいえ、今までこうやって断片的に日記みたいにやっていましたが、やはりドキュメントをきちんと揃えたほうがいいことが分かりました。
 もちろん、趣味の一環としてはやっていますが、やるからには心火を燃やしてやらないと!ですので、おそらくこの先はその日にめぼしい成果がなけえれば(例えば、やりたかった実装が一日で終わらなかったりだとかで)日記にし、ちゃんと実装が終わり、ある程度経験値(より良い失敗)があったらそれをドキュメントにして行こうと思います!
 今日は良い収穫がたくさんありました!
 kawasaki.rbもぜひともよろしくです!

kawasaki.rb

kawasakirb.connpass.com

kawasakirb.github.io

mrubyでの30日開発日記(10日目)

 今日やったこと

  • 大学への数学を2Pを解いた。
  • mrubyのオブジェクトをCで複数作れるようにした

発見

 mrubyでまさかオブジェクトを作る時にエントリーポイントにオブジェクトを生成を記述しないといけないというのが驚いた。
 rubyなら記述した時点で生成してくれるの、「オブジェクトを作る関数」を実行するという考えにいたらなかった。
 Cはやっぱりむずい。これを初心者に対してカリキュラムでやらせるのは、銃の扱い方を知らない人に対して「頭に付けて引き金撃ってみ?」言っているようなものだね。

mrubyでの30日開発日記(9日目)

きょうやったこと

気づき

 数学やっていて気づいたんだけど、べつになんでもかんでも覚える必要はない。というのも、理解している間に覚えたりするからだ。数学自体が理解をするまでが難しい物に関して言えば、別に覚えなくても理解しょうとする過程で覚えたりする。
 例えば、二次関数のことを覚えようとしたとしよう。二次関数に初めて出会った人は必ず困惑する。初めて出会った分野だから理解が進まなくて当然だ。だからこそ、覚えると言うよりもその理論がどのようなものかを理解する事を最初にする。もちろん、すぐに理解することはできない。それに、僕が考える理解とはなんとなくの理解ではない。
 以前、「ロクでなし魔術講師と禁忌教典」でこのような描写があった。それは主人公が生徒たちに初期の魔法を本当に理解をしているのか?と言った。すると、生徒は「当たり前だ!そのような魔法は入りたてのころに覚えた!」と返した。すると主人公はその魔法の文節を間違えたらどうなる?と聞いた。生徒は「そんなのでたらめに出てくるに決まっている!」と言った。だが、結果は主人公は「右に曲がる」という予想どおりに魔法が動いた。
「これくらいの理解をしないと理解をしたとは言えない。」と言った。
 つまり、初歩的な分野であっても手足のように使えなければ理解を下とは言えない。おそらく、ちゃんと理解をするというのは深堀をしながら、寄り道をしながら理解をするということだ。二次関数の分野を掘り進めていけば、微分積分にたどり着くしそれだけ理解をするというのは難しい。
 それで、話は戻るのだが、これほど深堀すると人間は不思議なもので覚えてしまうのだ。これば僕も体験がある。それはアニメの背景を深堀していくうちに岩波書店の本を読み始めたのと同じだろう。そうしていくうちにいろいろなことを覚えてきました。例えば、老子を読んでそれに関連する孫子を読んで、それで戦争のことと政治のことについて知りたかったので、君主論を読んだりした。深堀をするというのは、こうやって裏道をみたりして街を散策するようなやり方をいう。
 だからあえて覚える必要はない。試験のためなら覚える必要もあるが、試験がないのであれば覚える必要はない。

発見その2

 mrubyでゲームを作ろうと決めて1週間経ったので指針を決めることにしました。そして、指針としていくつかを軸にして行くことにしました。

1.失敗することは良いことにする。
2.プロトタイプから大規模へ行こうがスムーズにできるようにする。
3.中学生でも理解できるようにする。
4.シンプルにする。

 なぜ、この4つなのかを説明します。
 1.はまんまunreal engineの設計思想から拝借しました。unreal engineの思想の中でブループリントというのがあります。これは、仕様書とかを最初から考えずにとにかく失敗覚悟でやってみるということをするんです。そうすることによって最初にはきづかなかったものが見えたり、どうしたら失敗するのかという経験値になります。これをすることによって、ウォーターフォールのように流れですべてをやるのではなく、失敗しながらやるような方式にします。それに、これは僕の考えで未来に対する予測をしないということも含まれる。未来を見通すことはジオウでないと不可能だし、未来に失敗が予測できるのならば今の時点で防げばいいだけの話。だからこそ、失敗をすることは良いことだということを掲げました。
 2.はどの分野でも最初にプロトタイプを作り試してから製品にする。だが、全ての商品がそうではない。例えば、家電製品なら大量生産に入るためには向上のレイアウトとかを変えたり生産ラインを変えたりしなければならない。仮にプロトタイプを作る用にmrubyライブラリを作ったとしてもそれをC++に変換したりUnityに移植するというような行為は避けたい。mruby用に読みやすいコードで書いてあるのにそれを移植する作業をなくしてmrubyでプロトタイプから製品版までをスムーズにさせたい考えです。
 3.これは僕のいとこが中学生なのもありますが、どうせ読んでもらうなら幅広い人に読んでもらいたいのです。中学生というのはいろいろと多感な時期でその時代に受けたことは忘れがたいものになります。でも、もしいとこが僕のコードを読んでいて読みづらいという経験をさせるのはとても忍びない。僕自身が始めた頃に他人のコードを読んだ時に面食らったときのようなことを体験させたくはない。ですので、コードはこのようにした。
 4.以上の3点の終着点です。失敗しながらシンプルにして行き、完成度があがればあがるほどシンプルになり、理解されるようなコードはシンプルになる。最終目的地はこれで決まりです!これらを指針にしてmrubyのライブラリ開発をしていきます。

参考文献

ロクでなし魔術講師と禁忌教典

automaton-media.com

「CGとゲームの技術」

Ciao!!

mrubyでの30日開発日記(8日目)一週間のまとめたこと(総合面)

一週間経過してみて

 初めてから一週間経過しました。友達との他愛のない雑談からはじまりましたが、結構自分にとっては実りのある一週間だったと思います。
 といいますのも、今思えば結構冒険的なことをしたのだと思います。理系でもないし、数学も高校1年生の初期で止まっているのを無理やり進めたりして、物語も同時に平行して考えながら、ゲームの基礎を作ろうとしています。その動機も結構他人からみたら「そんな理由?」と言われるほど単純明快な動機でした。おそらく、この単純明快な動機がここまでさせたのだと思います。
 ということで、ここでは一週間かけて技術的に自分の中でなにが変わっったのかをまとめていきます。まだ22日残っているのまだまだ道半ばですけど

何をしていたか。

 ここ一週間は時間を見つけては基礎を固めていました。たとえば、空いた時間を使って数学の勉強をしていました。というのも、3Dゲーム自体が数学の固まりみたいなものなので否が応でもやらなきゃならなかったのです。そこは、スキマ時間でコツコツするようにしました。
 夜、大きく時間がとれるのでそこでglfwを試していました。プログラミングは大きく時間を取らないとできないので、これは夜のように長く時間が取れる時にやりました。
 大きく分けてこの2つです。

なにをえられたか?

チャレンジする大切さ

 月並かもしれませんが、この一言に尽きます。というのも、僕自身が理系の出身者でもなければ専門学校で学んでないっし、ましては数学のレベルが高校1年生の前期で止まっているということで普通の人から見たらありえない挑戦だと思います。ですが、本当にほしいものを手に入れるためにはこの方法しかありませんでした。
 これを作ろうとしたきっかけは「MMD仮面ライダーWとビルドをmrubyで動かしてみたい!」です。至極単純な動機です。どうやったら今以上にかっこよくできるのかとかそれを使ったゲームが作れないかとかいろいろと欲望がでてきました。しかし、市場を見ても僕を満足させるような物はありませんでした。UnityでもUnreal Engineでも作れないと思いました。単純に動かしてやるだけだったらこの2つのどちらかで済むかもしれませんが、僕の場合もっと長いドラマのような物をつくってみたいのです。
 Wとビルドがただいっしょになって戦うのではなく、そこに両者の世界の登場人物が葛藤したり笑ったり泣いたりして物語を進むようなゲームを作るのであればUnityでは無理そうだし、Unreal Engineは自分のパソコンでは追いつけない(若干古いパソコンなので)。
 それにどちらもRubyを普通に使うことができません。使えないことはないですけど、それを準備するのが結構大変だったりします。中学生のいとこにも見せてあげたいし中学生にもわかって親しみやすいRubyを使いたい!ですので、そのように長い物語を描くためには自分で作るしかありません。

まとめ

 一週間で得られたのはこれだけですね。でも、欲望のままに向かうのも悪くはありません。
 できない!と思って我慢するのは体に毒です!  では!

Ciao!!

mrubyでの30日開発日記(7日目)

今日やったこと

 glfwのチュートリアルをやっていた。というのも、どういうものかを知っておかないとと思って読んだ。  今までだったら、闇雲にやっていればいずれはパターンが見えてくると思っていたけど、これだと僕にとってあまり効率が悪い。  最近気づいたのは以下の手順に則ってやればいいのだと思った。

1.まずは、最低限の基礎だけを覚える。glfwの場合はチュートリアルだろう。

2.終わったらチュートリアルで重要そうな部分を掘り下げていく。glfwの場合はvulkan, window, context, monitor, inputといった構成要素を一つづつ分解していく。

3.それを踏まえて、どういう構造にすればゲームが作りやすくなるのかを考える。

 要するに、まずは森を見たあとにそこにいる木を見ていく。カリキュラムのように木を見ていき、最後に森を見ていくというのは僕には合っていない。なぜかと言うと、大抵の人なら木を注意深く観察するというのは退屈だし、面白くない。広大な森を見たあとでそこに何が生息をしているのかを知っている方が楽しんで見れる。
 これはいろいろな学びに役立つだろう。例えば、数学の場合だ。最初からそこで教える全体の内容やなぜ数学が必要なのかという内容とか面白い歴史を学んでから、問題を解いてみる。国語でもなにかおもしろいような取っ掛かりになるような文章を用意してからそれに付随する物を教えていく。  glfwの場合はもともとどういう構成でやっているのかがドキュメントで揃っているから森が見えた。まずは森をみることから始めたほうが僕にとってはよかったみたい。

今日のコラム

 妄想を馬鹿にする人がちらほらいる。僕も妄想する癖があるし、ときたまそういう人にバカにされることがある。  ただ、別に彼らを断罪しようなどという気持ちはないし、それをして争ったら平和に過ごせなくなる。そうすれば、好きなアニメもゲームも争いのせいで潰れる。ですので、妄想の良い面とはなんなのかを語っていこう思う  妄想のなにがいいのか?それは思考実験にほかならない。僕からの視点だと、物語を考えることも思考実験をすることも本質的には変わらないと考えている。  まず、物語を作るところから説明していく。物語を考えるとき、僕はまず伝えたいことを考える。例えば「今を生きる」というテーマだったらどうやってそれが大切なのかを証明しなくてならない。今をときめく女子高生がきらきらした学園生活をして「今を生きるってすばらしい!」ってなったら説得もできないし、正直その女に対して殺意が湧く。僕なら、「未来が見通せる少女と過去から逃れられない青年が今の地点から明日を変えることができるのか?」というようにしてやってみる。ここで大切なのは「未来を見通せる少女」という現実では絶対に存在をしないような人物を出していることだ。架空の物を登場させることで現実感を少しだけ排除できるメリットは「現実の諸問題を直視無くていい」ということがある。現実には解決しなければならない問題が山ほどあるがそれを全てのっけって証明することはできない。だから、物事をシンプルにするためにそういう人物を使うことによって説得をしやすくしたり考えをまとめやすくしている。要するに解答を簡単にすることができるのだ。
 一方数学のような学問だ。数学は物事を抽象化して考える学問でもある。数というのは目に見えないものだし、数字は人間しか見ることができない。では、どのように抽象化するのかというと、変数を用いて証明しようとする。ルート2の背理法が一番有名だろう。「その解が有理数の場合」という仮定が間違っていれば、ルート2は無理数であるというような解答だ。ルート2を正確に解答したとしても、無限に続く数をすべて紙に書くことができない。そして、そのような数字を用いて考えることは脳に大きな負担を要する。だから、x/yというような変数を用いて有理数を表現して解くという方法を用いている。1/2という具体的な数字よりもこのような変数を用いるほうが考えやすいのだ。
 この2つで共通していることは、どちらも「現実で存在しない物」を用いていることにある。現実を全て直視することは難しい。太陽を直接見たら失明するのと同様に、僕らも現実を直視したら脳みそがパンクするのと同じだ。だからこそ、架空の物を用いて表現したり見たりすることが大事なのだ。
 妄想をすることはいいことだ。思考実験が良くて、物語を考えるのが悪いというのは間違っている!どのような馬鹿げた妄想だとしても深く掘り下げれば立派だ。