컴퓨터그래픽스 21. Stencil Buffer가 무엇인가
Stencil Buffer가 무엇인가? 특정 픽셀의 렌더링을 제한하거나, 제어할 수 있다. 이를 통해 마스킹 효과, 특수한 이미지 효과를 구현할 수 있다. Stencil Buffer는 8비트(0~255) 정수형 데이터 타입으로 구성된다. 렌더링 여부만 파악하면 1비트만 있어도 되는거 아닌가? 왜 8비트나 사용할까? 여러 비트를 다른 목적으로 동...
Stencil Buffer가 무엇인가? 특정 픽셀의 렌더링을 제한하거나, 제어할 수 있다. 이를 통해 마스킹 효과, 특수한 이미지 효과를 구현할 수 있다. Stencil Buffer는 8비트(0~255) 정수형 데이터 타입으로 구성된다. 렌더링 여부만 파악하면 1비트만 있어도 되는거 아닌가? 왜 8비트나 사용할까? 여러 비트를 다른 목적으로 동...
Backface Culling는 무엇인가? 카메라를 등지는 면은 보통 카메라에 보이지 않는다. 따라서 렌더링에서 제외하면 연산을 많이 줄일 수 있다. 어디까지를 Backface인지 그 기준은 무엇이고, Backface를 어떻게 감지할까? 만약 면의 법선 벡터를 알고 있다면, 카메라 시선 벡터와 면의 법선벡터가 나란하면 후면일 것이고, 나란하지 ...
Viewport Mapping이 무엇인가? 클립 공간에서 클리핑이 일어나고, 이후 Screen Space로 Vertex가 Mapping된다. 어떻게 화면 공간으로 옮길까? 우선 화면의 해상도를 알아야 한다. OpenGL에선 추가적으로 Screen의 좌측 하단 좌표인 ((x,y))도 설정 가능하다. glViewport(0, 0, 1...
Clipping이 무엇인가? 화면 밖에 있는 객체를 그릴지 말지 결정하는 방법이다. 즉, 어떤 부분이 카메라에 보이는지 알아채야 한다. 어떻게 가능할까? (1) Point Clipping 그냥 Vertex의 위치가 화면 안에 있으면 그리고, 그렇지 않으면 버린다. 사영된 Vertex의 위치를 ((x,y))라고 하자. [x_{min} < x &...
OpenGL의 Primitive가 무엇인가? Primitive는 여러개의 Vertex를 이어서 어떤 도형을 만들건지에 대한 규칙을 정하는 것이다. 같은 정점 데이터여도, Primitive Type에 따라 다른 도형이 그려진다. glDrawArryas(PRIMITIVE_TYPE, start, count); 그릴 때 Primit...
색깔은 어떻게 표현할까? 빛은 전자기파면서 광자(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 (...