SlideShare a Scribd company logo
1 of 42
Download to read offline
깊이 버퍼 그림자 매핑
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

What's hot

5강 알파와알파소팅
5강 알파와알파소팅5강 알파와알파소팅
5강 알파와알파소팅JP Jung
 
노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)QooJuice
 
[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1MoonLightMS
 
[0821 박민근] 렌즈 플레어(lens flare)
[0821 박민근] 렌즈 플레어(lens flare)[0821 박민근] 렌즈 플레어(lens flare)
[0821 박민근] 렌즈 플레어(lens flare)MinGeun Park
 
Hierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingHierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingYEONG-CHEON YOU
 
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다  공개용물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다  공개용
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용JP Jung
 
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근MinGeun Park
 
PBR 기초 이론과 사용되는 맵들 Vol.3
PBR 기초 이론과 사용되는 맵들 Vol.3PBR 기초 이론과 사용되는 맵들 Vol.3
PBR 기초 이론과 사용되는 맵들 Vol.3Jooyoung Yi
 
191019 Forward / Deferred Rendering
191019 Forward / Deferred Rendering191019 Forward / Deferred Rendering
191019 Forward / Deferred RenderingKWANGIL KIM
 
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑MinGeun Park
 
[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희changehee lee
 
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기강 민우
 
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019devCAT Studio, NEXON
 
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기Madumpa Park
 
물리 기반 셰이더의 이해
물리 기반 셰이더의 이해물리 기반 셰이더의 이해
물리 기반 셰이더의 이해tartist
 
Brdf기반 사전정의 스킨 셰이더
Brdf기반 사전정의 스킨 셰이더Brdf기반 사전정의 스킨 셰이더
Brdf기반 사전정의 스킨 셰이더동석 김
 
빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술YEONG-CHEON YOU
 

What's hot (20)

5강 알파와알파소팅
5강 알파와알파소팅5강 알파와알파소팅
5강 알파와알파소팅
 
노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)
 
[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1
 
[0821 박민근] 렌즈 플레어(lens flare)
[0821 박민근] 렌즈 플레어(lens flare)[0821 박민근] 렌즈 플레어(lens flare)
[0821 박민근] 렌즈 플레어(lens flare)
 
Motion blur
Motion blurMotion blur
Motion blur
 
Hierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingHierachical z Map Occlusion Culling
Hierachical z Map Occlusion Culling
 
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다  공개용물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다  공개용
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용
 
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
 
PBR 기초 이론과 사용되는 맵들 Vol.3
PBR 기초 이론과 사용되는 맵들 Vol.3PBR 기초 이론과 사용되는 맵들 Vol.3
PBR 기초 이론과 사용되는 맵들 Vol.3
 
191019 Forward / Deferred Rendering
191019 Forward / Deferred Rendering191019 Forward / Deferred Rendering
191019 Forward / Deferred Rendering
 
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
 
[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희
 
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
 
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
 
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
 
Ssao
SsaoSsao
Ssao
 
물리 기반 셰이더의 이해
물리 기반 셰이더의 이해물리 기반 셰이더의 이해
물리 기반 셰이더의 이해
 
Brdf기반 사전정의 스킨 셰이더
Brdf기반 사전정의 스킨 셰이더Brdf기반 사전정의 스킨 셰이더
Brdf기반 사전정의 스킨 셰이더
 
High dynamic range
High dynamic rangeHigh dynamic range
High dynamic range
 
빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술
 

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

Depth buffershadow
Depth buffershadowDepth buffershadow
Depth buffershadowMoonLightMS
 
[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자MoonLightMS
 
포인트 셰도우
포인트 셰도우포인트 셰도우
포인트 셰도우Sukwoo Lee
 
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)민웅 이
 
Unity cookbook 13
Unity cookbook 13Unity cookbook 13
Unity cookbook 13Jihun Soh
 
[0918 박민수] 범프 매핑
[0918 박민수] 범프 매핑[0918 박민수] 범프 매핑
[0918 박민수] 범프 매핑MoonLightMS
 
Unity cookbook 17
Unity cookbook 17Unity cookbook 17
Unity cookbook 17Jihun Soh
 
셰이더 만들기 실습
셰이더 만들기 실습셰이더 만들기 실습
셰이더 만들기 실습Jungsoo Park
 
[shaderx5] 4.6 Real-Time Soft Shadows with Shadow Accumulation
[shaderx5] 4.6 Real-Time Soft Shadows with Shadow Accumulation[shaderx5] 4.6 Real-Time Soft Shadows with Shadow Accumulation
[shaderx5] 4.6 Real-Time Soft Shadows with Shadow Accumulation종빈 오
 
구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2Kyoung Seok(경석) Ko(고)
 
언차티드4 테크아트 파트3 MicroShadowBRDF Term
언차티드4 테크아트 파트3 MicroShadowBRDF Term언차티드4 테크아트 파트3 MicroShadowBRDF Term
언차티드4 테크아트 파트3 MicroShadowBRDF TermDae Hyek KIM
 
코덱스 워리어 무기제작가이드 천동재
코덱스 워리어 무기제작가이드 천동재코덱스 워리어 무기제작가이드 천동재
코덱스 워리어 무기제작가이드 천동재Lee Jungpyo
 
[박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱
[박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱[박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱
[박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱MinGeun Park
 
니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌
니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌
니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌민웅 이
 
NDC2015 유니티 정적 라이팅 이게 최선인가요
NDC2015 유니티 정적 라이팅 이게 최선인가요  NDC2015 유니티 정적 라이팅 이게 최선인가요
NDC2015 유니티 정적 라이팅 이게 최선인가요 Wuwon Yu
 
6강 light shadow 기초
6강 light shadow 기초6강 light shadow 기초
6강 light shadow 기초JP Jung
 
6강 light shadow 기초
6강 light shadow 기초6강 light shadow 기초
6강 light shadow 기초JP Jung
 
Digital lighting and rendering
Digital lighting and renderingDigital lighting and rendering
Digital lighting and renderingJaeHong Park
 

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

Depth buffershadow
Depth buffershadowDepth buffershadow
Depth buffershadow
 
[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자
 
포인트 셰도우
포인트 셰도우포인트 셰도우
포인트 셰도우
 
그림자 이야기
그림자 이야기그림자 이야기
그림자 이야기
 
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
 
Unity cookbook 13
Unity cookbook 13Unity cookbook 13
Unity cookbook 13
 
[0918 박민수] 범프 매핑
[0918 박민수] 범프 매핑[0918 박민수] 범프 매핑
[0918 박민수] 범프 매핑
 
Unity cookbook 17
Unity cookbook 17Unity cookbook 17
Unity cookbook 17
 
셰이더 만들기 실습
셰이더 만들기 실습셰이더 만들기 실습
셰이더 만들기 실습
 
[shaderx5] 4.6 Real-Time Soft Shadows with Shadow Accumulation
[shaderx5] 4.6 Real-Time Soft Shadows with Shadow Accumulation[shaderx5] 4.6 Real-Time Soft Shadows with Shadow Accumulation
[shaderx5] 4.6 Real-Time Soft Shadows with Shadow Accumulation
 
Uncharted4 part1
Uncharted4 part1Uncharted4 part1
Uncharted4 part1
 
구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2
 
언차티드4 테크아트 파트3 MicroShadowBRDF Term
언차티드4 테크아트 파트3 MicroShadowBRDF Term언차티드4 테크아트 파트3 MicroShadowBRDF Term
언차티드4 테크아트 파트3 MicroShadowBRDF Term
 
코덱스 워리어 무기제작가이드 천동재
코덱스 워리어 무기제작가이드 천동재코덱스 워리어 무기제작가이드 천동재
코덱스 워리어 무기제작가이드 천동재
 
[박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱
[박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱[박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱
[박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱
 
니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌
니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌
니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌
 
NDC2015 유니티 정적 라이팅 이게 최선인가요
NDC2015 유니티 정적 라이팅 이게 최선인가요  NDC2015 유니티 정적 라이팅 이게 최선인가요
NDC2015 유니티 정적 라이팅 이게 최선인가요
 
6강 light shadow 기초
6강 light shadow 기초6강 light shadow 기초
6강 light shadow 기초
 
6강 light shadow 기초
6강 light shadow 기초6강 light shadow 기초
6강 light shadow 기초
 
Digital lighting and rendering
Digital lighting and renderingDigital lighting and rendering
Digital lighting and rendering
 

More from Sukwoo Lee

진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전Sukwoo Lee
 
Data-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSData-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSSukwoo Lee
 
2018.02.03 이미지 텍스처링
2018.02.03 이미지 텍스처링2018.02.03 이미지 텍스처링
2018.02.03 이미지 텍스처링Sukwoo Lee
 
리얼타임 렌더링 - 조명 입문편 -
리얼타임 렌더링 - 조명  입문편 -리얼타임 렌더링 - 조명  입문편 -
리얼타임 렌더링 - 조명 입문편 -Sukwoo Lee
 
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)Sukwoo Lee
 
Component-Based Entity System과 Data-oriented Design
Component-Based Entity System과 Data-oriented DesignComponent-Based Entity System과 Data-oriented Design
Component-Based Entity System과 Data-oriented DesignSukwoo Lee
 

More from Sukwoo Lee (8)

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

2018.12.22 깊이 버퍼 그림자 매핑

  • 1. 깊이 버퍼 그림자 매핑 Depth Buffer Shadow Mapping 2018-12-22 데브루키 발표자 이석우
  • 2. 발표자 소개 u 이석우 (1987년생) u 병역 특례 종료 후 2019년 백수 예정자 u 발표자료에 대한 오류사항이나 궁금한 점이 있으면 아래의 메일로 연락주세요. kkndsta@naver.com
  • 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