大学カタログ

図 3 仕事での生かし方仕事での生かし方 2

ゲーム・CG・アプリ

画面の中でキャラクターを動かし、光と影をつけ、気持ちのよい手ざわりの動きをつくる仕事です。高校で学ぶ三角関数・ベクトル・微分と積分が、1 秒に何十回もくり返される計算の中で働いています。

ゲーム制作の部屋で、円く広がる光の粒と陰影のついた立体、跳ねるキャラクターが映る大きな画面を囲んで動きを相談する学生たち

ひとことで言うと

ダンスの振り付けを、数で書く

ダンスの振り付けでは、「右に 2 歩、腕を上げて 1 回転」のように動きを決めます。ゲームのキャラクターの動きも、向き・速さ・角度を数で書いて決めます。数の決め方しだいで、同じキャラクターが重たくも軽やかにも見えます。

01

どんな仕事?: 画面の中の動きと光を計算する

ゲームプログラマーは、キャラクターの動きや当たり判定、敵の行動などをプログラムで書いて動かします。CG エンジニアは、立体の形に光を当てて陰影をつけ、画面に描く処理を受け持ちます。スマートフォンのアプリでも、ボタンやメニューの動きを同じように計算でつくります。

ゲームの画面は、1 秒間に 30 回や 60 回描き直されています。そのたびにキャラクターの位置を計算し、光の当たり方を決めて、絵を描き直します。1 回ごとの計算に、高校の数学がそのまま使われています。

ゲームの制作には、プログラマーのほか、企画やグラフィック、サウンドの担当者も加わります。企画の人が思い描く「ふわっと跳ぶ」「キレよく止まる」といった手ざわりを、数の決め方に置きかえるのも、プログラマーの大事な役目です。

画面の 1 枚 1 枚の裏で、高校の数学が何十回も計算されています。

図解ゲームの 1 場面と高校の数学

ゲームの画面
  • 三角関数回る・円く並べる・揺らす(数学 II)
  • ベクトル動く向きと光の向き(数学 C)
  • 微分動き出しと止まり方を整える(数学 II)
  • 積分速さを足し合わせて位置を出す(数学 II)
  • 確率敵の行動や宝箱の中身(数学 A)
  • 図形と方程式画面の座標と当たり判定(数学 II)

02

三角関数とベクトルが生きる場面: 円く並べ、光を当てる

敵が弾を円く放つ場面を考えます。12 発を同じ間かくで放つなら、向きは 360 ÷ 12 = 30 度ずつずらします。角度 θ の向きに進む弾の速さは、x 方向が「速さ × cos θ」、y 方向が「速さ × sin θ」です。三角関数を使うと、角度で決めた向きを画面の x と y の数に直せます。

三角関数は、揺れる動きにも使います。宝箱の上に浮かぶアイテムの高さを、「基準の高さ + 振れ幅 × sin(角度)」で決めます。角度を時間とともに大きくしていくと、アイテムはふわふわと上下に揺れ続けます。

光の当たり方には、ベクトルの内積を使います。光が面に真上から当たると明るく、斜めに当たると同じ光が広い面に広がるので暗くなります。明るさは、面に垂直な向きと光の向きの間の角の cos に比例すると考えます。2 つの向きを長さ 1 のベクトルにしておけば、内積を 1 回計算するだけで cos が求まります。

この考え方は、光を一様に散らす面の明るさを考えた 18 世紀の数学者ランベルトにちなみ、CG ではランバート反射と呼ばれます。ランベルトは 1760 年の『フォトメトリア』で、光の明るさを測る学問をまとめました。

角度で考えた動きや光を、三角関数が画面の数に直してくれます。

図解12 方向に弾を放つ(例)

入力敵の位置から、速さ 5 の弾を 12 発、同じ間かくで放つ
  1. 1向きの間かくは 360 ÷ 12 = 30 度
  2. 20 度の弾の速さは (5, 0) で右へ進む
  3. 330 度の弾は 5 × (cos 30°, sin 30°) ≒ (4.33, 2.5)
  4. 490 度の弾は (0, 5) で真上へ進む
結果画面を描き直すたびに速さを位置に足すと、弾が円く広がっていく

03

微分と積分が生きる場面: 気持ちよく動かし、自然に落とす

メニューが画面の横から出てくる動きを考えます。位置を時間に比例させると、急に動き出して急に止まり、かくかくした印象になります。そこで、動いた割合を時間 t(0〜1)の関数 3t² − 2t³ で決める方法がよく使われます。画面を描くための言語の 1 つ GLSL には、この式が smoothstep という名前で用意されています。

数学 II の微分で確かめると、理由が分かります。3t² − 2t³ を微分すると 6t − 6t² で、t = 0 と t = 1 のどちらでも 0 です。つまり速さ 0 で動き出し、速さ 0 で止まるので、なめらかに見えるのです。

ジャンプや落下には、積分の考え方を使います。画面を描き直すたびに、速さに重力の分を足し、位置に速さの分を足していきます。秒速 10 m で真上に跳び、重力を 10 として計算すると、本当の最高点は 5 m です。0.25 秒ごとに足すと 3.75 m ですが、60 分の 1 秒ごとなら約 4.92 m まで近づきます。速さのグラフの面積を細い長方形で足し合わせる計算と同じです。

計算機で物の動きを画面に映す試みは、昔からありました。1958 年、アメリカのブルックヘブン国立研究所の一般公開の日に、物理学者ヒギンボサムが『テニス・フォー・ツー』を展示しました。小さなアナログ計算機がボールの動きを計算し、翌 1959 年の版では、重力の小さい月や大きい木星でのテニスも選べました。

微分で動きの手ざわりを整え、積分で物の動きを再現します。

クイズゲームと数学のクイズ

答えを 1 つ選んでください。

  1. Q112 発の弾を同じ間かくで円く放つとき、となりの弾との向きの差は何度?

  2. Q2面に垂直な向きから 60 度傾いた光が当たると、明るさは真上から当たるときの何倍?

  3. Q31959 年版の『テニス・フォー・ツー』で選べた、重力の違うテニスは?

0 / 3 問に回答
体育館のような広い部屋の壇の上に、丸い画面の計測器や配線の見える機械が並ぶ展示の白黒写真
1958 年、ブルックヘブン国立研究所の一般公開の日の展示。この中に『テニス・フォー・ツー』があり、オシロスコープの丸い画面でテニスを遊べました。写真: Brookhaven National Laboratory(Public domain・Wikimedia Commons)

04

ゲームプログラマーの 1 日(例)

ここでは、アクションゲームを開発する会社で、キャラクターの動きを受け持つプログラマーの 1 日の例を紹介します。

午前中は、テストを担当するチームから届いた不具合を直します。「坂道でキャラクターが少し浮く」といった報告から、計算のどこで数がずれたのかを探します。座標や角度を 1 つずつ画面に出して確かめる、地道な作業です。

午後は、企画やデザインの担当者と一緒に、ジャンプの手ざわりを調整します。「もう少しふわっと」という言葉を、重力の大きさや跳ぶ速さの数に置きかえ、何度も遊んで確かめます。数学の式と人の感覚をつなぐのが、この仕事の面白さです。

式で考えた動きを、実際に遊んで確かめるくり返しです。

図解ゲームプログラマーの 1 日(例)

  1. 10:00朝会チームで進み具合を共有する
  2. 10:30不具合の修正坂道で浮く原因を計算から探す
  3. 12:30昼休み
  4. 13:30動きの調整ジャンプの重力の値を相談する
  5. 15:30新しい処理カメラがなめらかに追う動きを書く
  6. 17:30コードの確認仲間のプログラムを読み合う
  7. 18:30試しに遊ぶその日の変更を遊んで確かめる

05

向いている人と入り方・その先

高校のうちは、数学 II の三角関数、数学 C のベクトル、数学 II・III の微分と積分を大切にしてください。物理の力学も、物の動きを考える助けになります。情報 I で学ぶプログラミングで、習った式を実際に動かしてみると理解が深まります。

大学では、情報系や工学系の学部で、プログラミングとコンピュータグラフィックス、線形代数を学ぶのが近道です。ゲームの制作を学べる学科を置く大学や、専門学校から目指す道もあります。どの学科で何を学べるかは、大学によって異なります。

ゲームの開発者は、技術を教え合う文化を大切にしています。コンピュータエンターテインメント協会(CESA)が毎年開く開発者の会議 CEDEC では、3 日間で約 200 の講演が行われます。経験を積むと、チームをまとめるリードプログラマーになる人がいます。映画の CG や VR の開発、建物や車の設計を画面で確かめる仕事へ進む人もいます。

数学で考えた動きを、プログラムで画面に出す。この往復が力になります。

図解ゲームプログラマーへの道(例)

  1. 1高校で学ぶ三角関数・ベクトル・微分積分
  2. 2大学で深めるCG・線形代数・プログラミング
  3. 3作品をつくる小さなゲームを完成させる
  4. 4会社に入る動きや描画の担当で経験を積む
  5. 5専門を広げるリードプログラマー・CG・VR

高校生のうちに試せること

  • 12 方向に弾を放つ作品をつくる

    無料のプログラミング環境 Scratch には、sin と cos を計算するブロックがあります。角度を 30 度ずつ変えながら、速さを cos と sin で x と y に分けて、弾が円く広がる作品をつくりましょう。

    Scratch
  • 懐中電灯で光の角度と明るさを確かめる

    暗い部屋で、方眼紙に懐中電灯を真上から当て、照らされたマスの数を数えましょう。次に 60 度傾けて当てると、照らされる広さはおよそ 2 倍になります。cos 60° = 0.5 の意味が目で分かります。

  • ゲーム開発者の講演を検索する

    CESA の CEDiL では、2006 年からの CEDEC などの講演 3,000 件あまりを検索して、内容の紹介を読めます。気になる言葉で検索し、ゲームの裏側でどんな数学や物理が使われているかを探してみましょう。

    CEDiL(CESA)

「ゲーム・CG・アプリ」に関連するコミュニティ

研究室・部活・サークルなど、全国の 43 件から探せます。

研究室をすべて見る(16 件)

よくある質問

ゲームエンジンを使えば、数学は分からなくても大丈夫ですか?

ゲームエンジンは、多くの計算を代わりに行ってくれます。ただ、思いどおりの手ざわりに調整するときや、不具合の原因を探すときには、三角関数やベクトルの意味の理解が大きな強みになります。

絵を描くのが好きです。数学が苦手でもゲームの仕事に関われますか?

関われます。グラフィックやサウンド、企画など、プログラマー以外の仕事もあります。光の当たり方や動きのしくみを知っていると、プログラマーと話が通じやすくなり、表現の幅も広がります。

アプリの開発でも、高校の数学は使いますか?

使います。画面のボタンやメニューを動かすときには、このページの 3t² − 2t³ のような関数で、動き出しと止まり方を整えます。写真を回したり拡大したりする処理にも、三角関数の計算が使われています。