이번에 엔비디아가 출시한 범용(UE나 유니티 같은 특정 엔진용 플러그인이 아닌 자체개발 엔진용) DLSS SDK에 들어있던 샘플 애플리케이션을 가지고 놀다가 발견 및 조사한 내용을 정리했습니다.
1. DLSS 2.x의 문제:
DLSS 2.0 들어서 고질적인 문제가 있었는데 특정 상황에서 발생하는 심한 잔상(고스팅), 움직임시 오브젝트 경계면의 흐려짐이 대표적입니다. 사람들은 템포럴 리컨스트럭션의 특성상 모션벡터의 품질 문제나 머신러닝의 한계로 인해 안고 가야 할 문제로 치부했었습니다.
2. DLSS 2.2의 출시:
DLSS 2.2를 사용한 첫 타이틀인 레인보우식스:시즈에서 이전의 DLSS에 비해 개선된 이미지 품질을 보여줬는데 사람들은 nvngx_dlss.dll 파일을 여러 게임에 덮어씌워 테스트하면서 2.2에서 뭔가 개선된 것이 확실하다는 결론을 내렸습니다.
하지만 아무도 엔비디아가 무엇을 개선했는지는 몰랐습니다. 당시 일반 사람이 구할 수 있었던 언리얼 엔진용 DLSS 2.2 개발자 문서에서도 체인지로그(아래)에 별다른 화질 향상 내용은 없었기 때문에 잠수함 패치 정도로 생각했습니다.
3. 범용 DLSS SDK 공개
이전까지 자체 개발 엔진에 DLSS를 적용하려면 엔비디아에 직접 컨택하여 SDK를 받아오는 방법 밖에 없었는데 엊그제 드디어 정식으로 범용 SDK를 공개했습니다. SDK 안에 샘플 애플리케이션이 있어 가지고 놀던 중 자동 노출을 켜면 대부분의 아티팩트가 사라진다는 점을 발견했습니다.
내부 해상도가 절반인 '성능' 모드에서 카메라 전방 이동시의 200% 확대샷:
(gif 애니메이션이 빠르게 넘어갈 경우 클릭해서 보세요):
(원본 비교 링크)
자동 노출을 켤 시 개선점:
- 하늘과 건축물의 경계면이 선명해짐
- 깃대 전방의 계단현상이 사라짐
- 깃대 후방의 고스팅이 사라짐
4. 노출값이 왜 중요한가
엔비디아가 지난해 봄 GTC에서 발표한 내용에서 DLSS의 입력값 중에 노출값을 명시하고 있습니다. 여기에서는 별다른 설명은 없었고,
개발자 문서에서는 노출값을 전달하지 않거나 잘못된 값을 전달할 경우 우리가 익히 봐오던 아티팩트가 발생한다고 명시돼 있습니다.
참고로 DLSS 개발자 문서에서 아티팩트가 발생할 수 있음을 명시한 부분은 이 노출값 파트가 유일합니다.
5. 자동 노출
우리가 보는 DLSS 아티팩트는 게임 엔진이 DLSS에 정확한 노출값을 전달하지 못해 발생했다고 추정할 수 있고, DLSS 2.2에서 개선(추가)된 기능은 다름 아닌 프레임의 노출값을 DLSS 런타임 내부에서 자동으로 계산하는 기능입니다.
DLSS 2.1의 기능 플래그:
DLSS 2.2의 기능 플래그:
자동으로 계산해주는 특성상 트레이드오프가 있는데 프레임타임이 아주 약간(0.02ms) 증가합니다.
만약 게임 엔진이 정확한 프레임 노출값을 DLSS에 전달할 수 있으면 이 자동 노출 기능은 필요 없습니다. 하지만 0.02ms 정도는 공짜나 다름없기 때문에 앞으로 자체 엔진을 사용하는 많은 개발자들이 사용하지 않을까 합니다.
6. 맺으며
문서에 명시된 내용이고 DLSS를 사용하는 개발자도 많은데 이런 내용이 알려지지 않은게 이상합니다. 심지어 엔비디아도 그 동안 별다른 해명이 없었고요.
해결 불가능한 문제가 아니었고 해결책도 간단했습니다. 모든 입력값이 정확하다면 DLSS는 아주 좋은 품질을 보여준다는 것이 다시 한 번 확인되었습니다.
(IP보기클릭)118.221.***.***
GIF가 이상해서 분리해봤습니다.
(IP보기클릭)118.221.***.***
많이 개선됬네요.
(IP보기클릭)121.162.***.***
DLSS 2.1까지 개발자 문서에 노출값 산출에 대한 가이드라인이 없고 2.2 들어서야 보충됐습니다. 이건 엔비디아 책임이라고 할 수 있겠네요.
(IP보기클릭)121.146.***.***
고스팅도 잡히고 2.2부터는 진짜 좋아진듯
(IP보기클릭)124.54.***.***
버전업 하면 얼마나 더 좋아질려나
(IP보기클릭)121.146.***.***
고스팅도 잡히고 2.2부터는 진짜 좋아진듯
(IP보기클릭)118.221.***.***
GIF가 이상해서 분리해봤습니다.
(IP보기클릭)118.221.***.***
Friedcrow
많이 개선됬네요. | 21.07.21 23:31 | | |
(IP보기클릭)61.78.***.***
트래픽 줄일려고 MP4로 자동 변환해서 그런 것 같네요. 본문 원본에 오른쪽 클릭해서 새 탭(또는 새 창)에서 열기로 보면 잘 나옵니다. | 21.08.20 14:52 | | |
(IP보기클릭)124.54.***.***
버전업 하면 얼마나 더 좋아질려나
(IP보기클릭)180.229.***.***
(IP보기클릭)121.134.***.***
단순 게임 엔진을 이용해 개발하는 대부분의 일반 개발자들에게는 의미는 없을 것 같고, 엔진을 개발 또는 유지보수하는 팀에서는 쓸만하겠네요. | 21.07.22 10:24 | | |
(IP보기클릭)14.39.***.***
(IP보기클릭)218.155.***.***
(IP보기클릭)211.212.***.***
(IP보기클릭)121.162.***.***
DLSS 2.1까지 개발자 문서에 노출값 산출에 대한 가이드라인이 없고 2.2 들어서야 보충됐습니다. 이건 엔비디아 책임이라고 할 수 있겠네요. | 21.07.22 00:54 | | |
(IP보기클릭)222.120.***.***
(IP보기클릭)182.221.***.***
Dll 파일을 교체하면 그대로 호환이 되는 것 같더라구요. 최신이 2.2.10인가 그럴겁니다 | 21.07.22 02:17 | | |
(IP보기클릭)221.158.***.***
(IP보기클릭)118.32.***.***
(IP보기클릭)175.200.***.***
(IP보기클릭)122.33.***.***