SlideShare a Scribd company logo
실전 프로젝트
최종 발표
정강 / 현찬
우리의 목표
• Deferred rendering
• SSAO
• SSDO
• DirectX11만을 사용하여 구현
DirectX11은 처음이라…
• DirectX9과 비교해서 달라진 인터페이스
• Shader 기반의 Rendering Pipeline
• Shader 종류 추가 ( compute shader..etc )
• Multi Thread Rendering (Device, DeviceContext로 분할)
• Etc..
일정 시간을 DirectX11 공부에 매진…..
Deferred rendering
easy to implement post-processing
Deferred Rendering이 뭐에요?
• 두 번의 Rendering을 통해 빛을 계산하는 기법
• 픽셀 수만큼만 빛 계산을 하여 계산 량을 줄임.
• 빛이 다른 Object에 영향을 주는 기법 등을 사용가능.
(halo기법 등)
• Screen Space에서 계산을 하기 때문에 Culling된 Object는 고려
할 수 없음
G-Buffer
• 후에 빛 계산을 위해서 필요한 정보들을 담고 있는 Buffer
• OMSetRenderTargets을 통해 다수의 RenderTarget을 설정가능
• G-Buffer를 통해 ScreenSpace의 3차원 정보를 복구가능
ex ) screen space에서 world position을 복원
Depth Buffer
• DirectX11에서는 Depth Buffer를 가져올 수 있음
• DepthStencilView와 ShaderResourceView의 포멧을 신경써야함
결과물
?
?
?
Depth Buffer – 안 보이는 문제
• view volume의 near, far plane 거리가 너무 커서 값이 죽음.
• near, far plane은 최대한 object에 맞춰서 조절함
Fbx Model 띄우기
• 처음에는 Box를 직접 그려서 구현
• Elin.fbx을 받아 띄우는 과정에서 많은 이슈들이 발생
• FBX Load, Normal Mapping, TGA, UV …..
FBX SDK
• 사용 버전 : 2015.1 FBX SDK
• 2014는 VS13과 호환 안됨
• DirectX와 친밀하지 않음
• 부족하고 믿을 수 없는 자료들
• 복잡하고 쓰기 힘든 인터페이스
• 해마다 달라지는 SDK (FBX Converter가 따로 있을 정도)
Elin 띄우기
• 엘린 턱이 빠져있다…
• 이번엔 머리카락만 붕 떠 있다…
• 군데 군데 빵꾸가 …?!
• GitHub에서 코드를 뒤져 사용방법을 익힘
Elin 띄우기 – UV 값이 일부 망가짐
텍스쳐가 이상하게…
Elin 띄우기 – TGA가 지원 안 됨.
• DirectX11에서는 기본적으로 TGA파일을 지원하지 않음
• DirectXTex라는 라이브러리를 제공
• Texture포멧을 변경하는 것이 더 효율적이라고 판단하여
TGA파일을 BMP파일로 변환.
참고 : http://directxtex.codeplex.com/
Normal Mapping 제대로 하기
• Tangent space normal mapping을 하기 위해 TBN Matrix 필요
Left : object space normal map / right : tangent space normal map ( 상대적인 정보만 저장)
Normal Mapping 제대로 하기
• Bitangent 계산을 제대로 하지 않아 normal mapping 오류!
그림자 방향이 일정하지 않음.
가운데 조명을 기준으로 바깥이 어두워야 함.
Normal Mapping 제대로 하기
• 기존방식
• biTangent = cross(normal,tangent);
• Elin 모델에서 대칭되는 부분은 리소스를 아끼기 위해 UV값 중 하나의
값을 뒤집는 부분이 있음(예 : 장화, 옷 / uv address wrap 기준)
• Tangent가 뒤집히면서 local space까지 뒤집힘.
• 해결
• Tangent는 U에 정렬, BiTangent는 V에 정렬해서 구함
Normal Mapping 제대로 하기
SSAO
screen space ambient occlusion
SSAO가 뭐에요?
• Screen Space Ambient Occlusion
• 얼마나 빛이 덜 들어오는지.
• 벽의 구석이나 사물의 깊이 파인 부분에 그림자를 표현.
• 매쉬 정보를 사용하지 않기 때문에 화면 복잡도와 상관없이 일정한 속도
로 화면을 갱신할 수 있다.
SSAO demo
SSAO 구현 순서
test point의
world position
재구성
반구를 얹어
sample kernel
생성하기
차폐 정도 계산
blur 추가,
* Ambient
*ViewProjInverse *ViewProj
필요한 정보
• Depth
• (world) Normal
1) world position 재구성
• normalize screen coordinate
• InverseViewProj matrix를 곱하여 world position 재구성
2) Sample Kernel 생성
• noise texture에서 random vector 추출.
• TBN matrix 생성.
2) Sample Kernel 생성
• 8개의 sample kernel 생성
• sampleSphere[8]은 미리 준비한 벡터 사용
3) 차폐 정도 계산
• 각각의 sample position의 depth값을 얻기 위해 다시 screen
coordinates로 전환
• screen coordinates의 원래 depth값을 읽어와서 비교.
3) 차폐 정도 계산
• 차폐된 샘플 : A, D
• P와의 거리에 따라 값 결정
distance= P – A’.z;
occlusion = saturate((fadeEnd - distance) / (fadeLength));
• occlusionSum / N
3) 차폐 정도 계산 – 더 고려할 점
• 같은 평면인데 어둡게 나타나는 경우
3) 차폐 정도 계산 – 더 고려할 점
• 엘린 주변에 테두리가 생기는 경우
rangeCheck = length(position – originalWorldPos) < radius ? 1 : 0 ;
3) 차폐 정도 계산 – 더 고려할 점
• 가장자리에 번짐 현상
• 아주 가까이 다가 갔을 때 이상 현상
4) 블러 추가
• 가우시안 블러 추가
결과물
SSDO
screen space directional occlusion
SSDO가 뭐에요?
• Screen Space Directional Occlusion
• 들어오는 빛의 방향까지 고려한 차폐 계산
• SSAO에서 이미 계산했던 것을 활용하는 방법을 택함.
: env.map을 활용하는 방법은 사용하지 않음
: 동일한 sample kernel 사용
• Indirect Bounce를 추가 ( 1단계 )
SSDO Demo
SSDO 구현 순서 – Indirect Bounce 추가
차폐된
sample position
선정
sample position에
패치 붙이기 색상 가져오기
blur 추가,
+ diffSpec
1) 차폐된 sample position 선정
2) sample position에 패치 붙이기
• sample position의 world normal 추출
• bounce 여부 검사
max(dot(originalWorldNormal, originalToPos), 0)
3) 색상 가져오기
3) 색상 가져오기 – 어디서?
• 기존방식
• 빛 계산이 적용되지 않은 diffuse texture에서 original color을 뽑아옴.
• 문제점 : 빛이 없어 어두운 부분에서도 color bounce가 계산되는 문제가 발생.
3) 색상 가져오기 – 해결
• 해결
( )+ * diffuseFactor
*{ }
3) 색상 가져오기 – 해결
• 비교
4) 블러 추가
결과물
FXAA
• antialiasing
• MSAA은 Geometry Shader에서 이루어짐
• MSAA는 직렬적인 Rendering Pipeline에서는 사용 불가능
• FXAA는 Depth Buffer를 통해 외곽선을 검출한 후, 외곽선 주변
에 filter를 통과시켜 smooth하게 만들어주는 기법
• NVIDIA에서 제공하는 FXAA 모듈을 사용
Framework
• Framework layer와 contents layer를 나누기 위해 노력
• InputDispatcher등을 만들어서 추가기능들을 정리
• 빛의 위치를 알려주기 위해 billboard사용
• billboard는 마지막에 따로 그려줌.
결과물
감사합니다

More Related Content

What's hot

[14.10.21] Far Cry and DX9 번역(shaderstudy)
[14.10.21] Far Cry and DX9 번역(shaderstudy)[14.10.21] Far Cry and DX9 번역(shaderstudy)
[14.10.21] Far Cry and DX9 번역(shaderstudy)
해강
 
니시카와젠지의 3 d 게임 팬을 위한 ps4
니시카와젠지의 3 d 게임 팬을 위한 ps4니시카와젠지의 3 d 게임 팬을 위한 ps4
니시카와젠지의 3 d 게임 팬을 위한 ps4
민웅 이
 
Game Visual Art Technologies
Game Visual Art TechnologiesGame Visual Art Technologies
Game Visual Art Technologies
SangYun Yi
 
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑MinGeun Park
 
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
Dae Hyek KIM
 
[박민근] 3 d렌더링 옵티마이징_2
[박민근] 3 d렌더링 옵티마이징_2[박민근] 3 d렌더링 옵티마이징_2
[박민근] 3 d렌더링 옵티마이징_2MinGeun Park
 
[KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록 [KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록
JiUng Choi
 
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근MinGeun Park
 
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술henjeon
 
제노블레이도 2 ray marching을사용한 구름 표현
제노블레이도 2 ray marching을사용한 구름 표현제노블레이도 2 ray marching을사용한 구름 표현
제노블레이도 2 ray marching을사용한 구름 표현
민웅 이
 
09_motionblur
09_motionblur09_motionblur
09_motionblur
noerror
 
[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shadingMinGeun Park
 
[박민근] 3 d렌더링 옵티마이징_3 공간분할
[박민근] 3 d렌더링 옵티마이징_3 공간분할[박민근] 3 d렌더링 옵티마이징_3 공간분할
[박민근] 3 d렌더링 옵티마이징_3 공간분할MinGeun Park
 
3D 컴퓨터 그래픽스 기초
3D 컴퓨터 그래픽스 기초3D 컴퓨터 그래픽스 기초
3D 컴퓨터 그래픽스 기초
Seung Joon Choi
 
구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2Kyoung Seok(경석) Ko(고)
 
Unity Surface Shader for Artist 02
Unity Surface Shader for Artist 02Unity Surface Shader for Artist 02
Unity Surface Shader for Artist 02
SangYun Yi
 
Unity Surface Shader for Artist 03
Unity Surface Shader for Artist 03Unity Surface Shader for Artist 03
Unity Surface Shader for Artist 03
SangYun Yi
 
SGL : 소프트웨어 3D 렌더링 엔진
SGL : 소프트웨어 3D 렌더링 엔진SGL : 소프트웨어 3D 렌더링 엔진
SGL : 소프트웨어 3D 렌더링 엔진
SUNGCHEOL KIM
 
언차티드4 테크아트 파트1 톤맵핑&색보정
언차티드4 테크아트 파트1 톤맵핑&색보정언차티드4 테크아트 파트1 톤맵핑&색보정
언차티드4 테크아트 파트1 톤맵핑&색보정
Dae Hyek KIM
 
Display color와 Digital texture format의 이해
Display color와 Digital texture format의 이해Display color와 Digital texture format의 이해
Display color와 Digital texture format의 이해
SangYun Yi
 

What's hot (20)

[14.10.21] Far Cry and DX9 번역(shaderstudy)
[14.10.21] Far Cry and DX9 번역(shaderstudy)[14.10.21] Far Cry and DX9 번역(shaderstudy)
[14.10.21] Far Cry and DX9 번역(shaderstudy)
 
니시카와젠지의 3 d 게임 팬을 위한 ps4
니시카와젠지의 3 d 게임 팬을 위한 ps4니시카와젠지의 3 d 게임 팬을 위한 ps4
니시카와젠지의 3 d 게임 팬을 위한 ps4
 
Game Visual Art Technologies
Game Visual Art TechnologiesGame Visual Art Technologies
Game Visual Art Technologies
 
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
 
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
 
[박민근] 3 d렌더링 옵티마이징_2
[박민근] 3 d렌더링 옵티마이징_2[박민근] 3 d렌더링 옵티마이징_2
[박민근] 3 d렌더링 옵티마이징_2
 
[KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록 [KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록
 
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
 
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
 
제노블레이도 2 ray marching을사용한 구름 표현
제노블레이도 2 ray marching을사용한 구름 표현제노블레이도 2 ray marching을사용한 구름 표현
제노블레이도 2 ray marching을사용한 구름 표현
 
09_motionblur
09_motionblur09_motionblur
09_motionblur
 
[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading
 
[박민근] 3 d렌더링 옵티마이징_3 공간분할
[박민근] 3 d렌더링 옵티마이징_3 공간분할[박민근] 3 d렌더링 옵티마이징_3 공간분할
[박민근] 3 d렌더링 옵티마이징_3 공간분할
 
3D 컴퓨터 그래픽스 기초
3D 컴퓨터 그래픽스 기초3D 컴퓨터 그래픽스 기초
3D 컴퓨터 그래픽스 기초
 
구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2
 
Unity Surface Shader for Artist 02
Unity Surface Shader for Artist 02Unity Surface Shader for Artist 02
Unity Surface Shader for Artist 02
 
Unity Surface Shader for Artist 03
Unity Surface Shader for Artist 03Unity Surface Shader for Artist 03
Unity Surface Shader for Artist 03
 
SGL : 소프트웨어 3D 렌더링 엔진
SGL : 소프트웨어 3D 렌더링 엔진SGL : 소프트웨어 3D 렌더링 엔진
SGL : 소프트웨어 3D 렌더링 엔진
 
언차티드4 테크아트 파트1 톤맵핑&색보정
언차티드4 테크아트 파트1 톤맵핑&색보정언차티드4 테크아트 파트1 톤맵핑&색보정
언차티드4 테크아트 파트1 톤맵핑&색보정
 
Display color와 Digital texture format의 이해
Display color와 Digital texture format의 이해Display color와 Digital texture format의 이해
Display color와 Digital texture format의 이해
 

Viewers also liked

More effective c++ 3
More effective c++ 3More effective c++ 3
More effective c++ 3현찬 양
 
Effective c++ 1
Effective c++ 1Effective c++ 1
Effective c++ 1현찬 양
 
Effective c++ 2
Effective c++ 2Effective c++ 2
Effective c++ 2현찬 양
 
초등학생도 하는 그냥 DB설치
초등학생도 하는 그냥 DB설치초등학생도 하는 그냥 DB설치
초등학생도 하는 그냥 DB설치현찬 양
 
Open gl 시작하기
Open gl 시작하기Open gl 시작하기
Open gl 시작하기현찬 양
 
More effective c++ 1
More effective c++ 1More effective c++ 1
More effective c++ 1현찬 양
 
Effective c++ 3
Effective c++ 3Effective c++ 3
Effective c++ 3현찬 양
 
Mesh slice 1
Mesh slice 1Mesh slice 1
Mesh slice 1
현찬 양
 
More effective c++ 2
More effective c++ 2More effective c++ 2
More effective c++ 2현찬 양
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4현찬 양
 

Viewers also liked (11)

More effective c++ 3
More effective c++ 3More effective c++ 3
More effective c++ 3
 
Effective c++ 1
Effective c++ 1Effective c++ 1
Effective c++ 1
 
Effective c++ 2
Effective c++ 2Effective c++ 2
Effective c++ 2
 
초등학생도 하는 그냥 DB설치
초등학생도 하는 그냥 DB설치초등학생도 하는 그냥 DB설치
초등학생도 하는 그냥 DB설치
 
Open gl 시작하기
Open gl 시작하기Open gl 시작하기
Open gl 시작하기
 
More effective c++ 1
More effective c++ 1More effective c++ 1
More effective c++ 1
 
Effective c++ 3
Effective c++ 3Effective c++ 3
Effective c++ 3
 
쿼터니언
쿼터니언쿼터니언
쿼터니언
 
Mesh slice 1
Mesh slice 1Mesh slice 1
Mesh slice 1
 
More effective c++ 2
More effective c++ 2More effective c++ 2
More effective c++ 2
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4
 

Similar to 실전프로젝트 정서경 양현찬

2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
Sukwoo Lee
 
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
 
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
민웅 이
 
Hierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingHierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingYEONG-CHEON YOU
 
[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기
changehee lee
 
Voxel based game_optimazation_relelase
Voxel based game_optimazation_relelaseVoxel based game_optimazation_relelase
Voxel based game_optimazation_relelase
YEONG-CHEON YOU
 
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
강 민우
 
Rendering realistic Ice objects
Rendering realistic Ice objectsRendering realistic Ice objects
Rendering realistic Ice objects
yong gyun im
 
빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술
YEONG-CHEON YOU
 
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
devCAT Studio, NEXON
 
Bump Mapping
Bump MappingBump Mapping
Bump Mapping
Sukwoo Lee
 
Sw occlusion culling
Sw occlusion cullingSw occlusion culling
Sw occlusion culling
YEONG-CHEON YOU
 
A Beginner's guide to understanding Autoencoder
A Beginner's guide to understanding AutoencoderA Beginner's guide to understanding Autoencoder
A Beginner's guide to understanding Autoencoder
Lee Seungeun
 
Cascade Shadow Mapping
Cascade Shadow MappingCascade Shadow Mapping
Cascade Shadow Mapping
Sukwoo Lee
 
[IGC 2017] 에픽게임즈 최용훈 - 밤낮으로 부수고 짓고 액션 빌딩 게임 만들기 - 포트나이트
[IGC 2017] 에픽게임즈 최용훈 - 밤낮으로 부수고 짓고 액션 빌딩 게임 만들기 - 포트나이트[IGC 2017] 에픽게임즈 최용훈 - 밤낮으로 부수고 짓고 액션 빌딩 게임 만들기 - 포트나이트
[IGC 2017] 에픽게임즈 최용훈 - 밤낮으로 부수고 짓고 액션 빌딩 게임 만들기 - 포트나이트
강 민우
 
[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...
[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...
[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...종빈 오
 
Ndc12 이창희 render_pipeline
Ndc12 이창희 render_pipelineNdc12 이창희 render_pipeline
Ndc12 이창희 render_pipeline
changehee lee
 
2015.12.10 defferd renderring_
2015.12.10 defferd renderring_2015.12.10 defferd renderring_
2015.12.10 defferd renderring_
재현 최
 
[0312 조진현] good bye dx9
[0312 조진현] good bye dx9[0312 조진현] good bye dx9
[0312 조진현] good bye dx9진현 조
 

Similar to 실전프로젝트 정서경 양현찬 (20)

2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
 
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
 
[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희
 
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
 
Hierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingHierachical z Map Occlusion Culling
Hierachical z Map Occlusion Culling
 
[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기
 
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기반 네트워크 게임 최적화기법
 
Rendering realistic Ice objects
Rendering realistic Ice objectsRendering realistic Ice objects
Rendering realistic Ice objects
 
빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술
 
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
 
Bump Mapping
Bump MappingBump Mapping
Bump Mapping
 
Sw occlusion culling
Sw occlusion cullingSw occlusion culling
Sw occlusion culling
 
A Beginner's guide to understanding Autoencoder
A Beginner's guide to understanding AutoencoderA Beginner's guide to understanding Autoencoder
A Beginner's guide to understanding Autoencoder
 
Cascade Shadow Mapping
Cascade Shadow MappingCascade Shadow Mapping
Cascade Shadow Mapping
 
[IGC 2017] 에픽게임즈 최용훈 - 밤낮으로 부수고 짓고 액션 빌딩 게임 만들기 - 포트나이트
[IGC 2017] 에픽게임즈 최용훈 - 밤낮으로 부수고 짓고 액션 빌딩 게임 만들기 - 포트나이트[IGC 2017] 에픽게임즈 최용훈 - 밤낮으로 부수고 짓고 액션 빌딩 게임 만들기 - 포트나이트
[IGC 2017] 에픽게임즈 최용훈 - 밤낮으로 부수고 짓고 액션 빌딩 게임 만들기 - 포트나이트
 
[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...
[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...
[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...
 
Ndc12 이창희 render_pipeline
Ndc12 이창희 render_pipelineNdc12 이창희 render_pipeline
Ndc12 이창희 render_pipeline
 
2015.12.10 defferd renderring_
2015.12.10 defferd renderring_2015.12.10 defferd renderring_
2015.12.10 defferd renderring_
 
[0312 조진현] good bye dx9
[0312 조진현] good bye dx9[0312 조진현] good bye dx9
[0312 조진현] good bye dx9
 

실전프로젝트 정서경 양현찬

  • 2. 우리의 목표 • Deferred rendering • SSAO • SSDO • DirectX11만을 사용하여 구현
  • 3. DirectX11은 처음이라… • DirectX9과 비교해서 달라진 인터페이스 • Shader 기반의 Rendering Pipeline • Shader 종류 추가 ( compute shader..etc ) • Multi Thread Rendering (Device, DeviceContext로 분할) • Etc.. 일정 시간을 DirectX11 공부에 매진…..
  • 4. Deferred rendering easy to implement post-processing
  • 5. Deferred Rendering이 뭐에요? • 두 번의 Rendering을 통해 빛을 계산하는 기법 • 픽셀 수만큼만 빛 계산을 하여 계산 량을 줄임. • 빛이 다른 Object에 영향을 주는 기법 등을 사용가능. (halo기법 등) • Screen Space에서 계산을 하기 때문에 Culling된 Object는 고려 할 수 없음
  • 6. G-Buffer • 후에 빛 계산을 위해서 필요한 정보들을 담고 있는 Buffer • OMSetRenderTargets을 통해 다수의 RenderTarget을 설정가능 • G-Buffer를 통해 ScreenSpace의 3차원 정보를 복구가능 ex ) screen space에서 world position을 복원
  • 7. Depth Buffer • DirectX11에서는 Depth Buffer를 가져올 수 있음 • DepthStencilView와 ShaderResourceView의 포멧을 신경써야함 결과물 ? ? ?
  • 8. Depth Buffer – 안 보이는 문제 • view volume의 near, far plane 거리가 너무 커서 값이 죽음. • near, far plane은 최대한 object에 맞춰서 조절함
  • 9. Fbx Model 띄우기 • 처음에는 Box를 직접 그려서 구현 • Elin.fbx을 받아 띄우는 과정에서 많은 이슈들이 발생 • FBX Load, Normal Mapping, TGA, UV …..
  • 10. FBX SDK • 사용 버전 : 2015.1 FBX SDK • 2014는 VS13과 호환 안됨 • DirectX와 친밀하지 않음 • 부족하고 믿을 수 없는 자료들 • 복잡하고 쓰기 힘든 인터페이스 • 해마다 달라지는 SDK (FBX Converter가 따로 있을 정도)
  • 11. Elin 띄우기 • 엘린 턱이 빠져있다… • 이번엔 머리카락만 붕 떠 있다… • 군데 군데 빵꾸가 …?! • GitHub에서 코드를 뒤져 사용방법을 익힘
  • 12. Elin 띄우기 – UV 값이 일부 망가짐 텍스쳐가 이상하게…
  • 13. Elin 띄우기 – TGA가 지원 안 됨. • DirectX11에서는 기본적으로 TGA파일을 지원하지 않음 • DirectXTex라는 라이브러리를 제공 • Texture포멧을 변경하는 것이 더 효율적이라고 판단하여 TGA파일을 BMP파일로 변환. 참고 : http://directxtex.codeplex.com/
  • 14. Normal Mapping 제대로 하기 • Tangent space normal mapping을 하기 위해 TBN Matrix 필요 Left : object space normal map / right : tangent space normal map ( 상대적인 정보만 저장)
  • 15. Normal Mapping 제대로 하기 • Bitangent 계산을 제대로 하지 않아 normal mapping 오류! 그림자 방향이 일정하지 않음. 가운데 조명을 기준으로 바깥이 어두워야 함.
  • 16. Normal Mapping 제대로 하기 • 기존방식 • biTangent = cross(normal,tangent); • Elin 모델에서 대칭되는 부분은 리소스를 아끼기 위해 UV값 중 하나의 값을 뒤집는 부분이 있음(예 : 장화, 옷 / uv address wrap 기준) • Tangent가 뒤집히면서 local space까지 뒤집힘. • 해결 • Tangent는 U에 정렬, BiTangent는 V에 정렬해서 구함
  • 19. SSAO가 뭐에요? • Screen Space Ambient Occlusion • 얼마나 빛이 덜 들어오는지. • 벽의 구석이나 사물의 깊이 파인 부분에 그림자를 표현. • 매쉬 정보를 사용하지 않기 때문에 화면 복잡도와 상관없이 일정한 속도 로 화면을 갱신할 수 있다.
  • 21. SSAO 구현 순서 test point의 world position 재구성 반구를 얹어 sample kernel 생성하기 차폐 정도 계산 blur 추가, * Ambient *ViewProjInverse *ViewProj
  • 23. 1) world position 재구성 • normalize screen coordinate • InverseViewProj matrix를 곱하여 world position 재구성
  • 24. 2) Sample Kernel 생성 • noise texture에서 random vector 추출. • TBN matrix 생성.
  • 25. 2) Sample Kernel 생성 • 8개의 sample kernel 생성 • sampleSphere[8]은 미리 준비한 벡터 사용
  • 26. 3) 차폐 정도 계산 • 각각의 sample position의 depth값을 얻기 위해 다시 screen coordinates로 전환 • screen coordinates의 원래 depth값을 읽어와서 비교.
  • 27. 3) 차폐 정도 계산 • 차폐된 샘플 : A, D • P와의 거리에 따라 값 결정 distance= P – A’.z; occlusion = saturate((fadeEnd - distance) / (fadeLength)); • occlusionSum / N
  • 28. 3) 차폐 정도 계산 – 더 고려할 점 • 같은 평면인데 어둡게 나타나는 경우
  • 29. 3) 차폐 정도 계산 – 더 고려할 점 • 엘린 주변에 테두리가 생기는 경우 rangeCheck = length(position – originalWorldPos) < radius ? 1 : 0 ;
  • 30. 3) 차폐 정도 계산 – 더 고려할 점 • 가장자리에 번짐 현상 • 아주 가까이 다가 갔을 때 이상 현상
  • 31. 4) 블러 추가 • 가우시안 블러 추가
  • 34. SSDO가 뭐에요? • Screen Space Directional Occlusion • 들어오는 빛의 방향까지 고려한 차폐 계산 • SSAO에서 이미 계산했던 것을 활용하는 방법을 택함. : env.map을 활용하는 방법은 사용하지 않음 : 동일한 sample kernel 사용 • Indirect Bounce를 추가 ( 1단계 )
  • 36. SSDO 구현 순서 – Indirect Bounce 추가 차폐된 sample position 선정 sample position에 패치 붙이기 색상 가져오기 blur 추가, + diffSpec
  • 37. 1) 차폐된 sample position 선정 2) sample position에 패치 붙이기 • sample position의 world normal 추출 • bounce 여부 검사 max(dot(originalWorldNormal, originalToPos), 0)
  • 39. 3) 색상 가져오기 – 어디서? • 기존방식 • 빛 계산이 적용되지 않은 diffuse texture에서 original color을 뽑아옴. • 문제점 : 빛이 없어 어두운 부분에서도 color bounce가 계산되는 문제가 발생.
  • 40. 3) 색상 가져오기 – 해결 • 해결 ( )+ * diffuseFactor *{ }
  • 41. 3) 색상 가져오기 – 해결 • 비교
  • 44. FXAA • antialiasing • MSAA은 Geometry Shader에서 이루어짐 • MSAA는 직렬적인 Rendering Pipeline에서는 사용 불가능 • FXAA는 Depth Buffer를 통해 외곽선을 검출한 후, 외곽선 주변 에 filter를 통과시켜 smooth하게 만들어주는 기법 • NVIDIA에서 제공하는 FXAA 모듈을 사용
  • 45. Framework • Framework layer와 contents layer를 나누기 위해 노력 • InputDispatcher등을 만들어서 추가기능들을 정리 • 빛의 위치를 알려주기 위해 billboard사용 • billboard는 마지막에 따로 그려줌.

Editor's Notes

  1. 아무것도 안 나오네요?
  2. uv 값이 이상하게 읽혀졌는지 엘린 몸통을 보시면 줄이 쭉 그어져 있져 ㅜㅜ
  3. uv 값이 이상하게 읽혀졌는지 엘린 몸통을 보시면 줄이 쭉 그어져 있져 ㅜㅜ
  4. 라이브러리가 중요한게 아니니까… ^^//
  5. 반구 안에서 sampling kernel을 회전 시키기 위해 회전 행렬을 생성한다. 회전 행렬은 normal, tangent(normal과 random vector로 gram schmidt process를 통해 계산한 normal과 수직한 vector), bitangent(normal x tangent)로 이루어진 local space 정보를 담고 있다.
  6. 옆 설명을 보시라. 왼쪽에서 우리가 고려할 포인트는 사실 구 보다 훨씬 뒤에 있는데… project하면 사실 겁나 먼 지점이랑 비교할 수도 있다 이거지.
  7. 왼쪽 상자 붉은 색 쪽.