2011-01-17 2 views
4

저는 멀티 샘플링을 사용하여 iOS 4의 iPhone 및 iPad에서 전체 장면 앤티 앨리어싱을 수행했습니다. 일반적인 메커니즘은 Apple의 APPLE_framebuffer_multisample 확장 (http://www.khronos.org/registry/gles/extensions/APPLE/APPLE_framebuffer_multisample.txt)을 사용하며이 질문에 대한 대답 : How do you activate multisampling in OpenGL ES on the iPhone?에 설명되어 있으며 문서화되어 있습니다. Apple의 OpenGL ES 프로그래밍 가이드iOS에서 멀티 샘플 앤티 앨리어싱을 사용하면 성능에 어떤 영향이 있습니까?

설명대로 작동하지만 샘플 수가 2로 설정되면 내 테스트 응용 프로그램의 드로잉 성능이 약 50 % 정도 저하됩니다. 주로 망원경이 아닌 아이폰 4를 사용하여 테스트하고 있습니다. 신청. Apple에서 제공하는 다른 성능 제안을 사용하고 있습니다 (glDiscardFramebufferEXT를 사용하여 멀티 샘플 프레임 버퍼에 첨부 된 렌더 버퍼를 삭제하고, glClear를 사용하여 프레임 시작 부분의 전체 프레임 버퍼를 지우는 등).

이러한 방식으로 멀티 샘플링을 가능하게하는 성능 오버 헤드가 놀라 울 정도로 커집니다. 당신들도 비슷한 결과를보고 있습니까? 아니면 제가 잘못하고있는 것을 제안합니까?

답변

1

샘플 수를 2로 설정하면 성능이 약 50 % 씩 떨어지는 것은 놀라운 일이 아닙니다. 샘플을 두 번 드로잉하는 것입니다! 멀티 샘플링이란 기본적으로 화면보다 높은 해상도로 장면을 화면에 표시되지 않는 버퍼로 그린 다음 필터링 알고리즘을 사용하여 고해상도 멀티 샘플 버퍼를 디스플레이 화면 해상도로 줄이는 것입니다. 사진에는 ​​실제로 단일 샘플 버전보다 더 세부적인 부분 (필터링 된 고해상도 출력)이 포함됩니다.

이것은 그래픽에서 가장 일반적인 (그렇지 않은 경우) 성능 문제입니다. 그릴 샘플이 많을수록 느리게 진행됩니다.

2

iPhone 4에서이 기능을 사용한다고 말했습니까? OpenGL ES 레이어 렌더링은 전체 2X 망막 디스플레이 배율 팩터에서 수행됩니까? 즉, OpenGL ES 호스팅 계층의 contentScaleFactor[[UIScreen mainScreen] scale]으로 설정 했습니까? 그렇다면 많은 수의 픽셀을 시작해야합니다.

멀티 샘플링 된 안티 앨리어싱을 적용하기 전에 채우기 속도가 제한되어 있습니까? 확인하려면 실행중인 응용 프로그램에 대해 Instruments에서 OpenGL ES 도구를 사용하고 Tiler Utilization 및 Renderer Utilization 통계를 활성화하십시오. 응용 프로그램에서 MSAA를 사용하지 않고 높은 Renderer Utilization을 표시하면 채우기 속도가 제한적으로 시작됩니다. MSAA를 추가하면이 병목으로 인해 프레임 속도가 크게 저하 될 수 있습니다.

도형이 제한되어 있고 속도 제한이없는 응용 프로그램에서 iPhone 4에서 4X MSAA를 사용할 때 속도가 크게 떨어지는 것을 보지 못했습니다. 귀하의 병목 현상이 응용 프로그램이 픽셀을 화면으로 밀어 넣는 중입니다.

관련 문제