C++

[강의] 1월 24일 수업정리

k-codestudy 2025. 1. 24. 17:27

컬링과 조명에 대한 수업을 들었다.

 

컬링 (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 최적화 방법

  1. 그리지 않는다 (안 그려도 되는 요소 배제)
    • Level of Detail(LOD)을 활용하여 시각적 착시 효과를 통해 최적화를 진행한
  2. 그린 것처럼 보이게 한다 (눈속임)
    • 음영 작업을 통해 입체감을 표현하거나 착시 효과를 유도한다

결론

  • 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