すべてのゲームプログラマが知っておくべき数学 [閉まっている]


163

簡単な質問:すべてのゲームプログラマが成功するには、どのような数学をしっかりと把握する必要がありますか?

ゲームプログラミングのニッチ領域で数学や何かをレンダリングすること、具体的にはゲームプログラマーが知っておくべきことについては特に話していません。

注:正解1つないので、この質問(およびその回答)はコミュニティwikiです。

また、派手なラテックス数学の方程式が必要な場合は、http://mathurl.com/を使用してください


1
うーん、私はそこに読んだり、私は...本当にいけないことを思い出してそのような何かすべき数学の本についてすべてのプログラマを話して話題だったが、それは、それはここにいたかaswell StackOverflowのかどうかわからない....それにいくつかの素晴らしいものを持っていたと思います笑
グランプリ



15
Tetrad♦
Thomas Eding 14

1
@ThomasEdingええ、これは明らかにリストの質問であるため、あまりにも広すぎるのがよりふさわしいかもしれません。
アンコ

回答:


137

役に立つ数学には他にも多くの形式がありますが、最低限これらを知っておく必要があります。

  • 代数と算術

これらは非常に基本的なものですが、これらを知らなければ、ゲーム開発者はもちろんのことプログラマーになる機会さえありません。

ゲーム世界のオブジェクトはベクトルで表されます。ベクトルは、オブジェクトの位置、視線方向、速度などを表します。ドット積クロス積、ベクトル正規化などのベクトル数学計算は不可欠です。

ゲームオブジェクトを移動するにはどうすればよいですか?初心者は言うかもしれません:

「!私が知っている私はちょうどやります:」object.position.x++

ダメダメダメ。ベクトル計算を使用する必要があります。オブジェクトには、オブジェクトの移動に使用できる位置、方向、加速度ベクトルが必要です。あなたが初心者のことをすると、維持できない混乱に巻き込まれ、世界のXYZ軸と整列していない方向にどのように動かすことができますか?

ゲームがクォータニオンを使用する主な理由は、ジンバルロックに悩まされることなく、オイラー角とほぼ同じスペース効率で回転を表すためです。ジンバルロックは、オイラー角がいずれかの軸を中心に90度の回転に達すると開始します。すぐに自由度が失われます。四元数は、4番目の次元を追加することでこの問題に対処します。オイラー角にこだわる場合、1つの軸が最大89度以上回転しないように制限する必要があります。

ゲームで物理反応の数学をプログラミングする場合、物理クラスを取得するのは悪い考えではありません。

物理方程式を知る必要がある理由:

  1. ボールの跳ね返りの作成(参照:反発係数)
  2. 「x」ニュートンの力でボールを一方向に動かす
  3. 摩擦を多かれ少なかれして、異なる速度でスライドするようにします
  4. 衝突応答:「ここ」にヒットすると、オブジェクトはどの方向に回転しますか?

物理エンジン(または物理エンジンが組み込まれているゲームエンジン)を使用している場合、物理についてほとんど知識がなくても大丈夫です。それでも、物理エンジンが適切に動作していないため、いつ手を汚す必要があるかを知ることは非常に良いことです。


1
物理学については、衝突応答と反発を含む剛体力学に関するChris Heckerの記事は素晴らしいです:chrishecker.com/Rigid_Body_Dynamics
tenpn

25
四元数に言及しましたが、変換行列には言及しませんでしたか?
アンドリューラッセル

8
「ジンブルロックとは、マウスを下に向けて見下ろしたときに停止する効果です。」実際には、通常はプレイヤーの健全性のために行われ、ジンバルロックとは関係ありません。

4
四元数がジンブルロックにリンクされる頻度に驚かされます。クォータニオンをまったく使用せずに3Dゲームを作成しましたが、ロックの問題はありませんでした。3D数学を本当に理解し、実際にジンブルロックが何であるかを知っていれば、その問題は発生しません。
スキズ

7
ジンバルロックは、実際にはオイラー角(通常、テイトブライアン角:ヨー、ピッチ、ロール)を使用した単純な回転によって引き起こされます。Axis-Angleのような代替表現も、その発生を防ぐために使用できます。ただし、クォータニオンには補間が簡単であるという利点があり、そのため一般的に推奨されます。
ジェイソンコザック

51

ゲーム開発がアート制作と同じようにデータ駆動型である日を夢見ています。私は地平線のどこにもそれを見ていないので、今のところいくつかの数学を知ることが必要であるように見えます。

あなたがそれを適用できる限り、数学はテクニックに似ています。

ここに私が見る重要性の順序があります。

  • 算術
  • 線形代数(幾何学的解釈付き)
  • 微積分学(物理学)
  • 組み合わせ論(ランダム化レベル)
  • 確率(バランス)
  • 統計(AIのベイジアンesp。)

続けることができました。知れば知るほど良くなりますが、たくさんの数学を学んだからといって素晴らしいゲームを作れるというわけではありませんが、それは助けになります。


4
微積分学は巨大な分野です。おそらく、ゲーム開発に必要なのはほんのわずかです。
ノルドリン

2
@Noldorinうん。ほとんどの場合、導関数、加速度、速度、および位置の関係を理解すれば十分かもしれませんが、計算は素晴らしいです。
ジョナサンフィショフ

ベイジアンAIは、比較的大きなメモリ使用量、貧弱なデバッグ可能性と予測可能性、および明確に定義された問題スペースのために、ゲームでは使用されない傾向があります。賢いヒューリスティックを使用したクラシック検索の適切な実装は、通常(常にではありませんが)より優れたツールです。

1
私にとって重要なのは特定のベイジアンアルゴリズムではありませんが、ET Jaynesが支持する推論プロセスを理解しています。ベイジアン推論について本質的に遅いものはないと思います。
ジョナサンフィショフ

1
AIを開発しているとき、または一般的に管理/大物ゲームを開発しているとき、統計は素晴らしいです。一方で、私は微積分学にまったく精通していません。統計の分野は確率に関する仕事に由来するため、統計と確率は学習目的では本質的に同じだと主張します。非常に主観的です。
-Rushyo

25

非常に基本的なものはピタゴラスの定理です。距離式とも呼ばれます。

a ^ 2 + b ^ 2 = c ^ 2ここでaおよびbc直角三角形のエッジで、斜辺です。これは、ベクトルの長さを見つけるために、これを行うことを意味します:

距離= sqrt(a ^ 2 + b ^ 2)

興味深いもう1つの注意点は、距離を比較するだけであれば、平方根を取る必要がないことです(比較的コストがかかる場合があります)。そのため、ほとんどのフレームワークには、ベクトルに「距離の2乗」または「長さの2乗」関数があります。


1
私は以前にこのサイトのどこかでこれを読んだことがあると確信しています:)
リケット

確かに、この投稿はそのスレッド/コメントに触発されました。
テトラッド

私はここにいくつかのデジャヴを取得しています... :)
mmyers

2
より一般的には、ベクトルの長さは、それ自体とのドット積の平方根です。だから、sqrt(V dot V)その長さです。したがって、2点間の距離は次のsqrt((A-B) dot (A-B))
とおりです。– greyfade

また、trig

19
  • 3Dと4Dの両方のベクトル、およびWコンポーネントの設定内容
  • 左手と右手の座標系、そしてあなたのゲームはどれですか
  • 内積と、それが有用なもの
  • クロス積と、それが何のために役立つか
  • 行列、それらがどのように方向と位置を表し、どのようにそれらを組み合わせることができるか
  • 四元数

たとえあなたがThe Graphics Guyでなくても、80%の確率でベクトルとベクトル数学を使用することになります。彼らは私たちの楽しいボロネーゼの玉ねぎです。


4
これは悪いリストではありませんが、よりわかりやすい答えを期待していました。すなわち、内積式とは何か、それが何を意味するのか、それがどのように役立つのかということです。
テトラッド

3
@Tetradウィキペディアはあなたにそれを与えませんか?en.wikipedia.org/wiki/Dot_product#Definition
ジョナサンフィショフ

1
特にゲーム用ではありません。
テトラッド

5
します。ドット積は角度の余弦であることがわかります。アプリケーションはまだ何に使用するかに依存しているため、知っておく必要がある(そして知ることができる)のはこれだけです。AIの方向付け?角度が必要なので、ドットはあなたの友達です。レンダリング光?角度が必要です。言えることは、角度(この場合はドット積)に、ベクトルaの長さとベクトルbの長さを掛けた角度のコサインを定義することだけです。それが与えられる知識です。アプリケーションが無限であるため、どの部分をどのように使用するか、どのように伝えることができません。
カイ


10

しっかり把握+-*、と/。それらがなければ、あなたは完全にめちゃくちゃです。


12
これは質問が尋ねていたものではないことに全員が同意できると思います。(%も忘れました)。
-coderanger

2
他の回答はこれに投票されます(基本的な算術)....
RCIX

7
基本的な算術演算だけでなく、2の補数、固定小数点、およびIEEE浮動小数点環境ですべての操作がどのように機能するかを理解します。なぜ0.1 * 3!= 0.3なのか、または-xが期待したものではないのかをしっかりと把握していないと、あなたは台無しになります。

1
@ user744私は実際にめちゃくちゃです、この魔術は何ですか?
ネオンワージ

9

ええ、ゲームプログラミングはかなり数学に集中する傾向があります。必要な数学は、作業内容によって異なります。もちろん、すべてのプログラミングと同様に、基本的な算術演算は必須です。それ以上:

ジオメトリはグラフィックス作業に不可欠です。画面に物を表示したい場合は、座標系を理解する必要があります。そして、それらを基本的な方向以外に動かしたい場合、サイン、コサイン、ベクトル(基本的なトリガー)をしっかりと把握していなければ、完全に失われます。また、3Dで作業する必要がある場合、ジオメトリとトリガーの要件ははるかに複雑になります。

リモートで現実的な物理学をモデル化する場合は、そのための計算が必要です。(結局、ニュートンが微積分を発明するようになったのです。)

あらゆる種類の確率計算では、異常な量の試行錯誤を行うことなく健全な結果を得るために、統計と確率理論の知識が必要です。

おそらくもっとたくさんありますが、それは私の頭上から思い浮かぶことです。


弟が高校のVBクラスのプロジェクトとしてBang-Bangゲームを作ろうとしたときのことを覚えています。彼は、Trig 1をまだ取っていないので、角度とパワーに基づいて砲弾を弧を描くようにする方法がわからなかったことを除いて、すべてがうまくいきました。基本を説明した後、うまくいきました。
メイソンウィーラー

アークにはTrigは必要ありませんs=u.t + a.t.t/2。ただし、初期速度を取得するにはトリガーが必要です(u)。
スキズ

なぜこれほど高くないのですか?私が一緒に働いたプログラマーの半分は、彼らの生活のためにサインとコサインを使うことができません。
ザラトゥストラ

@Skizz:ええ。角度とパワーを初期ベクトルに変えるには、トリガーが必要です。その後、アニメーションループと重力定数が必要になります。
メイソンウィーラー

9

少なくともあなたが必要になるでしょう。

  • 代数
  • 基本的なジオメトリ
  • 基本的な三角法

また、少なくともベクター操作の実用的な知識が必要です。また、マトリックスが何であり、何に使用できるかを知りたいと思うでしょう。ただし、詳細は厳密には必要ありません。

グラフィックスプログラミングを始めたい場合は、さらに多くの数学の知識が必要になりますが、一般的なゲームプレイプログラミングを行うことはそれほど数学を集中する必要はありません。


9

2 進数および 16進数の番号付けシステム、およびそれらを10進数に/から変換する方法。

一般に生の 2進数を扱う必要はありませんが、ブール変数とビットシフトを必要とするFlag変数に頻繁に使用されます。

Hexはそれほど重要ではありません(0xDEADBEEFを処理したい場合を除きます)が、少なくとも、いつ使用されているのか、そしてその理由を認識したいでしょう。


1
16進数が読めない場合、効果的にプログラミングできません。CおよびC ++のほとんどのビット単位の定数は、16進値として指定されます。

私はあなたが持っているBooleanbinary混同していると思います。それらがゲームプログラミングに絶対に必要かどうかはわかりません。
スキズ

@Skizz、良い点-修正。(そしてもう一つの小さな点、それはwikiであり、あなたがそれを変えることを妨げるものは何もありません。:)
Cyclops

16進数が読めない場合は、ツールを使用して変換してください。
トーマスエディング14

6

コンピュータプログラミングの基礎的な数学についての言及はありませんか?グラフ理論、数論、集合論、および具体的な数学は、通常、大学では「離散数学」と呼ばれる苦痛で教訓の乏しいクラスにまとめられています。

「愚かなビットトリック」は、あらゆる種類のプログラム時間を節約し(また、通常はいくつかのストリングトリックおよびセットトリックと同等です)、グラフタイプおよびトラバーサルが(STLコンテナーを選択している場合でも)あらゆる場所で使用されます。また、アルゴリズムの複雑さは、言語がより高いレベルに達するにつれて最適化の鍵となります。


5

ペイオフマトリックスは非常に重要なツールだと思います。ゲームは、興味深いゼロサムフェアプレイバランスに近づくと、より楽しくなることが多く、ペイオフマトリックスは、複雑な場合にそれを定量化するのに役立ちます。このウィキペディアの記事は他のどの記事よりも優れており、次の基本的な必要概念を理解できます。http//en.wikipedia.org/wiki/Normal-form_game


これは私には非常に非現実的です。このような方法を使用して、StarcraftまたはWarcraft 3のバランスが取れたと思いますか?私はそうは思わない、それは反復とプレイテスト、そして絶え間ないパッチングだと思う。
ボボボボ

ええと、彼らはほぼ確実にそうでした。最初のウォークラフトの軍隊は、全体のバランスが取れるように設計されたペイオフマトリックスで作成されたと思われる互いの複製を修正したものでした。その後、彼らは物事を調整するために学んだことを単に構築したかもしれませんが、おそらく3つの異なる軍隊が関与し、スタークラフトIIユニットが追加されたときに、ある程度のバランスをとるためにスタークラフトでもう一度それをしなければならなかったでしょう。明らかに、単にモデルにとどまらず、プレイテストはしばしば出現する特性を示しますが、ペイオフマトリックスは最初に複雑さをモデル化する方法です。
クズカイ

[引用が必要]?
ボボボボ

1
これは:amazon.com/Game-Architecture-Design-New-Edition/dp/0735713634 / ...このサイトで少し参照するのがいいかもしれないので、Amazonバージョンが本の中で検索できるようにしたいです。アマゾンの書籍内検索はそのようには機能しないかもしれませんが。とにかく、彼らは例としてウォークラフトを使用して、ペイオフ行列を検討し、複雑さを管理することの利点が非常に明確だったので、私は即座に変換しました。それはBlizzardが実際にそのアプローチを使用したという保証ではありませんが、彼らは賢い人なので、おそらく数学的な解決策があったでしょう
...-Kzqai

...少なくともバランスを一目で理解できるようにするため。もちろん、それにテストを追加することもできます。私は実際に、ペイオフマトリックスやじゃんけんの関係、あらゆる種類の素晴らしいものについての議論を含む、素晴らしいゲーム関​​連のコンテンツを備えた、より小さく、切り捨てられたパンフレットの力で本を買いました。この本は手がかりであり、C ++プログラミング(これは私のことではありません)だけでなく、AAAタイトル管理の問題も扱っています。しかし、切り捨てられたパンフレットのすべてが素晴らしかった。
クズカイ

4

内積を理解する:2つのベクトルがほぼ同じ方向(θ<90度)の場合、内積は正または負です。プレーヤーが視界にいるときはいつでもテストに使用できます(FOVが90度の場合)。

そして、2Dゲームをより高い次元に一般化します。(ベクトル計算を使用)

自分で3Dエンジンを実装できる場合は、準備ができています。


4

それはあなたが何をしているかによります

すべてのゲームプログラマは、少なくとも高校の代数を知っている必要があります。つまり:

  • 数字のセンス
  • 基本的な数学(加算、サブ、マルチ、除算)で快適に
  • 三角法(sinおよびcos)
  • ベクトル、ベクトル間の角度、内積、外積

グラフィックプログラマは次のことを知っている必要があります。

  • 上記のすべて、および
  • 行列代数(変換行列用)
  • ポリゴン交差法/レイポリゴン(リアルタイム衝突検出のような本を参照してください

あなたの物理プログラマーは知っておく必要があります:

  • 上記のすべておよび
  • 微分方程式
  • 数値法

3

サインとコサイン(私が会ったプログラマーの50-75%が使用方法を知らなかった)に加えて、魔法のアークタン関数と、それを使用してベクトルの角度を取得する方法を学びます。


5
ほとんどの場合atan2、これは象限処理自体を処理するため必要です。
-CodesInChaos

0

誰もクォータニオンに言及していないことに驚いています。私はさまざまなエンジンの経験はあまりありませんが、少なくともJMEはどこでもそれを使用しており、それらはかなり重要な概念であるという印象を受けました。


2
四元数に言及しました。
tenpn

ああ、すみません、見逃しました。
ラウル

3
レンダリングエンジンで低レベルのアニメーションコードを記述するゲームプログラマの1%にとって、クォータニオンは便利なツールです。他の99%のゲームプログラマーにとって、彼らは本当に必要ではありません。
スキズ

-1

ゲームを作成するということは、仮想現実に「現実の」生活をもたらすことです。少ないよりも現実の世界/宇宙についてもっとよく知っている方がよい:) ..数学はただの道具です。そして、あなたが計画を立てているなら、あなたも計画で勉強する時間を置かなければなりません。

編集:私はいくつかの誤解を見ました:) ..あなたが支配する必要がある数学の習得のセットは、あなたが説明したい具体的なものに依存すると思います。誰もがすべてを知っているわけではありません。そして、それを行うより良い方法があります。始めにすべてを学ぶのではなく、小さなピース、使用、学習、使用などを学んでください。その後、適切な計画があれば、開発中にそれを行うことができます。


1
テトリスの実生活はどれくらいですか?
tenpn

たくさんの :​​)。テトリスは、圧力の下での論理的思考についてです。他の論理的なゲームのように。それは練習することです。もっと練習し、より多くのプレッシャーを処理し、それを楽しんでください。私にとっては本当の生活のようです:)
...-サンボッシュ

3
質問に公正に対処できない場合は意味がありません。
ヒースハニカット

@Heath Hunnicutt、あなたは正しい。
サンボッシュ

3
私はその反応を本当に尊重しています。
ヒースハニカット

-2

簡単な答え:たくさん!

詳細な回答:

3Dゲーム、DEFINITELY Calculus、およびPhysics(PhysicsにはCalculusが必要です)を実行している場合、ほとんどの場合、算術、小学校、線形代数、Trig。


3
リストを少し明確にできますか?「3Dゲームを作成している場合のトリガー」または「3Dゲームを作成している場合、絶対に微積分」と言っていますか?
yoozer8
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.