컬링과 조명에 대한 수업을 들었다.
컬링 (Culling)
컬링은 불필요한 렌더링 작업을 줄이기 위해 특정 오브젝트를 걸러내는 최적화 기법이다
프러스텀 컬링 (Frustum Culling)
- 카메라 앵글 내에 포함되지 않는 오브젝트를 걸러내어 렌더링 성능을 최적화하는 기법이다
- 시야각에서 벗어난 오브젝트뿐만 아니라, 카메라에 가깝거나 먼 오브젝트도 필터링한다
- 핵심: 카메라 시야에 걸쳐 있는 오브젝트는 렌더링해야 한다
오클루젼 컬링 (Occlusion Culling)
- 다른 오브젝트에 의해 가려져서 보이지 않는 오브젝트를 렌더링 대상에서 제외하는 기법
- 이 기법은 화면에 표시되지 않는 영역의 연산을 줄이는 데 유용하다
백페이스 컬링 (Backface Culling)
- 폴리곤의 방향에 따라 화면에 보이지 않는 면을 걸러내는 작업이다
- 카메라를 기준으로 폴리곤의 방향을 벡터 외적을 통해 계산하며, 좌표는 World Position을 기준으로 사용한다
- 폴리곤의 전면(front face)과 후면(back face)을 구분하여, 전면을 향하지 않는 후면 폴리곤은 렌더링하지 않는다
- 예시: 게임에서 벽을 통과하면 벽 뒷부분이 투명한 이유가 백페이스 컬링 때문입니다
- 시계 방향 또는 반시계 방향으로 설정된 면에 따라 렌더링 여부를 결정합니다
조명
조명은 물체의 색을 밝거나 어둡게 조정하여 음영을 표현하는 작업으로, 3D 렌더링에서 가장 중요한 요소이다
셰이더 (Shader)
셰이더는 초기에는 음영 작업을 계산하는 데 사용되었으나, 현재는 다양한 그래픽 작업을 담당한다
버텍스 셰이더 (Vertex Shader)
- 3D 공간에서 점(Vertex)을 기준으로 작업한다
- 기준점으로 이해할 수 있다
픽셀 셰이더 (Pixel Shader)
- 텍스처 데이터를 기반으로 연산을 수행한다
- 과거에는 버텍스 셰이더가 주로 사용되었으나, 현재는 픽셀 셰이더를 기반으로 연산이 이루어진다
- 픽셀은 버택스와 빛을 가지고 계산이 들어가게 되는데 버택스를 사용하지 않아 픽셀에 들어가는 데이터가 없다
- 그렇기에 우리는 노멀 맵 (Normal Map)을 사용하여 픽셀 단위로 데이터를 연산하며, 입체감을 표현합니다.
노멀 맵 (Normal Map)
텍스처 데이터를 기반으로 물체 표면의 빛의 방향을 저장하고 입혀주는 맵이다
실제로는 평평한 표면이지만, 픽셀 단위의 연산을 통해 입체감을 부여한다 ( 착시현상 )
노멀 벡터 (Normal Vector)
- 물체 표면이나 곡선에 수직인 벡터
- 법선 벡터: 특정 표면의 수직 방향으로, 물체의 표면이 어느 방향을 향하는지 정의한다
단위 벡터 (Unit Vector)
- 크기(길이)가 1인 벡터로, 방향만을 나타낸다
- 속력 : 백터의 크기 / 속도 : 백터의 크기와 방향
- 속력과 방향(노멀)을 곱해 연산에 활용된다
램버트 코사인 법칙
- 음영을 계산하는 공식입니다. (추가적인 학습 필요)
로우 폴리곤 / 하이 폴리곤
- 게임에서 플레이어가 보는 오브젝트는 대부분 로우 폴리곤입니다.
- 디자이너가 작업하는 하이 폴리곤을 단순화하여 사용합니다.
셰이딩 기법 (Direct3D 제공)
플랫 셰이딩 (Flat Shading)
- 버텍스 모양 그대로 셰이딩한다
고로 셰이딩 (Gouraud Shading)
- 인접한 버텍스 간의 색상을 보간하여 셰이딩한다
퐁 셰이딩 (Phong Shading)
- 픽셀 단위로 색상을 계산하여 섬세한 셰이딩을 구현한다
3D 최적화 방법
- 그리지 않는다 (안 그려도 되는 요소 배제)
- Level of Detail(LOD)을 활용하여 시각적 착시 효과를 통해 최적화를 진행한
- 그린 것처럼 보이게 한다 (눈속임)
- 음영 작업을 통해 입체감을 표현하거나 착시 효과를 유도한다
결론
- 3D 작업은 편법이 존재하지 않으며, 모든 작업은 반드시 계산을 통해 이루어진다.
- 입체감을 느끼게 하는 착시 효과와 렌더링 효율성을 극대화하는 것이 최적화의 핵심이다
'C++' 카테고리의 다른 글
[강의] 2월 3일 수업정리 (0) | 2025.02.03 |
---|---|
[강의] 1월 31일 수업정리 (0) | 2025.01.31 |
[강의] 1월 23일 수업정리 (0) | 2025.01.23 |
[강의] 1월 22일 수업정리 (0) | 2025.01.22 |
[강의] 1월 21일 수업정리 (0) | 2025.01.21 |