Skip to Main Contents

R.O.H.A.N.2

공식 포럼

Content

유니티 게임 개발자님들께 건의 합니다.!!운영자님 꼭 보시고 답변 부탁드립니다!!

유니티는 opengl이라. window에 최적화가 어려워요.

 

아래와 같이 체크 해보시길 바랍니다.

 

유니티 프로젝트 설정 최적화

1. 그래픽 API 설정:

  • 유니티에서는 프로젝트 설정에서 기본적으로 사용할 그래픽 API를 지정할 수 있습니다. Windows용 빌드에서 OpenGL 3.x를 사용하도록 설정되어 있다면, OpenGL 4.x 이상 버전으로 업그레이드해보는 것이 좋습니다. OpenGL 4.x는 Windows 환경에서 성능을 더 잘 활용할 수 있습니다.
  • 설정 방법:
    • Unity Editor에서 Edit > Project Settings > Player로 이동합니다.
    • Other Settings 탭에서 Auto Graphics API for Windows 옵션을 비활성화합니다.
    • 목록에서 OpenGL 4.x 버전을 상위에 설정합니다.
    •  

2. V-Sync (수직 동기화) 비활성화:

  • V-Sync는 화면 찢어짐 현상을 줄여주지만, 성능 저하를 유발할 수 있습니다. 특히 Windows에서 OpenGL을 사용할 때 성능이 낮다면 V-Sync를 비활성화하여 프레임 속도를 최적화할 수 있습니다.
  • 설정 방법: Unity에서 Edit > Project Settings > Quality에서 V-Sync를 'Don't Sync'로 설정합니다.
  •  

3. 프레임 제한 설정:

  • 고사양 하드웨어에서 불필요하게 높은 프레임률을 유지하려는 시도가 자원을 낭비할 수 있습니다. Application.targetFrameRate를 적절히 설정하여 CPU와 GPU 사용률을 관리할 수 있습니다.
  • 예를 들어, Application.targetFrameRate = 60;으로 제한하면 성능 최적화에 도움이 될 수 있습니다.
  •  

4. 안티앨리어싱(Anti-aliasing) 최적화:

  • 안티앨리어싱은 그래픽 품질을 향상시키지만, 성능에 상당한 부담을 줄 수 있습니다. 유니티에서 OpenGL을 사용하는 경우, MSAA(멀티샘플 안티앨리어싱)를 적절히 조정해 성능을 개선할 수 있습니다.
    • 설정 방법: Edit > Project Settings > Quality에서 안티앨리어싱 수준을 조정하거나, 필요에 따라 비활성화할 수 있습니다.
    •  

5. 셰이더 최적화:

  • OpenGL에서 복잡한 셰이더는 성능 저하의 원인이 될 수 있습니다. 셰이더 복잡도를 줄이거나 최적화된 셰이더를 사용하여 성능을 높일 수 있습니다.
    • 셰이더 스트리핑: 유니티는 사용되지 않는 셰이더 변종을 빌드에서 제거할 수 있는 기능을 제공합니다. 이를 통해 메모리와 성능을 최적화할 수 있습니다.
    •  

6. 빛맵(Baked Lighting) 활용:

  • 실시간 조명은 GPU 부하를 많이 차지할 수 있습니다. 가능하면 Baked Lighting을 활용하여 정적 조명 정보를 미리 계산해두고, 실시간 조명 처리를 줄임으로써 성능을 개선할 수 있습니다.
  •  

OpenGL 최적화 옵션

1. OpenGL Extensions (확장 기능) 사용:

  • OpenGL에는 특정 GPU와 호환성을 강화하고 성능을 향상시키기 위한 다양한 확장 기능이 존재합니다. 이를 적절히 활용하면 성능을 개선할 수 있습니다.
  • glDrawArrays와 같은 배치 렌더링 호출을 사용하거나, ARB_direct_state_access와 같은 확장 기능을 활용하여 드로우 콜을 줄이고 성능을 개선할 수 있습니다.
  •  

2. 멀티스레딩 활용:

  • OpenGL은 기본적으로 멀티스레드에 적합하지 않지만, 유니티는 그래픽 작업을 여러 스레드로 나눌 수 있는 기능을 제공합니다.
    • 유니티의 멀티스레드 렌더링 옵션을 활성화하여 CPU가 더 나은 성능을 발휘하도록 할 수 있습니다.
    • 설정 방법: Edit > Project Settings > Player에서 멀티스레드 렌더링을 활성화합니다.
    •  

4. GPU와 CPU 부하 관리

  • 오브젝트 배치 최적화: 가능한 경우, 게임 내 오브젝트를 배치 단위로 렌더링하여 드로우 콜을 줄이는 것이 좋습니다. 유니티의 GPU Instancing 기능을 사용하면 많은 오브젝트를 한 번에 렌더링할 수 있어 성능이 개선됩니다.
  • Culling(컬링) 사용: 보이지 않는 오브젝트를 렌더링하지 않도록 Occlusion Culling을 활용하여 GPU 부하를 줄일 수 있습니다.
  •  

5. 디버깅 및 프로파일링 도구 활용

  • Unity Profiler: 성능 병목 현상이 발생하는 부분을 확인하고 최적화할 수 있는 도구입니다. 유니티 프로파일러를 사용하여 CPU, GPU의 사용률을 추적하고, 불필요한 계산이나 자원 낭비가 있는지 확인할 수 있습니다.
  • Frame Debugger: 특정 프레임에서 어떤 렌더링 단계에서 성능 저하가 발생하는지 추적할 수 있는 도구입니다. 이를 통해 OpenGL 렌더링 단계에서 발생하는 문제를 찾을 수 있습니다.
  •  

6. 빌드 옵션 최적화

  • 압축 및 최적화 빌드 설정: 유니티 빌드 설정에서 압축 설정을 조정하여 빌드 크기와 로딩 시간을 최적화할 수 있습니다. LZ4HC와 같은 압축 방식을 사용하여 성능에 미치는 영향을 최소화할 수 있습니다.
  • IL2CPP 빌드 사용: IL2CPP는 성능을 크게 향상시킬 수 있는 컴파일 방식입니다. 빌드 설정에서 IL2CPP를 사용하면 게임의 실행 속도가 빨라질 수 있습니다.
  •  

결론:

  • OpenGL로 개발된 유니티 게임을 Windows에서 최적화하려면, 그래픽 API 설정유니티 내의 다양한 최적화 옵션을 활용해야 합니다.
  • 최신 드라이버를 사용하고, 유니티 프로파일러와 디버깅 도구를 통해 성능 병목을 분석한 후, 셰이더, 조명, 배치 렌더링 등 다양한 요소를 최적화하는 것이 중요합니다.

 

개발자 분에게 위 내용을 복사해서 프린트 해주시고,

체크가 될 수 있게 부탁드립니다.

 

!! 마지막으로 현재 cpu와 gpu 사용도가 높은거로 봐서는..

Application.targetFrameRate = 60; 

 

위와 같은 코딩이 혹시나 실수로 

Application.targetFrameRate = 600; 

으로 되어 있지는 않은지 확인 부탁드립니다.!!

 

댓글 2

0/3000

통합 검색

바로가기

신고
제목
작성자
사유를 선택해주세요.
기본 메세지 팝업 샘플 입니다.