컴퓨터 그래픽스

2024.7.31(수) - 16장 전역 조명과 텍스처링

새우급여기 2024. 8. 11. 22:32

조명 모델의 구분

  • 지역 조명
  • 전역 조명

(a)의 S1에 의해 S2는 광원으로부터 완벽히 가려져 있지만, S2는 및을 받는 것으로 라이팅 되었다

(b) S2는 전혀 빛을 받지 못한다.

(c) S2는 광원으로부터 완벽히 가려졌지만 S1, S3로부터 간접 조명을 받는다.

→ 퐁 모델의 앰비언트 항은 이러한 간접 조명을 담당한다.

전역 조명 모델

전역 조명 기법

  • 광선 추적법
  • 래디오 시티

(1) 광선 추적법

뷰 프러스텀은 카메라에 수렴하는 투영선의 집합이다.

각 투영선 반대 방향으로 광선 발사 뒤 이를 추적하여 해당 투영선을 따라 들어오게 될 색상을 계산

→ 픽셀 색상이 됨.

1차 광선: 이와 같이 투영선 역방향으로 발사되는 광선

1차 광선이 어떤 물체와 부딪힘 → 그 교차점이 그림자 안에 있는가 검사

(그림자 광선이라는 이름의 2차 광선을 각 광원을 향해 발사한다)

광원으로 가는 도중 다른 물체와 부딪히면 광원의 직접적 영향권에 있지 않으며 그림자 영역에 있다고 판정한다. 반면 광원에 도달하면 직접 조명 색상을 결정한다.

한편 그림자 광선 말고도 두 가지 2차 광선이 p1으로부터 추가로 발사된다. 하나는 반사 광선인데, 이는 1차 광선이 p1의 노멀 n1을 중심으로 반사된 것이다.

또 하나의 2차 광선은 굴절 광선인데, 1차 광선이 반투명한 물체와 부딪힐 때 발생한다.

광선 추적법은 재귀적인 구조의 알고리즘인데,

(c)의 광선 트리로 설명할 수 있다.

광선 트리는 반사/굴절 광선이 어떤 물체에도 부딪히지 않고 장면을 벗어날 때까지 또는 미리 정의된 재귀 단계에 도달할 때까지 확장된다.

광선 트리의 노드 p3를 생각해보면 r3을 추적해서 얻은 색상은 p3의 스페큘러 계수와 곱해지고, t3를 추적해서 얻은 색상은 p3의 투과율과 곱해진다. 이 둘은 s3를 통해 계산된 직접 조명 색상에 더해지고, 그 결과는 부모 노드인 p1으로 전달된다. 광선 트리 모든 노드에서 이 작업이 재귀적 진행되면 최종적인 루트 노드에서의 색상을 얻을 수 있다.

래디오시티 알고리즘

디퓨즈 표면을 가진 물체들 사이에서 반사되는 빛 계산.

→ 장면 내 존재하는 모든 표면을 잘게 나눠 패치를 만듦

→ 패치 사이 형태 인자 계싼

한 표면에서 다른 표면으로 이동하는 에너지는 형태 인자를 사용해 설명 가능한데, 이는 장면의 기하적 구조에 의해 결정된다.

점과 점 사이 형태 인자를 정의한다.

형태 인자 계산하는 모습.

위 사진은 래디오시티 알고리즘으로 생성한 영상이다.

래디오시티 알고리즘은 실시간에 구현하기에 연산량이 너무 많다. 따라서, 실시간 그래픽스의 경우 보통 전처리 단계에서 이를 실행하여 텍스처에 저장한 후 런타임에 이 텍스처를 사용한다. 이러한 텍스처를 라이트맵이라고 부른다.

라이트 매핑

(a), (b)는 물체, 광원이 모두 고정되어 있는 공간을 묘사하고 있다. 사각형 벽면을 스포트라이트가 비추고 있는 상황이라고 가정하면, 카메라에 잡히는 벽의 색상은 회색조이다.

→ 이는 디퓨즈 반사 색상이다.

환경 매핑

  • 환경 매핑: 주변 환경을 반사하는 매끄러운 물체를 렌더링하는 기법

→ 환경맵에 주변 환경의 영상을 담는 것이 첫 번째.

가장 많이 쓰이는 환경맵 = 큐브맵

카메라로부터 발사된 광선이 추적되어 p점에서의 반사 색상을 결정한다.

큐브 매핑 구현은 쉽다. 물체 표면 점 p가 주변 환경을 반사하도록 만들기 위해서, 카메라로부터 p를 향해 광선 I를 발사하고 이를 추적한다.

I는 p의 표면 노멀 n을 기준으로 반사되오 R이라는 벡터를 결정한다.

앰비언트 오클루전

  • 차폐도: 앰비언트 빛이 가려지는 정도
  • 앰비언트 오클루전: 앰비언트 항의 값을 조절하는 기법

(a) p1과는 달리 p2로 들어오는 앰비언트 빛은 일부 가려진다.

(b) 차폐도를 계산하기 위해 광선 사용이 가능하다.

(c) 표면 점에 반구를 놓고, 반구의 전체 공간에서 채워진 공간이 차지하는 비율로 차폐도를 계산할 수 있다.

(d) 반구 내 샘플 점, 깊이맵 이용하여 차폐도 계산할 수 있다.

→ 이렇게 광선 사용하면 비용이 많이 든다.

(d)에 보인 것처럼 반구에 고르게 샘플 점을 뿌리고 이들이 빈 공간에 있는지 아니면 채워진 공간에 있는지 검사하는 대안이 있다.

  1. 렌더링할 장면의 깊이맵 생성
  2. 두 샘플 s1, s2 비교
  3. s1은 빈 공간, s2는 채워진 공간에 속한 것으로 판정

위 그림은 퐁 모델의 앰비언트 항만을 사용한 경우, 앰비언트 오클루전을 사용한 경우의 렌더링 결과를 비교한다.

→ 앰비언트 오클루전은 스크린 공간에서 근사적인 계산을 수행하므로 몇 가지 문제점이 있다.

(ex: 뷰 프러스텀 밖 위치한 물체는 고려하지 않음)

 


이미지 출처: [OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문]

위 서적을 보고 공부한 내용을 정리함