Machineboy空

게임 콘텐츠의 제작 원리 2-2. 내적 본문

Game/게임 수학

게임 콘텐츠의 제작 원리 2-2. 내적

안녕도라 2025. 2. 28. 15:29

1. 벡터의 내적 ( Dot Product )

벡터 상에서 존재하는 특별한 연산 방법.

 

벡터의 연산

  • 기본 연산 
    • 벡터와 벡터의 덧셈
    • 벡터와 스칼라의 곱셈
  • 유용한 연산

기본 연산이란?

  • 벡터 생성에 관여하는 중요한 연산

선형 조합을 사용해 새로운 벡터를 생성했었다.


유용한 연산의 종류

  • 벡터와 벡터의 곱 (a, b, c) · (d, e, f) = (ad, be, cf) : 색상 혼합에 많이 쓰임
  • 벡터의 내적 : 벡터의 응용에서 70-80은 쓰임
  • 벡터의 외적 (3차원에서만 성립)

벡터의 내적 (Dot Product)

  • N차원으로 늘어나도 같은 차원끼리 곱하고 더하는 방식으로 동작.
  • 결과값은 항상 스칼라
(a,b) · (c,d) = ac + bd 

 

벡터의 내적의 성질

 

유용한 벡터 내적의 식

(u + v) · (u + v) = u ·  u + v · v + 2(u · v) = |u|^2 + |v|^2 + 2(u · v)


벡터 내적의 코사인 공식

 

벡터 내적에서 가장 중요한 공식

a  ·  b = |a||b|cosθ
벡터 a와 벡터 b의 내적은 벡터 a의 크기와 벡터 b의 크기에 벡터 a와 b가 이루는 사잇갓 θ의 cos값을 곱한 것과 같다.

 


코사인 공식의 유도


벡터 내적의 직교성 판별

 

벡터의 크기가 0이 아닐 때 내적이 0이 나오는 경우는 코사인 함수가 0일때이다.

이는 두 벡터가 서로 직각을 이룰 때만 성립된다.

두 벡터가 90º를 이루고 있는 성질을 직교성이라고 한다.

 

표준 기저 벡터 e1(0,1), e2(1,0)을 내적하면 0이 나온다.

 

두 벡터가 직교한다는 것을 직접 그림으로 확인하지 않아도 내적으로 증명할 수 있다.


리지드 트랜스포메이션 (Rigid Transformation)

rigidbody = 물리학에서 강체, 물체의 형태가 변화하지 않는 최소 단위를 의미함

 

물체의 형태가 변하지 않는 변환의 조건은 무엇인가?

  • 공간을 구성하는 모든 기저 벡터의 크기가 1
  • 모든 기저 벡터가 서로 직교하고 있어야 함
  • 선형 변환의 행렬식 값이 1

이를 만족하는 변환은 회전 변환이다.

회전변환 행렬

따라서 회전 변환은 물체의 형태를 변형시키지 않는다.


2. 벡터의 내적의 활용

앞 뒤 판별

벡터 내적의 코사인 공식을 활용해 목표물이 앞에 있는지 뒤에 있는지 파악할 수 있다.

사잇각이(-90º, 90º) 범위에 있으면 앞에 있음을 의미하고 코사인 함수는 해당 범위에서 항상 양의 값을 가진다.

두 벡터를 내적한 결과가 양수: 앞, 음수: 뒤에 있음을 바로 파악할 수 있다.


시야 판별

각 α가 시야각의 절반 값 β/2 보다 작다면 목표물은 시야각 내에 위치한다고 볼 수 있다.

그렇다면 이를 어떻게 파악할 수 있을까?

  1. cos  β/2 값을 미리 구해 저장해둔다.
  2. 시선 벡터와 목표물로 향하는 벡터의 크기를 1로 조정한다. 그렇다면 두 벡터의 내적은 cosα가 된다.
  3. 코사인 함수(0º, 180º) 범위에서 각이 증가할수록 값이 감소한다.
  4. 따라서 두 코사인 함수 값을 비교해 cosα값이 더 크면 시야범위 내에 있다고 판단한다.


음영 계산

 

램버트 코사인 법칙

물체 표면이 반사하는 빛의 휘도(Luminance)는 표면 방향과 광원 방향의 사잇각의 코사인 값에 비례한다.

(표면 방향 벡터 N) · (표면에서 광원으로 향하는 벡터 L을 정규화한 벡터)를 내적하여 해당 광원이 얼마나 들어왔는지 파악할 수 있다!

 

이 공식은 셰이더 조명 공식의 가장 기본 식이며 흔히 N · L 로 불린다.

N · L 로 명암을 만든 가장 기본적인 셰이더 조명의 결과 화면은 다음과 같다.

 

Diffuse Shader

내적만을 사용해서 음역을 표현


투영 벡터 공식