07 그림자(Shadow) - it.sangji.ac.krit.sangji.ac.kr/~3D/ppt/CG/07.pdf · 01 그림자(Shadow)...

18
그림자(Shadow) 01 그림자(Shadow) Volume 02 그림자 투영 (Shadow Projection) 03 그림자(Shadow) Maps/Mapping 07

Transcript of 07 그림자(Shadow) - it.sangji.ac.krit.sangji.ac.kr/~3D/ppt/CG/07.pdf · 01 그림자(Shadow)...

그림자(Shadow)

01 그림자(Shadow) Volume

02 그림자 투영 (Shadow Projection)

03 그림자(Shadow) Maps/Mapping

07

그림자(Shadow)의 정의

그림자(Shadow) Volume 01

Shadow Volumes

3

1. Color Buffer와 Depth Buffer는 쓰기위해 개방하고 Depth Test는 활성화한다.

2. 그림자에 그리기를 위한 속성을 설정하고, 광원(Light Source)의 전원을 끈다.

3. 전체 장면을 Rendering한다.

4. Shadow Volumes을 둘러싸고 있는 다각형을 계산한다.

5. 데이터를 저장하기 위해 Color Buffer 및 Depth Buffer를 비활성화하고 Depth Test는 활성화를 유지한다.

6. 만약 시점(Viewpoint) 혹은 Camera가 Shadow Volume의 외부에 있다면 Stencil Buffer를 0으로 설정하여 지우고, Shadow Volumes의 내부에 있다면 Stencil Buffer를 1로

설정한다.

7. 항상 통과(Pass)하는 Stencil Test를 설정한다.

8. 만약 Depth Test가 통과(Pass)하면 증가하기 위해 Stencil Operation을 설정한다.

9. Back Face Culling을 활성화한다.

10. Shadow Volumes을 Rendering한다. 이것은 눈에 보이는 표면(Surface)의 전면(Front)에 있는 즉, 앞에 마주하고 있는 모든 다각형에 대한 Stencil을 증가시킬 것이다.

11. 만약 Depth Test가 통과(Pass)하면 줄이기 위한 Stencil Operation을 설정한다.

12. Front Face Culling을 활성화하고 Back Face Culling을 비 활성화한다.

13. Shadow Volumes을 Rendering한다. 이것은 눈에 보이는 객체의 전면(Front)에 있는 모든 Back Facing 그림자 다각형을 감소시킨다. Stencil Buffer는 그림자가 생성될 위치

에 대한 양(+)의 값을 가진다.

14. Stencil Function을 0으로 설정한다.

15. 아무것도 하지 않는 Stencil Operation을 설정한다. Depth Buffer를 지우고, 데이터를 저장하기 위해 Color Buffer와 Depth Buffer를 활성화한다.

16. 광원(Light Source)을 켠다.

17. 전체 장면을 Rendering한다.

그림자(Shadow) Volume 01

하나의 그림자와 광원을 위한 Algorithm

4

그림자(Shadow) Volume 01

Shadow Volumes의 구현 결과

5

코드 7-1

그림자(Shadow) Volume 01

glNewList 함수에 대한 Prototype

6

그림자(Shadow) Volume 01

glColorMask 함수에 대한 Prototype

7

그림자(Shadow) Volume 01

glStencilFunc 함수에 대한 Prototype

8

그림자(Shadow) Volume 01

glStencilOp 함수에 대한 Prototype

9

그림자(Shadow) Volume 01

glPolygonMode 함수에 대한 Prototype

10

그림자 투영(Shadow Projection) 02

간단한 그림자 투영(Projection Shadow) 방법

11

그림자 투영(Shadow Projection) 02

간단한 Projection Shadow

12

(A) 조명이 임의의 Y축 값을 가진 경우 (B) 조명이 Y축 값을 가지지 않은 경우(Y=0)

코드 7-2

X축과 Z축으로 구성된 평면에 그림자를 투영하기 위한 간단한 Projection

Shadow Matrix

그림자 투영(Shadow Projection) 02

Planar Shadow

13

그림자 투영(Shadow Projection) 02

Projection Shadow

14

그림자의 한 점 𝑆(𝑆𝑥 , 𝑆𝑦 , 𝑆𝑧)

그림자 투영(Shadow Projection) 02

Projection Shadow의 구현 결과

15

코드 7-3

그림자(Shadow) Maps/Mapping 03

Shadow Mapping을 위한 2-Pass Algorithm

16

그림자(Shadow) Maps/Mapping 03

Shadow Mapping의 깊이 비교(Depth Comparison)

17

그림자(Shadow) Maps/Mapping 03

Shadow Maps의 구현 결과

18

코드 7-4