2012-03-30 4 views
5

나는 많은 광고판을 사용하는 3D 아이폰 애플리케이션을 만든다. iPhone 4에서 화질을 높이려고하므로 프레임 버퍼가 망막 화면에서 두 배 더 커집니다. 문제는 프래그먼트 셰이더가 프레임 버퍼 크기 때문에 더 많은 시간을 소비한다는 것입니다. 증가하는 셰이더 정밀도없이 망막 화면과 고화질 텍스처를 관리 할 수있는 방법이 있습니까?iOS의 망막 화면을위한 쉐이더 최적화

답변

9

레티 나 디스플레이의 전체 해상도에서 프레임 버퍼로 렌더링하는 경우 레티 나 디스플레이가 아닌 동일한 물리적 영역과 비교할 때 래스터 오버 할 픽셀이 4 배가됩니다. 셰이더의 복잡성으로 인해 채우기 속도가 제한적인 경우 각 프레임에서 렌더링 시간이 훨씬 길어집니다.

먼저 렌더링 파이프 라인의 조각 처리 부분에 의해 실제로 제한되는지 확인해야합니다. 애플리케이션에 대해 OpenGL ES Driver 계측기를 실행하고 Tiler 및 Renderer Utilization 통계를보십시오. 렌더러 사용률이 100 %에 가까우면 조각 쉐이더와 전체 픽셀 푸시 기능으로 인해 제한된다는 것을 나타냅니다. 그러나 Tiler Utilization 비율이 그곳에있는 경우, 이는 지오메트리에 제한이 있고 화면 해상도의 변경이 버텍스 데이터의 복잡성과 크기를 줄이는만큼 성능에 영향을 미치지 않는다는 것을 의미합니다.

조각 쉐이더로 인해 제한된다고 가정하면 iOS GPU의 성능을 크게 향상시킬 수있는 몇 가지 방법이 있습니다.

경우에 따라 질감 크기가 문제가 될 수 있습니다. 가장 먼저 할 일은 표준 비트 맵 소스 대신 PowerVR 텍스처 압축 (PVRTC) 텍스처를 사용하는 것입니다. PVRTC 텍스처는 압축 된 형식으로 메모리에 저장되며 동등한 비트 맵보다 훨씬 작을 수 있습니다. 이렇게하면 텍스처 읽기시 캐시 히트가 증가하여 훨씬 빠른 액세스가 가능해질 수 있습니다.

텍스처의 크기를 2로 설정하고 밉맵을 사용하도록 설정합니다. 나는 밉맵이 큰 텍스처에 도움이되는 것을 보았습니다.이 텍스처는 종종 더 작은 오브젝트에 축소되도록 나타납니다. Retina 및 비 망막 장치를 지원해야하는 응용 프로그램의 경우처럼 들립니다.

전염병과 같은 조각 쉐이더에서 종속 텍스처 읽기를 피하십시오. 텍스처 좌표를 결정하기 위해 계산을 수행하거나 분기 구문에 포함 된 텍스처 읽기는 iOS GPU에서 수행 할 때보 다 더 느리게 진행될 수있는 종속 텍스처 읽기를 트리거합니다. 정상적인 텍스처 읽기 동안 PowerVR GPU는 텍스처 값보다 조금 앞선 독서를 할 수 있지만, 원인이있는 종속 텍스처 읽기를 사용하면 해당 최적화를 잃을 수 있습니다.

나는 다양한 최적화 (highp 대신에 lowp 나 mediump 정밀도를 사용하는 등)에 대해서 갈 수 있지만, 나는 had a little help in this area myself을 가지고있다. 마지막으로 PowerVR's profiling editor을 통해 쉐이더를 실행 해보면이 쉐이더의 최상의 성능과 최악의 성능에 대한주기 시간을 예측할 수 있습니다.

망막 디스플레이 장치는 조각 셰이더 제한과 관련하여 최악의 범죄자조차하지 않습니다. 아이폰 4/4S보다 더 많은 픽셀을 가지고 있기 때문에, iPad 1/2 또는 아이폰 4S보다 훨씬 느린 GPU를 가지고 있기 때문에, iPad 1의 전체 화면으로 렌더링하는 것을 시도해보십시오. iPad 1에서 잘 돌아가는 무언가를 얻을 수 있다면, 그 밖의 모든 것들 (심지어 Retina iPad)에서도 좋을 것입니다.

+0

감사합니다. 렌더러 사용률은 약 99 %이고 Tiler는 약 5 %입니다. 내 광고판의 대부분이 2D 스프라이트처럼 표시되기 때문에 밉 매핑 (mipmapping)은 퍼포먼스를 향상시키지 못할 것이라고 생각합니다 (텍스처는 크기 조정되지 않음). PowerVR의 프로파일 링 에디터를 시험해보고 iPad 1에서 내 앱을 테스트 해 보겠습니다. – Klem

+0

Brad. 저는 지난 6 개월 동안 미친 듯이 쉐이더를 코딩했습니다. 그리고 텍스처 좌표를 수정하는 방법을 배웠을 때 그것은 내 머리 속에서 켜져있는 빛과 같았습니다. 하지만 저는 두 개의 다른 텍스처를 읽거나 하나의 텍스처로 기본 및 노멀 맵을 바둑판 식으로 배열하는 것이 더 나은지 궁금했습니다. 어느 것이 더 빠릅니다. 셰이더 가이드에 대한 애플의 베스트 프랙티스는 texcoord에 대한 수정이 버텍스 쉐이더에서 수행되면 종속 텍스처 읽기가 아니라는 것을 의미합니다. iphone4 렌더링 속도가 빨라지는지 알아보기 위해 노력할 것입니다. 그리고 아마도 다른지도를 시도해보십시오. – badweasel

관련 문제