본문 바로가기
게임개발/가마수트라

게임을 콘솔로 포팅하면서 PC에서 더 나은 FPS를 얻는 방법

by 아수랑 2024. 9. 18.
728x90
반응형

이 글에서는 PC 빌드 성능을 개선하는 데 도움이 될 수 있는 콘솔 빌드를 위한 최상의 최적화 방법에 대해 설명합니다.

관련 분야: 프로그래밍, PC, 콘솔
작성자: Kostyantyn Oleschenko, Olexandr Makeev and 1 more

 

기어박스 퍼블리싱 이미지 제공. 다른 모든 이미지는 작성자 제공.


게임 최적화에 대한 태도는 PC와 콘솔에 따라 다릅니다. 잘 최적화된 PC 빌드는 언제나 좋지만, 플레이어의 경험을 개선하는 좋은 방법이지만 항상 필수적인 것은 아닙니다. 하지만 콘솔 게임의 경우 게임이 성능 기준을 충족해야만 퍼블리싱할 수 있습니다. 엄격하고 안정적인 프레임 속도, 오랫동안 반응하지 않는 정적 화면, 모든 RAM 사용 금지, 저장 데이터 크기, 분당 읽기-쓰기 작업 제한 등 콘솔 시장에 출시하려면 이 외에도 여러 가지 제한 사항을 준수해야 합니다.

이 글에서는 PC 빌드 성능을 개선하는 데 도움이 될 수 있는 콘솔 빌드 최적화 모범 사례에 대해 설명합니다.


게임 빌드에 대한 콘솔별 요구 사항


콘솔 게임은 안정적인 프레임 속도를 기대하지만, 게임의 복잡도와 지원되는 화면 해상도(4K, FullHD 이하)에 따라 각 게임의 수치가 다를 수 있습니다.

가장 일반적인 수치는 8세대 콘솔과 닌텐도 스위치의 경우 30fps, PS5 및 Xbox 시리즈 대부분의 게임에서 60fps이며, 간혹 PS5 및 Xbox 시리즈 콘솔의 일부 게임에서 최대 120fps까지 지원되기도 합니다. 하드웨어는 항상 미리 정의되어 있기 때문에 가능한 한 많은 품질과 콘텐츠를 담을 수 있는 적절한 해상도와 FPS 플랭크를 선택하는 것은 개발자의 몫입니다.

반응형


유니티 개발 관점


게임을 최적화하는 방법에는 여러 가지가 있습니다. 핑글 스튜디오의 유니티 개발자 나디아 하브릴렌코가 유니티 엔진 관점에서 게임 최적화 경험을 공유합니다.

최적화 프로세스는 PC와 콘솔에서 유사하며 문제 파악과 해결이라는 두 단계로 구성됩니다.

 

PS4에서 캡처한 리스크 오브 레인 2 스크린샷. Engine: Unity


유니티는 프로파일러, 메모리 프로파일러, 프레임 디버거 등 문제 파악을 위한 다양한 툴을 제공합니다. 콘솔 빌드 작업 시 툴셋은 특정 콘솔과 해당 콘솔의 데브킷에 따라 달라집니다. 데브킷 기능을 올바르게 사용하면 문제를 더 깊이 들여다보고 프로파일링 프로세스를 더 철저하게 수행할 수 있으므로 플랫폼 차이로 인해 범용 PC 도구가 작동하지 않는 경우에 매우 유용합니다.

개발 문제를 해결하려면 훨씬 더 많은 창의력이 필요합니다. 문제를 파악한 후에는 문제를 해결하는 데 더 많은 작업이 필요할 수 있으며 때로는 품질 저하를 감수해야 할 수도 있습니다.

콘솔 게임 최적화를 위해 할 수 있는 일을 CPU와 GPU 부분으로 나누어 보겠습니다.

가장 일반적인 CPU 최적화 방법은 다음과 같습니다:

느리게 작동하는 코드 조각 수정 - 누구나 코드 품질의 중요성을 이해하지만 모든 사람이 코드 품질에 적절한 주의를 기울이는 것은 아닙니다. “느린” 코드를 다시 작성하거나 비동기 스레드로 이동하여 백그라운드에서 실행하거나 나중에 다시 사용할 데이터를 캐싱하면 빌드의 프레임 속도가 즉시 향상될 가능성이 높습니다. 하지만 이러한 작업을 수행하려면 약간의 추가 메모리가 필요할 수도 있습니다.
올바른 메모리 사용 - 게임 성능을 개선하려면 메모리 누수를 주의해야 합니다. Unity에서 이러한 문제를 식별하고 적절히 수정하려면 메모리 관리에 대한 깊은 이해와 각 특정 프로젝트의 구조에 대한 지식이 필요합니다. 널리 사용되는 Unity 툴인 가비지 컬렉터는 CPU와 메모리 모두에 과부하를 줄 수 있으므로 백그라운드에서 더 많이 사용하더라도 이에 대해 기억해 두어야 합니다. 한 프레임에서 많은 바이트의 가비지를 생성하면 다른 프레임에서 이를 정리하는 데 많은 밀리초가 소요됩니다.

 

팔레오 파인즈 스크린샷. 엔진: Unity


GPU 최적화 측면에서 프레임/씬/카메라 뷰의 시점을 감지하여 많은 리소스를 사용하는 렌더링을 수행하면 다음과 같은 작업을 수행할 수 있습니다:

배치 개선

관련 셰이더를 최적화합니다;

더 많은 데이터를 베이킹하여 런타임에 계산하지 않도록 합니다(더 많은 메모리가 필요함);

일부 계산을 CPU로 전송(CPU 시간이 더 많이 소요됨).

 

대부분의 패키지는 콘솔이 아닌 PC에 최적화되어 있으므로 포스트 프로세싱에 특히 주의해야 합니다. GPU 최적화는 플랫폼별로 다른 경우가 많습니다.

콘솔 최적화는 세심한 작업이 필요하며 일반적으로 많은 시간을 할애합니다. 일부 최적화는 품질 저하를 수반하지 않으며 PC 빌드를 포함한 모든 플랫폼에 도움이 될 수 있습니다. 비동기 또는 병렬 실행 방식을 사용하여 동일한 결과를 제공하는 알고리즘을 최적화하거나, 설정이나 계층 구조의 위치를 파악하고 수정하는 등의 간단한 작업으로 최적화할 수 있습니다. 텍스처 품질 저하, 포스트 프로세싱 단순화, 스폰된 엔티티에 대한 제한 추가 등의 기타 최적화는 화질, 사용 메모리 양, CPU 부하를 약간 변경하고 드물지만 게임플레이 프로세스에 제한을 가할 수 있습니다. 이 경우에는 필요한 플랫폼에 대해서만 플랫폼별로 유지하는 것이 합리적입니다.

핑글 스튜디오의 유니티 개발자 알렉산드르 마키예프가 이 주제에 대한 몇 가지 인사이트를 유니티의 맥락에서 공유합니다.

다양한 최적화를 통해 게임을 더 안정적으로 실행하고 딸꾹질을 줄이며 프레임 속도를 개선할 수 있습니다.

각 유형의 문제에는 특정 조치가 필요하지만 Unity에서 문제를 해결하는 방식은 거의 동일합니다. 이 경우 가장 좋은 친구는 Unity 프로파일러입니다.

프로파일러는 게임 성능 문제의 근본 원인을 진단하는 데 도움이 됩니다. 프로파일러를 딥 프로파일링과 함께 사용하면 메모리 할당, 처리 시간 등을 확인할 수 있으며, 이 모든 것이 코드가 수행하는 특정 기능과 연관되어 있습니다. 이것이 성능 문제를 해결하는 가장 좋은 방법입니다. 프로파일러는 다양한 도구로 구성되어 있지만 최적화를 위해 가장 중요한 도구는 프로파일러 창과 메모리 프로파일러입니다.

구체적인 문제에 대해 말씀드리자면 가장 일반적인 문제와 해결 방법은 다음과 같습니다:

 

긴 일시적 고장과 멈춤 - 프로파일러 그래프에서 큰 폭의 스파이크를 확인하면 이를 감지할 수 있습니다. 멈춤과 일시적 고장을 일으키는 가장 일반적인 원인 중 하나는 가비지 수집기가 루틴을 실행하면서 한 프레임에 너무 많은 것을 생성하고 매우 비용이 많이 드는 알고리즘을 동시에 처리하는 것입니다. 이 문제를 해결하려면 프로파일러에서 가비지 할당을 많이 생성하는 함수를 검색하고 가능하면 사용하지 않는 객체를 남기지 않도록 최적화하세요. 일반적으로 코드를 리팩터링하여 메모리 공간을 더 적게 차지하도록 하세요;

 

까다로운/시간이 많이 걸리는 함수 - 항상 제거할 수 없는 함수가 있으며, 처리하는 데 시간이 필요할 뿐입니다. 비동기 실행으로 옮기거나 최소한 코루틴을 통해 여러 프레임에 걸쳐 부하를 분산하는 것을 고려하세요;

 

메모리 부족 - 콘솔 타이틀의 경우 사용 가능한 메모리가 PC보다 훨씬 적기 때문에 흔히 발생하는 문제입니다.  이 문제는 크래시의 주요 원인입니다. 메모리 프로파일러를 사용하여 어떤 오브젝트가 모든 공간을 차지하고 있는지, 어떤 오브젝트가 사용되지 않고 남겨지는지 확인하세요. 텍스처는 기본 부분과 관리되는 부분이 서로를 가리키고 있어 GC에서 텍스처를 수집할 수 없기 때문에 남겨질 수 있는 경우가 많습니다. 힌트: 항상 생성하는 텍스처의 이름을 지정하세요! 또한 나중에 사용하지 않을 오브젝트의 전체 배열/목록을 남겨두거나 이전 배열/목록을 재사용하지 않고 새 배열/목록을 만들면 메모리 누수가 발생할 수 있습니다;

 

긴 로딩 시간 - 게임에서 지금 당장 할 필요가 없는 작업을 수행하기 때문에 발생하는 경우가 많습니다. 때로는 일부 항목이 화면 밖에 있거나 플레이어와 가까이 있지 않은 경우 로딩을 연기하여 게임 플레이 중에 나중에 로드할 수 있습니다.  또한 위에서 언급한 모든 사항은 로딩에도 적용됩니다. 로딩 과정에서 발생한 가비지 발생으로 인해 GC가 프레임당 여러 번 강제로 실행되어 로딩 프로세스가 남긴 모든 혼란을 정리해야 하기 때문에 속도가 느려질 수 있습니다. 프로파일러를 사용하여 생성/로딩 기능을 최적화하면 처리 시간을 단축하는 데 도움이 됩니다.

 

그리고 GPU 및 CPU별 권장 사항은 어디에 더 있나요?

게임의 병목 현상을 이해하는 것이 중요합니다. CPU인지 GPU인지에 따라 다른 조치를 고려해야 합니다.

CPU 최적화를 위해서는 모든 업데이트 함수에서 지속적인 부하를 줄여야 합니다. 프레임당 수천 번 호출되는 함수의 처리 시간을 조금만 줄여도 상당한 개선 효과를 얻을 수 있습니다. 위에서 언급한 모든 방법을 적용하여 처리 시간과 가비지 생성을 줄일 수 있습니다.

GPU 최적화의 경우, 화면에서 메시가 차지하는 영역에 따라 덜 세밀한 버전의 메시를 표시하는 시스템인 레벨 오브 디테일을 사용하는 것을 고려해 보세요. 또한 동적 해상도 스케일링을 적용하면 화면에 많은 오브젝트와 효과가 있는 게임에서 성능 부하가 큰 순간을 부드럽게 처리할 수 있어 상당한 향상을 제공할 수 있습니다.

특히 빠른 업스케일링 방법과 함께 사용하면 이 순간 해상도 하락이 눈에 띄지 않지만 안정적인 프레임 속도를 유지하는 데 도움이 됩니다. 프로파일러에 물리 연산이 많이 표시되는 경우 비용이 적게 드는 물리 메서드를 사용하고, 사용 빈도를 줄이고, 물리 레이어링을 사용하는 등 해당 부분을 최적화하는 것이 좋습니다.

가장 중요한 것은 게임이 원하는 성능 수준에서 실행된다면 최적화가 필요하지 않을 수도 있다는 것입니다.


언리얼 엔진 개발의 관점


핑글 스튜디오의 언리얼 엔진 개발 부서 프로젝트 리드인 코스티얀틴 올레첸코(Kostyantyn Oleschenko)가 UE 게임 작업의 관점에서 이 글의 주제에 대해 몇 가지 인사이트를 공유합니다.

더 파이널스 스크린샷. Engine: 언리얼 엔진 5

 

게임의 타겟 플랫폼이나 엔진에 관계없이 문제를 파악하고 수정하는 일반적인 최적화 과제는 동일하지만, 언리얼 엔진의 특성을 고려해야 합니다.

가장 먼저 주의해야 할 사항 중 하나는 렌더링 유형(포워드 렌더링 또는 디퍼드 렌더링)입니다. 게임에 가장 적합한 렌더링 유형을 선택하는 것이 언리얼 엔진 프로젝트의 최적 성능을 위한 첫 번째 단계입니다.

다음으로 고려해야 할 사항은 플랫폼 제한입니다. 이는 콘솔에서 일반적이지만, PC 빌드를 최적화하여 이러한 제한 사항을 충족하면 훨씬 더 다양한 PC 구성에서 게임을 플레이하는 데 도움이 될 수 있습니다. 가장 일반적인 제한 사항은 다음과 같습니다:

포스트 프로세스 제한 - 대부분 포스트 프로세스를 톤 매퍼 등으로 대체하고 최상의 비주얼 품질에 도달하도록 조정하는 방식으로 해결합니다; 

 

데칼 제한 - 평면과 재질로 대체하여 쉽게 해결할 수 있는 경우가 많습니다;


광원 및 기타 광원 관련 제한 - 이 문제를 해결하기 위해 보통 레벨을 재설계하여 정적 광원을 더 많이 사용하고 동적 광원을 재사용합니다;

 

Insurgency: 모래폭풍 스크린샷. Engine: 언리얼 엔진 4.27


다음으로 논의할 내용은 모든 포팅 프로젝트에서 발생하는 성능 급등입니다. 텍스처, 스켈레탈 애니메이션 바이너리, 셰이더 리플렉션 등 리소스에도 동일하게 적용되며, 더 나은 성능을 얻기 위해 콘솔에서 사용하는 내부 포맷으로 리컴파일해야 할 수도 있습니다.

 

  1. VFX 급증.
    많은 언리얼 엔진 게임은 강력한 그래픽 프로세서가 탑재된 고사양 PC에서는 잘 작동하지만 고사양 콘솔에서는 문제가 발생할 수 있는 무거운 비주얼 이펙트를 사용합니다. 에픽은 VFX로 인한 부하를 줄이기 위해 VFX 및 기술 아트 팀과 긴밀히 협력하여 가능한 각 VFX를 최적화하여 룩과 성능 사이의 균형을 찾고 있습니다. 그러나 일부 가벼운 VFX도 최적화할 수 있으며, 그 결과 VFX 설정을 조정하고 현재 메모리에 있는 VFX를 수동으로 관리하여 프레임을 추가로 제공할 수 있습니다.
  2. 음향 효과 급증.
    사운드 관련 문제를 해결하려면 사운드 큐와 같은 사운드 클래스 처리에 주의를 기울이는 것이 좋습니다. 올바른 카테고리, 동시성 설정, 감쇠 조정, 소스 효과 체인으로 사운드를 적절히 재설정하면 Nintendo Switch와 같은 저사양 콘솔에서도 문제를 해결할 수 있습니다. 사운드 관련 게임플레이 로직을 재설계하고 사운드 캐시를 올바르게 튜닝하는 것도 사운드로 인한 하드웨어 부하를 줄이는 데 도움이 됩니다. 언리얼 엔진의 모든 실제 버전은 사운드 작업을 위한 적절한 툴세트를 제공합니다.
  3. PSO 급증.
    이러한 종류의 스파이크는 특정 게임 시나리오로 인해 게임 라이트가 갑자기 변경될 때 발생합니다. PSO 캐시를 신중하게 설정하면 대부분 해결할 수 있습니다. 이 작업은 레코드를 수집하고, 캐시를 컴파일하고, 캐시로 애플리케이션을 빌드하고, 모든 스파이크에 대해 이 알고리즘을 반복해야 하므로 시간이 많이 걸리는 경우가 많습니다. 하지만 이 작업을 통해 얻을 수 있는 프레임 속도는 그만한 가치가 있습니다.
728x90

렌더링 개발 관점


가능한 모든 최적화의 상당 부분은 렌더링 개발에서 비롯됩니다. Pingle에서는 이러한 종류의 작업을 위한 별도의 엔지니어링 개발 부서가 있습니다. Pingle의 렌더링 부서의 핵심 엔지니어 중 한 명인 예벤 카펜코가 렌더링 개발 관점에 대한 귀중한 인사이트를 공유합니다.  

포팅 과정에서 정기적으로 발생하는 네 가지 기본적인 렌더링 관련 문제가 있습니다:

다양한 세대와 제조업체의 콘솔은 서로 다른 아키텍처를 가지고 있으므로 각 플랫폼에 맞게 렌더링 코드를 최적화하고 구현해야 합니다;

콘솔은 최신 PC보다 하드웨어 성능이 떨어지는 경향이 있어 그래픽 품질이 저하될 수 있습니다;

같은 세대의 콘솔이라도 GPU와 메모리 아키텍처가 다를 수 있으므로 각 플랫폼(예: PS4와 Xbox One)에 맞게 렌더링을 최적화해야 할 수 있습니다;

같은 세대, 한 제조사 내에서도 콘솔마다 사양이 다른 모델이 있을 수 있습니다: PS4, PS4 Pro, PS4 Slim 또는 Xbox One X와 Xbox One X 등. 또한 같은 콘솔 내에서도 기능 측면에서 서로 다른 렌더러를 구현해야 할 수도 있습니다.

 

또 다른 중요한 문제는 콘솔 그래픽 API와 원본 게임의 그래픽 API의 호환성입니다. 가장 좋은 시나리오는 몇 가지 예외를 제외하면 XBox 그래픽 API가 거의 전적으로 DirectX와 호환되므로 DirectX 게임을 XBox 콘솔로 포팅하는 것입니다.

원본 게임이 다른 API로 구현된 경우 API 간에 비호환성 및 차이점이 있을 수 있습니다:

렌더링 명령 생성을 위한 선언적 모델;

좌표계 간의 차이

렌더링 상태의 개념

셰이더 언어

셰이더 모델

 

OpenGL, DirectX, Metal은 게임 및 3D 애플리케이션 개발에 널리 사용되는 세 가지 그래픽 API이며, 특정 게임 콘솔로 포팅할 때 개발자는 위에서 설명한 문제에 직면할 수 있습니다.

세 가지 그래픽 API는 모두 서로 다른 좌표계를 사용하여 3D 공간에서 오브젝트의 위치와 방향을 결정합니다. OpenGL과 벌칸은 Y축이 위를 가리킵니다. DirectX, Metal 및 콘솔은 클립 공간과 텍스처 좌표에서 Y축이 아래를 가리킵니다.

OpenGL은 클립 공간에서 [-1, 1] 깊이 범위를 사용하며, 여기서 가까운 면은 (-1), 먼 면은 (1)입니다. DirectX와 Metal은 클립 공간에서 [0, 1]의 깊이 범위를 사용하며, 근거리 평면은 (0), 원거리 평면은 (1)입니다.

이러한 차이로 인해 API 간에 코드를 포팅할 때 문제가 발생할 수 있습니다. 표준 해결책은 OpenGL/Vulkan에서 포팅할 때 셰이더의 Y축을 뒤집고 API 기반 뎁스 버퍼 계산을 조정하는 것입니다.

Metal, OpenGL, DirectX 간에는 렌더링 명령의 구성에 주요 차이점이 존재합니다. Vulkan, DirectX 12, Metal은 저수준의 명령 버퍼 중심 접근 방식에 중점을 둡니다. 개발자는 렌더링 명령을 대기열에 명시적으로 작성하면 GPU가 이를 효율적으로 실행합니다.

OpenGL과 DirectX 11은 보다 상태 지향적인 접근 방식을 제공합니다. 개발자는 후속 렌더링 호출의 동작에 영향을 주는 다양한 상태(예: 텍스처, 셰이더)를 설정합니다. 그러나 DirectX 11은 상태 기반 접근 방식을 사용하지만 보다 객체 지향적인 구조를 사용한다는 점에서 OpenGL과 유사합니다.

Vulkan, DirectX 12 및 Metal은 명령 버퍼에 렌더링 명령을 미리 쓰는 방식을 사용합니다. 이를 통해 GPU가 실행을 최적화하고 드라이버의 부하를 줄일 수 있습니다. OpenGL과 DirectX 11은 상태 변경에 의존하므로 상태 변경이 잦은 복잡한 장면에서는 중복 호출이 발생하고 실행 효율이 떨어질 수 있습니다.

렌더링을 콘솔로 포팅할 때의 어려움에는 셰이더 모델 간의 차이도 포함됩니다. 셰이더 모델은 그래픽 처리 장치(GPU) 셰이더에서 사용할 수 있는 기능과 성능을 정의하는 사양입니다. 버전에 따라 복잡성과 기능 수준이 다르므로 게임과 애플리케이션에서 구현할 수 있는 비주얼에 영향을 미칩니다.

셰이더 모델은 이러한 셰이더 프로그램에 대해 GPU가 지원하는 명령어 세트, 데이터 유형 및 함수를 정의합니다.

셰이더 모델은 다음과 같은 기능을 제공할 수 있습니다:

보다 복잡한 조명 모델(예: 물리 렌더링);

고급 텍스처 필터링 기술(예: 이방성 필터링);

세밀한 지오메트리를 위한 테셀레이션 셰이더;

범용 컴퓨팅 및 비동기 GPU 컴퓨팅을 위한 컴퓨팅 셰이더;

계산에 더 정확한 부동 소수점 숫자를 사용하여 더 정확한 결과를 얻고 시각적 아티팩트를 줄였습니다.


이 섹션의 시작 부분에서 설명한 다양한 사례에서 콘솔마다 셰이더 모델의 함수 집합을 다르게 구현할 수 있습니다. 따라서 개발자는 렌더링 포팅 작업을 보다 세밀하게 수행해야 합니다. 여기에는 포팅된 게임에서 사용되는 셰이더 모델의 구현과 셰이더 모델 또는 그 대체 기능의 누락된 기능 구현 간의 전체 또는 부분 하위 호환성이 포함될 수 있습니다.

또한 모든 그래픽 API에는 자체 셰이더 프로그래밍 언어와 셰이더 시스템이 있으며, 이는 그래픽 API와 호환되지 않을 수도 있습니다. 셰이더를 작성하는 데 사용되는 언어인 GLSL, HLSL, MSL(메탈 셰이딩 언어)은 서로 다른 그래픽 API를 지원하며 몇 가지 주요 차이점이 있습니다.

세 가지 모두 화면에 오브젝트가 그려지는 방식을 제어하는 버텍스, 픽셀 및 지오메트리 셰이더를 만들 수 있습니다. 그러나 모두 다른 구문, 셰이더 컴파일 프로세스, 다양한 로딩 및 리플렉션 프로세스, 셰이더의 리소스 및 데이터를 바인딩하는 프로세스가 있습니다.

게임을 콘솔로 포팅할 때 렌더링 관점에서 셰이더 코드와 컴파일 시스템은 큰 문제가 될 수 있는데, 특히 콘솔용 그래픽 API는 매우 다른 추상화 수준에서 셰이더의 리소스 바인딩, 컴파일 및 셰이더 기능을 구현하여 더 높은 성능과 더 정확한 하드웨어 전력 사용을 달성할 수 있기 때문입니다.

 

프레디의 파이브 나이트: 헬프 원티드 2 스크린샷, PS VR 2. 엔진으로 캡처: 언리얼 엔진 5.


이 외에도 콘솔은 최신 PC보다 하드웨어 성능이 떨어지기 때문에 렌더링할 때 다양한 구현 기법을 사용할 수 있습니다.

그러한 기술 중 하나가 업스케일링입니다. 비디오 게임에서 업스케일링은 렌더링된 이미지의 해상도를 높이는 기술을 말합니다. 이는 해상도가 크게 달라질 수 있는 PC에서 해상도가 고정된 콘솔로 게임을 포팅할 때 매우 중요합니다.

업스케일링하는 동안 게임은 콘솔에 맞는 최적의 해상도로 렌더링되어 60fps를 보장합니다. 이 해상도는 720p와 같이 허용되는 표준보다 훨씬 낮을 수 있으며, 이후 콘솔의 소프트웨어 또는 하드웨어에 의해 더 수용 가능한 형식으로 증가됩니다.

리소스와 관련된 대부분의 경우 텍스처 최적화가 필요한데, 여기에는 다음이 포함될 수 있습니다:

포맷 변경

텍스처를 내부 콘솔 포맷으로 전송;

텍스처의 빠른 로딩을 보장할 수 있는 패키지 형식으로 텍스처를 전송하는 경우;

텍스처 크기 변경, 특히 업스케일 사용 시 게임이 저해상도로 렌더링되는 경우 원본 텍스처 크기가 필요하지 않은 경우.


다음은 셰이더 최적화의 몇 가지 예시입니다:

비생산적인 코드 섹션 재작성,

더 적절한 데이터 유형 선택

덜 복잡하고 최적의 셰이딩 알고리즘을 선택합니다.


Pingle에서 사용한 셰이더 최적화의 좋은 예는 지오메트리 버텍스 형식의 최적화로, 비디오 카드에 지오메트리를 로드하고 렌더링하는 속도를 높이는 데 사용할 수 있습니다.


Pingle에서 사용한 최적화의 실제 사례 중 하나는 지오메트리 버텍스 형식의 최적화로, 비디오 카드에 지오메트리를 로드하고 렌더링하는 속도를 높일 수 있습니다.

최적화의 또 다른 예로는 더 간단하고 성능 집약적인 셰이딩 알고리즘을 구현하는 것이 있습니다:

더 거친 셰이딩 알고리즘 또는 스크린 스페이스 앰비언트 오클루전

실시간 계산 알고리즘과 렌더링 패스를 이전에 계산된 알고리즘으로 전송합니다,

그림자, 환경 및 리플렉션 맵 베이킹;

콘솔을 많이 사용하는 렌더 패스를 미리 계산된 패스로 대체합니다.


결론은 이렇습니다: 콘솔 최적화로 PC 빌드를 업그레이드하는 이유는 무엇인가요?


최적화가 제대로 되지 않은 PC 게임이 시간이 지나고 패치가 적용된 후 좋은 성과를 거둔 사례를 알고 있지만, 이를 좋은 사례라고 할 수는 없습니다. 그리고 어차피 출시되는 PC 전용 게임은 그리 많지 않습니다.

퍼블리셔 또는 개발자로서 게임의 멀티 플랫폼 출시를 계획하고 있다면 콘솔 버전 최적화에 특별한 주의를 기울여야 할 것입니다. 이 글에서 볼 수 있듯이 콘솔에 필요한 많은 최적화는 게임의 PC 빌드 성능도 향상시킬 수 있습니다.

개발자는 PC 빌드에 콘솔과 같은 최적화를 채택함으로써 게임이 높은 성능 기준을 충족하도록 할 수 있으며, 이는 안정성과 유동성이 사용자 만족도와 리텐션에 큰 영향을 미치는 시장에서 매우 중요한 요소입니다.

콘솔 최적화 기술을 PC에 구현하는 데 필요한 리소스와 시간 투자는 상당할 수 있습니다. 하지만 잠재적인 투자 수익률(ROI)은 이러한 노력을 정당화합니다. 일반적으로 콘솔에서 일관된 프레임 속도와 효율적인 메모리 관리를 보장하는 최적화는 PC, 특히 저사양 시스템에서도 성능을 향상시킬 수 있습니다. 이는 게임의 매력과 접근성을 높여 잠재적으로 플레이어 기반을 확대할 수 있습니다.

이러한 최적화를 구현하는 초기 단계에서는 엄격한 프로파일링과 디버깅이 필요하므로 개발 시간이 늘어날 수 있습니다. 하지만 이러한 관행이 확립되면 향후 프로젝트의 개발 주기가 더욱 간소화되고 효율성이 높아집니다. 16년 이상의 업력을 가진 게임 개발사로서 유니티는 콘솔 최적화를 통합한 후 후속 최적화 및 버그 수정에 소요되는 시간이 줄어들어 전체 개발 시간이 단축되었다고 말합니다. 엄격한 콘솔 표준을 적용하면 PC 성능 기대치를 뛰어넘는 경우가 많아 개발자와 게임 커뮤니티 모두 윈윈할 수 있습니다.


* 원문:

 

How to get better fps on PC while porting games to consoles

In this article, we will discuss the best optimizing practices for console builds, which may also help you improve PC build performance.

www.gamedeveloper.com

 

댓글