모바일 플랫폼 용 스프라이트 기반 2D 게임을 개발 중이며 그래픽을 렌더링하기 위해 OpenGL (실제로는 Irrlicht)을 사용하고 있습니다. 먼저 간단한 방법으로 스프라이트 렌더링을 구현했습니다. 모든 게임 오브젝트는 자체 GPU 드로우 콜을 사용하여 쿼드로 렌더링됩니다. 즉, 200 개의 게임 오브젝트가있는 경우 프레임 당 200 개의 드로우 콜을했습니다. 물론 이것은 나쁜 선택이었고 모든 GPU 드로우 콜에 약간의 CPU 오버 헤드가 있기 때문에 내 게임은 완전히 CPU에 바인딩되었습니다. GPU는 대부분 유휴 상태를 유지했습니다.
이제 객체를 큰 배치로 수집하고 몇 번의 그리기 호출로 이러한 배치를 렌더링하여 성능을 향상시킬 수 있다고 생각했습니다. 나는 배치를 구현하여 (같은 질감을 공유하는 모든 게임 객체가 동일한 배치로 렌더링되도록) 내 문제가 사라 졌다고 생각했습니다.
왜? 글쎄, 나는 200 개 이상의 게임 개체를 가지고 있으며 초당 60 번 업데이트됩니다. CPU의 정점에 대한 새로운 위치 (번역 및 회전)를 다시 계산 해야하는 모든 프레임 (모바일 플랫폼의 GPU는 인스턴스화를 지원하지 않으므로 거기에서 할 수 없습니다) 및이 계산을 초당 48000 (200 * 60 * 4 이후) 모든 스프라이트에는 4 개의 정점이 있습니다)) 너무 느리게 보입니다.
성능 향상을 위해 무엇을 할 수 있습니까? 모든 게임 오브젝트는 매 프레임마다 움직이거나 회전하며 (거의) 모든 정점 위치를 다시 계산해야합니다. 내가 생각할 수있는 최적화 만 회전을위한 조회 테이블이므로 회전을 계산할 필요가 없습니다. 스프라이트가 도움이 될까요? 불쾌한 해킹이 있습니까? 다른 거있어?
감사.