SlideShare uma empresa Scribd logo
1 de 17
Deferred Decal
     이민웅
  Shader Study
Decal
• Decal 이란?
  – 벽에 총알 자국을 표시 할때
  – 반복적인 기하구조에 변화는 줄때
• Deferred Decal?
  – 뷰포트 공간에서 적용하는 방식
  – 조명과 잘 통합됨
  – 애니메이션 되는 캐릭터에서 적용가능
Crysis 2 & CryENGINE 3
문제
• Decal은 조명과 잘 통합되어야 함
  – Deferred Render이면 문제 없음
• Decal은 모든 표면(정적이든 동적이든)에서 납득할 수
  있는 결과를 내야 함
  – Gbuffer에 8비트 채널하나를 데칼을 위해 사용해야함
• Decal은 기하구조의 경계에 맞게 잘려야 함
  – 데칼이 물체의 적용되는 표면을 따라야함
• Decal 시스템은 충돌 검출에 쓰이는 것과는 아주 다를
  수 있는 기하구조에 대해서도 잘 작동해야 함
  – 복잡한 메시들은 충돌검출을 위해 덜 세밀한 메시를 사용한
    다는 문제
  – 반직선 투사 알고리즘이 돌려준 교점이 데칼을 실제로 랜더
    링할 지점과 상당히 다를 수 있다는 것
구현
• 데칼의 경계 입체에 적용되는 셰이더 이용
• 필요한 정보는 위치와 방향, 크기, 텍스쳐
  정보(랜더링되는 뷰포트의 깊이 값)
• 데칼 공간에서 작업
 – 셰이더에서 데칼의 변환행렬의 역행렬을 넘김
기하구조 랜더링
• 데칼이 적절한 깊이에 랜더
  링을 하기 위해서는 경계
  입방체를 그려서 어떤 방향
  에서도 볼 수 있게 만듬
• 작은 데칼에게 잘 됨
기하구조 랜더링 문제
• 후면선별(BackFace Culling)을 활성화 하고 깊이 판정
  을 less로 둔 상태에서 입방체를 랜더링하면 카메라가
  그 입방체에 진입하는 순간 데칼이 사라짐
• 해결책
  – 전면 선별(frontface culling)을 활성화하고 greater으로 랜더
    링
  – 데칼이 카메라에 가까운 기하구조에 가려지는 경우 불필요
    하게 많은 단편들이 랜더링 된다는 단점
• 입방체 꼭짓점들 중 카메라에 가장 가까운것을 찾아서
  그 깊이에서 정렬된, 그리고 입방체 전체를 덮을 만큼
  커다란 사각형을 하나 랜더링 하는 것
  – 단, 가장 가까운 꼭짓점이 가까은 절단 평면보다 앞에 있다
    면, 가까운 절단 평면의 깊이에서 화면 전체를 덮는 사각형
    을 랜더링
기하구조 랜더링
• 한 장면에 데칼들이 많이 적용되는 경우
 – 하드웨어 인스턴싱으로 랜더링
  • 성능 최적화에 도움
 – 인스턴싱으로 최적화하는 경우
  • 입방체의 위치, 크기를 미리 설정
  • 단위 입방체를 사용하고 위치와 크기를 정점셰이더
    안에서 적절히 변환
기하구조 랜더링
페이드 아웃
• 데칼을 x,y평면에 단순하게 투영하면 데칼
  의 z축방향으로 번지는 결함이 생김
• 페이드 아웃이용해서 데칼 색상을 사라지
  게함
모서리 감싸기
• 데칼이 모서리에 감싸게 하고 복잡한 표면
  들의 곡면을 따르게 하는 것
• 표면의 법선을 데칼 공간으로 회전하면 x,y
  성분은 표면의 기울기에 해당
 – 데칼 평면을 기준
• 기울기와 단편과 데칼 평면사이의 거리를
  텍스쳐 좌표로 수정
 – 상대적 기울기가 없는 영역에서는 텍스쳐 좌
   표가 변하지 않음
 – 기울기가 큰 영역들(모퉁이)에서는 텍스쳐 좌
   표가 데칼 평면과의 거리에 따라 바깥으로 이
   동
• 핏자국등 액체가 튄 흔적을 표현할때 유용
• 투영과 감싸기 기능을 활용하면 어떤 종류
  의 표면 사용 가능
표면절단
• 표면 절단의 이유
  – 데칼을 전혀 잘라내지 못함
     • 하나의 상자에 붙힌 데칼은 그 상자가 놓인 지면에도 투영
• 방법1
  – 데칼의 정적 기하구조가 덮고 있는 픽셀들에게만 한정하는 것
  – 정적물체를 랜더링 후 데칼을 적용하고 동적인 물체는 그 후 랜더링
• 방법 2
  – 기하 버퍼의 또 다른 채널을 마련하고, 랜더링되는 각 물체에 대한 “데칼
    ID”를 채널에 저장
  – 기하버퍼 랜더링시 각 물체에 대한 데칼 ID를 분산색, 법선과 함께 버퍼
    에 저장
  – 데칼ID는 상수
     • 셰이더는 ID를 기하 버퍼에서 읽은 ID와 비교
  – 데칼 ID는 픽셀이 어떤 물체에 속한 것인지를 식별하기 위한 픽셀 당 마
    스크 역할
  – 정적기하구조가 아무런 구분없이 랜더링 한다면 동일한 ID값을 공유해도
    됨
  – 동적물체는 다른 고유 ID를 사용
     • 가까이 있는 두물체만 같은 ID를 사용할 가능성만 없게 하면 고유할필요는 없음
결론
• 여러 상황에서 좀 더 진짜 같아 보이도록 2D 투영을 개선한 것
  – 입체적인 데칼을 만들어내는 것은 아님
• 시각적 결함을 방지하기 위해서는 입체적인 데칼을 사용해야
  함
  – 수직 기둥 모서리 같은 것들…
• 핏자국등은 표면 법선들 때문에 왜곡된다해도 핏자국으로 보여
  별 상관없음
• 경제 입체 판정을 통해서 데칼을 미리 랜더링에서 제외하는 것
  이 가능
• GPU의 인스턴싱을 이용 해서 많은 수의 데칼을 일괄적으로 랜
  더링 가능
  – 수많은 데칼들이 겹쳐지는 상황은 피해야 함
  – 동시에 존재 할 수 있는 데칼수를 제한하는게 좋음
  – MaxPayne은 한 지역에 만들 수 있는 데칼 수를 제한하여 이전에
    방문했던 방에 다시 들어가도 핏자국이나 총알자국이 그래도 남아
    있음 (멋있음)
Q&A

감사합니다.

Shader Study

Mais conteúdo relacionado

Mais procurados

07_PhysX 강체물리 입문
07_PhysX 강체물리 입문07_PhysX 강체물리 입문
07_PhysX 강체물리 입문noerror
 
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술Ki Hyunwoo
 
Hierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingHierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingYEONG-CHEON YOU
 
Compute shader DX11
Compute shader DX11Compute shader DX11
Compute shader DX11민웅 이
 
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근MinGeun Park
 
[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희changehee lee
 
[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자MoonLightMS
 
2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑Sukwoo Lee
 
[0821 박민근] 렌즈 플레어(lens flare)
[0821 박민근] 렌즈 플레어(lens flare)[0821 박민근] 렌즈 플레어(lens flare)
[0821 박민근] 렌즈 플레어(lens flare)MinGeun Park
 
5강 알파와알파소팅
5강 알파와알파소팅5강 알파와알파소팅
5강 알파와알파소팅JP Jung
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기YEONG-CHEON YOU
 
Cascade Shadow Mapping
Cascade Shadow MappingCascade Shadow Mapping
Cascade Shadow MappingSukwoo Lee
 
포인트 셰도우
포인트 셰도우포인트 셰도우
포인트 셰도우Sukwoo Lee
 
[0122 구경원]게임에서의 충돌처리
[0122 구경원]게임에서의 충돌처리[0122 구경원]게임에서의 충돌처리
[0122 구경원]게임에서의 충돌처리KyeongWon Koo
 
멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)Bongseok Cho
 
Voxel based game_optimazation_relelase
Voxel based game_optimazation_relelaseVoxel based game_optimazation_relelase
Voxel based game_optimazation_relelaseYEONG-CHEON YOU
 
Igc2016 Technical Artist가 뭐하는 사람이에요?
Igc2016 Technical Artist가 뭐하는 사람이에요?Igc2016 Technical Artist가 뭐하는 사람이에요?
Igc2016 Technical Artist가 뭐하는 사람이에요?SangYun Yi
 

Mais procurados (20)

07_PhysX 강체물리 입문
07_PhysX 강체물리 입문07_PhysX 강체물리 입문
07_PhysX 강체물리 입문
 
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
 
Ssao
SsaoSsao
Ssao
 
Hierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingHierachical z Map Occlusion Culling
Hierachical z Map Occlusion Culling
 
Compute shader DX11
Compute shader DX11Compute shader DX11
Compute shader DX11
 
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
 
[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희
 
[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자
 
2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑
 
[0821 박민근] 렌즈 플레어(lens flare)
[0821 박민근] 렌즈 플레어(lens flare)[0821 박민근] 렌즈 플레어(lens flare)
[0821 박민근] 렌즈 플레어(lens flare)
 
5강 알파와알파소팅
5강 알파와알파소팅5강 알파와알파소팅
5강 알파와알파소팅
 
Voxelizaition with GPU
Voxelizaition with GPUVoxelizaition with GPU
Voxelizaition with GPU
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
 
Cascade Shadow Mapping
Cascade Shadow MappingCascade Shadow Mapping
Cascade Shadow Mapping
 
포인트 셰도우
포인트 셰도우포인트 셰도우
포인트 셰도우
 
[0122 구경원]게임에서의 충돌처리
[0122 구경원]게임에서의 충돌처리[0122 구경원]게임에서의 충돌처리
[0122 구경원]게임에서의 충돌처리
 
멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)
 
Voxel based game_optimazation_relelase
Voxel based game_optimazation_relelaseVoxel based game_optimazation_relelase
Voxel based game_optimazation_relelase
 
Motion blur
Motion blurMotion blur
Motion blur
 
Igc2016 Technical Artist가 뭐하는 사람이에요?
Igc2016 Technical Artist가 뭐하는 사람이에요?Igc2016 Technical Artist가 뭐하는 사람이에요?
Igc2016 Technical Artist가 뭐하는 사람이에요?
 

Destaque

Gamma and linear color-space
Gamma and linear color-spaceGamma and linear color-space
Gamma and linear color-space민웅 이
 
[2012 대학특강] 아티스트 + 프로그래머
[2012 대학특강] 아티스트 + 프로그래머[2012 대학특강] 아티스트 + 프로그래머
[2012 대학특강] 아티스트 + 프로그래머포프 김
 
일신오토클레이브 초임계 소개서
일신오토클레이브 초임계 소개서일신오토클레이브 초임계 소개서
일신오토클레이브 초임계 소개서ilshinautoclave
 
Kgc2012강연 이석준
Kgc2012강연  이석준Kgc2012강연  이석준
Kgc2012강연 이석준석준 이
 
머티리얼 디자인(material design)
머티리얼 디자인(material design)머티리얼 디자인(material design)
머티리얼 디자인(material design)Woncheol Lee
 
Rendering Tech of Space Marine
Rendering Tech of Space MarineRendering Tech of Space Marine
Rendering Tech of Space MarinePope Kim
 
3D 프린터 종류와 특징에 관한 리포트
3D 프린터 종류와 특징에 관한 리포트3D 프린터 종류와 특징에 관한 리포트
3D 프린터 종류와 특징에 관한 리포트규호 이
 

Destaque (9)

Gamma and linear color-space
Gamma and linear color-spaceGamma and linear color-space
Gamma and linear color-space
 
[2012 대학특강] 아티스트 + 프로그래머
[2012 대학특강] 아티스트 + 프로그래머[2012 대학특강] 아티스트 + 프로그래머
[2012 대학특강] 아티스트 + 프로그래머
 
일신오토클레이브 초임계 소개서
일신오토클레이브 초임계 소개서일신오토클레이브 초임계 소개서
일신오토클레이브 초임계 소개서
 
Kgc2012강연 이석준
Kgc2012강연  이석준Kgc2012강연  이석준
Kgc2012강연 이석준
 
OpenGL for 2015
OpenGL for 2015OpenGL for 2015
OpenGL for 2015
 
Relic's FX System
Relic's FX SystemRelic's FX System
Relic's FX System
 
머티리얼 디자인(material design)
머티리얼 디자인(material design)머티리얼 디자인(material design)
머티리얼 디자인(material design)
 
Rendering Tech of Space Marine
Rendering Tech of Space MarineRendering Tech of Space Marine
Rendering Tech of Space Marine
 
3D 프린터 종류와 특징에 관한 리포트
3D 프린터 종류와 특징에 관한 리포트3D 프린터 종류와 특징에 관한 리포트
3D 프린터 종류와 특징에 관한 리포트
 

Semelhante a Deferred decal

[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법강 민우
 
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)민웅 이
 
실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬현찬 양
 
09_Voxel rendering
09_Voxel rendering09_Voxel rendering
09_Voxel renderingnoerror
 
Rendering realistic Ice objects
Rendering realistic Ice objectsRendering realistic Ice objects
Rendering realistic Ice objectsyong gyun im
 
15_TextureAtlas
15_TextureAtlas15_TextureAtlas
15_TextureAtlasnoerror
 
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)Sukwoo Lee
 

Semelhante a Deferred decal (9)

[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
 
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
 
실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬
 
09_Voxel rendering
09_Voxel rendering09_Voxel rendering
09_Voxel rendering
 
Rendering realistic Ice objects
Rendering realistic Ice objectsRendering realistic Ice objects
Rendering realistic Ice objects
 
15_TextureAtlas
15_TextureAtlas15_TextureAtlas
15_TextureAtlas
 
Sw occlusion culling
Sw occlusion cullingSw occlusion culling
Sw occlusion culling
 
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
 
Bump Mapping
Bump MappingBump Mapping
Bump Mapping
 

Mais de 민웅 이

Siggraph15 A Novel Sampling Algorithm for Fast and Stable Real-Time Volume Re...
Siggraph15 A Novel Sampling Algorithm for Fast and Stable Real-Time Volume Re...Siggraph15 A Novel Sampling Algorithm for Fast and Stable Real-Time Volume Re...
Siggraph15 A Novel Sampling Algorithm for Fast and Stable Real-Time Volume Re...민웅 이
 
PowerVR Low Level GLSL Optimisation
PowerVR Low Level GLSL Optimisation PowerVR Low Level GLSL Optimisation
PowerVR Low Level GLSL Optimisation 민웅 이
 
제노블레이도 2 ray marching을사용한 구름 표현
제노블레이도 2 ray marching을사용한 구름 표현제노블레이도 2 ray marching을사용한 구름 표현
제노블레이도 2 ray marching을사용한 구름 표현민웅 이
 
자동 동적 3차원 입체시각
자동 동적 3차원 입체시각자동 동적 3차원 입체시각
자동 동적 3차원 입체시각민웅 이
 
Post processing in_color
Post processing in_colorPost processing in_color
Post processing in_color민웅 이
 
「스퀘어 에닉스 오픈 컨퍼런스 2012」「Agni's Philosophy」비하인드 스토리
「스퀘어 에닉스 오픈 컨퍼런스 2012」「Agni's Philosophy」비하인드 스토리「스퀘어 에닉스 오픈 컨퍼런스 2012」「Agni's Philosophy」비하인드 스토리
「스퀘어 에닉스 오픈 컨퍼런스 2012」「Agni's Philosophy」비하인드 스토리민웅 이
 
Valient killzone ps4 lighting
Valient killzone ps4 lightingValient killzone ps4 lighting
Valient killzone ps4 lighting민웅 이
 
니시카와젠지의 3 d 게임 팬을 위한 ps4
니시카와젠지의 3 d 게임 팬을 위한 ps4니시카와젠지의 3 d 게임 팬을 위한 ps4
니시카와젠지의 3 d 게임 팬을 위한 ps4민웅 이
 
Microfacet brdf
Microfacet brdfMicrofacet brdf
Microfacet brdf민웅 이
 
니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌
니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌
니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌민웅 이
 
Wrapped diffuse
Wrapped diffuseWrapped diffuse
Wrapped diffuse민웅 이
 
3D Engine Tools with C++/CLR
3D Engine Tools with C++/CLR3D Engine Tools with C++/CLR
3D Engine Tools with C++/CLR민웅 이
 
Light in screen_space(Light Pre Pass)
Light in screen_space(Light Pre Pass)Light in screen_space(Light Pre Pass)
Light in screen_space(Light Pre Pass)민웅 이
 
Cheap realisticskinshading kor
Cheap realisticskinshading korCheap realisticskinshading kor
Cheap realisticskinshading kor민웅 이
 

Mais de 민웅 이 (15)

Siggraph15 A Novel Sampling Algorithm for Fast and Stable Real-Time Volume Re...
Siggraph15 A Novel Sampling Algorithm for Fast and Stable Real-Time Volume Re...Siggraph15 A Novel Sampling Algorithm for Fast and Stable Real-Time Volume Re...
Siggraph15 A Novel Sampling Algorithm for Fast and Stable Real-Time Volume Re...
 
PowerVR Low Level GLSL Optimisation
PowerVR Low Level GLSL Optimisation PowerVR Low Level GLSL Optimisation
PowerVR Low Level GLSL Optimisation
 
제노블레이도 2 ray marching을사용한 구름 표현
제노블레이도 2 ray marching을사용한 구름 표현제노블레이도 2 ray marching을사용한 구름 표현
제노블레이도 2 ray marching을사용한 구름 표현
 
자동 동적 3차원 입체시각
자동 동적 3차원 입체시각자동 동적 3차원 입체시각
자동 동적 3차원 입체시각
 
Post processing in_color
Post processing in_colorPost processing in_color
Post processing in_color
 
「스퀘어 에닉스 오픈 컨퍼런스 2012」「Agni's Philosophy」비하인드 스토리
「스퀘어 에닉스 오픈 컨퍼런스 2012」「Agni's Philosophy」비하인드 스토리「스퀘어 에닉스 오픈 컨퍼런스 2012」「Agni's Philosophy」비하인드 스토리
「스퀘어 에닉스 오픈 컨퍼런스 2012」「Agni's Philosophy」비하인드 스토리
 
Valient killzone ps4 lighting
Valient killzone ps4 lightingValient killzone ps4 lighting
Valient killzone ps4 lighting
 
니시카와젠지의 3 d 게임 팬을 위한 ps4
니시카와젠지의 3 d 게임 팬을 위한 ps4니시카와젠지의 3 d 게임 팬을 위한 ps4
니시카와젠지의 3 d 게임 팬을 위한 ps4
 
Microfacet brdf
Microfacet brdfMicrofacet brdf
Microfacet brdf
 
니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌
니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌
니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌
 
Wrapped diffuse
Wrapped diffuseWrapped diffuse
Wrapped diffuse
 
3D Engine Tools with C++/CLR
3D Engine Tools with C++/CLR3D Engine Tools with C++/CLR
3D Engine Tools with C++/CLR
 
Light in screen_space(Light Pre Pass)
Light in screen_space(Light Pre Pass)Light in screen_space(Light Pre Pass)
Light in screen_space(Light Pre Pass)
 
Cheap realisticskinshading kor
Cheap realisticskinshading korCheap realisticskinshading kor
Cheap realisticskinshading kor
 
Ceh
CehCeh
Ceh
 

Deferred decal

  • 1. Deferred Decal 이민웅 Shader Study
  • 2. Decal • Decal 이란? – 벽에 총알 자국을 표시 할때 – 반복적인 기하구조에 변화는 줄때 • Deferred Decal? – 뷰포트 공간에서 적용하는 방식 – 조명과 잘 통합됨 – 애니메이션 되는 캐릭터에서 적용가능
  • 3. Crysis 2 & CryENGINE 3
  • 4. 문제 • Decal은 조명과 잘 통합되어야 함 – Deferred Render이면 문제 없음 • Decal은 모든 표면(정적이든 동적이든)에서 납득할 수 있는 결과를 내야 함 – Gbuffer에 8비트 채널하나를 데칼을 위해 사용해야함 • Decal은 기하구조의 경계에 맞게 잘려야 함 – 데칼이 물체의 적용되는 표면을 따라야함 • Decal 시스템은 충돌 검출에 쓰이는 것과는 아주 다를 수 있는 기하구조에 대해서도 잘 작동해야 함 – 복잡한 메시들은 충돌검출을 위해 덜 세밀한 메시를 사용한 다는 문제 – 반직선 투사 알고리즘이 돌려준 교점이 데칼을 실제로 랜더 링할 지점과 상당히 다를 수 있다는 것
  • 5. 구현 • 데칼의 경계 입체에 적용되는 셰이더 이용 • 필요한 정보는 위치와 방향, 크기, 텍스쳐 정보(랜더링되는 뷰포트의 깊이 값) • 데칼 공간에서 작업 – 셰이더에서 데칼의 변환행렬의 역행렬을 넘김
  • 6.
  • 7. 기하구조 랜더링 • 데칼이 적절한 깊이에 랜더 링을 하기 위해서는 경계 입방체를 그려서 어떤 방향 에서도 볼 수 있게 만듬 • 작은 데칼에게 잘 됨
  • 8. 기하구조 랜더링 문제 • 후면선별(BackFace Culling)을 활성화 하고 깊이 판정 을 less로 둔 상태에서 입방체를 랜더링하면 카메라가 그 입방체에 진입하는 순간 데칼이 사라짐 • 해결책 – 전면 선별(frontface culling)을 활성화하고 greater으로 랜더 링 – 데칼이 카메라에 가까운 기하구조에 가려지는 경우 불필요 하게 많은 단편들이 랜더링 된다는 단점 • 입방체 꼭짓점들 중 카메라에 가장 가까운것을 찾아서 그 깊이에서 정렬된, 그리고 입방체 전체를 덮을 만큼 커다란 사각형을 하나 랜더링 하는 것 – 단, 가장 가까운 꼭짓점이 가까은 절단 평면보다 앞에 있다 면, 가까운 절단 평면의 깊이에서 화면 전체를 덮는 사각형 을 랜더링
  • 9. 기하구조 랜더링 • 한 장면에 데칼들이 많이 적용되는 경우 – 하드웨어 인스턴싱으로 랜더링 • 성능 최적화에 도움 – 인스턴싱으로 최적화하는 경우 • 입방체의 위치, 크기를 미리 설정 • 단위 입방체를 사용하고 위치와 크기를 정점셰이더 안에서 적절히 변환
  • 11. 페이드 아웃 • 데칼을 x,y평면에 단순하게 투영하면 데칼 의 z축방향으로 번지는 결함이 생김 • 페이드 아웃이용해서 데칼 색상을 사라지 게함
  • 12.
  • 13. 모서리 감싸기 • 데칼이 모서리에 감싸게 하고 복잡한 표면 들의 곡면을 따르게 하는 것 • 표면의 법선을 데칼 공간으로 회전하면 x,y 성분은 표면의 기울기에 해당 – 데칼 평면을 기준 • 기울기와 단편과 데칼 평면사이의 거리를 텍스쳐 좌표로 수정 – 상대적 기울기가 없는 영역에서는 텍스쳐 좌 표가 변하지 않음 – 기울기가 큰 영역들(모퉁이)에서는 텍스쳐 좌 표가 데칼 평면과의 거리에 따라 바깥으로 이 동 • 핏자국등 액체가 튄 흔적을 표현할때 유용 • 투영과 감싸기 기능을 활용하면 어떤 종류 의 표면 사용 가능
  • 14.
  • 15. 표면절단 • 표면 절단의 이유 – 데칼을 전혀 잘라내지 못함 • 하나의 상자에 붙힌 데칼은 그 상자가 놓인 지면에도 투영 • 방법1 – 데칼의 정적 기하구조가 덮고 있는 픽셀들에게만 한정하는 것 – 정적물체를 랜더링 후 데칼을 적용하고 동적인 물체는 그 후 랜더링 • 방법 2 – 기하 버퍼의 또 다른 채널을 마련하고, 랜더링되는 각 물체에 대한 “데칼 ID”를 채널에 저장 – 기하버퍼 랜더링시 각 물체에 대한 데칼 ID를 분산색, 법선과 함께 버퍼 에 저장 – 데칼ID는 상수 • 셰이더는 ID를 기하 버퍼에서 읽은 ID와 비교 – 데칼 ID는 픽셀이 어떤 물체에 속한 것인지를 식별하기 위한 픽셀 당 마 스크 역할 – 정적기하구조가 아무런 구분없이 랜더링 한다면 동일한 ID값을 공유해도 됨 – 동적물체는 다른 고유 ID를 사용 • 가까이 있는 두물체만 같은 ID를 사용할 가능성만 없게 하면 고유할필요는 없음
  • 16. 결론 • 여러 상황에서 좀 더 진짜 같아 보이도록 2D 투영을 개선한 것 – 입체적인 데칼을 만들어내는 것은 아님 • 시각적 결함을 방지하기 위해서는 입체적인 데칼을 사용해야 함 – 수직 기둥 모서리 같은 것들… • 핏자국등은 표면 법선들 때문에 왜곡된다해도 핏자국으로 보여 별 상관없음 • 경제 입체 판정을 통해서 데칼을 미리 랜더링에서 제외하는 것 이 가능 • GPU의 인스턴싱을 이용 해서 많은 수의 데칼을 일괄적으로 랜 더링 가능 – 수많은 데칼들이 겹쳐지는 상황은 피해야 함 – 동시에 존재 할 수 있는 데칼수를 제한하는게 좋음 – MaxPayne은 한 지역에 만들 수 있는 데칼 수를 제한하여 이전에 방문했던 방에 다시 들어가도 핏자국이나 총알자국이 그래도 남아 있음 (멋있음)