셰이더 복잡도 뷰에서 메가스캔 오브젝트가 전부 빨간색으로 보여서 재질에서 안 쓰이는 부분을삭제해서최적화를 해줬다.
필요 없는옵션(AO,모션블러 등)을 껐다.
그러나 여기까지 해도 눈에 띄는 프레임 향상이 있지 않았다.
씬에는 풀이 많다. 그림자도 생성한다.보통 식생 그림자가 성능을 많이 잡아먹기 때문에 그림자 옵션을 꺼 놓는다.
ChopChop의 경우 풀의 1/3만 그림자를 드리우고 있고, 전부 꺼버리면 시간 변화에 따른 그림자가 없어지기 때문에 씬이 재미 없어진다. 그래서 Foliage의 Density를 설정을 통해 조절하도록 했다.
기존에 Shadow만 있었는데 이걸 GraphicQuality로 교체하고 전반적인 퀄리티 설정을 가능하게 했다.
풀 덕분인지 옵션 조정 시 프레임이 약간 향상되었다. 그런데 여기서 뭔가 더 할 수 있을 것 같았다.
혹시나 해서 안티에일리어싱을 꺼봤고, 100fps를 가볍게 넘었다....
원인은 TSR이었다. TSR을 켜면 식생이 자글자글 해 보이지 않게 하면서 AA를 넣을 수 있어서 꼭 써야 된다고 생각하고 있었다. 그런데 여기서 알게 되었다. 그건 일정 사양 이상의 PC에서 해당되는 이야기라고. 그래서 안티에일리어싱 종류를 변경할 수 있는 옵션을 넣었다.
종류 변경은 콘솔 커맨드를 통해 한다.
- 0: 없음 - 1: FXAA - 2: TAA - 3: MSAA - 4: TSR
내 게임에서 MSAA를 사용하면 디더링이 들어간 재질이 투명하게 보여서 MSAA는 사용하지 않기로 했다.
최적화를 위해 언리얼에서 다음의 항목을 비활성화하여 큰 프레임 상승효과를 봤다.
Nanite
Lumen
Virtual Shadowmap
Temporal Super Anitaliasing
써놓고 보니 신기술밖에 없다. 언리얼5가 게임 산업의 최적화 문제를 야기한다는 의견이 있는데, 어느 정도 공감이 되어 버렸다.
[2025-01-31]
DRM을 설정했다. 내가 간과했었지만 스토브 검수를 통해 알게 된 사실이다. DRM이라 하면 데누보 처럼 거대한 무언가를 생각했다. 그러나 플랫폼에서 말하는 DRM은 그 게임을 플랫폼에서 소유하고 있는지 확인하는 과정이었다. 원래 의미도 그렇더라.
정상적인 게임 실행은 스팀/스토브 런처를 통한 게임 실행이다. 만약 다른 방법으로 게임을 실행하거나 런처가 꺼진 상태로 게임을 실행하면 런처를 자동으로 실행하고 게임을 종료시킨다.DRM이 적용된 게임의 실행 방법은 위와 같고, 적용되지 않은 게임은 런처 유무와 상관없이 게임이 실행된다.
DRM이 적용 되었는지 확인하기 위해서는 게임이 설치된 폴더에 들어가 실행 파일을 직접 실행해 보면 된다.
인디 게임 등 개발자가 주의를 기울이기 쉽지 않은 작은 게임을 실행해 보면 게임이 정상적으로 실행된다.
그러나 AAA게임처럼 거대 자본과 많은 기술이 투입된 게임을 실행하면 가차 없이 게임이 실행되지 않는다.
이 경우 스팀에서는 인수를 통한 게임 실행창이 뜨게 되며 스팀 클라이언트를 통한 게임 실행을 유도한다.
스토브는 검수 단계에서 런처를 통한 Init 확인, Ownership 확인, Error 콜백 확인을 한다. 첫 검수에서는 어째서인지 DRM이 적용이 안되어 있어도 통과가 되었는데, 업데이트를 위해 재검수를 요청하니 반려되었다. 스팀은 DRM이 필수는 아닌 것 같았다. 그리고 출시 전 빌드만 확인할 뿐 업데이트에 대한 검수는 없어서 해당 문제를 인지하지 못했다.
DRM 적용에는 2가지 방법이 있다.
각 플랫폼에서 제공하는 DRM 메이커 사용 스토브의 경우 플랫폼에 exe 실행파일을 업로드하면 DRM이 적용된 실행파일을 다운로드할 수 있다. 다운로드한 파일에는 용량이 조금 늘어난 exe파일과 각종 dll 파일들이 포함되어 있다.
이 실행 파일을 원본과 교체하면 된다.
SDK에서Init, GetOwnership등을 호출한 뒤 오류가 반환되면 게임을 종료시킨다.
나는2번을 적용했다.
여기까지가 하나의 작은 게임을 출시하기 위한 험난한 과정이었다. 출시하면서 느낀 점은 개발 외적인 부분에서 공부할 것이 많았다는 것이다. 이 경험을 잘 정리해서 다음 게임을 출시할 때 유용하게 사용해야겠다.