본문 바로가기

ComputerGraphics [고려대학교_한정현]

1강 그래픽스란 ,2강 수학

[출처 :컴퓨터그래픽스 고려대학교 - 한정현]

 

[3D 컴퓨터 그래픽스]
3차원으로 표현된 물체를 입력으로 받아서 2차원 영상을 출력하는 것


[2차원 영상]

연속적으로 프레임을 보여주면 물체의 움직임을 보여줄 수 있다.

 

[실시간 그래픽스]

  얼마나 빠른 frame per sconds  에 따라 구분됨
  ex) 게임, 가상현실, 증강현실 : 30 fps 이상

 

[비실시간 그래픽스]

  빠른 프레임보다는 실사와 구분되지 않게 사진현실적(photorealistic images) 만들어내는것이 목표
  ex ) 영화
  
해당 수업에서는 OpenGL 을 이용해서 실시간 그래픽스를 공부할것

[그래픽스 생성 과정]
 modeling > rigging > animation > rendering > post-processing
 ------------------------------------------
  ㄴ offline (max,maya)  ---------------------------------------------------
                                         ㄴrun-time

[Modeling]
 실제 물체를 컴퓨터에서 만들어냄
 - 대부분 polygon meshes 를 사용 ( 다각형 메쉬 )
 - Polygon meshs 에 입혀실 texture 를 만든다.

[Rigging]
 움직임을 구현하기 위해서 Skeleton 을 만들고
 그것을 polygon mesh 내부에 집어넣고
 뼈과 polyon mesh 의 꼭지점들의 상관관계를 만들어준다면
 뼈가 움직이면 polygon mesh 가 움직이게 된다.

[Animation]
 skeleton motion 을 만든다.

[run-time]
 런타임에 애니메이션화된 스켈레톤 모션들을 작동시킨다.

[Rendering]
 - 재생을 할 뿐더러 , 삼차원 관계형으로부터 2차원 영상을 만드는 것인데, 
   이를 위해서는 texturing ligthing이 필요하다.

[Post-processing]
 - 빠르게 움직이는 것은 흐리게 보여야한다. ( motion blur ) 빠르게 움직이는 방망이를 흐리게 해주는것

[게임이 작동하는 아키텍쳐 ]

APP  게임 애플리케이션
GameEngine  게임 엔진이라는 툴을 사용한다.( 유니티 , 언리얼엔진 ) 
 게임 엔진은 animation , rendering, post-processing 을 다 포함하고 있다.
Graphics API  게임엔진은 그래픽스 API 위에 만들어진다.  
 OpenGL, OpenGLES의  API는 약 250여개 가량의 함수 호출을 이용하여단순한 기하도형에서부터 복잡한 삼차원 장면을 생성할 수 있다
GPU  그래픽스 프로세싱 유닛이다. 

 


### 수학기초 ###

[Matrix]


[Vector]
  2D row Vector (x,y) 
  2D column Vector( x 
                             y )   OPENGL 은 column vector를 이용한다.
  3D row Vector (x,y,z)

[Traspose행렬(전치행렬)]
  A*B 의 전치 = B전치 * A전치 와 동일하다.

[Identity Vector]I
 1 0
 0 1  같은 대각선이 1인 행렬을 이야기 한다. 어떤 행렬을 곱하건 동일 행렬이 나온다.

[Inverse Matrix]
 AB =I 일떄
 A = B^-1  가 되고 이는 역행렬 관계라고 말할 수 있다.
 (AB)^-1 =  B^-1*A^-1 이 된다.



[normalization정규화] 
 v/||v|| 벡터를 자기 자신의 길이로 나눈것 ( 길이가 1이 되고 방향만 남는다. )
 정규화가 된것을 UnitVector 단위벡터라고 한다.

[Coordinate System and Basis]
  좌표계 = 원점(origin) + 기저 (Basis) = 공간이라고 부르기도 한다.

[Orthonormal]
  orthonormal 한 벡터 2개로는 평면상의 모든 좌표를 만들어 낼 수 있다.
  orthonormal standard : (1,0)  (0,1)  90도를 이루는 정규화된 basis에 놓여잇는단위벡터 2개
  orthonoraml non-standard : (1/root(2), 1/root(2))  (-1/root(2), -1/root(2)) 90도를 이루지만 basis는 아닌 것

[Dot Product]A·B
 Inner Product 라고도 쓴다. ( 내적 )
 A와 B를 n차원 벡터라고 생각했을 때
 수학적으로는
    A·B =  A1B1 + A2B2 + .. + AnBn 이 된다.
 기하학 적으로 보았을 때
    A·B = |A||B|cosΘ 가 된다. 
    ex)두개가 수직을 이룰때 무조건 0 이 된다. ex)  (0,1)·(1,0) = (0,0)
    ex)두개가 예각을 이룰때 >0
    ex)두개가 둔각을 이룰때 <0

  단위벡터 자기자신을 내적하면 1 이 된다. 
  basis unit vector 2개  스스로내적:1 서로내적:0
  orthonoraml vectors 2개 스스로내적: 1 서로내적:0

[Cross Product]AXB
 3D에서만 정의가 된다. 
 방향 : 오른손의 손가락 이 a->b를 지나가게 하면 엄지의 방향이 crossproduct 방향이 된다.
 길이 : |a||b|sinΘ ( 두벡터가 이루는 평행사변형의 면적과 같다. )
 좌표 : A(Ax,Ay,Az) x B(Bx,By,Bz) => (AyBz-AzBy, AzBx-AxBz, AxBy-AyBx)
 ex) 자기 스스로 CrossProduct 하면 크기(0,0,0) , 수직방향이 된다.
 ex) AxB = -BxA
 ex) 직각인 벡터끼리일때 : 길이 가장 길다  |A||B|
 ex) 180도일때 , 0도 일때 : 길이 0
  위키가면 영상 예시 볼 수 있음 
 
[Line,Ray, Linear Interpolation]
p0, p1 두점이 주어졌을때 직선을 나타내는 수식
 Vector (p0 p1 두점을 잇는 벡터) : p1-p0 
 p(t) = 시작점p0 +t(두점을 잇는 벡터p1-p0)
 t는 매개변수라고 하고, 매개변수 방정식으로 말한다.
 ex) t=0 :   시작점 p0 가 된다.
 ex) t=1 :   도착점 p1 가 된다.
 ex) t=0.5 :  시작점과 도착점 중간
 ex) t의 범위에 따라서 해당 직선에 있는 모든 점을 나타 낼 수 있다.
 ex) t가 양수(무한대)라면 시작점에서 뻗는 무한 직선이 된다.
 ex) t가 (0~1) 이라면 line 선분이 만들어진다. 
     t : 1-t 비율 위치에 있는 점을 가리킴
 ex) 양끝점을 끝으로 하는 선분에 위치한 점들은 t를 배정함으로써 정의할 수 있다. 이를 양 끝점을 선형 보간(Linear Interpolation)해서 얻을 수 있다고 한다.

[컬러보간]
 RGB 값을 보간법을 이용해서 중간값을 뽑아온다.
 t가 0.5일때 magenta색 ( 흐린마젠타색 )
 빨<>파
 노<>청록
 검<>흰