모든 게임 프로그래머가 알아야 할 수학은 무엇입니까? [닫은]


163

충분히 간단한 질문 : 모든 게임 프로그래머가 성공하기 위해서는 어떤 수학을 잘 이해해야합니까?

나는 게임 프로그래밍의 틈새 영역에서 수학이나 무언가를 렌더링하는 것에 대해 구체적으로 이야기하고 있지 않습니다. 더 구체적으로 게임 프로그래머조차도 알아야 할 것들이며, 그렇지 않으면 아마도 유용 할 것입니다.

참고 : 정답하나도 없으므로이 질문 (및 답변)은 커뮤니티 위키입니다.

또한 멋진 라텍스 수학 방정식을 원한다면 http://mathurl.com/ 을 사용 하십시오 .


1
음 내가 거기 읽고 난 ... 정말 그나마 그것을 기억처럼 뭔가해야 수학 책에 대한 모든 프로그래머 이야기 주제는했지만 그것이 여기에 있었다 또는 aswell에 유래 있는지 확실하지 않습니다 .... 거기에 몇 가지 좋은 일을했다 생각 롤
Prix



15
Tetrad ♦에
Thomas Eding

1
@ThomasEding 그래, 이것이 명백한 목록 질문 이기 때문에 너무 넓은 것이 더 적합했을지도 모른다 .
Anko

답변:


137

있습니다 많은 유용한 수학의 다른 형태는 있지만, 절대에서 최소한 당신이 알 필요가 :

  • 대수와 산술

이것들은 꽤 기본적이지만, 이것을 모른다면 게임 개발자는 물론 프로그래머도 될 수 없습니다.

게임 세계의 오브젝트는 벡터로 표시됩니다. 벡터는 물체의 위치, 방향 및 속도와 같은 것을 나타냅니다. Dot Product , Cross Product 및 Vector normalization과 같은 벡터 수학 계산 이 필수적입니다.

게임 오브젝트를 어떻게 이동합니까? 초보자는 다음과 같이 말할 수 있습니다.

"알아요! 그냥하겠습니다 :" object.position.x++.

아니, 아니. 벡터 계산을 사용해야합니다. 개체는 개체를 이동하는 데 사용할 수있는 위치, 방향 및 가속도 벡터가 필요합니다. 초보적인 작업을 수행하면 유지 관리 할 수없는 혼란에 빠지게되며 세계의 XYZ 축과 정렬되지 않은 방향으로 어떻게 움직이게됩니까?

게임이 쿼터니언을 사용하는 주된 이유는 Gimbal lock 을 겪지 않고 거의 오일러 각도만큼 회전을 공간적으로 나타 내기 때문 입니다. 오일러 각도가 축을 중심으로 90도 회전하면 짐벌 잠금이 시작됩니다. 즉각 자유도를 잃게됩니다. 쿼터니언은 네 번째 차원을 추가하여이 문제를 해결합니다. 오일러 각을 고수 한 경우 한 축이 ~ 89도 이상 회전하지 않도록 제한해야합니다.

게임에서 물리 반응에 대한 수학을 프로그래밍하려는 경우 물리 클래스를 복용하는 것은 나쁜 생각이 아닙니다.

물리 방정식을 알아야하는 이유 :

  1. 볼 바운스 만들기 (참조 : 배상 계수)
  2. 'x'뉴턴의 힘으로 방향으로 공을 움직입니다.
  3. 마찰이 다른 물체를 만들어 다른 속도로 미끄러지도록합니다
  4. 충돌 응답 : 객체를 '여기'에 닿으면 회전하는 방향은 무엇입니까?

물리 엔진 (또는 물리 엔진이 내장 된 게임 엔진)을 사용하면 물리에 대해 거의 알지 못합니다. 그러나 물리 엔진이 제대로 작동하지 않기 때문에 손을 더러워 야 할 때를 아는 것이 좋습니다.


1
물리, 충돌 응답 및 손해 배상을 포함하여 강체 역학에 크리스 헤커의 기사, 놀라운 있습니다 chrishecker.com/Rigid_Body_Dynamics
tenpn

25
쿼터니언은 언급했지만 변환 매트릭스는 언급하지 않았습니다 ??
Andrew Russell

8
"Gimble [sic] lock은 마우스를 아래로 보았을 때 마우스를 아래로 내려갈 때 멈추는 효과입니다 ...."실제로는 일반적으로 플레이어의 정신을 보호하기 위해 수행되며 짐벌 잠금과는 아무런 관련이 없습니다.

4
쿼터니언이 얼마나 자주 mble 블락에 연결되어 있는지 놀랍습니다. 쿼터니언이 전혀없는 3D 게임을 작성했으며 결코 lock 블 잠금 문제가 없었습니다. 3D 수학을 실제로 이해하고 실제로 mble 블 잠금이 무엇인지 알고 있다면 그 문제는 없을 것입니다.
Skizz

7
짐벌 잠금은 실제로 오일러 각도 (일반적으로 Tait-Bryan 각도 : Yaw, Pitch, Roll)를 사용한 순진한 회전에 의해 발생합니다. Axis-Angle과 같은 대체 표현을 사용하여 발생을 방지 할 수도 있습니다. 그러나 쿼터니언은 보간이 쉽다는 이점이 있으며 일반적으로 이러한 이유로 선호됩니다.
Jason Kozak

51

게임 개발이 예술 제작만큼이나 데이터 중심 인 날을 꿈꿉니다. 나는 수평선의 어느 곳에서도 그것을 보지 못하기 때문에 지금은 수학을 알아야한다는 것이 필수적으로 보입니다.

수학은 기술과 비슷하며 적용 할 수있는 한 더 좋습니다.

여기 내가 보는 중요 순서가 있습니다.

  • 산수
  • 선형 대수 (기하학적 해석 포함)
  • 미적분학 (물리)
  • 조합론 (무작위 화 수준)
  • 확률 (밸런싱)
  • 통계 (AI에 대한 베이지안)

계속 갈 수있었습니다. 더 많이 알지만 더 많은 수학을 배운다고해서 훌륭한 게임을 만들 수는 있지만 도움이 될 수 있습니다.


4
미적분학은 거대한 분야입니다. 게임 개발에는 소량 만 필요할 것입니다.
Noldorin

2
@Noldorin 네. 대부분의 상황에서 미분, 가속도, 속도 및 위치 간의 관계를 이해하면 충분하지만 미적분은 대단합니다.
Jonathan Fischoff

베이지안 AI는 비교적 많은 메모리 사용, 불량한 디버깅 가능성 및 예측 가능성, 잘 정의 된 문제 공간으로 인해 게임에 사용되지 않는 경향이 있습니다. 영리한 휴리스틱을 사용하여 클래식 검색을 올바르게 구현하는 것이 일반적으로 더 좋은 도구입니다.

1
나에게 중요하다고 생각되는 특정 베이지안 알고리즘은 아니지만 ET Jaynes가지지하는 추론 프로세스를 이해합니다. 나는 베이지안 추론에 대해 본질적으로 느린 것이 아니라고 생각합니다.
Jonathan Fischoff

1
AI를 개발하거나 일반적으로 관리 / 타이쿤 게임을 개발할 때 통계는 훌륭합니다. 반면에, 미적분학에 전혀 익숙하지 않습니다. 통계와 확률은 기본적으로 확률에 대한 연구에서 비롯된 통계 분야와 학습 목적의 경우와 동일하다고 주장합니다. 매우 주관적입니다.
Rushyo

25

가장 기본적인 것은 피타고라스 정리입니다. 거리 공식이라고도합니다.

a ^ 2 + b ^ 2 = c ^ 2직각 삼각형의 가장자리는 어디 a이며 빗변입니다. 즉, 벡터의 길이를 찾으려면 다음을 수행하십시오.bc

거리 = sqrt (a ^ 2 + b ^ 2)

다른 주목할 점은 거리를 비교 하는 경우 제곱근을 취할 필요가 없다는 것입니다 (상대적으로 비용이 많이들 수 있음). 그렇기 때문에 대부분의 프레임 워크에는 벡터에 대해 "거리 제곱"또는 "길이 제곱"기능이 있습니다.


1
나는이 사이트의 다른 곳에서 이것을 전에 읽었다 고 확신한다 :)
Ricket

물론,이 글은 그 글 / 댓글에서 영감을 받았습니다.
Tetrad

나는 여기에 데자뷰를 얻는다 ... :)
mmyers

2
더 일반적으로, 벡터의 길이는 자체와 내적의 제곱근입니다. 그래서 sqrt(V dot V)길이입니다. 따라서 두 점 사이의 거리는 다음과 같습니다.sqrt((A-B) dot (A-B))
greyfade

또한 trig identity sin² (x) + cos² (x) = 1의 맥락에서 그것을 이해하는 것이 좋습니다.

19
  • 3D 및 4D 벡터와 W 구성 요소 설정
  • 왼손 및 오른손 좌표계 및 게임
  • 내적 및 유용한 점
  • 교차 제품 및 유용한 기능
  • 행렬, 방향 및 위치를 나타내는 방법 및 결합 방법
  • 쿼터니언

The Graphics Guy가 아니더라도 시간의 80 %를 벡터와 벡터 수학을 사용하게됩니다. 그들은 우리의 재미있는 볼로냐의 양파입니다.


4
이것은 나쁜 목록은 아니지만 더 자세한 답변을 원했습니다. 즉, 내적 제품 공식의 의미, 의미 및 유용한 방법입니다.
Tetrad

3
@Tetrad 위키 백과가 그렇게하지 않습니까? en.wikipedia.org/wiki/Dot_product#Definition .
Jonathan Fischoff

1
구체적으로 게임에는 적합하지 않습니다.
Tetrad

5
그렇습니다. 내적은 각도의 코사인임을 나타냅니다. 응용 프로그램은 여전히 ​​응용 프로그램을 사용하려는 대상에 의존하기 때문에 알아야 할 모든 것입니다. AI 지향? 각도가 필요하므로 점이 친구입니다. 렌더링 빛? 각도가 필요합니다. 말할 수있는 것은 (이 경우 내적 곱) 각도 a의 길이와 벡터 a의 길이, 벡터 b의 길이의 코사인을 정의한다는 것입니다. 그것이 줄 수있는 지식입니다. 응용 프로그램이 무한하므로 사용할 부분과 방법을 알 수 없습니다.
Kaj


10

의 확고한 이해 +, -, *,와 /. 그것들이 없으면 완전히 망쳤습니다.


12
나는 우리 모두 이것이 이것이 질문하는 것이 아니라는 것에 동의 할 수 있다고 생각합니다. (또한 %를 잊어 버렸습니다).
coderanger

2
다른 답변은 이것에 대한 투표 (기본 산술) ....
RCIX

7
기본 산술뿐만 아니라 연산이 2 보완, 고정 소수점 및 IEEE 부동 소수점 환경에서 어떻게 작동하는지 이해합니다. 왜 0.1 * 3! = 0.3인지 또는 왜 -x가 예상과 다른지에 대한 확실한 이해가 없다면, 당신은 망하게됩니다.

1
@ user744 나는 실제로 망했다,이 마법은 무엇인가?
네온 전쟁 27

9

예, 게임 프로그래밍은 상당히 수학 집약적 인 경향이 있습니다. 필요한 수학은 작업중인 내용에 따라 다릅니다. 물론 기본 산술은 모든 프로그래밍에서와 마찬가지로 필수입니다. 그 외에도 :

기하학은 모든 그래픽 작업에 필수적입니다. 화면에 물건을 표시하려면 좌표계를 이해해야합니다. 그리고 기본 방향 이외의 방향으로 이동하려면 사인, 코사인 및 벡터 (기본 삼각법)를 제대로 파악하지 않으면 완전히 잃게됩니다. 3D로 작업해야하는 경우 형상 및 삼각 요구 사항이 훨씬 더 복잡해집니다.

원격으로 현실적인 물리를 모델링하려면 미적분학이 필요합니다. 결국 뉴턴은 미적분학을 발명하게되었습니다.

모든 종류의 확률 계산에는 엄청난 양의 시행 착오없이 제정신의 결과를 얻기 위해 통계 및 확률 이론에 대한 지식이 필요합니다.

아마도 더 많은 것이 있을지 모르지만 그것이 바로 내 머리 꼭대기에서 떠오른 것입니다.


남동생이 Bang-Bang 게임을 고등학교 VB 수업을위한 프로젝트로 만들려고했던 때를 기억합니다. 그는 아직 Trig 1을 사용하지 않았기 때문에 대포가 각도와 힘에 따라 호로 날아가는 방법을 모른다는 것을 제외하고는 모든 것이 잘되었습니다. 기본 사항을 설명한 후에는 정상적으로 작동했습니다.
메이슨 휠러

호에는 Trig이 필요하지 않습니다 s=u.t + a.t.t/2. (u)를 통해 초기 속도를 얻으려면 삼각법이 필요합니다.
Skizz

왜 이것이 더 높지 않습니까? 내가 함께 일한 프로그래머의 절반은 그들의 삶에 사인과 코사인을 사용할 수 없습니다.
zaratustra

@ 스키즈 : 예. 각도와 힘을 초기 벡터로 바꾸려면 삼각법이 필요합니다. 그 후 애니메이션 루프와 중력 상수가 필요합니다.
메이슨 휠러

9

최소한 당신은 필요합니다.

  • 대수학
  • 기본 형상
  • 기본 삼각법

또한 최소한 Vector 작업에 대한 실무 지식이 필요하며 세부 사항이 꼭 필요한 것은 아니지만 Matrix가 무엇인지, 무엇을 사용할 수 있는지 알고 싶을 것입니다.

그래픽 프로그래밍에 들어가고 싶다면 더 많은 수학 지식이 필요하지만 일반적인 게임 플레이 프로그래밍을하는 데 수학이 많이 필요하지는 않습니다.


9

이진수 16 진수 숫자 체계 및이를 10 진수로 변환하는 방법.

일반적으로 원시 이진수 로 작업 할 필요는 없지만 부울 논리 및 비트 시프 팅 이 필요한 플래그 변수에 자주 사용됩니다 .

16 진수는 중요하지 않지만 ( 0xDEADBEEF 처리하지 않는 한 ) 최소한 사용되는 시간과 이유 를 알고 싶을 것 입니다.


1
16 진수를 읽을 수 없으면 효과적으로 프로그래밍 할 수 없습니다. C 및 C ++에서 대부분의 비트 상수는 16 진 값으로 지정됩니다.

나는 당신이있어 생각 Booleanbinary혼합. 게임 프로그래밍에 반드시 필요한지 확실하지 않습니다.
Skizz

@ 스키즈, 좋은 지적-고정. (그리고 또 다른 사소한 점은 위키 입니다. 그것을 바꾸는 것을 막는 것은 없습니다. :)
Cyclops

16 진수를 읽을 수 없으면 도구를 사용하여 변환하십시오.
Thomas Eding

6

컴퓨터 프로그래밍의 기초 수학에 대한 언급이 없습니까? 그래프 이론, 수 이론, 고정 이론 및 구체적인 수학은 일반적으로 모두 대학에서 "이산 수학"이라는 고통스럽고 잘 가르치지 않는 수업에 집중되어 있습니다.

"최고의 비트 트릭"은 모든 종류의 프로그램 시간을 절약하며 (일반적으로 일부 문자열 트릭 및 세트 트릭과 동일) 그래프 유형 및 순회가 사방에 사용됩니다 (STL 컨테이너를 선택하는 경우에도). 언어의 수준이 높아질수록 알고리즘의 복잡성이 최적화의 핵심입니다.


5

지불 행렬은 매우 중요한 도구라고 생각합니다. 게임은 흥미로운 제로섬 페어 플레이 밸런스에 접근 할 때 종종 더 재미 있으며, 지불 행렬은 복잡한 경우에이를 평가하는 데 도움이됩니다. 나는이 위키 백과 기사가 어느 것만큼이나 좋다고 생각합니다. http://en.wikipedia.org/wiki/Normal-form_game


이것은 나에게 매우 비현실적으로 보입니다. Starcraft 또는 Warcraft 3가 이와 같은 방법으로 균형을 잡았다 고 생각하십니까? 나는 그렇게 생각하지 않고 반복과 플레이 테스팅, 지속적인 패치라고 생각합니다.
bobobobo

그들은 거의 확실하게 초기의 워크 래프트 군대가 서로의 복제본을 수정하여 전체 균형을 잡도록 설계된 지불 행렬로 만들어졌습니다. 그 후 그들은 단순히 사물을 조정하기 위해 배운 것에 기초를 두었을지 모르지만, 아마도 세 개의 서로 다른 군대가 참여하고 또 다시 스타 크래프트 II 유닛이 추가되었을 때 합리적인 수준의 균형을 얻기 위해 스타 크래프트로 다시해야 할 것입니다. 분명히, 당신은 단순히 모델에서 멈추지 않고, 플레이 테스팅은 종종 등장하는 속성을 보여 주지만, 페이 오프 매트릭스는 처음에 복잡성을 모델링하는 방법입니다.
Kzqai

[인용 필요]?
bobobobo

1
amazon.com/Game-Architecture-Design-New-Edition/dp/0735713634/… 이 책에서 아마존 버전을 검색 할 수 있기를 바랍니다. 아마존 인북 검색은 그렇게 작동하지 않을 수도 있습니다. 어쨌든, 그들은 워크 래프트를 예로 들어 지불 행렬을 살펴 보았습니다. 복잡성을 관리 할 수 ​​있다는 이점이있어서 즉시 전환했습니다. 블리자드가 실제로 그 접근 방식을 사용했다고 보장 할 수는 없지만, 그들은 똑똑한 사람들이기 때문에 아마도 수학적 해결책을 가지고있을 것입니다.
Kzqai

... 적어도 한 눈에 균형을 이해할 수있는 방법. 분명히 테스트를 추가하고 싶을 것입니다. 실제로 대금 상환 매트릭스와 가위 바위 보 관계 및 모든 종류의 훌륭한 것들에 대한 토론을 포함하여 멋진 게임 관련 콘텐츠가 포함 된 더 작고 잘린 팜플렛의 강점에 대한 책을 구입했으며 book은 하나의 주제이며 C ++ 프로그래밍 (내 것이 아닌)과 AAA 타이틀 관리 문제를 다루고 있습니다. 삭감 팜플렛의 모든 것이 훌륭했습니다.
Kzqai

4

내적 이해 : 두 벡터가 같은 방향 (세타 <90도)을 가지면 내적은 양 또는 음입니다. 플레이어가 시야에있을 때마다 테스트하는 데 사용할 수 있습니다 (FOV가 90 도라고 가정).

그리고 2D 게임을 더 높은 차원으로 일반화하십시오. (벡터 계산 사용)

혼자서 3D 엔진을 구현할 수 있다면 좋습니다.


4

그것은 당신이하고있는 일에 달려 있습니다 .

모든 게임 프로그래머는 최소한 고등학교 대수학을 알아야합니다. 그것의 의미는:

  • 숫자의 좋은 감각
  • 기본 수학의 편안함 (추가, 하위, 복수, 나누기)
  • 삼각법 (sin 및 cos)
  • 벡터, 벡터 간 각도, 내적, 교차 곱

그래픽 프로그래머는 다음을 알아야합니다.

  • 위의 모든
  • 행렬 대수 (변환 행렬)
  • 다각형 교차 법 / 광선 다각형 ( 실시간 충돌 감지 와 같은 책 참조)

물리 프로그래머는 다음을 알아야합니다.

  • 위의 모든
  • 미분 방정식
  • 수치 적 방법

3

사인 및 코사인 (만난 프로그래머의 50-75 %는 사용 방법을 몰랐 음) 외에도 마법의 아크 탄 함수와 벡터 각도를 얻는 데 사용할 수있는 방법을 배우십시오.


5
대부분 atan2사분면 처리 자체를 처리하므로 원하는 경우 가 있습니다.
코드 InChaos

0

Quaternions를 언급 한 사람이 없다는 것에 놀랐습니다 . 나는 다른 엔진에 대한 경험이 많지 않지만 적어도 JME는 어디서나 그것을 사용하며 매우 중요한 개념이라는 인상을 받았습니다.


2
나는 쿼터니언을 언급했다.
tenpn

아 죄송합니다.
Raoul

3
렌더링 엔진에서 저수준 애니메이션 코드를 작성하는 게임 프로그래머의 1 %에게는 쿼터니언이 유용한 도구입니다. 게임 프로그래머의 다른 99 %에게는 실제로 필요하지 않습니다.
Skizz

-1

게임을 만드는 것은 "실제"생활을 가상 현실로 만드는 것입니다. 현실 세계 / 우주에 대해 적은 것보다 더 많이 아는 것이 좋습니다. : .. 수학은 도구 일뿐입니다. 그리고 계획을 세우고 있다면 계획도 공부할 시간을 가져야합니다.

편집 : 나는 약간의 오해를 보았다 :). 나는 당신이 지배 할 필요가있는 수학 습득 세트는 당신이 묘사하고 싶은 구체적인 것들에 달려 있다고 생각합니다. 아무도 모든 것을 알지 못합니다. 그리고 더 좋은 방법은 그것을하는 것입니다. 처음부터 모든 것을 배우지 말고, 작은 조각을 배우고, 사용하고, 배우고, 사용하십시오. 그런 다음 계획이 좋으면 개발 중에 할 수 있습니다.


1
테트리스에는 실생활이 얼마나 있습니까?
tenpn

많은 :). 테트리스는 보장 아래에서 논리적 사고에 관한 것입니다. 다른 논리 게임처럼. 실용에 관한 것입니다. 더 많은 실천, 더 많은 u를 처리하고 여전히 재미를 가질 수 있습니다. 나에게 현실처럼 보인다) ...
samboush

3
질문을 공정하게 다루지 않으면 말이되지 않습니다.
Heath Hunnicutt

@Heath Hunnicutt, 당신 말이 맞아요.
samboush

3
나는 그 응답을 정말로 존중합니다.
Heath Hunnicutt

-2

간단한 답변 : 많이!

자세한 답변 :

산술, 초등 및 선형 대수, 대부분의 경우 3D 게임, DEFINITELY 미적분학 및 물리학 (물리학에는 미적분학이 필요합니다)을 작성하십시오!


3
리스트를 좀 더 명확히 할 수 있습니까? "3D 게임을하는 경우 리그"또는 "3D 게임을하는 경우 DEFINITELY 미적분학"이라고 말하고 있습니까?
yoozer8
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.