깊이 버퍼 그림자 매핑
Depth Buffer Shadow Mapping
2018-12-22 데브루키 발표자 이석우
발표자 소개
u 이석우 (1987년생)
u 병역 특례 종료 후 2019년 백수 예정자
u 발표자료에 대한 오류사항이나 궁금한 점이 있으면 아래의 메일로 연락주세요.
kkndsta@naver.com
Reference
u 박민수 [깊이 버퍼 그림자] : 그림자 구현의 역사 참조
u 김포프 [셰이더 프로그래밍 입문] : 그림자 매핑 및 소스 코드 참조
u 박민근 [알콜코더’s 브래인] : 물어보면 다 알려주는 데브루키의 욕쟁이 할머니
그림자란?
u 빛이 어떤 물체에 막혀 다른 물체에 빛이 통과하지 못하여 생기는 어두운 부분을 말한다.
CG에서 그림자
u 음영(Form Shadow)과 그림자(Cast Shadow)로 구분된다.
오늘의 주제
u 음영은 보통 Lighting 계산으로 구한다.
u 그러나 그림자는 프로그래머가 추가적인 처리를 해야 한다.
u 따라서 오늘은 이 그림자(Cast Shadow)를 구현하는 방법에 대해 설명한다.
게임 속 초기 그림자 구현
u Circle Shadow
Circle Shadow
u 캐릭터의 발 밑 부분에 원형의 그림자 텍스처를 입힌다.
u 모든 캐릭터가 원형의 그림자를 갖게 되어 리얼리티가 떨어진다.
u 울퉁불퉁한 지형에서 사용할 수 없고 오직 평지에서만 사용이 가능하다.
u 광원이 하나여도 그림자가 겹친 부분이 더 어두워지는 현상이 발생한다.
게임 속 초기 그림자 구현
u Projected Shadow Mapping
Projected Shadow Mapping
u 그림자는 광원의 위치에 따라 빛의 방향이 다르고 이에 따라 바닥에 투영시켜야
한다. 이를 Projected Shadow Mapping이라 한다.
u 광원에서 본 오브젝트의 실루엣을 그림자 텍스쳐에 저장한다.
u 광원 방향으로 투영하듯 텍스처를 매핑한다.
Projected Shadow Mapping
u 문제점 : Self Shadow가 적용되지 않는다.
§ 왜냐하면 그림자를 오브젝트 단위로 생성하기 때문에 자신의 차폐를 계산하기 어렵다.
Projected Shadow Mapping
u 문제점 : 투영을 잘 시켜야 한다.
§ 계산을 잘 못하면 벽 넘어에 그림자가 생기는 등의 버그가 발생할 수 있다.
깊이버퍼 그림자 매핑
Depth Buffer Shadow Mapping
u GPU 성능이 점점 좋아져 픽셀 계산 능력이 올라가면서 Depth Buffer Shadow
Mapping이 사용되기 시작했다.
u 이 방법은 광원을 기준으로 그림자를 생성할 지 판단한다.
그림자는 어디에 생성되어야 할까?
u 빛은 직진성을 가지기 때문에 통과하지 못하는 곳은 그림자가 생긴다.
A
B
C
D
(a) (b) (c) (d) (f) (e)
그림자 생성 여부의 판단
u 광원으로부터 가장 가까운 객체까지의 거리를 저장하여 현재 객체가 멀면 그림자
를 생성하면 된다.
A
B
C
D
0.0
0.5
0.7
0.85
1.0
비슷한 컨셉의 Z버퍼링
u 위의 방법은 Z버퍼링과 유사하다.
u Z버퍼링은 카메라로부터 객체까지의 거리를 깊이버퍼
에 픽셀단위로 저장하여 거리 비교를 통해 카메라에 가
장 가까운 객체를 보여주는 방법이다.
깊이버퍼 그림자 매핑의 모티브
u 카메라가 아닌 광원 기준으로 가장 가까운 객체의 거리값을 텍스처에 저장한다면….
u 텍스처를 이용하여 그림자의 생성 여부를 판단할 수 있다.
u 여기서 광원에서 가장가까운 객체까지의 거리값을 저장한 2차원 텍스처를 그림자맵
(Shadow Map)이라 한다.
그림자 맵
u 그림자 맵에 저장된 데이터는 광원기준으로 원근 투영된 후 ndc 공간으로 변환
된 z 값이다. 따라서 0과 1 사이 값으로 저장된다.
u 그림자 맵을 가시화하면 아래와 같이 회색조의 이미지를 볼 수 있다.
그림자 매핑의 과정
u 그림자맵 생성
① 그림자맵을 저장할 렌더타겟으로 한다.
② 카메라를 광원의 위치에 두고 물체들을 그린다.
③ 픽셀셰이더에서 빛으로부터 현재 픽셀까지의 깊이를 반환한다.
u 그림자 적용
① 렌더타겟을 백버퍼로 설정한다.
② 카메라를 기준으로 물체들을 그린다.
③ 빛으로부터 현재 픽셀까지의 깊이를 그림자맵에 담겨 있는 결과와 비교한다. 현재
깊이가 그림자맵의 깊이보다 크면 그림자를 씌운다.
그림자맵 랜더링
u 광원 기준의 광원-뷰 행렬과 광원-투영 행렬을 만든다.
그림자맵 랜더링
u 일반적인 렌더링을 위한 카메라 기준 시야 및 투영 행렬들을 만든다.
그림자맵 랜더링
u 렌더 타겟은 백버퍼로 기본 설정이 되있다. 우리는 그림자맵을 생성할 때 렌더
타겟을 변경하므로 백버퍼와 깊이버퍼에 대한 포인터를 미리 저장해야 장면 렌
더링을 할 때 다시 백버퍼로 되돌릴 수 있다.
그림자맵 랜더링
u 그림자맵을 렌더 타겟으로 설정한다.
그림자맵 랜더링
u 그림자맵을 초기화 하고 쉐이더에서 사용할 행렬들을 설정한다.
그림자맵 랜더링
u 그림자 만들기 쉐이더를 이용하여 객체를 그린다.
그림자맵 만들기 쉐이더 구현
u 여기서는 정점만 있으면 거리 계산이 가능하므로 정점만 입력으로 받아온다.
그림자맵 만들기 쉐이더 구현
u 버텍스쉐이더에서는 클립 공간으로 변환한 후 정점을 반환한다.
그림자맵 만들기 쉐이더 구현
u 픽셀쉐이더는 클립 공간 위치의 z 성분을 변환하면 될거 같지만 그전에 w로 나
눈 값을 반환해야 한다.
u 위치벡터에 원근투영행렬을 곱하면 w 성분은 1이 아니다. 동차좌표를 화면상
좌표로 사용하려면 w값으로 좌표로 나누어 줘야 한다. (x/w, y/w, z/w, 1)
장면 렌더링
u 장면 렌더링을 위해 렌더타겟을 백버퍼로 되돌린다.
장면 렌더링
u 장면의 객체들을 그린다.
그림자 입히기 쉐이더
u 광원을 기준으로 z값을 비교하기 광원 기준 투영 공간 위치를 출력으로 저장한다.
그림자 입히기 쉐이더
u 그림자맵을 픽셀쉐이더에서 사용하기 전, ndc 공간의 xy좌표로 그림자맵
의 uv좌표를 구한다.
u XY 좌표를 UV좌표로:
u = x ÷ 2 - 1
v = -y ÷ 2 + 1
그림자 입히기 쉐이더
u Z값을 비교하여 현제 값이 크면은 칼라값을 1/2로 조정한다.
u 부동소수점 에러 때문에 보정값을 더해준다.
그림자 입히기 쉐이더
u 보정 전 후 차이
참고 동영상
u Depth Buffer Shadow Mapping
깊이 버퍼 그림자 매핑의 장점
u 비교적 저렴한 비용으로 그럴듯한 그림자 효과를 얻을 수 있다.
u 이전에는 까다로웠던 셀프 쉐도우나 다른 객체에 대한 그림자를 쉽게 구현할 수 있다.
u Circle Shadow에서 발생했던 그림자 겹침 현상이 발생하지 않는다.
깊이 버퍼 그림자 매핑의 단점(1)
u 픽셀 단위의 구현으로 인해 그림자 맵의 해상도가 낮으면 그만큼 그림자의 세밀
함이 떨어지게 된다.
깊이 버퍼 그림자 매핑의 단점(2)
u 아무리 해상도가 좋아도 광원 절두체와 시야 절두체가 서로 포함하는 영역이 적을수록
그림자의 품질 저하는 피할 수 없다.
u 객체 D는 카메라에는 가까이 있지만 광원에는 멀리 있다. 따라서 광원 기준으로 투영
된 깊이 버퍼에서 작은 영역에 포함되어 있을 것이다. 그러나
A
B
C
D
깊이 버퍼 그림자 매핑의 단점(3)
u 실제 그림자는 안쪽이 가장 어둡지만 모서리 부분으로 갈수록 흐려지는 특징이
있다. 이를 소프트 쉐도우라 하는데 깊이 버퍼 그림자 매핑은 이런 정교한 구현
이 불가능하다.
깊이 버퍼 그림자 매핑의 단점(4)
u 하드 쉐도우라는 것은 양날의 검이기도 한데 장점은 그림자 겹침 현상이 없다는 것이다.
이는 광원이 하나 일 경우 유효한 물리적 현상이다.
u 반면 광원이 다수일 경우 그림자 또한 다수가 존재하는 데 이때에는 그림자 겹침 현상
이 발생하는 것이 물리적으로 옳지만 구현이 불가능 하다.
u 또한 광원이 다수이면 이에 대응하는 깊이 버퍼도 다수여야 하므로 자원 소모가 커진다.
그림자의 계단 현상을 보완한 기술들
u 케스케이드 그림자 매핑 : 여러 개의 그림자맵을 생성하여 카메라에 가까운 객
체들은 고해상도 그림자맵을 사용하고 멀리 떨어진 객체들은 저해상도 그림자
맵을 사용하는 방법.
u 퍼센티지 클로저 필터링 : 그림자의 외곽선을 부드럽게 필터링 해주기 위해 사
용하는 기법.
u 배리언스 그림자 매핑: 하드웨어 텍스처 필터링이 가능하도록 깊이 값을 저장하
는 방법.
u 향후 발표 예정…
Q&A

More Related Content

PDF
[Kgc2012] deferred forward 이창희
PDF
Cascade Shadow Mapping
PDF
Ndc11 이창희_hdr
PPT
Shadow mapping 정리
PDF
Compute shader
PPTX
Tips and experience of DX12 Engine development .
PDF
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
PDF
노말 맵핑(Normal mapping)
[Kgc2012] deferred forward 이창희
Cascade Shadow Mapping
Ndc11 이창희_hdr
Shadow mapping 정리
Compute shader
Tips and experience of DX12 Engine development .
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
노말 맵핑(Normal mapping)

What's hot (20)

PDF
Motion blur
PDF
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
PPTX
Implements Cascaded Shadow Maps with using Texture Array
PDF
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
PDF
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
PPTX
PDF
MMOG Server-Side 충돌 및 이동처리 설계와 구현
PPTX
포인트 셰도우
PPTX
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
PDF
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
PPTX
[Ndc11 박민근] deferred shading
PPTX
[1023 박민수] 깊이_버퍼_그림자_1
PPTX
[0821 박민근] 렌즈 플레어(lens flare)
PPTX
Hierachical z Map Occlusion Culling
PDF
멀티스레드 렌더링 (Multithreaded rendering)
PPTX
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용
PPTX
Screen space reflection
PPTX
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
PPTX
[0903 구경원] recast 네비메쉬
PPTX
[0122 구경원]게임에서의 충돌처리
Motion blur
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
Implements Cascaded Shadow Maps with using Texture Array
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
MMOG Server-Side 충돌 및 이동처리 설계와 구현
포인트 셰도우
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc11 박민근] deferred shading
[1023 박민수] 깊이_버퍼_그림자_1
[0821 박민근] 렌즈 플레어(lens flare)
Hierachical z Map Occlusion Culling
멀티스레드 렌더링 (Multithreaded rendering)
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용
Screen space reflection
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[0903 구경원] recast 네비메쉬
[0122 구경원]게임에서의 충돌처리
Ad

Similar to 2018.12.22 깊이 버퍼 그림자 매핑 (20)

PPTX
[1023 박민수] 깊이_버퍼_그림자
PPTX
Depth buffershadow
PPTX
그림자 이야기
PPTX
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
PDF
[Shader study] the rendering technology of lords of the fallen - 발표메모(14.06.23)
PPTX
Light in screen_space(Light Pre Pass)
PPTX
다해상도 지연 렌더링
PPTX
[14.10.21] Far Cry and DX9 번역(shaderstudy)
PPTX
Graphics 8장 텍스처 적용.pptx
PPTX
구세대 엔진 신데렐라 만들기 최종본 유트브2
PPTX
9강 camera advanced light2
PPTX
2018.02.03 이미지 텍스처링
PPT
GameMath-Chapter 08 고급렌더링
PPTX
[0326 박민근] deferred shading
PDF
09_Bilateral filtering/Reprojection Cache 소개
PDF
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
PDF
[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...
PPTX
엔지니어링 비젼_동영상제거.pptx
PPTX
엔지니어링비젼_언리얼엔진4_커스텀______________________
PPTX
아일렛 온라인에서 사용한 블럭 렌더링 소개
[1023 박민수] 깊이_버퍼_그림자
Depth buffershadow
그림자 이야기
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
[Shader study] the rendering technology of lords of the fallen - 발표메모(14.06.23)
Light in screen_space(Light Pre Pass)
다해상도 지연 렌더링
[14.10.21] Far Cry and DX9 번역(shaderstudy)
Graphics 8장 텍스처 적용.pptx
구세대 엔진 신데렐라 만들기 최종본 유트브2
9강 camera advanced light2
2018.02.03 이미지 텍스처링
GameMath-Chapter 08 고급렌더링
[0326 박민근] deferred shading
09_Bilateral filtering/Reprojection Cache 소개
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...
엔지니어링 비젼_동영상제거.pptx
엔지니어링비젼_언리얼엔진4_커스텀______________________
아일렛 온라인에서 사용한 블럭 렌더링 소개
Ad

More from Sukwoo Lee (7)

PDF
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
PDF
Data-Oriented Design과 유니티 DOTS
PDF
행동 트리
PPTX
Bump Mapping
PPTX
리얼타임 렌더링 - 조명 입문편 -
PDF
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
PPTX
Component-Based Entity System과 Data-oriented Design
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
Data-Oriented Design과 유니티 DOTS
행동 트리
Bump Mapping
리얼타임 렌더링 - 조명 입문편 -
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
Component-Based Entity System과 Data-oriented Design

2018.12.22 깊이 버퍼 그림자 매핑

  • 1. 깊이 버퍼 그림자 매핑 Depth Buffer Shadow Mapping 2018-12-22 데브루키 발표자 이석우
  • 2. 발표자 소개 u 이석우 (1987년생) u 병역 특례 종료 후 2019년 백수 예정자 u 발표자료에 대한 오류사항이나 궁금한 점이 있으면 아래의 메일로 연락주세요. [email protected]
  • 3. Reference u 박민수 [깊이 버퍼 그림자] : 그림자 구현의 역사 참조 u 김포프 [셰이더 프로그래밍 입문] : 그림자 매핑 및 소스 코드 참조 u 박민근 [알콜코더’s 브래인] : 물어보면 다 알려주는 데브루키의 욕쟁이 할머니
  • 4. 그림자란? u 빛이 어떤 물체에 막혀 다른 물체에 빛이 통과하지 못하여 생기는 어두운 부분을 말한다.
  • 5. CG에서 그림자 u 음영(Form Shadow)과 그림자(Cast Shadow)로 구분된다.
  • 6. 오늘의 주제 u 음영은 보통 Lighting 계산으로 구한다. u 그러나 그림자는 프로그래머가 추가적인 처리를 해야 한다. u 따라서 오늘은 이 그림자(Cast Shadow)를 구현하는 방법에 대해 설명한다.
  • 7. 게임 속 초기 그림자 구현 u Circle Shadow
  • 8. Circle Shadow u 캐릭터의 발 밑 부분에 원형의 그림자 텍스처를 입힌다. u 모든 캐릭터가 원형의 그림자를 갖게 되어 리얼리티가 떨어진다. u 울퉁불퉁한 지형에서 사용할 수 없고 오직 평지에서만 사용이 가능하다. u 광원이 하나여도 그림자가 겹친 부분이 더 어두워지는 현상이 발생한다.
  • 9. 게임 속 초기 그림자 구현 u Projected Shadow Mapping
  • 10. Projected Shadow Mapping u 그림자는 광원의 위치에 따라 빛의 방향이 다르고 이에 따라 바닥에 투영시켜야 한다. 이를 Projected Shadow Mapping이라 한다. u 광원에서 본 오브젝트의 실루엣을 그림자 텍스쳐에 저장한다. u 광원 방향으로 투영하듯 텍스처를 매핑한다.
  • 11. Projected Shadow Mapping u 문제점 : Self Shadow가 적용되지 않는다. § 왜냐하면 그림자를 오브젝트 단위로 생성하기 때문에 자신의 차폐를 계산하기 어렵다.
  • 12. Projected Shadow Mapping u 문제점 : 투영을 잘 시켜야 한다. § 계산을 잘 못하면 벽 넘어에 그림자가 생기는 등의 버그가 발생할 수 있다.
  • 13. 깊이버퍼 그림자 매핑 Depth Buffer Shadow Mapping u GPU 성능이 점점 좋아져 픽셀 계산 능력이 올라가면서 Depth Buffer Shadow Mapping이 사용되기 시작했다. u 이 방법은 광원을 기준으로 그림자를 생성할 지 판단한다.
  • 14. 그림자는 어디에 생성되어야 할까? u 빛은 직진성을 가지기 때문에 통과하지 못하는 곳은 그림자가 생긴다. A B C D (a) (b) (c) (d) (f) (e)
  • 15. 그림자 생성 여부의 판단 u 광원으로부터 가장 가까운 객체까지의 거리를 저장하여 현재 객체가 멀면 그림자 를 생성하면 된다. A B C D 0.0 0.5 0.7 0.85 1.0
  • 16. 비슷한 컨셉의 Z버퍼링 u 위의 방법은 Z버퍼링과 유사하다. u Z버퍼링은 카메라로부터 객체까지의 거리를 깊이버퍼 에 픽셀단위로 저장하여 거리 비교를 통해 카메라에 가 장 가까운 객체를 보여주는 방법이다.
  • 17. 깊이버퍼 그림자 매핑의 모티브 u 카메라가 아닌 광원 기준으로 가장 가까운 객체의 거리값을 텍스처에 저장한다면…. u 텍스처를 이용하여 그림자의 생성 여부를 판단할 수 있다. u 여기서 광원에서 가장가까운 객체까지의 거리값을 저장한 2차원 텍스처를 그림자맵 (Shadow Map)이라 한다.
  • 18. 그림자 맵 u 그림자 맵에 저장된 데이터는 광원기준으로 원근 투영된 후 ndc 공간으로 변환 된 z 값이다. 따라서 0과 1 사이 값으로 저장된다. u 그림자 맵을 가시화하면 아래와 같이 회색조의 이미지를 볼 수 있다.
  • 19. 그림자 매핑의 과정 u 그림자맵 생성 ① 그림자맵을 저장할 렌더타겟으로 한다. ② 카메라를 광원의 위치에 두고 물체들을 그린다. ③ 픽셀셰이더에서 빛으로부터 현재 픽셀까지의 깊이를 반환한다. u 그림자 적용 ① 렌더타겟을 백버퍼로 설정한다. ② 카메라를 기준으로 물체들을 그린다. ③ 빛으로부터 현재 픽셀까지의 깊이를 그림자맵에 담겨 있는 결과와 비교한다. 현재 깊이가 그림자맵의 깊이보다 크면 그림자를 씌운다.
  • 20. 그림자맵 랜더링 u 광원 기준의 광원-뷰 행렬과 광원-투영 행렬을 만든다.
  • 21. 그림자맵 랜더링 u 일반적인 렌더링을 위한 카메라 기준 시야 및 투영 행렬들을 만든다.
  • 22. 그림자맵 랜더링 u 렌더 타겟은 백버퍼로 기본 설정이 되있다. 우리는 그림자맵을 생성할 때 렌더 타겟을 변경하므로 백버퍼와 깊이버퍼에 대한 포인터를 미리 저장해야 장면 렌 더링을 할 때 다시 백버퍼로 되돌릴 수 있다.
  • 23. 그림자맵 랜더링 u 그림자맵을 렌더 타겟으로 설정한다.
  • 24. 그림자맵 랜더링 u 그림자맵을 초기화 하고 쉐이더에서 사용할 행렬들을 설정한다.
  • 25. 그림자맵 랜더링 u 그림자 만들기 쉐이더를 이용하여 객체를 그린다.
  • 26. 그림자맵 만들기 쉐이더 구현 u 여기서는 정점만 있으면 거리 계산이 가능하므로 정점만 입력으로 받아온다.
  • 27. 그림자맵 만들기 쉐이더 구현 u 버텍스쉐이더에서는 클립 공간으로 변환한 후 정점을 반환한다.
  • 28. 그림자맵 만들기 쉐이더 구현 u 픽셀쉐이더는 클립 공간 위치의 z 성분을 변환하면 될거 같지만 그전에 w로 나 눈 값을 반환해야 한다. u 위치벡터에 원근투영행렬을 곱하면 w 성분은 1이 아니다. 동차좌표를 화면상 좌표로 사용하려면 w값으로 좌표로 나누어 줘야 한다. (x/w, y/w, z/w, 1)
  • 29. 장면 렌더링 u 장면 렌더링을 위해 렌더타겟을 백버퍼로 되돌린다.
  • 30. 장면 렌더링 u 장면의 객체들을 그린다.
  • 31. 그림자 입히기 쉐이더 u 광원을 기준으로 z값을 비교하기 광원 기준 투영 공간 위치를 출력으로 저장한다.
  • 32. 그림자 입히기 쉐이더 u 그림자맵을 픽셀쉐이더에서 사용하기 전, ndc 공간의 xy좌표로 그림자맵 의 uv좌표를 구한다. u XY 좌표를 UV좌표로: u = x ÷ 2 - 1 v = -y ÷ 2 + 1
  • 33. 그림자 입히기 쉐이더 u Z값을 비교하여 현제 값이 크면은 칼라값을 1/2로 조정한다. u 부동소수점 에러 때문에 보정값을 더해준다.
  • 34. 그림자 입히기 쉐이더 u 보정 전 후 차이
  • 35. 참고 동영상 u Depth Buffer Shadow Mapping
  • 36. 깊이 버퍼 그림자 매핑의 장점 u 비교적 저렴한 비용으로 그럴듯한 그림자 효과를 얻을 수 있다. u 이전에는 까다로웠던 셀프 쉐도우나 다른 객체에 대한 그림자를 쉽게 구현할 수 있다. u Circle Shadow에서 발생했던 그림자 겹침 현상이 발생하지 않는다.
  • 37. 깊이 버퍼 그림자 매핑의 단점(1) u 픽셀 단위의 구현으로 인해 그림자 맵의 해상도가 낮으면 그만큼 그림자의 세밀 함이 떨어지게 된다.
  • 38. 깊이 버퍼 그림자 매핑의 단점(2) u 아무리 해상도가 좋아도 광원 절두체와 시야 절두체가 서로 포함하는 영역이 적을수록 그림자의 품질 저하는 피할 수 없다. u 객체 D는 카메라에는 가까이 있지만 광원에는 멀리 있다. 따라서 광원 기준으로 투영 된 깊이 버퍼에서 작은 영역에 포함되어 있을 것이다. 그러나 A B C D
  • 39. 깊이 버퍼 그림자 매핑의 단점(3) u 실제 그림자는 안쪽이 가장 어둡지만 모서리 부분으로 갈수록 흐려지는 특징이 있다. 이를 소프트 쉐도우라 하는데 깊이 버퍼 그림자 매핑은 이런 정교한 구현 이 불가능하다.
  • 40. 깊이 버퍼 그림자 매핑의 단점(4) u 하드 쉐도우라는 것은 양날의 검이기도 한데 장점은 그림자 겹침 현상이 없다는 것이다. 이는 광원이 하나 일 경우 유효한 물리적 현상이다. u 반면 광원이 다수일 경우 그림자 또한 다수가 존재하는 데 이때에는 그림자 겹침 현상 이 발생하는 것이 물리적으로 옳지만 구현이 불가능 하다. u 또한 광원이 다수이면 이에 대응하는 깊이 버퍼도 다수여야 하므로 자원 소모가 커진다.
  • 41. 그림자의 계단 현상을 보완한 기술들 u 케스케이드 그림자 매핑 : 여러 개의 그림자맵을 생성하여 카메라에 가까운 객 체들은 고해상도 그림자맵을 사용하고 멀리 떨어진 객체들은 저해상도 그림자 맵을 사용하는 방법. u 퍼센티지 클로저 필터링 : 그림자의 외곽선을 부드럽게 필터링 해주기 위해 사 용하는 기법. u 배리언스 그림자 매핑: 하드웨어 텍스처 필터링이 가능하도록 깊이 값을 저장하 는 방법. u 향후 발표 예정…
  • 42. Q&A