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 · N < 0** (초록) 이면 반대 → **전면**, 렌더 유지.
일반 장면에서 약 **50% 폴리곤을 싸게 제거** 하는 첫 필터.
3. 깊이 정렬 (Depth Sorting) — 페인터 알고리즘
출처: 슬라이드 7~10
다각형면을 깊이(z값) 에 따라 정렬한 뒤 먼 것부터 투영 하여 그립니다. 뒤쪽 면은 나중에 그린 앞쪽 면에 덮여 자연스럽게 가려짐.
3.1 수행 과정 (7단계) ⭐️
- z 영역이 겹치지 않으면 멀리 있는 면부터 그린다.
- z가 겹치면, x 방향으로 겹치지 않으면 각각 그린다.
- 투영하려는 면 이 겹치는 의 뒤에 있으면 부터 그린다.
- 투영하려는 의 앞에 겹치는 가 위치하면 부터 그린다.
- 투영하려는 이 겹치는 를 완전히 가리면 순서로 그린다.
- 3개 이상 겹치는 경우 각각 2개씩 비교하여 순서 결정 (재배치).
- 위 경우에 해당 없으면 일부 다각형면을 절단 하여 다시 적용.
3.2 문제점
서로 꼬리를 물고 겹치거나(Cyclic Overlap), 복잡하게 교차하는 장면에서 절단이 많이 필요 → 계산량 급증.
Depth Sorting — 페인터 알고리즘
7주차4. Z-버퍼 (Z-Buffer) 알고리즘 ⭐️
출처: 슬라이드 11~16
가장 일반적으로 사용되는 이미지공간 접근법. 깊이 버퍼 (Depth Buffer) 알고리즘.
4.1 개념
- 물체의 가시성을 픽셀 단위 로 조사.
- z 값이 가장 앞쪽인 평면의 색을 그린다.
- 두 개의 버퍼가 필요: z값을 저장하는 Z-버퍼(깊이 버퍼) + 색상을 저장하는 프레임 버퍼.
4.2 알고리즘
단계 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주차z > Depth 일 때만 Depth & Color 갱신. 두 표면 A, B가 겹친 구간에서 더 앞선 면만 남는 걸 확인하세요.5. 레이캐스팅 (Ray-Casting) 기법
출처: 슬라이드 17~22
시점에서 투영면의 각 픽셀을 통해 광선(Ray) 을 투사, 이 광선과 처음으로 만나는 객체를 선택하여 해당 픽셀을 그립니다. 임의의 곡면 같은 표면에서도 효과적인 은면 제거 방법.
5.1 Z-버퍼와의 비교
| Z-버퍼 | 레이캐스팅 | |
|---|---|---|
| 작동 방식 | 면의 깊이 비교 (객체→픽셀, 깊이 테스트) | 처음 만나는 면 만 선택 (픽셀→광선, 거꾸로) |
| 버퍼 | Z-Buffer + Frame Buffer | Frame Buffer 만 |
| 임의 곡면 | 픽셀화 가능하면 OK | 광선-곡면 교점 계산 가능하면 OK |
Rasterization 과 Ray Tracing 의 개념적 차이도 동일한 구도.
5.2 수행 과정
① 광선 벡터 구하기. 광선 가 시점 를 지나고 가 광선의 단위벡터이면:
( 는 실수, 는 투영면의 픽셀 위치.)
② 광선과 객체의 교점 을 구하면 값이 결정. 가장 작은 s(가장 가까운 면) 만 그린다.
③ 임의의 모양을 가진 면은 교점 구하기가 어려움 → 객체를 포함하는 확장영역(Extent) 으로 사전 필터링해 속도 향상.
5.3 광선-평면 교차의 예
평면 과 광선 의 교차:
분모 = 0 이면 광선과 평면이 평행 (교차 없음).
5.4 직접 해보기 — 픽셀마다 가장 가까운 면 고르기
아래에서 눈(시점)을 드래그하고, 슬라이더로 한 픽셀을 골라 보세요. 그 픽셀에서 쏜 광선이 여러 객체와 만나는 교점 중 가장 가까운(s 최소) 것만 선택되어 픽셀에 칠해집니다. 이미지 평면의 색 띠는 모든 픽셀 광선의 결과입니다 — Z-버퍼와 정반대로 픽셀 → 광선 → 가장 가까운 면 순서.
레이 캐스팅 — 가시면 판별
drag반사·굴절·그림자를 위해 광선을 재귀적으로 쏘면 레이 트레이싱(Ray Tracing) 이 됩니다 — 14주차 (기말 범위).
📝 Knowledge Check: 은면 제거
Hidden Surface Removal
은면 제거 알고리즘을 '객체공간법'과 '이미지공간법'으로 나눌 때, 다음 중 객체공간법에 해당하는 것은?
🔗 다음 학습
- 이전: CGP 4-2 — 좌표 공간과 투영, GLSL
- 다음 (기말 범위): 10 — 래스터화 — z-buffer 루프 안으로 들어갑니다.
- 시험 대비: 시험 대비 — Numerical Hard Mode (중간·기말) — 손으로 푸는 수치 문제 집중.