카메라 프레임 버퍼링

ARCore 1.17.0에 추가되었습니다.

대부분의 앱은 렌더링을 위해 단일 카메라 프레임만 버퍼링하면 됩니다. 하지만 ARCore는 고정 크기로 여러 카메라 프레임 버퍼링도 지원합니다. 라운드 로빈 텍스처 큐입니다.

멀티스레드 렌더링 파이프라인이 있는 앱은 버퍼링을 사용하여 렌더링 성능을 향상시키는 데 도움이 됩니다. 또한 버퍼링을 사용하면 앱에서 프레임을 더 높은 속도로 렌더링할 수 있습니다. 프레임 속도를 일관성 있게 유지함으로써 느린 UI 렌더링을 사용할 수 있습니다.

전제조건

카메라 이미지 버퍼링은 다음 조건 중 하나에 해당하면 사용 설정됩니다.

  1. Session.setCameraTextureNames(ids)를 호출하여 앱에서 사용 설정한 경우 여러 개의 텍스처 ID로 구성됩니다.

  2. 내부 버퍼링이 필요한 하나 이상의 ARCore 기능이 사용 설정된 것입니다. 현재 여기에는 다음 기능이 포함됩니다.

    • 증강 이미지
    • 증강 얼굴
  3. 게임 플레이를 위해 내부 버퍼링이 필요한 특정 ARCore 지원 기기에서 있습니다.

프레임 지연의 사용 설정 여부 확인

지정된 기기 및 AR 세션에 프레임 버퍼링이 있는지 (또한 프레임 지연)이 사용 설정된 경우 adb Logcat 출력을 사용합니다.

# Camera frame buffering is turned off when frame delay is zero.
adb logcat | grep 'Update Frame Delay'
 I native  : session.cc:3141 Update Frame Delay to 0 frames.
# Camera frame buffering is turned on when frame count is non-zero.
# Note: The size of the buffer can vary over time.
adb logcat | grep 'Update Frame Delay'
 I native  : session.cc:3141 Update Frame Delay to 6 frames.

 I native  : session.cc:3141 Update Frame Delay to 4 frames.

 I native  : session.cc:3141 Update Frame Delay to 2 frames.

메모리

카메라 프레임이 추가로 버퍼링될 때마다 메모리 사용률이 높아집니다. 예를 들어 1080p 텍스처의 경우 약 6MB의 메모리를 소비하고 해상도 1920 x 1080 x 3바이트 RGB 데이터)

성능에 대한 고려사항

여러 카메라 프레임을 사용해도 카메라 프레임의 가변성이 감소하지 않을 수 있습니다. 다중 스레드 렌더링 파이프라인을 사용하는 것이 모든 상황에서 더 나은 실적을 제공합니다 다음과 같은 요인이 실제 성능:

  • 앱 렌더링 파이프라인

  • 앱 스레딩 모델

  • 기기 CPU 아키텍처

  • 운영체제 예약 시스템

앱이 추가 카메라 프레임을 활용할 수 없는 경우 두 개 이상의 텍스처를 사용할 때의 성능 향상에 도움이 됩니다.

버퍼링 사용 설정

수신되는 카메라 프레임을 버퍼링하는 데 사용할 텍스처를 ARCore에 지시하려면 다음을 사용합니다. Session.setCameraTextureNames(ids): 하나 이상의 텍스처 ID 배열을 제공합니다. 이 함수는 세션 생성 후에만 호출되며 일반적으로 합니다.

Session.update()를 호출할 때마다 ARCore는 다음 텍스처를 덮어씁니다. 큐를 라운드 로빈 순서로 반환합니다. 앱이 단일 텍스처 ID만 설정하는 경우 매번 같은 텍스처를 덮어쓰게 됩니다.

Frame.getCameraTextureName()를 사용하여 연결된 텍스처 ID를 확인합니다. 합쳐집니다.