티스토리 뷰

고려대학교 정보대학 컴퓨터학과 2019년 1학기 <컴퓨터그래픽스> 7강 래스터라이저(1)

 

강의영상 플레이리스트 [Link]

강의자료 [Link]

 

 

Books · media lab

Introduction to Computer Graphics with OpenGL ES Review and Recommendations 이 책의 영문 제목 “Introduction to Computer Graphics”를 “A Painless Introduction to Computer Graphics”라는 닉네임으로 바꿔서 부르고 싶다. 수학을

media.korea.ac.kr


컴퓨터그래픽스 래스터라이저(1)

Keywords

  • Rasterizer
  • Clipping
  • Perspective Division
  • Back-face Culling

 

Rasterizer

vertex shader를 거쳐서 나오는 clip space 좌표 정보를 assemble!

"삼각형을 모아서 그 안에 fragments를 만든다"

 

Clipping

clip space에서 정의된 view frustum 경계에 일부만 걸쳐 있는 오브젝트를 잘라준다.

-> 경계면을 기준으로 "새로운 삼각형을 만들어서 넘겨준다"

-> 복잡한 연산이지만 GPU 하드웨어 단에서 수행해주게 됨 (소프트웨어 수준에서 크게 신경x)

 

Perspective Division

projection transform 행렬식의 4행 주목! 

homogeneous coordinates /((0,0,0,1)\)이 아니라 \((0,0,-1,0)\)

 

projection transform matrix * camera space coordinates

homogeneous clip space -> Cartesian space 변환을 위해 \(-z\)로 나누어준다

 

 

\(-z\)는 구체적으로 어떤 역할을 수행하는가?

* \(-z\) = camera space의 xy-평면으로부터의 "거리"를 표현하는 positive value (\(z<0, -z>0)\)

* \(-z\)로 나누어주게 되면 멀리 있는 오브젝트가 가까워지는 효과 발생 (=perspective division)

  * 멀리 떨어져 있을수록 큰 값으로 나누게 되므로 더 작아진다 --> 원근법 구현(멀리 있으면 작고, 가까이 있으면 크다)

-> -1~+1 범위 안에서 좌표값이 결정되게 되므로, 이 결과를 NDC(normalized device coordinates)라고 부른다.

 

Perspective Division -> 원근법을 구현하는 나눗셈

Perspective projection, 원근투영 처리의 핵심

 

 

Back-face Culling

back face -> 카메라를 등지고 있는, camera front face의 정반대에 위치한 폴리곤 영역.

culling -> 골라내서 버리는 작업을 지칭함.

 

Back-face vs. Front-face의 구분

삼각형 폴리곤의 normal을 \(n\)으로 정의하고, 폴리곤의 한 꼭짓점과 카메라까지의 거리를 \(c\)로 정의할 때:

 

* \(n\), \(c\)는 수직을 이루고, 따라서 두 벡터의 내적 dot product = 0이 성립한다. -> "edge-on face"

* \(n\), \(c\)는 좁은 각을 이루고(대체로 비슷한 방향), 두 벡터의 내적 dot product > 0이 성립 ->  "front-face"

* \(n\), \(c\)는 큰 각을 이루고(대체로 반대 방향), 두 벡터의 내적 dot product < 0이 성립 ->  "back-face"

 

projection transform을 거치면(view frustum -> 정육면체), z축에 평행한 "universal projection line"을 정의할 수 있다.

 

 

z축을 날리고, 2차원 평면에서 (x,y) 좌표를 본다 -> 꼭지점 나열순서 CCW면 front-face, CW면 back-face니까 culling

* 행렬식을 통해서 수식으로 위 과정을 판단할 수 있다!

 

 

[예외상황?]

1. 반투명 오브젝트일 경우 back-face도 살려놔야 한다.

2. 오브젝트의 front-face만을 제거하고 싶을 경우 (ex. 단면 잘라서 보여주기)

 

-> 하드웨어가 수행하는 작업이지만, 위 상황에 대응할 수 있도록 api를 제공한다.

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함