유니티 게임 개발자님들께 건의 합니다.!!운영자님 꼭 보시고 답변 부탁드립니다!!
유니티는 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 버전을 상위에 설정합니다.
- Unity Editor에서
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