Game/Computer Graphics(6)
-
illumination and lighting
CG에서 조명은 빛과 물체간 상호작용을 처리하는 기술로, 일반적으로 local illumination과 global illumination 모델 두가지로 구분된다. local illumination은 광원으로부터 물체에 직접 들어오는 빛만을 고려하는데, 문제는 실세계의 모든 물체는 간접 조명을 받는다. 그러니까 예를 들어서, 광원이 안보여도 어디서 반사되서 들어온 빛이 들어올 수 있다는 것이다. 이걸 반영한게 global illumination이라고 할 수 있겠다. 근데 RTX 드립이 괜히 나온게 아닌게, global 조명 모델은 많은 연산을 필요로 한다. 광원만 때려서 계산하면 편한데, 반사되서 들어오는걸 언제 다 계산해야된단 말인가? 그리고 (일반적인 CUDA같이) GPU 구조는 지역 조명 모델에 보..
2026.08.31 -
프래그먼트 처리와 출력 병합
.. 여튼 프래그먼트는 깊이, 노멀, 텍스쳐 좌표, RGB 색상등의 속성을 포함할 수 있게 된다. 이런 속성을 이용해서 각 프래그먼트의 최종 색상을 정하게 되는데 - 대표적으로 조명과 텍스처링이 이 과정이라고 할 수 있겠다. Texturing말 그대로 그림을 가져다가 붙이는 작업이다. 걍 물체의 표면 위에 이미지를 펴 바르는 방식인 셈이다. 그리고 이를 위해서 텍스처와 물체 표면간 대응 관계가 성립되게 한다. 다만 그냥 평범한 index를 쓰게 된다면 - 특정 텍스처에 폴리곤 메쉬가 종속되는 문제가 발생할 수 있을 것이다. 예를 들어서, 마인프래프트의 리소스팩이 16x16으로 고정된다면 고퀄리티의 리소스팩은 나오지 못할것이다. 이러한 문제를 해결하기 위해서 각 정점마다 정규화(Normalized)된 텍..
2026.08.28 -
Scan Conversion
Scan Conversion의 정의는 삼각형의 Vertex별 속성을 보간하여 각 픽셀 위치에 할당하는 것을 의미하는데, 그냥 쉽게 말해서 아날로그 형태의 어떤 도형을 픽셀로 그려내는 과정이라고 생각하면 편할 것이다. 대충 뷰 포트 내부의 삼각형을 생각해보면, 정점 별 속성을 보간할때 X/Y좌표가 사용된다. (z좌표는 스크린 공간에서의 깊이가 된다.) 이때 정점별 속성은 삼각형의 변을 따라서 선형 보간(Linearly Interpolate)된다. 이를 위해서는 각 변마다 기울기를 계산해야만 한다. 이 과정은 생각보다 어렵지는 않으므로 생략하도록 하고, 특이적으로 스캔 변환 단계에서 선형 보간은 변을 따라서, 그 다음에는 스캔 라인을 따라서 수행됨을 기억해 두도록 하자. (이를 bilinear interpo..
2026.08.27 -
Rasterization
스크린에 그려질 삼각형이 대충 결정되면, 픽셀 마다 Fragment가 생성된다. 그리고 이걸 (위에 사진처럼) 픽셀에다 때려 박는 과정이 필요한데 - 이 모든 과정을 통틀어 래스터화라고 부른다. 래스터화는 Clipping, Perspective dicision, Back-free Culling, View-port Transform등의 요소로 구성된다. 그리고 래스터화의 경우에는 하드웨어로 고정된 단계로 프로그래밍이 불가능하다. (Not Programmable, Not Configurable이 아님에 유의하자.) 클리핑클리핑은 2x2x1 크기의 뷰 볼륨 바깥에 놓인 폴리곤을 썽강썽갈 잘라내는 작업을 말한다. 이는 알고리즘으로 구현되어 있고, 딱히 사용자는 수정하지 못한다. 꼬우면 젠슨 황이나 리사수에게 가..
2026.08.19 -
[CG] Vertex-Processing(1)
한 출력이 다음단계의 입력으로 사용되는 일련의 데이터 처리 구조를 pipline이라 부르고, GPU의 렌더링 파이프라인은 주로 폴리곤으로 된 3차원 장면을 받아 2차원 이미지로 뽑아내는 것을 목표로 하게 된다. Render Pipeline은 보다시피 Vertex Processing -> Rasterization -> Fragment Processing, Output Merging으로 이루어진다. Vertex Processing은 대게 Transform을, Rasterization에서는 폴리곤의 내부를 차지하는 fragment(컬러 버퍼에 저장된, 픽셀을 수정하는데 필요한 데이터 모음)을 생성하게 된다. 물론 위의 구조가 강요되는 것은 아니고, 시대에 맞게 변화해 왔다. 쨋든 이러한 Pipeline 과정 ..
2026.07.22 -
[CG] 폴리곤 메쉬 표현 기법
삼각형 메쉬를 표현하는 단순한 방법은, 그냥 버퍼에다가 어떤 삼각형의 정점 정보를 기입하는 것이다. 이를 정점 버퍼라고 부르게 된다. 다만 이 경우, 중복되는 데이터가 다수 기입되는 문제가 있다. 폴리곤의 수가 적다면 딱히 문제가 될 것은 없어 보이나, 만약 폴리곤의 수가 상당히 많은 경우 (특히 요즘 같은 게임에서는) 데이터 저장 공간을 과다하게 차지하게 된다. 이럴때 사용 하는 것이 인덱스 버퍼이다. 이는 어떤 모델의 정점은 여러개의 삼각형이 참조함에서 기인한 것으로, 정점 버퍼에 정점들을 저장하고 (중복은 X) 이들을 가리키는 인덱스 버퍼의 인덱스로 삼각형의 위치 정보를 표현하는 것이다. 이를 인덱스 삼각형 리스트라고 한다. 다만 통상적으로, 정점의 좌표(위치)만 저장하는 것이 아니라 법선 벡터(n..
2025.07.01