Graphics Programming
NVidia FXAA 붙여보기 본문
멀티쓰레딩한다고 기존의 모든 gl 호출에 커맨드 리스트를 붙이다가 진이 빠져서 잠시 외도를 하고 있다. 메인 쓰레드와 렌더 쓰레드에서 쓸 데이터를 분리하는 작업이 남아있지만, 리팩토링의 문제점은 아무리 해도 화면에 보이는 결과물이 같다는 것이다. 그게 리팩토링의 목적이기도 하지만.
다행히 씬에 대한 렌더 프록시를 만드는 작업은 나중에 해도 렌더러 내부를 크게 건드릴 게 없어보여서 조금 미뤄도 큰 작업으로 번지지는 않을 것 같다.
먼저 엔비디아 FXAA를 붙여보기로 했다. 소스코드를 찾아보니 NVIDIAGameWorks 샘플에 들어있었다.
https://github.com/NVIDIAGameWorks/GraphicsSamples
FXAA 코드를 너무 잘 짜놔서 내 플랫폼에 맞게 #define 몇 개 넣고 톤 매핑까지 끝난 텍스처를 FxaaPixelShader()에 넣어 호출하기만 하면 FXAA 통합은 끝이다.
TAA도 만들어봐야 하는데 일단 FXAA 붙였으니까 이 다음엔 SSAO나 SSR을 할 것 같다.
기존에 만들었던 것들도 고쳐야 하는데, 라이트 스캐터링을 정말 무식하게 만들어놔서 최적화를 하거나 아예 새로 구현할 것 같고, CSM에도 버그가 많아서 손 봐야 한다. Omnidirectional Shadow는 예전에 포워드 렌더링에서만 돌아가게 만들어서 디퍼드에서는 아예 돌아가지도 않아 새로 구현해야 한다.
정리하고 보니 결국 죄다 GI다. PBR 재질은 Cook Torrance BRDF 하나만 대충 만들어놨는데 여러가지 BRDF 모델도 연구해봐야 한다. 사실 예전에는 리얼 타임 렌더링에서 BRDF를 열심히 읽어도 책 덮으면 다 까먹었다. 이번에는 다시 읽어보면 잘 될 것 같다.