학습목표 13장. 고급 렌더링 그림자를 구현하기 위한 세 가지 방법을 이해한다. 레이트레이싱의 정의와 구현방법을 이해한다. 레디오서티의 정의와 구현방법을 이해한다. 레이트레이싱과 레디오서티의 장단점을 비교하여 이해한다.
셰이드(Shade) 그림자 Section 01 그림자-그림자 셰도우(Shadow)와 구별 상대적으로 단순한 연산으로 매우 사실적인 효과 조명과 별도로 취급 그림자 그림자 없음: 공중에 떠있는 인상 광원특성: 방향성 그림자. 위치성 그림자 [그림 13-1] 셰도우 없음 [그림 13-2] 방향성 셰도우 [그림 13-3] 위치성 셰도우
본영(本影, 본 그림자, Umbra, Hard Shadow) 반영(半影, 반 그림자, Penumbra, Soft Shadow) 반영과 본영 본영(本影, 본 그림자, Umbra, Hard Shadow) 반영(半影, 반 그림자, Penumbra, Soft Shadow) 그림자 주변광에 의해 보임 산란으로 인해 본영과 반영의 경계선이 흐려져 보임 [그림 13-4] 본영과 반영
면적 광원의 근사화 소프트 셰도우 기법 교집합: 본영 합집합 – 교집합: 반영(Soft Shadow) [그림 13-5] 면적광원의 근사화
지면 그림자(Ground Plane Shadows) 지면 그림자(Ground Shadow) 지면 그림자(Ground Plane Shadows) 투상 그림자(Projection Shadows) 바닥에 투상된 그림자만을 고려. 물체면 간의 그림자는 고려치 않음 물체공간 알고리즘 [그림 13-7] 지면 그림자 연산
지면 그림자 (13.1) [그림 13-7] 지면 그림자 연산 [그림 13-8] 광원기준 시점변환
화소 단위의 영상공간 알고리즘 셰도우 맵(Shadow Map) 2. 은면제거를 위해 시점기준 가장 가까운 물체면 화소를 구함 3. 해당 화소 물체면으로부터 광원(B)까지의 거리를 구함. 4. B가 A보다 크면 해당 화소는 그림자 영역 내부에 존재함. [그림 13-9] 셰도우 맵 알고리즘
광원기준 셰도우 맵, 시점 기준 물체 렌더링 셰도우 맵(Shadow Map) if (Zmap + Bias) < Zpixel the Pixel Is in the Shadow; else the Pixel Is Not in the Shadow; Bias: Zmap과 Zpixel이 정확히 일치하지 않을 때에 대비 광원기준 셰도우 맵, 시점 기준 물체 렌더링 [그림 13-10] 셰도우 맵 [그림 13-11] 결과
가시부피와 그림자 부피가 중첩되는 곳이 그림자 영향권 그림자 부피(Shadow Volume) 가시부피와 그림자 부피가 중첩되는 곳이 그림자 영향권 [그림 13-12] 그림자 부피
지 패스 알고리즘(Z-Pass Algorithm) 다수개의 다각형에 의한 그림자 그림자 부피 안으로 들어갈 때 + 1, 나갈 때 -1 결과적인 카운트 값이 0보다 크면 그림자 색 [그림 13-13] 지-패스 알고리즘 I
지-페일 알고리즘(Z-Fail Algorithm) 전방절단면 앞쪽이 이미 그림자 부피이면 지-패스는 오류 지-페일 알고리즘 무한대 거리에서 시점을 향해 오면서 카운트 값을 계산 그림자가 후방절단면 뒤쪽에 걸칠 때엔 이 역시 오류 [그림 13-14] 지-패스 알고리즘 II [그림 13-15] 지-페일 알고리즘
Section 02 레이트레이싱-지역조명모델과 전역조명모델 레이 트레이싱(광선 추적, Ray Tracing) 대표적인 전역조명모델(Global Illumination Model) 순방향 레이트레이싱(順方向) 광원에서 나온 모든 광선을 추적. 너무 많은 계산을 요함. 역방향 레이트레이싱(逆方向) 우리 눈에서 광선이 발사된다고 가정하고 추적. [그림 13-16] 지역 조명모델과 전역 조명모델
광선의 방향 레이 트레이싱 화면에 수직 평행투상, 원근투상 모두 정규화 가시부피에서는 평행투상 광선의 방향은 서로 독립적. 병렬처리(Parallel Processing)에 유리 [그림 13-17] 가시부피와 정규화 가시부피 [그림 13-18] 화소별 광선방향
가) 지역 조명모델에 의한 세기 (광원과 물체 사이) 나) 반사 광선에 의한 세기 (다른 물체 사이) 레이 트레이싱 가) 지역 조명모델에 의한 세기 (광원과 물체 사이) 나) 반사 광선에 의한 세기 (다른 물체 사이) 다) 굴절 광선에 의한 세기 (다른 물체 사이) 지역 조명모델에 의한 세기 그림자 광선과 다른 물체가 만나면 C = 0 [그림 13-19] 그림자광선, 반사광선, 굴절광선 (13.3)
반사 광선 굴절 광선 레이 트레이싱 입사각과 반사각이 동일한 경면 반사만을 추적 물체면이 투명한 경우에 추적 스넬의 법칙(Snell's Law) 굴절광선의 진행방향 [그림 13-19] 그림자광선, 반사광선, 굴절광선
경면계수와 굴절계수 [그림 13-20] 레이트레이싱의 조명 성분
레이 트레이싱 재귀적 광선추적과 레이트리 [그림 13-21] 재귀적 광선추적 [그림 13-22] 레이 트리
재귀적 레이 트레이싱 void TraceRay (point start, vector direction, int depth, colors *color);{ int ray_hit( ); vector reflected_direction, transmitted_direction; colors local_color, reflected_color, transmitted_color; object hit_object; point hit_point; if (depth > MAXDEPTH) *color = BLACK; else { if (ray_hit(start, direction, &hit_object, &hit_point)) { shade (hit_object, hit_point, &local_color); calculate_reflection(hit_object, hit_point, reflected_direction); calculate_refraction(hit_object, hit_point, refracted_direction); TraceRay(hit_point, reflected_direction, depth+1, &reflected_color); TraceRay(hit_point, refracted_direction, depth+1, refracted_color); Combine (hit_object, local_color, reflected_color, transmitted_color, color); } else *color = BACKGROUND_COLOR; } }
다각형 사이의 상호작용 2개의 광원에 의한 하이라이트, 하드 셰도우 레이 트레이싱 이면 제거(Backface Culling)를 허용하지 않음. 은면 제거(Hidden Surface Removal)를 허용하지 않음. 그림자 연산이 자동으로 이루어짐. 2개의 광원에 의한 하이라이트, 하드 셰도우 [그림 13-23] 레이트레이싱
레이트레이싱 연산의 가속 레이트레이싱 모든 화소에 대해 광선을 추적 각각의 광선과 마주치는 모든 면을 발견 이 모든 면에 대해 반사광과 굴절광의 세기를 계산 연산의 가속 빛의 세기가 일정 한도에 다다르면 추적을 끝냄: 임계치 설정 다각형과의 교차점 계산에 BV 활용: BV Test [그림 13-24] 경계부피 I [그림 13-25] 경계부피 II
평면과의 교차점: Ax + By + Cz = D로 표현되는 평면 교차점 계산 평면과의 교차점: Ax + By + Cz = D로 표현되는 평면 원구와의 교차점: 중심 반지름 r인 원구 2개의 실근, 중근, 허근 (13.5) (13.6) (13.7) (13.8) (13.9) [그림 13-26] 광선과의 교차점 수
레이 트레이싱 결과 [그림 13-27] 레이트레이싱 I [그림 13-28] 레이트레이싱 II
Section 03 레디오서티-레디오서티(Radiosity) 전역 조명모델:물체면 상호간의 빛의 움직임을 조명모델에 반영 확산광만을 추적 cf. 레이트레이싱: 경면광과 굴절광을 추적 시점의 위치에 무관 cf. 레이트레이싱: 시점에 따라 달라짐 물체면 사이에 교환되는 빛 에너지의 양을 추적 빛은 일종의 에너지이며 에너지 보존 법칙이 성립
Bi = i 번 다각형에서 나오는 빛의 밀도. 레디오서티(Radiosity) Ai = i 번 다각형의 면적 Ei = 스스로 발하는 빛의 밀도 ρi = i 번 다각형의 반사계수 (13.10) [그림 13-29] 입사
형상인수(Form Factor) Fij 레디오서티(Radiosity) j 번 다각형에서 출발한 빛의 몇 %가 i 번 다각형에 도달하는가. 면들 사이의 기하학적 관계에 따라 결정 마주 볼수록, 거리가 가까울수록 높음. [그림 13-30] 형상인수
dAi, dAj로 분할: 분할면마다 서로 바라보는 각도가 달라짐 Vji = 가시성 변수(Visibility Variable) 레디오서티(Radiosity) 형상인수 연산 dAi, dAj로 분할: 분할면마다 서로 바라보는 각도가 달라짐 Vji = 가시성 변수(Visibility Variable) j에서 i를 바라보았을 때 중간에 가리는 물체가 없으면 1, 있으면 0 [그림 13-31] 형상인수 연산 [그림 13-32] 면적투상 (13.11)
역 정리(逆, Reciprocity Law) 레디오서티(Radiosity) 역 정리(逆, Reciprocity Law) j에서 i를 향한 형상인수에 j의 면적을 곱한 것은 i에서 j를 향한 형상인수에 i의 면적을 곱한 것과 같다 두 개의 면 사이에 교환되는 빛의 양이 동일함 (13.11) (13.12) (13.13) (13.14) (13.15)
빛 에너지의 교환: Solve for Bi ! 레디오서티(Radiosity) (13.16) [그림 13-33] 반사 (13.17)
지역조명모델과 레디오서티 조명 비교 레디소서티: 간접반사로 인해 전반적으로 밝은 모습 [그림 13-34] 지역 조명모델 [그림 13-35] 레디오서티
레디오서티 [그림 13-36] 레디오서티 I [그림 13-37] 레디오서티 II
레이트레이싱과 레디오서티 [표 13-1] 레이트레이싱과 레디오서티 비교
Thank you