컴퓨터그래픽스 15. 컴퓨터에서 색깔을 어떻게 표현할까
색깔은 어떻게 표현할까? 빛은 전자기파면서 광자(Photon)다. 우리는 전자기파 중 특정 파장의 영역만 볼 수 있다. 가시 광선이다. 특정 가시광선 파장을 갖는 단일 전자기파가 우리 눈에 들어오면, 색을 볼 수 있다. 그런데 전자기파는 항상 단일로 존재하진 않는다. 파동이기 때문에, 여러 파장 성분이 중첩되어 있을 수 있다. 여러개의 가시광선으로 중...
색깔은 어떻게 표현할까? 빛은 전자기파면서 광자(Photon)다. 우리는 전자기파 중 특정 파장의 영역만 볼 수 있다. 가시 광선이다. 특정 가시광선 파장을 갖는 단일 전자기파가 우리 눈에 들어오면, 색을 볼 수 있다. 그런데 전자기파는 항상 단일로 존재하진 않는다. 파동이기 때문에, 여러 파장 성분이 중첩되어 있을 수 있다. 여러개의 가시광선으로 중...
Rasterization에서 픽셀을 어떻게 생성하는가? 먼저 Primitive 테두리에 해당하는 픽셀을 구한다. 이후 내부 픽셀들은 Fill Algorithm으로 구하여 프래그먼트를 생성한다. 선분의 시작과 끝 Vertex점의 픽셀 위치를 알고 있다 치면.. 선분은 어떻게 그리는가? 방법 (1) 시작 점을 기준으로 주변 점 8개를 (\varep...
왜 NDC 좌표계가 필요한가? 만약 클립 공간에서 바로 스크린 공간으로 넘어간다고 가정해보자. 뷰포트 변환을 어떻게 할 진 모르겠지만, 비율이 같아도 해상도가 다르다면 다른 화면을 보게 된다. 그것을 해결하기 위해 표준화된 좌표계를 만든다. 이를 Normalized coordinate라고 한다. OpenGL의 normalized coordinate는...
Primitive를 어떻게 표현하는가? (1) 점 : 원점과 벡터로 이루어진다. (2) 직선 직선은 (한 점 + 방향 벡터) or (두 점)이 주어지면 알 수 있다. [\vec{P} = \vec{Q} + \alpha \vec{v}] 두 점이 주어지면, 두 벡터를 빼서 방향 벡터를 만들 수 있다. [\vec{P} = \vec{Q} + \alpha ...
최적화 기법에는 무엇이 있는가? 알아보기 전에, 성능에 문제가 생기는 부분은 어떤 부분일까? 여러 원인이 있을 수 있다. GPU의 연산 양이 너무 많음 (셰이더가 복잡하거나, 픽셀이 많거나) Bus 작업이 많음 (Bus 사용은 느리다) 메모리 공간 부족, 데이터 너무 큼 GPU의 연산을 줄이자! (1) Levels-of-Detail (...
ㅇ Projection은 어떻게? 투영(사영)이란 무엇인가? 어떤 집합을 부분 집합으로 조건을 만족시키며 옮기는 과정이다. 컴퓨터 그래픽스에선, 카메라가 바라보는 영역 위의 모든 점을 평면 위로 사영하거나, 정규화된 영역 위로 사영한다. 카메라가 보는 시야를 Viewing Volume이라고 부른다. 즉, Vertex를 View Plane 위로 사영하거...
View Transform은 어떻게? 물체를 본다는 것이 무엇인가? 카메라 위치가 존재하고, 얼마나 볼건지 설정하고 (Viewing Volume 설정) 투영 후 클리핑, 백페이스 컬링을 하는 것. View Transform은 모든 Vertex를 카메라 기준 좌표계로 옮기는 과정이다. 카메라 기준 공간으로 변환하기 위해선, 카메라의 위치와 Up, Ey...
Model Transform은 어떻게? Application Stage에서 Object의 Position, Rotate, Scale 정보를 가지고 있다. Position 정보를 가지고 평행 이동 행렬 (T)를 만든다. Scale 정보를 가지고 Scaling 행렬 (S)를 만든다. Rotate 정보를 가지고 회전 행렬 (R)을 만든다. 그런데 보통 회전...
Vertex Processing이 무엇인가? Vertex Processing이란 한마디로, Local Coordinate로 기록된 Vertex 좌표를 Clip Space 위의 좌표로 옮겨주는 과정이다. 이 과정을 어떻게 해야할까? (1) Model Transform 먼저, 오브젝트의 중심점을 기준으로 상대적으로 기록되어있던 좌표를 Local Coor...
데이터를 받은 GPU는 무슨 작업을 하는가? Geometry State 부분에 해당한다. 데이터는 Graphics Pipeline을 타고 내려가서 프레임 버퍼에 쓰여진다. Pipeline이란 Vertex에서 Pixel이 되는 흐름이다. Pipeline 과정을 살펴보자. 위 그림에서 초록색은 프로그래머가 프로그래밍 가능한 부분이다. 노란색은 프로그...