[컴퓨터 그래픽스] Rasterization

딱지의겨울

·

2021. 4. 11. 17:49

각 vertex(양끝점)가 어디에 mapping이 될지만 처리한 상황.

Rasterization(레스터화): 양 끝점을 연결하는 선이 지나는 곳 을 연산을 해줘야 함.

 

Rasterization

- 한 픽셀이 어떤 primitive (vertex로 부터 정의된)에 해당이 되는지 결정.
- Fragment(후보 픽셀: 여러 개중 한 개가 결정)을 만듦.
-
Interpolation(보관): 양 끝점 내부의 값을 계산하는 것. (<>Extrapolation: 양 끝점의 바깥쪽을 계산하는 것)

 

Scan Conversion of Line Segments

- 일차적으로 어떤 픽셀들이 라인에 해당하는지 찾아야 함 (픽 셀 좌표)
- 양 끝의 좌표를 아는 상태(변환 완료): 정수 값으로 저장 되 어 있음 (x
1, y1), (x2, y2)

- 𝑚=∆y/∆x(∆𝑦,∆𝑥도정수값) 

DDA Algorithm

- Digital Differential Analyzer: y= mx + h 에서 곱하기와 더하 기의 연산을 줄여보기 위한 방법.
- m은 결국 변화량.x가 1만큼 증가했을 때의 y의 증가량은 m.

- 𝑚=∆y/∆x= (y2 - y1)/(x2-x1), (∆𝑦,∆𝑥도정수값) 

- DDA를 사용하면 각각의 연산에 더하기만 해주면 됨. ∆𝑥=1

- 문제점: m의 값이 1보다 클 때, y는 1칸 이상 벌어짐

- 해결 방법: 1 ≥ 𝑚 ≥ 0 일 때는 그냥 사용, m > 1 일 때, x 와 y값을 바꿔 주면 됨.

 

Bresenham's Algorithm

- 실수 연산을 없애고 싶을 때. 실수 연산이 훨씬 시간이 오래 걸림.
-
1 ≥ 𝑚 ≥ 0 일 때만 고려. ( m>1 일 때는 x, y만 바꾸면 되 니까)

- 픽셀의 중심은 Half integers (0.5, 0.5) 로 가정.
- 현재 위치에서 다음 칸으로 갈 때, 바로 옆이거나 대각선으로 그려지거나 두가지 경우 밖에 없기 때문에, 정 확한 y 좌표 없이 둘 중에 하나면 결정하면 됨.

- d가 정수가 되는지 확인: ∆𝑥를 곱해서 가능

- d < 0: 바로 옆의 픽셀을 그린 케이스

- d > 0: 대각선 위 픽셀을 그린 케이스

- 결론: 처음에만 dk 를 계산해주고 dk 가 음수인지 양수인지 만 따져서 dk+1 계산 가능.

 

Polygon Scan Conversion

- 각 꼭짓점에 대한 계산 완료(Color, 위치, ..), 각각의 꼭짓점 이 어떻게 연결되는 지에 대한 정보가 주어진 상태.
- 어디가 내부이고 외부인지 판별해야 함.
- Convex한 경우: 삼각형인 경우 법선 벡

터의 방향성을 가지고 판단 가능.
- Odd event test: 선이 만나는 횟수?

 

Winding number

- 몇 번 감겼는 지를 세는 것.
- winding number: 모든 지점을 다 보기 위해서 몸을 돌려야 하는 횟수.
- Convex 한 경우에 내부에 있으면 한 바퀴 돌아야 하고, 외 부면 돌 필요 없음.
1) 짝수(0 포함) = 외부, 홀수 = 내부
2) 0이면 내부, 0이 아니면 외부라고 판별하면 꽉차게 그려짐.

 

Filling in the Frame Buffer

- 내부인지 외부인지 판별하고 나서 내부를 채울 차례.
- Convex Polygon(오목한 부분이 없는) only >> 별모
양 같은 것은 Convex 하도록 쪼갬
- 내부의 color 결정: 선인 경우는 선형적으로 쉽게 결정 가능 ( Gouraud Shading: 삼각형일때 각 정점의 색을 상대적인 비 율을 따져서 색을 결정하는 것. )

- z-buffer Algorithm: 카메라 앞에 물체가 여러 개 겹쳤을 때

 

Scan Line Fill

- 내부를 어떻게 채우는가?
- vertex order 순으로 정점이 나열 >> Scan 하는 순으로 정렬 바꿔줘 야 함. Sort by Scan line
- 각 라인 단위로 채워나감. 내부에 있는 값 결정

Interpolation

- 양 끝 값이 주어졌을 때, 내부를 그 값을 가지고 결정하는 방식

 

Flood Fill

- Scan Conversion: 한 줄씩 interpolation 해서 내부를 채워 야 할 때

- 한 점을 찍으면 그 점으로부터 경계까지 내부를 채워주는 방식 (ex) 그림판의 페인트 아이콘

- SeedPoint:내부에 속하는 한 점을 알고 있어야 함. 재귀적으로 내부의 점들을 채워주는 방식

- 주변에 있는 점들을 각각 호출해서 색을 채워나감. 칠해져 있는 쪽은 보지 않기 때문에 경계선은 무조건 칠해져 있어야 함.
- 한 영역을 같은 색으로 채우는 경우에 가능.

 

Aliasing

- Scan Conversion에서 발생하는 문제: 걸쳐지는 픽셀들을 칠 하면 계단식으로 표현이 될 수밖에 없음.
- 많이 겹쳐진 영역과 아닌 영역이 있음. 선 위에 있는지 없는 지 판별 할 때, pixel의 중심점을 가지고 판별.

- 해상도를 높이면 나아짐. (300 dpi)
- Polygon Aliasing: 더 심각해 질 수 있음.

1) 경계선이 지그재그가 됨
2) 작은 다각형은 아예 그려지지 않을수도있음
3) 한 영역에 여러 다각형이 들어 올때어떻게색을결정할것인지

- Formal 정의: 불충분한 샘플링 때문에 발생하는 오류 (ex) Nyquist frequency

 

 

 

 

 

Anti-aliasing

- 해결방법: 더 많이 Sampling BUT 한계가 있음

1) Area Averaging (간단한 방법)

:이미지를 크게 키웠다가 줄임. 10x10이 5x5로 바뀔 때 한 픽셀 에 있는 걸쳐진 색들이 섞여서 결정됨. 좀 더 표현을 할 수 있 도록 해줌. 각 픽셀이 선을 얼마나 함유하고 있는지에 따라서 색을 섞어주는 방식

2) Full-Screen

'CS > 컴퓨터 그래픽스' 카테고리의 다른 글

[컴퓨터 그래픽스] 3D Object Modeling  (0) 2021.04.11