SlideShare a Scribd company logo
1 of 35
POINT SHADOWS
2019-08-10 데브루키 발표자 이석우
참고 자료
• https://learnopengl.com/Advanced-Lighting/Shadows/Point-Shadows
• HLSL 프로그래밍, 저자: 도론 파인스타인
지난 발표 주제
• 깊이 버퍼 그림자 매핑
• 깊이 버퍼에 광원 기준 깊이값을 저장하여 이를 그림자 구현에 이용하는 방법
깊이 버퍼 그림자 매핑의 문제점
• 직접광만을 고려한다.
• 랜턴 같은 Point Light의 그림자는 구현은 불가능 하다.
POINT SHADOWS
• 이번 주제는 Point light에 대한 그림자 구현 방법에 대해 발표한다.
POINT SHADOW의 예
• 레드 데드 리뎀션2
랜턴
그림자
그림자
POINT SHADOW의 특징
• Point Shadow는 전방위으로 그림자가 발생한다.
CUBE MAP의 사용
• 전방위를 그림자를 생성하기 위해서 큐브맵을 사용하여 광원 기준 깊이값을 저장한다.
렌더링 패스
• 깊이버퍼 그림자 매핑은 2패스 알고리즘 이었다.
• 이런 방식으로 큐브맵을 사용하면 렌더링을 7번 해야한다.
Depth Buffer Rendering
Scene Rendering
Depth Buffer Rendering
Depth Buffer Rendering
Depth Buffer Rendering
Depth Buffer Rendering
Depth Buffer Rendering
Depth Buffer Rendering
Scene Rendering
랜더링 패스
• 지오메트리 쉐이더를 사용하여 6번의 깊이 버퍼 렌더링을 1번으로 바꾼다.
Depth Buffer Rendering
Vertex Shader Geometry Shader Pixel Shader
GEOMETRY SHADER
Vertex Shader
월드 변환
Geometry Shader
시야 투영 변환
Triangle Assembly
• GS는 기존의 기하 모델을 수정 및 추가할 수 있는 쉐이더이다.
Original Model
GEOMETRY SHADER
Vertex Shader
월드 변환
Geometry Shader
시야 투영 변환
Triangle Assembly
삼각형을 이루는
버텍스 3개
• 버텍스 쉐이더에서 출력한 버텍스를 프리미티브(삼각형, 선, 점 중 선택)로 묶어 처리한다.
• 즉, 프리미티브 1개 당 한번 호출된다.
삼각형을 이루는
버텍스 6개
Original Model
GEOMETRY SHADER
Vertex Shader
월드 변환
Geometry Shader
시야 투영 변환
Triangle Assembly
삼각형을 이루는
버텍스 3개
• 버텍스를 추가/제거하거나 기존 버택스 위치를 수정하여 새로운 형태의 폴리곤을 만
들 수 있다.
삼각형을 이루는
버텍스 6개
Original Model
GEOMETRY SHADER
Vertex Shader
월드 변환
Geometry Shader
시야 투영 변환
Triangle Assembly
삼각형을 이루는
버텍스 3개
• 여기서는 큐브 맵을 한번의 처리로 렌더링 하는 데 사용한다.
삼각형을 이루는
버텍스 6개
Original Model
그림자 맵(깊이 버퍼)
• 그림자 맵에 저장된 데이터는 광원기준으로 원근 투영된 후 ndc 공간으로 변환된 z
값이다. 따라서 0과 1 사이 값으로 저장된다.
• 그림자 맵을 가시화하면 아래와 같이 회색조의 이미지를 볼 수 있다.
그림자 매핑의 과정
• Two pass algorithm
Shadowmap Rendering
Vertex Shader Geometry Shader Pixel Shader
Scene Rendering
Vertex Shader Pixel Shader
그림자맵 생성
• 큐브맵을 텍스처 배열에 묶어 생성한다.
• 텍스처 배열을 이용하면 gpu가 모든 큐브맵에 접근할 수 있다.
Texture Array
Binding
그림자 맵 렌더링
• 생성된 큐브맵을 렌더타겟으로 설정하고 렌더링 한다.
BACK BUFFER
렌더타겟
그림자 맵 렌더링
• VS는 버텍스를 월드 변환하고 GS에 넘겨준다.
Vertex Shader Geometry Shader Pixel Shader
월드 변환
광원 공간 뷰 투영
• 쉐도우 맵을 렌더링하기 위해선 카메라 기준이 아닌 광원 공간 뷰 투영 변환을 해야한다.
광원 공간 뷰 투영
• 기존 그림자 매핑에서는 하나의 삼각형에 대해서 1번의 투영 변환만 하면 됐다.
• 그러나 포인트라이트는 빛이 전방위로 퍼져나가는 데 컴퓨터는 그림자 어느 면에 생성될
지 알 수 없다. 따라서 모든 면에 대해 투영 변환을 하여 6개의 삼각형을 출력한다.
한 면만 그림자 생성
두 면에 그림자 생성
광원 공간 뷰 투영
• 사실 삼각형의 그림자가 6면 전부에 생성되지는 않는다. 최대 3면에 그림자 생성된다. 그
림자가 존재하지 않는 면은 그래픽스 파이프라인 단계를 거치면서 컬링된다.
한 면만 그림자 생성
두 면에 그림자 생성
컬링
컬링
컬링
컬링
컬링
그림자 맵 렌더링
• GS에서 출력된 삼각형 중 컬링되지 않은 큐브맵 면에 깊이값이 저장된다.
Vertex Shader Geometry Shader
월드 변환 시야+투영 변환
Texture Array
그림자 맵 렌더링
• PS는 알파값 기반 투명 패턴을 가진 기하 구조에만 쓰이고 보통 사용하지 않는다.
Vertex Shader Geometry Shader Pixel Shader
월드 변환 시야+투영 변환
장면 렌더링
• 이제 렌더타겟을 백버퍼로 설정하고 장면을 렌더링 한다.
BACK BUFFER
렌더타겟
장면 렌더링
• 장면 렌더링은 PS에서 그림자 맵을 그림자를 적용하는 데 사용한다.
Vertex Shader Pixel Shader
Texture Array
월드/시야/투영 변환 조명 계산
그림자 매핑
그림자 매핑
• 먼저 광원에서 현재 픽셀 위치에 대한 벡터 𝑉로 부터 큐브맵에 저장된 깊이값을 가져온다.
• 이 깊이값과 광원에서 현재 픽셀 위치까지의 깊이값을 비교하여 그림자를 적용한다.
𝑉
참조할 텍셀
SHADOW MAP GENERATION
SHADOW MAP GENERATION
출력 삼각형은 6개로 최대 출력 버텍스는 18개 이다.
이 인덱스를 참고 하여 출력된 6개의 삼각형을 각각의 큐브맵 면에 업데이트한다.
삼각형 버텍스 추가
광원 공간 시야 투영 변환
출력할 삼각형 추가
텍스처 배열 인덱스 설정
그림자 적용
조명 계산 생략
큐브 매핑에 필요한 벡터를 매개변수로 받는다.
이 반환 값은 최종 칼라의 감쇄 값으로 이용한다.
POINT SHADOWS
• https://www.youtube.com/watch?v=3i8NiTaAiA8
포인트 세도우의 문제점
• 큐브맵을 사용하므로 기존 메모리 사용의 6 배가 증가한다.
포인트 세도우의 문제점
• 위에 방식은 GS에서 그림자 발생하지 않는 면이 존재함에도 6면 모두에 대한 삼각형을
출력한다. 플래그를 걸고 그림자가 발생하는 면의 삼각형만 출력하는 것도 하나의 방법
이지만 이를 위해선 cpu 단에서 큐브맵에 대한 컬링 테스트를 해야 하는데 이 비용이 만
만치 않다.
한 면만 그림자 생성
두 면에 그림자 생성
포인트 세도우의 문제점
• 배보다 배꼽이 클 수 있으니 6개 출력을 그대로 하고 큐브맵을 적용할 모델을 최소화하
는 것이 낫다. 다만 특수한 경우에는 고려해보는 것도 좋을 것이다.
한 면만 그림자 생성
두 면에 그림자 생성
포인트 세도우의 문제점
• PCF 적용만으론 완전한 소프트 셰도우가 불가능하다.

More Related Content

What's hot

[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shadingMinGeun Park
 
Ue4 에서의 환경변화 구현
Ue4 에서의 환경변화 구현Ue4 에서의 환경변화 구현
Ue4 에서의 환경변화 구현kyuil choi
 
Compute shader
Compute shaderCompute shader
Compute shaderQooJuice
 
Compute shader DX11
Compute shader DX11Compute shader DX11
Compute shader DX11민웅 이
 
[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유Hwan Min
 
IndirectDraw with unity
IndirectDraw with unityIndirectDraw with unity
IndirectDraw with unityJung Suk Ko
 
Brdf기반 사전정의 스킨 셰이더
Brdf기반 사전정의 스킨 셰이더Brdf기반 사전정의 스킨 셰이더
Brdf기반 사전정의 스킨 셰이더동석 김
 
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다  공개용물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다  공개용
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용JP Jung
 
191019 Forward / Deferred Rendering
191019 Forward / Deferred Rendering191019 Forward / Deferred Rendering
191019 Forward / Deferred RenderingKWANGIL KIM
 
Rendering Tech of Space Marine
Rendering Tech of Space MarineRendering Tech of Space Marine
Rendering Tech of Space MarinePope Kim
 
Shadow mapping 정리
Shadow mapping 정리Shadow mapping 정리
Shadow mapping 정리changehee lee
 
Hable John Uncharted2 Hdr Lighting
Hable John Uncharted2 Hdr LightingHable John Uncharted2 Hdr Lighting
Hable John Uncharted2 Hdr Lightingozlael ozlael
 
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)포프 김
 
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑MinGeun Park
 
Deferred decal
Deferred decalDeferred decal
Deferred decal민웅 이
 
Choi JiHyun NDC2011
Choi JiHyun  NDC2011Choi JiHyun  NDC2011
Choi JiHyun NDC2011지현 최
 
빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술YEONG-CHEON YOU
 

What's hot (20)

Motion blur
Motion blurMotion blur
Motion blur
 
[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading
 
Ndc11 이창희_hdr
Ndc11 이창희_hdrNdc11 이창희_hdr
Ndc11 이창희_hdr
 
Ue4 에서의 환경변화 구현
Ue4 에서의 환경변화 구현Ue4 에서의 환경변화 구현
Ue4 에서의 환경변화 구현
 
Compute shader
Compute shaderCompute shader
Compute shader
 
Compute shader DX11
Compute shader DX11Compute shader DX11
Compute shader DX11
 
Ssao
SsaoSsao
Ssao
 
[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유
 
IndirectDraw with unity
IndirectDraw with unityIndirectDraw with unity
IndirectDraw with unity
 
Brdf기반 사전정의 스킨 셰이더
Brdf기반 사전정의 스킨 셰이더Brdf기반 사전정의 스킨 셰이더
Brdf기반 사전정의 스킨 셰이더
 
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다  공개용물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다  공개용
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용
 
191019 Forward / Deferred Rendering
191019 Forward / Deferred Rendering191019 Forward / Deferred Rendering
191019 Forward / Deferred Rendering
 
Rendering Tech of Space Marine
Rendering Tech of Space MarineRendering Tech of Space Marine
Rendering Tech of Space Marine
 
Shadow mapping 정리
Shadow mapping 정리Shadow mapping 정리
Shadow mapping 정리
 
Hable John Uncharted2 Hdr Lighting
Hable John Uncharted2 Hdr LightingHable John Uncharted2 Hdr Lighting
Hable John Uncharted2 Hdr Lighting
 
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
 
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
 
Deferred decal
Deferred decalDeferred decal
Deferred decal
 
Choi JiHyun NDC2011
Choi JiHyun  NDC2011Choi JiHyun  NDC2011
Choi JiHyun NDC2011
 
빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술
 

Similar to 포인트 셰도우

Depth buffershadow
Depth buffershadowDepth buffershadow
Depth buffershadowMoonLightMS
 
[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자MoonLightMS
 
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)민웅 이
 
[0918 박민수] 범프 매핑
[0918 박민수] 범프 매핑[0918 박민수] 범프 매핑
[0918 박민수] 범프 매핑MoonLightMS
 
실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬현찬 양
 
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술Ki Hyunwoo
 
[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희changehee lee
 
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)Sukwoo Lee
 
Real-Time Global Illumination Techniques
Real-Time Global Illumination TechniquesReal-Time Global Illumination Techniques
Real-Time Global Illumination TechniquesJangho Lee
 
Voxel based game_optimazation_relelase
Voxel based game_optimazation_relelaseVoxel based game_optimazation_relelase
Voxel based game_optimazation_relelaseYEONG-CHEON YOU
 
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법강 민우
 
셰이더 만들기 실습
셰이더 만들기 실습셰이더 만들기 실습
셰이더 만들기 실습Jungsoo Park
 
구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2Kyoung Seok(경석) Ko(고)
 
제노블레이도 2 ray marching을사용한 구름 표현
제노블레이도 2 ray marching을사용한 구름 표현제노블레이도 2 ray marching을사용한 구름 표현
제노블레이도 2 ray marching을사용한 구름 표현민웅 이
 
[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종빈 오
 
니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌
니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌
니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌민웅 이
 
Lighting in Stingray
Lighting in StingrayLighting in Stingray
Lighting in StingrayJaehoon Lee
 
Build Lightmap system
Build Lightmap systemBuild Lightmap system
Build Lightmap systemJaesik Hwang
 

Similar to 포인트 셰도우 (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)
 
[0918 박민수] 범프 매핑
[0918 박민수] 범프 매핑[0918 박민수] 범프 매핑
[0918 박민수] 범프 매핑
 
Uncharted4 part1
Uncharted4 part1Uncharted4 part1
Uncharted4 part1
 
Bump Mapping
Bump MappingBump Mapping
Bump Mapping
 
실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬
 
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
 
[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희
 
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
 
Real-Time Global Illumination Techniques
Real-Time Global Illumination TechniquesReal-Time Global Illumination Techniques
Real-Time Global Illumination Techniques
 
Voxel based game_optimazation_relelase
Voxel based game_optimazation_relelaseVoxel based game_optimazation_relelase
Voxel based game_optimazation_relelase
 
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
 
셰이더 만들기 실습
셰이더 만들기 실습셰이더 만들기 실습
셰이더 만들기 실습
 
구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2
 
제노블레이도 2 ray marching을사용한 구름 표현
제노블레이도 2 ray marching을사용한 구름 표현제노블레이도 2 ray marching을사용한 구름 표현
제노블레이도 2 ray marching을사용한 구름 표현
 
[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
 
니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌
니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌
니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌
 
Lighting in Stingray
Lighting in StingrayLighting in Stingray
Lighting in Stingray
 
Build Lightmap system
Build Lightmap systemBuild Lightmap system
Build Lightmap system
 

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
 
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 (6)

진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
 
Data-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSData-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTS
 
행동 트리
행동 트리행동 트리
행동 트리
 
2018.02.03 이미지 텍스처링
2018.02.03 이미지 텍스처링2018.02.03 이미지 텍스처링
2018.02.03 이미지 텍스처링
 
리얼타임 렌더링 - 조명 입문편 -
리얼타임 렌더링 - 조명  입문편 -리얼타임 렌더링 - 조명  입문편 -
리얼타임 렌더링 - 조명 입문편 -
 
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
 

포인트 셰도우

  • 3. 지난 발표 주제 • 깊이 버퍼 그림자 매핑 • 깊이 버퍼에 광원 기준 깊이값을 저장하여 이를 그림자 구현에 이용하는 방법
  • 4. 깊이 버퍼 그림자 매핑의 문제점 • 직접광만을 고려한다. • 랜턴 같은 Point Light의 그림자는 구현은 불가능 하다.
  • 5. POINT SHADOWS • 이번 주제는 Point light에 대한 그림자 구현 방법에 대해 발표한다.
  • 6. POINT SHADOW의 예 • 레드 데드 리뎀션2 랜턴 그림자 그림자
  • 7. POINT SHADOW의 특징 • Point Shadow는 전방위으로 그림자가 발생한다.
  • 8. CUBE MAP의 사용 • 전방위를 그림자를 생성하기 위해서 큐브맵을 사용하여 광원 기준 깊이값을 저장한다.
  • 9. 렌더링 패스 • 깊이버퍼 그림자 매핑은 2패스 알고리즘 이었다. • 이런 방식으로 큐브맵을 사용하면 렌더링을 7번 해야한다. Depth Buffer Rendering Scene Rendering Depth Buffer Rendering Depth Buffer Rendering Depth Buffer Rendering Depth Buffer Rendering Depth Buffer Rendering Depth Buffer Rendering Scene Rendering
  • 10. 랜더링 패스 • 지오메트리 쉐이더를 사용하여 6번의 깊이 버퍼 렌더링을 1번으로 바꾼다. Depth Buffer Rendering Vertex Shader Geometry Shader Pixel Shader
  • 11. GEOMETRY SHADER Vertex Shader 월드 변환 Geometry Shader 시야 투영 변환 Triangle Assembly • GS는 기존의 기하 모델을 수정 및 추가할 수 있는 쉐이더이다. Original Model
  • 12. GEOMETRY SHADER Vertex Shader 월드 변환 Geometry Shader 시야 투영 변환 Triangle Assembly 삼각형을 이루는 버텍스 3개 • 버텍스 쉐이더에서 출력한 버텍스를 프리미티브(삼각형, 선, 점 중 선택)로 묶어 처리한다. • 즉, 프리미티브 1개 당 한번 호출된다. 삼각형을 이루는 버텍스 6개 Original Model
  • 13. GEOMETRY SHADER Vertex Shader 월드 변환 Geometry Shader 시야 투영 변환 Triangle Assembly 삼각형을 이루는 버텍스 3개 • 버텍스를 추가/제거하거나 기존 버택스 위치를 수정하여 새로운 형태의 폴리곤을 만 들 수 있다. 삼각형을 이루는 버텍스 6개 Original Model
  • 14. GEOMETRY SHADER Vertex Shader 월드 변환 Geometry Shader 시야 투영 변환 Triangle Assembly 삼각형을 이루는 버텍스 3개 • 여기서는 큐브 맵을 한번의 처리로 렌더링 하는 데 사용한다. 삼각형을 이루는 버텍스 6개 Original Model
  • 15. 그림자 맵(깊이 버퍼) • 그림자 맵에 저장된 데이터는 광원기준으로 원근 투영된 후 ndc 공간으로 변환된 z 값이다. 따라서 0과 1 사이 값으로 저장된다. • 그림자 맵을 가시화하면 아래와 같이 회색조의 이미지를 볼 수 있다.
  • 16. 그림자 매핑의 과정 • Two pass algorithm Shadowmap Rendering Vertex Shader Geometry Shader Pixel Shader Scene Rendering Vertex Shader Pixel Shader
  • 17. 그림자맵 생성 • 큐브맵을 텍스처 배열에 묶어 생성한다. • 텍스처 배열을 이용하면 gpu가 모든 큐브맵에 접근할 수 있다. Texture Array Binding
  • 18. 그림자 맵 렌더링 • 생성된 큐브맵을 렌더타겟으로 설정하고 렌더링 한다. BACK BUFFER 렌더타겟
  • 19. 그림자 맵 렌더링 • VS는 버텍스를 월드 변환하고 GS에 넘겨준다. Vertex Shader Geometry Shader Pixel Shader 월드 변환
  • 20. 광원 공간 뷰 투영 • 쉐도우 맵을 렌더링하기 위해선 카메라 기준이 아닌 광원 공간 뷰 투영 변환을 해야한다.
  • 21. 광원 공간 뷰 투영 • 기존 그림자 매핑에서는 하나의 삼각형에 대해서 1번의 투영 변환만 하면 됐다. • 그러나 포인트라이트는 빛이 전방위로 퍼져나가는 데 컴퓨터는 그림자 어느 면에 생성될 지 알 수 없다. 따라서 모든 면에 대해 투영 변환을 하여 6개의 삼각형을 출력한다. 한 면만 그림자 생성 두 면에 그림자 생성
  • 22. 광원 공간 뷰 투영 • 사실 삼각형의 그림자가 6면 전부에 생성되지는 않는다. 최대 3면에 그림자 생성된다. 그 림자가 존재하지 않는 면은 그래픽스 파이프라인 단계를 거치면서 컬링된다. 한 면만 그림자 생성 두 면에 그림자 생성 컬링 컬링 컬링 컬링 컬링
  • 23. 그림자 맵 렌더링 • GS에서 출력된 삼각형 중 컬링되지 않은 큐브맵 면에 깊이값이 저장된다. Vertex Shader Geometry Shader 월드 변환 시야+투영 변환 Texture Array
  • 24. 그림자 맵 렌더링 • PS는 알파값 기반 투명 패턴을 가진 기하 구조에만 쓰이고 보통 사용하지 않는다. Vertex Shader Geometry Shader Pixel Shader 월드 변환 시야+투영 변환
  • 25. 장면 렌더링 • 이제 렌더타겟을 백버퍼로 설정하고 장면을 렌더링 한다. BACK BUFFER 렌더타겟
  • 26. 장면 렌더링 • 장면 렌더링은 PS에서 그림자 맵을 그림자를 적용하는 데 사용한다. Vertex Shader Pixel Shader Texture Array 월드/시야/투영 변환 조명 계산 그림자 매핑
  • 27. 그림자 매핑 • 먼저 광원에서 현재 픽셀 위치에 대한 벡터 𝑉로 부터 큐브맵에 저장된 깊이값을 가져온다. • 이 깊이값과 광원에서 현재 픽셀 위치까지의 깊이값을 비교하여 그림자를 적용한다. 𝑉 참조할 텍셀
  • 29. SHADOW MAP GENERATION 출력 삼각형은 6개로 최대 출력 버텍스는 18개 이다. 이 인덱스를 참고 하여 출력된 6개의 삼각형을 각각의 큐브맵 면에 업데이트한다. 삼각형 버텍스 추가 광원 공간 시야 투영 변환 출력할 삼각형 추가 텍스처 배열 인덱스 설정
  • 30. 그림자 적용 조명 계산 생략 큐브 매핑에 필요한 벡터를 매개변수로 받는다. 이 반환 값은 최종 칼라의 감쇄 값으로 이용한다.
  • 32. 포인트 세도우의 문제점 • 큐브맵을 사용하므로 기존 메모리 사용의 6 배가 증가한다.
  • 33. 포인트 세도우의 문제점 • 위에 방식은 GS에서 그림자 발생하지 않는 면이 존재함에도 6면 모두에 대한 삼각형을 출력한다. 플래그를 걸고 그림자가 발생하는 면의 삼각형만 출력하는 것도 하나의 방법 이지만 이를 위해선 cpu 단에서 큐브맵에 대한 컬링 테스트를 해야 하는데 이 비용이 만 만치 않다. 한 면만 그림자 생성 두 면에 그림자 생성
  • 34. 포인트 세도우의 문제점 • 배보다 배꼽이 클 수 있으니 6개 출력을 그대로 하고 큐브맵을 적용할 모델을 최소화하 는 것이 낫다. 다만 특수한 경우에는 고려해보는 것도 좋을 것이다. 한 면만 그림자 생성 두 면에 그림자 생성
  • 35. 포인트 세도우의 문제점 • PCF 적용만으론 완전한 소프트 셰도우가 불가능하다.