Graphics Programming

Scene Capture 구현 본문

Season 2

Scene Capture 구현

minseoklee 2020. 5. 27. 02:52

튜토리얼 보고 만들어놨던 IBL이 metallic, roughness를 조정해봐도 언리얼이랑 너무 달라서 고민한 결과 indirect lighting이 없어서라는 결론이 나왔다. 원래도 로컬 셰이딩 밖에 없었는데 거기다 스카이 라이트 넣어봤자 태양광에 의한 간접광이 없어서 결과가 이상하다.

 

그래서 간접광을 구현은 해야 하는데... 라이트맵 굽는 방법은 개념만 대충 알고 오픈월드는 워낙 크니 아마 실시간으로 생성할 거 같은데 둘 다 바닥부터 구현할 생각을 하니 막막하다.

 

어떻게 할까 고민하다가 일단 scene capture를 만들었다. 생각해둔 걸 만들려면 어차피 단순히 큐브맵 이미지만 써서는 안되고 씬에 내가 로드한 물체들을 그 큐브맵에 포함할 수 있어야 한다. 또한 간접광, 리플렉션, 투명 재질 같은 거 만들 때도 도움이 되지 않을까 막연히 생각만 하고 있다.

 

워낙 코드가 엉망이여서 큼직한 피쳐 구현할 때마다 상당 부분을 뜯어고치는데, 이번에도 씬 캡처 만들기까지 험난한 과정이 있었다.

 

  • 셰이더 프로그램 해싱 완전히 잘못 만들어서 재작성
  • 디버그 콘솔 개선
  • GPU 드로우 이벤트는 있는데 GPU 카운터는 없어서 추가
  • 포스트 프로세싱 체인 리팩토링
  • 글로벌 렌더 리소스 관리 리팩토링
  • 씬 캡처 구현

이렇게 기본적인 scene capture는 구현했고, 렌더 세팅이나 큐브맵 캡쳐 등 기능 보강을 더 해야 한다. 위 사진에서도 씬 캡쳐할 때는 G버퍼 unpacking까지만 하고 끝낼 수 있어야 하는데 포스트 프로세싱까지 다 돌아서 톤 매핑이 두 번 먹혔다.

 

포스트 프로세싱 전에 종료할 수 있게 구현하고 다시 캡쳐 ㅎㅎ

 

내일 모레면 6월이다. 항상 느끼는 거지만 시간이 왤케 빨리 가누 -_-; 다음 글에서도 한 거는 없는데 시간이 너무 빨리 간다고 넋두리나 하겠지...

 

Comments