ああ素晴らしき乱数の世界

    乱数とは?世の中の予測できない色々のこと。

    土日はゲーム制作に勤しむ私ですが、ゲームと切っても切れない関係なのが乱数。ガチャを回したり、敵を出現させたり、カードをシャッフルしたりいろんな場面で使います。

    いろいろ奥が深いのですが、乱数って楽しいよ!
    ということを語っていきます。

    用語説明

    乱数

    人の手で操作できない、他の事象と関連がない、予測のできない数のこと。

    真の乱数

    自然界に存在する乱数。
    水の流れる様子や、木の葉のこすれる音、星のきらめきなどのこと。

    疑似乱数

    コンピュータで生成する乱数。
    計算によって作り出されているので、一見バラバラだが実は予測することができる。

    シード値

    疑似乱数を作る時に使う、元となる数字。
    シード値が同じなら常に同じ乱数が作られる。
    シードは種の意味。

    「シード」は開発者ならよく聞く言葉ですよね。

    真の乱数を求めて ~粒子編~

    粒子が動くときはランダムウォークという性質があるらしく、それゆえ自然界には完全な真の乱数があるといえそうです。

    ※酔っ払いみたいにふらふら動くので日本語で「酔歩」とも。他にもブラウン運動というのもあるらしい。

    この性質を利用した乱数生成器も売られています。
    仕組みは超簡単で、真ん中に向かって粒子を飛ばして

    Aの板に当たれば0、Bの板に当たれば1とすればいいわけです。
    粒子1個で1ビットですから、64ビットの乱数が欲しければ64個粒子を飛ばせばいいわけですね。

    他にも、粒子の「電子なだれ」という性質を利用した乱数生成器もあり、8千円ぐらいで買えます。

    8千円で真の乱数が買えるなら安いものだと思いますが、みなさんはどう思われますか?

    真の乱数を求めて ~アルゴリズム編~

    続いて、もう少し我々に馴染みのある話を。

    疑似乱数はほとんどの開発言語に標準装備されていますが、採用しているアルゴリズムはまちまちです。
    代表的なアルゴリズムは3つ。

    線形合同法

    C言語、Java

    メルセンヌツイスタ

    php、python、Ruby

    Xorshift

    JavaScript(Chrome)

    (ただし、JavaScriptで乱数をどのように実装するかはブラウザに委ねられているので、
    Chrome以外のブラウザでどのように実装されているかはわかりませんでした。)

    自分の使っている言語のアルゴリズムが気にくわなければ、好きなものを実装すればいいと思います。
    それぞれの数式は、ネットを探せば見つかります。

    Javaと乱数

    線形合同法は古いアルゴリズムで、生成される乱数に偏りがあるらしいです。
    (過去にはサイコロゲームのサイコロで奇数しか出なかったとかなんとか・・)

    Javaはモダン言語(?)なのに線形合同法を使っているため開発者から白い目で見られていますが、
    私は今までずっと使っていて特に不便を感じたことはないです。

    使うときは次のことに留意すればいいと思います。
    1.むやみにランダマイズしない。(1回の起動あたり1回でOK)
    2.最初の1回は捨てる。(米を砥ぐときは最初の水は捨てますよね。それと同じです。)

    ただし、暗号化などで使うのはやめましょうね。

    乱数のコクとは!?

    で、ここまでの話は余談で、
    乱数をどのように使うのか?というのがゲームの面白さを左右する重要なポイントになります。

    生成した疑似乱数は、全ての値の出る確率が均一なので、機械的な印象になるんですね。
    適度加工することによって、自然な乱数に感じるというわけです。

    これを「乱数にコクを出す」といいます。

    正規乱数

    正規乱数(正規分布)は、自然界によく見られる乱数です。

    ダーツをイメージすればわかると思いますが、
    中心を狙って何本も投げると、中心に近くなるほどダーツが集中しますよね。

    それを再現できるのがこちらのコード。

    final int DICE = 5;
    
    double d = 0;
    for(int i=0; i<DICE; i++) {
        d += Math.random();
    }
    return d / DICE;

    DICEの数を増やすほど中心に偏り、少なくするほどバラバラになります。
    TRPG(ボードゲームの一種)で遊んだことがある人はピンとくる乱数ではないでしょうか。

    ブラウンノイズ

    全ての値の出る確率が一定である「ホワイトノイズ」に対し、
    入力値が高ければ高いほど高い結果が得やすくなる乱数をブラウンノイズといいます。

    ブラウンノイズにはいろいろな数式が考えられますが、こういうのはどうでしょうか?

    double input = 10.0;  //入力値
    
    final double RATE = 0.5;  //定数
    
    return input * (1 - RATE + (RATE * 2 * Math.random()));

    攻撃力10のキャラクターが敵に攻撃した場合に与えるダメージをイメージしてみました。
    攻撃力に比例して、最大±50%のゆらぎがあります。
    Math.random()の部分を正規乱数にすればいい感じの乱数になりそうです。

    ピンクノイズ

    ピンクノイズはブラウンノイズと同様に、入力値が大きいほど大きい結果が得られますが、
    大きい数字が得られる確率がすごく少ないという特徴があります。

    特に決まった数式はないのですが、私が自分で作った数式を特別に公開しちゃいます。

    double input = 1.05;//入力値
    
    final double BREAK_RATE = 0.14;//定数
    final double UP_RATE = 1.2;//定数
    
    double d = 1;
    while (true) {
        if (Math.random() < BREAK_RATE) {
            break;
        }
        d *= UP_RATE;
    }
    return input * d;

    この数式を使うと非常に中毒性の高いゲームになるので、法律で規制した方がいいのでは?
    と思うほどです。(自画自賛ジョーク)

    なお、数値の上限がないため、
    オーバーフローが気になる方はwhileの条件式を調整すれば問題ありません。

    パーリンノイズ

    今一番気になるのはこれ!

    グラフィックの世界で自然現象を再現するのによく使われるのが「パーリンノイズ」。
    マインクラフトの地形生成にも使われているそうです。

    パーリンノイズで作られた水面。やばい。

    パーリンノイズを覚えれば、3Dモデルが作れなくてもリッチな3Dゲームが作れるかも!
    ・・と思うと夢が広がりますね~。

    最後に

    この記事の説明には聞きかじった情報と超訳が混ざっているのでご注意ください。
    へーそーなんだー、ぐらいにとどめといてください!


    関連記事

    • 就活のコツは「できること<<<<<やりたいこと」です。〜20年新卒メンバーインタビュー第2弾〜

      そこで、20年新卒メンバー全員にセルフインタビューしてもらいました!今回はその第2弾です。
      第1弾はコチラ↓↓↓ 就活のコツは「逆算」です。 〜20年新卒メンバーインタビュー第1弾〜

      ◆Q1.プロフィール

      制作部 デザイナー 武蔵野美術大学 造形学部デザイン情報学科卒業

      武蔵野美術大学造形学部デザイン情報学科を卒業し、今年の春にバイタリフィに入社しました。現在は制作部にデザイナーとして所属しています。 大学では印刷物のデザインを主に学びながら、人形劇サークルの座長をしていました。 趣味はポートレート撮影と人形劇です。ネットサーフィンも好きです。 食べ物で好きなものはトマト酸辣湯とタラコパスタです。タラコパスタとは好物として長い付き合いですが、こだわりは特になく、コンビニのものから自家製まで全部美味しくいただきます。

      ◆Q2.大学生活はどのような過ごし方をされていましたか?

      実はITやWEBは全くの未経験でした・・・。

      大学では主に課題での制作とサークル活動、あとはデザイン関係ない飲食のアルバイトをしていました。 作品制作に絞って言うと、大学内では写真表現とプリントメディア、人形を作るくらいの造形を主にやっていて、比率は3:6:1くらいでした。プリントメディア研究のゼミに進んでから卒業までは、塵理論という架空の理論をもとに考察する物語の進行と紙媒体表現の研究と制作を主にやっていました。 ITやWEBにはほぼ触れておらず、就活を始めるまでは将来についても自分についても全く考えていませんでしたし、たくさん遊んでいました。
      人形劇

      ◆Q3.就職活動について教えてください

      三年生の年末くらいから社会見学的な感じで色々な企業へ足を運び始めました。 プリントメディアを修めたゼミ生は、印刷業界、広告代理店、編集者方面の就職が多かった印象ですが、私はIT系の企業へ強い興味を持っていました。プリントメディアを通じて、出版や広告を取り巻く、長く変わらなかったものにも変化が強く求められる現状を学んでいたからこそ、という方が正しいかもしれません。

      ーそれはなぜですか?

      そんな変化の激しい時代でも、もの作りをしていたい自分の思いを大切にしたかったし、作るからには、より多くの人に届けたかったからです。 これからも発展し多くの人の手に触れるweb、アプリ、インターネット上で提供される様々なサービス、メディアに関わる制作を仕事にすれば、自分の作ったものが、人の目に触れたり、役に立ったり、記憶に残ったりするかもしれないと思いました。 そのために、IT系企業を中心に、Webデザインやコーディングが専攻でなくてもやりたいという思いを見てくれる会社を探し始めました。 そこで、バイタリフィを見つけたというわけです。 (就活時のポートフォリオ↓)
      ポートフォリオ

      ーやりたいことは、当時から明確にありましたか?

      やりたいことが見つからないのではなくて、やりたいことがありすぎて一番を選べないという感じでした。 だからこそ、自分の欲求に忠実に将来を考えました。 自分の作ったものをたくさんの人に見てほしいし、変わらないものよりは変わっていくものの方が性に合っているし、美味しいごはんも食べたいです。 流動的で、大きく発展していくバイタリフィの一員としてそれを見つめながら、自分の成し遂げたいことを明確にできたら嬉しいです。 でも休日は家でたくさんゲームもしたいです。
      ウォンテッド・スコア、まとめ

      4.どのようにしてバイタリフィを見つけたのですか?

      Wantedlyに掲載されていた「みんなでおいしいごはんを食べれる会社になります」のフレーズに一目惚れしました!

      Wantedlyで新卒採用の要項を見て、その存在を知りました。 ものづくりにはずっと携わっていたいと思っていましたが、大学では別の領域のデザインを学んでいたので、IT系で、しかもAIを主力とするバイタリフィを受けようと思ったのはすごく思い切りました。 一番の理由は「みんなでおいしいごはんを食べれる会社になります」というフレーズですね。 就職活動を始めてすぐに履歴書を提出しましたので、求人の中から自分の希望に合った企業を見つけるための基準もまだ曖昧で、フィーリングが大きな部分を占めていたことは事実です。
      イラスト50

      ◆Q5.就活生の皆さんへ

      就活のコツは「できること<<<<<やりたいこと」です。

      大学4年間で学んだことで、「できること」が少しでも身についてしまった自分は、そこを拠点に活動しがちでした。 それが必ずしも悪いこととは今も思いませんが、「できること」以外のすべてが「できないこと」に振り分けてはいけないと思い、できること<<<<やりたいことくらいで考え、今とても楽しく過ごしています。 就活生の皆さんも悔いがないようにバイタリティを出して、頑張ってください。

      バイタリフィの採用状況

      21年卒(既卒3年以内可)向けの説明会に関して

      ウォンテッド・スコア
      バイタリフィでは、現在、21年卒(既卒3年以内可)向けの説明会を実施しております。新型コロナウイルスの影響を受け、オンラインでの実施としております。 ウォンテッド・スコアが高く、優秀な方と相思相愛になりたい為、オンライン説明会には社長自ら参加いたします。 ぜひ、弊社のビジョンでもある”みんなでおいしいご飯を食べましょう”! →21年卒(既卒3年以内可)向けの説明会に関してはコチラから

      中途採用に関して

      ウォンテッド・スコアーバイタリフィ中途ー
      バイタリフィでは、中途採用に関しては、ウォンテッドリーを使っての採用を実施しております。 個人の裁量が大きく、自身の意見や考えが大事であり、主体性が必要なので、ウォンテッド・スコアを上げれば、選考通過に有利かも?! 経営状況に関しても、昨対で引き続き成長しているため、まだまだ増員していきたいと考えています!たくさんのご応募お待ちしております。 →中途採用に関してはコチラから   ■バイタリフィ公式Twitter↓↓↓ https://twitter.com/AppDevelopLab ■バイタリフィ公式Facebook↓↓↓ https://www.facebook.com/vitalify
      2020/06/30 お知らせ 技術 / デザイン / 制作 日常 / プライベート
    • 就活のコツは「挫折と妥協しないココロ」です。 〜20年新卒メンバーインタビュー第3弾〜

      現在、バイタリフィでは、 21年卒(既卒3年以内可)向け、他社とは違う!?WEB説明会 を開催中です! そこで、20年新卒メンバー全員にセルフインタビューしてもらいました!今回はその第3弾です。 第1弾はコチラ↓↓↓ 就活のコツは「逆算」です。 〜20年新卒メンバーインタビュー第1弾〜 第2弾はコチラ↓↓↓ 就活のコツは「できること<<<<<やりたいこと」です。〜20年新卒メンバーインタビュー第2弾〜

      ◆Q1.プロフィール

      制作部 デザイナー 前職は、”犬のトリマー”!

      制作部デザイナー。前職では犬のトリマーとしてサロンに2年間勤務していました。その後デザイン専門学校に入学。グラフィックデザインを中心に学んでいました。 人生で一番行動力が高かった2年間だった気がします。2年間学んだ後に、2020年4月にバイタリフィに入社しました。 出かけることと、食べる事が好きです。動物ももちろん好きで今は爬虫類と暮らしています。好きな食べ物はオムライス。卵は乗せるのではなく包んでいるのが好きです。

      ◆Q2.なぜトリマーからデザイナーへ?

      一度、妥協した選択肢に後悔していました

      元々高校で進路を決める時も悩んだんです。絵を描くのが好きで将来トリマーになるか絵を描くか…でも絵で生活するって調べても謎が深まるばかりで自分のことも周りのことも納得させられなかったし、単純にトリマーになるために調べた時間のほうが多かったのです。 なので、トリマーになるための選択をしました。社会人2年目の私は仕事も一通りできるし好きなことをしているのでそれなりに充実していたのですが、ある日、自分が一番好きな作業がカットではなくお誕生日用やブログの写真撮ったり加工することだと気づいてしまったのです。 一度、妥協した選択肢に、無意識のうちに後悔していたんですね(笑) 高校の頃「絵」というぼんやりとした仕事が「紙面でのデザインの仕事」にまで明確になったのでそこからの行動は早かったです。
      unnamed (3)

      ◆Q3.専門学校ではどのようなことをしていましたか?

      自分の行動範囲を広く!人と関わる機会を多く!

      学校ではグラフィックデザインをメインにその他、造形やWEBデザイン、地域と提携して町おこしに携わったりといろいろなことに取り組んでいました。 また、仕事を辞める時にいろいろ考えて「経験や見てきたものが少ないな…」と感じていたので、『積極的に行動しよう』を目標に掲げ、WEB業界の人の集まりに参加したり、いろいろなアルバイトをやったりしました。そこでのご縁でコミッ●マーケットでのブースの挨拶回りに誘ってもらえたり、のぼり旗のデザインのお仕事もらうことができたので行動して正解だったなと思います。 ご縁の元、自分の行動範囲が広がり様々な人と関わる機会をいただくことができたのはとても貴重な経験となりました。

      ◆Q4.就活は順調に進んでいましたか?

      妥協しないココロが正解に繋がった

      上手くいっていたかというと…あまり上手くはいっていませんでした。上手くいったと思ったら「最初から一人暮らしはさせたくないから勤務地を変えるな」と言われてしまったり…。 まず、就活を始めた時に自分で決めていた条件が『様々な仕事ができる事』『紙媒体でのデザインができる会社』『人間関係が良い会社』でした。なので地元ではなく東京方面でデザイナー職を探していました。 クラスの中では早めに動き出した方でしたが夏前に友達が先に内定を確定させていくのを見てるのは正直少しきつかったです。けれど、これから働く職場は納得して選びたかったので妥協したくはなかったです。今振り返っても妥協しなくてよかったなと思いますね。 バイタリフィで成長していきたいと思っています!
      ご飯?飲食?_これはの制作職の求人です_Eng_De_Dir_株式会社バイタリフィのWebエンジニアの求人_Wantedly[

      ◆Q5.バイタリフィに興味を持ったきっかけは何ですか?

      「みんなでおいしいご飯を食べれる会社になります」のビジョンに共感しました

      きっかけは8月の終わり頃にマイナビで「みんなでおいしいご飯を食べれる会社になります」と見かけ、そのビジョンに惹かれて説明会に参加したことでした(笑) 私が条件として掲げていた紙媒体のデザイン中心ではなくWEBやアプリデザインが中心の会社でしたが説明を受けるうちに様々な案件に携われる点に魅力を感じました。少しでもバイタリフィが気になったらとりあえず会社説明会に来てほしいです!!

      ◆Q6.入社の決め手は何ですか?

      デザイナーでも実際にお客様と直接話をする機会があるところ

      新卒でも早い段階で案件に参加をさせてもらえるということと、デザイナーでも実際にお客様と直接話をする機会があるということが大きかったです。やはり実際の案件に取り組んで技術以外にも流れや連携の仕方等仕事上で学ぶことってたくさんあると思っていたので早くから携わることができるのは魅力的でした。 お客様と直接話ができることに魅力を感じたのは、自分のした仕事に対しての反応を直接見れるのって嬉しいし、なにかあれば提案する事ができるし、何より相手のことを少しでも分かったうえで寄り添った仕事をしたいなって思うからです。元々トリマーをしていてお客さんと喋って仕事していたので、職種関係なく寄り添った仕事をしたいってのがあるのかもしれないです。 それと、面接のときに「何を一番やりたい?」って聞かれたときに「WEB会社の面接に来ているのにあれなんですけれど…可能なら紙媒体に携わりたいです。」って嘘つきたくなくて言ったんです…私(笑)それでも選んでくださって、変化しやすいやりたいことより内面などの変わりにくい部分をしっかり見てくれたのだと感じました。

      ◆Q7.入社してみてどうですか?

      IT業界は覚えることがいっぱいです!

      ITに特化した企業なので業界用語も覚える必要があります。新入社員研修で勉強しましたが理解ができたかというと怪しかったので通勤時に調べていました。 制作についても学校で制作をするのとでは全く違います。分からないことや初めてのことで手探りで必死に制作にあたっていますが、新入社員に対して先輩方のサポートが手厚いので安心感はあります。 入社してすぐに案件のデザインにも同期と協力しながら携わらせてもらっています。とてもありがたいです…!
      さくら

      ◆Q8.今後どのように働いていきたいですか?

      新しいデザインの可能性を広げたいです

      現在、入社したばかりですがWEBデザインやバナー・アイコン制作、SNS運用と様々な案件に関わらせていただいています。 それらをこなしつつ勉強して今よりもデザインに意味と説得力を出していきたいです。将来的にはコーディングの勉強も行い自分の中のデザインの可能性を広げていきたいと考えています。また、今は新しい案件に取り掛かるたびにわくわくしているのでその気持ちを忘れずに楽しんで仕事をしていきたいです! 仕事内容以外だと、会社の人たちや同期とご飯に行きたいです!現在コロナの影響でリモートワーク中なので落ち着いたら…!!

      ◆Q9.現在就活中の方に向けてメッセージを

      就活に疲れて挫折を味わっても、絶対に妥協はしないでください!

      私は変なところ行動力があるのでざっくりとした考えばかりですけどそれでもいいこともあると思っています。でも長期的なことを考えるならしっかり見定めなければなりません。 妥協しても誰も責めないと思いますが、何かあったときに自分が後悔します。だらだら就活をするのはよくありませんが自分が就活に費やすことのできる期間を決めてその期間内は頑張ってみてください。 私は卒業制作前までには就職先を決めるという予定で、正直途中挫けそうにもなったけどこれが最後だな…って時に見つけて内定をいただけたのがバイタリフィでした。どこにご縁があるかわかりませんが就活は自分が行動しないとご縁に出会う可能性すらなくなります。自分に合った会社見つけてください!

      バイタリフィの採用状況

      21年卒(既卒3年以内可)向けの説明会に関して

      ウォンテッド・スコア
      バイタリフィでは、現在、21年卒(既卒3年以内可)向けの説明会を実施しております。新型コロナウイルスの影響を受け、オンラインでの実施としております。 ウォンテッド・スコアが高く、優秀な方と相思相愛になりたい為、オンライン説明会には社長自ら参加いたします。 ぜひ、弊社のビジョンでもある”みんなでおいしいご飯を食べましょう”! →21年卒(既卒3年以内可)向けの説明会に関してはコチラから

      中途採用に関して

      ウォンテッド・スコアーバイタリフィ中途ー
      バイタリフィでは、中途採用に関しては、ウォンテッドリーを使っての採用を実施しております。 個人の裁量が大きく、自身の意見や考えが大事であり、主体性が必要なので、ウォンテッド・スコアを上げれば、選考通過に有利かも?! 経営状況に関しても、昨対で引き続き成長しているため、まだまだ増員していきたいと考えています!たくさんのご応募お待ちしております。 →中途採用に関してはコチラから ■バイタリフィ公式Twitter↓↓↓ https://twitter.com/AppDevelopLab ■バイタリフィ公式Facebook↓↓↓ https://www.facebook.com/vitalify
      2020/06/30 お知らせ 技術 / デザイン / 制作 日常 / プライベート