09 — 은면의 제거 (Hidden Surface Removal)

출처: SSU 컴퓨터 그래픽스 슬라이드 — SSU_CG_09_은면의제거.pdf 주차: 7주차 — 중간고사의 마지막 챕터 선행: 07 — 3D 기하변환·뷰잉

3차원 공간에서 가려진 면을 판단해 그리지 않는 기술. 같은 목표를 두고 객체공간법이미지공간법 의 두 갈래로 알고리즘이 나뉘는 지점입니다.


1. 은면 제거의 목적과 분류

출처: 슬라이드 1~4

실감 있는 그림 생성을 위해 가려진 면을 걸러냅니다. 두 관련 개념:

  • 은선 제거 (Hidden Line Removal): 와이어프레임의 보이지 않는 선을 숨김.
  • 은면 제거 (Hidden Surface Removal): 가려진 면을 걸러냄.

1.1 알고리즘의 두 가지 분류 ⭐️

중간고사에서 강조하는 큰 틀.

분류작동 단위예시
객체공간법 (Object Space Method)공간상 객체의 위치 관계 비교후면 제거, 깊이 정렬
이미지공간법 (Image Space Method)투영된 픽셀 평면 에서 조사Z-버퍼, 레이캐스팅

1.2 처리 개념

객체가 가진 성질(주로 거리 정렬) 을 이용해 알고리즘 효율을 높입니다.

  • 객체 표면을 거리에 따라 정렬(Sorting) 한 뒤 투영면에 가까운 면을 선택해 그림.
  • 포함영역 (Extent) 을 이용해 비교 회수를 줄임: 객체의 bounding box 같은 단순한 모양끼리 먼저 비교.

2. 후면 제거 (Back-Face Removal / Culling) ⭐️

출처: 슬라이드 5~6

은면 제거의 첫 단계 로 이용되는, 빠르고 간단한 객체공간 방법. 일반적인 장면에서 다면체 면의 약 50% 를 제거 해 주는 효과.

2.1 원리

관찰자로부터 등지고 있는 면(법선 벡터가 시선 방향과 반대) 을 그리지 않습니다.

평면 방정식: 에서 법선 벡터 .

2.2 판별

  • 시선 벡터 이면 후면 (back-facing).
  • 이면 전면 (front-facing).
  • 특히 V가 -z 축 방향과 일치하면 C < 0 이면 뒷면.

2.3 수치 예시

  • 면 A: , 시선 : front facing (카메라 향함)
  • 면 B: , : back facing (카메라 등짐)

이 예시는 수업 슬라이드의 컨벤션에 맞춘 것. "V가 카메라→물체 시선" 이냐 "물체→카메라" 냐에 따라 부호 해석이 뒤집히니 문제마다 확인 필수.

Back-Face Culling — V · N 판별

7주차
카메라 (V 시작점)0.671.000.67-0.24-1.00-0.24
에지별 V · N
e00.67
e11.00
e20.67
e3-0.24
e4-1.00
e5-0.24
**V · N > 0** (빨강) 이면 법선이 시선과 같은 방향 → **후면**, 렌더 제외.
**V · N < 0** (초록) 이면 반대 → **전면**, 렌더 유지.
일반 장면에서 약 **50% 폴리곤을 싸게 제거** 하는 첫 필터.

3. 깊이 정렬 (Depth Sorting) — 페인터 알고리즘

출처: 슬라이드 7~10

다각형면을 깊이(z값) 에 따라 정렬한 뒤 먼 것부터 투영 하여 그립니다. 뒤쪽 면은 나중에 그린 앞쪽 면에 덮여 자연스럽게 가려짐.

3.1 수행 과정 (7단계) ⭐️

  1. z 영역이 겹치지 않으면 멀리 있는 면부터 그린다.
  2. z가 겹치면, x 방향으로 겹치지 않으면 각각 그린다.
  3. 투영하려는 면 이 겹치는 뒤에 있으면 부터 그린다.
  4. 투영하려는 앞에 겹치는 가 위치하면 부터 그린다.
  5. 투영하려는 이 겹치는 완전히 가리면 순서로 그린다.
  6. 3개 이상 겹치는 경우 각각 2개씩 비교하여 순서 결정 (재배치).
  7. 위 경우에 해당 없으면 일부 다각형면을 절단 하여 다시 적용.

3.2 문제점

서로 꼬리를 물고 겹치거나(Cyclic Overlap), 복잡하게 교차하는 장면에서 절단이 많이 필요 → 계산량 급증.

Depth Sorting — 페인터 알고리즘

7주차
Depth Sort (먼 것 → 가까운 것)
A
z = -6
B
z = -3
C
z = -1
Drawn
3 / 3
Scene
정상
z 값이 모두 다르므로 단순 정렬 후 먼 것부터 순서대로 그려주면 OK.

4. Z-버퍼 (Z-Buffer) 알고리즘 ⭐️

출처: 슬라이드 11~16

가장 일반적으로 사용되는 이미지공간 접근법. 깊이 버퍼 (Depth Buffer) 알고리즘.

4.1 개념

  • 물체의 가시성을 픽셀 단위 로 조사.
  • z 값이 가장 앞쪽인 평면의 색을 그린다.
  • 두 개의 버퍼가 필요: z값을 저장하는 Z-버퍼(깊이 버퍼) + 색상을 저장하는 프레임 버퍼.

4.2 알고리즘

TEXT
단계 1) 모든 픽셀 (x, y) 에 대해
          Depth(x, y) = -∞
          Frame(x, y) = 배경의 색상값(Intensity)
 
단계 2) for each polyhedron do
          for each 3D surface S do
            for each point P do
              if z-coord(P) > Depth(x, y) {
                Depth(x, y) ← z-coord(P)
                Frame(x, y) ← Intensity(P)
              }

수업 컨벤션 주의: 수업은 큰 z값 = 앞쪽 으로 취급. 초기값 , 더 큰 값 발견 시 갱신. OpenGL은 관례가 반대로 "작은 z = 앞" 을 쓰므로 교재마다 부호가 달라질 수 있음 — 시험 문제에서 주어진 컨벤션을 따르세요.

4.3 특징

  • 일반 곡면에 대해서도 적용 가능.
  • 구현이 간단 하며 다각형 면에 대한 정렬이 필요 없음.
  • 추가 버퍼(메모리) 저장 공간 이 필요.
  • 그리는 순서와 무관하게 항상 올바른 가시성 보장.

Z-Buffer Simulator

7주차
Depth Buffer
A
A
A
A
A
A
A
A
A
B
A
B
B
B
B
B
B
B
B
B
셀: 초기값 −∞, 갱신 조건 z > Depth
Step
20 / 20
Action
갱신
알고리즘 추적
픽셀(5, 2)
신규 z-4
기존 Depth−∞
-4 > −∞ ?YES → 갱신
수업 컨벤션: 큰 z = 앞쪽. 초기 Depth = −∞, z > Depth 일 때만 Depth & Color 갱신. 두 표면 A, B가 겹친 구간에서 더 앞선 면만 남는 걸 확인하세요.

5. 레이캐스팅 (Ray-Casting) 기법

출처: 슬라이드 17~22

시점에서 투영면의 각 픽셀을 통해 광선(Ray) 을 투사, 이 광선과 처음으로 만나는 객체를 선택하여 해당 픽셀을 그립니다. 임의의 곡면 같은 표면에서도 효과적인 은면 제거 방법.

5.1 Z-버퍼와의 비교

Z-버퍼레이캐스팅
작동 방식면의 깊이 비교 (객체→픽셀, 깊이 테스트)처음 만나는 면 만 선택 (픽셀→광선, 거꾸로)
버퍼Z-Buffer + Frame BufferFrame Buffer 만
임의 곡면픽셀화 가능하면 OK광선-곡면 교점 계산 가능하면 OK

Rasterization 과 Ray Tracing 의 개념적 차이도 동일한 구도.

5.2 수행 과정

① 광선 벡터 구하기. 광선 가 시점 를 지나고 가 광선의 단위벡터이면:

( 는 실수, 는 투영면의 픽셀 위치.)

② 광선과 객체의 교점 을 구하면 값이 결정. 가장 작은 s(가장 가까운 면) 만 그린다.

③ 임의의 모양을 가진 면은 교점 구하기가 어려움 → 객체를 포함하는 확장영역(Extent) 으로 사전 필터링해 속도 향상.

5.3 광선-평면 교차의 예

평면 과 광선 의 교차:

분모 = 0 이면 광선과 평면이 평행 (교차 없음).

5.4 직접 해보기 — 픽셀마다 가장 가까운 면 고르기

아래에서 눈(시점)을 드래그하고, 슬라이더로 한 픽셀을 골라 보세요. 그 픽셀에서 쏜 광선이 여러 객체와 만나는 교점 중 가장 가까운(s 최소) 것만 선택되어 픽셀에 칠해집니다. 이미지 평면의 색 띠는 모든 픽셀 광선의 결과입니다 — Z-버퍼와 정반대로 픽셀 → 광선 → 가장 가까운 면 순서.

레이 캐스팅 — 가시면 판별

drag
이미지 평면012345678ABC눈(P₀)← 픽셀 4
픽셀 4
최근접 객체
구 A
s 값 (최소)
108.0
히트 픽셀
1 / 9
픽셀마다 광선을 쏴서 가장 가까운(s 최소) 객체만 그린다 — Z-버퍼와 반대 방향(픽셀 → 광선). Frame Buffer만 필요. P = P₀ + s·u 에서 s가 작을수록 눈에 가까운 표면.
눈(Eye) P₀ — 드래그 가능
강조 광선 (픽셀 → 씬)
구 A (빨강)
구 B (초록)
구 C (황금)
미스 (배경)

반사·굴절·그림자를 위해 광선을 재귀적으로 쏘면 레이 트레이싱(Ray Tracing) 이 됩니다 — 14주차 (기말 범위).


📝 Knowledge Check: 은면 제거

Quiz

Hidden Surface Removal

Q 1 / 7

은면 제거 알고리즘을 '객체공간법'과 '이미지공간법'으로 나눌 때, 다음 중 객체공간법에 해당하는 것은?


🔗 다음 학습