GPU 렌더링 성능을 최적화하기 위한 팁

GPU 렌더링으로 SWF 내용의 성능을 크게 향상시킬 수 있지만 이는 내용의 디자인에 상당히 좌우됩니다. 기존 소프트웨어 렌더링에서 잘 작동하는 설정이 GPU 렌더링에서는 제대로 작동하지 않는 경우가 있습니다. 다음과 같은 팁을 활용하면 소프트웨어 렌더링의 성능 손실을 방지하면서 GPU 렌더링에서 우수한 성능을 얻을 수 있습니다.

참고: 하드웨어 렌더링을 지원하는 휴대 장치는 대부분 웹에서 SWF 내용을 액세스합니다. 따라서 모든 종류의 화면에서 최상의 성능을 낼 수 있도록 SWF 내용을 제작할 때 항상 다음과 같은 팁을 고려하는 것이 좋습니다.
  • HTML 포함 매개 변수에 wmode=transparent 또는 wmode=opaque 를 사용하지 마십시오. 이러한 모드를 사용하면 성능이 저하될 수 있습니다. 또한 소프트웨어 및 하드웨어 렌더링 시에 모두 오디오-비디오 동기화에 약간의 손실이 발생할 수 있습니다. 게다가 많은 플랫폼에서 이러한 모드를 사용할 때 GPU 렌더링을 지원하지 않으므로 성능이 크게 저하됩니다.

  • 보통 모드와 알파 블렌드 모드만 사용하고, 다른 블렌드 모드, 특히 레이어 블렌드 모드는 사용하지 마십시오. 일부 블렌드 모드는 GPU 렌더링 시 정확하게 재현되지 않습니다.

  • GPU에서는 벡터 그래픽을 렌더링할 때 그래픽을 그리기 전에 작은 삼각형으로 이루어진 메쉬로 분할합니다. 이 프로세스를 테셀레이션이라고 합니다. 테셀레이션은 약간의 성능 저하를 일으키며, 모양이 복잡할수록 성능 저하 현상이 심해집니다. 성능에 미치는 영향을 최소화하려면 변형 모양을 사용하지 마십시오. 변형 모양을 사용하면 GPU 렌더링 시 모든 프레임에 대해 테셀레이션이 발생합니다.

  • 자체 교차 곡선이나 매우 가느다란 곡선 영역(예: 가느다란 초승달)을 되도록 사용하지 않고 모양의 가장자리에 복잡한 세부 표현을 가급적 적용하지 않아야 합니다. 이러한 모양은 GPU에서 삼각형 메시로 테셀레이션하기가 복잡합니다. 이해를 돕기 위해 500 × 500 정사각형과 100 × 10 초승달의 두 가지 벡터를 예로 들어 생각해 볼 수 있습니다. 큰 사각형은 단지 삼각형 두 개로 분할되기 때문에 GPU가 쉽게 렌더링할 수 있습니다. 반면, 초승달 곡선을 표현하려면 많은 삼각형이 필요합니다. 따라서 이 모양은 픽셀 수가 작은데도 모양을 렌더링하기가 더욱 복잡합니다.

  • 크기를 많이 변경하지 마십시오. 이 경우 GPU가 그래픽을 다시 테셀레이션할 수 있습니다.

  • 가급적 오버드로우하지 마십시오. 오버드로우는 여러 그래픽 요소를 겹쳐서 서로 흐리게 하는 기법입니다. 소프트웨어 렌더러를 사용할 때는 각 픽셀을 한 번만 그리므로 소프트웨어 렌더링의 경우 같은 픽셀에서 서로 겹치는 그래픽 요소가 얼마나 많든지 관계없이 응용 프로그램에 성능 손실이 발생하지 않습니다. 반면에 하드웨어 렌더러는 다른 요소가 해당 영역을 흐리게 하는지 여부에 관계없이 각 픽셀을 요소마다 하나씩 그립니다. 예를 들어 두 직사각형이 서로 겹치는 경우 소프트웨어는 렌더러는 겹치는 영역을 한 번만 그리는데 반해 하드웨어 렌더러는 겹치는 영역을 두 번 그립니다.

    따라서 소프트웨어 렌더러를 사용하는 데스크톱에서는 오버드로우로 인한 성능 영향이 거의 없지만 GPU 렌더링을 사용하는 장치에서는 겹치는 모양이 많으면 성능이 저하될 수 있습니다. 그러므로 객체를 가리는 방법을 사용하기보다는 아예 표시하지 않는 편이 좋습니다.

  • 채워진 큰 직사각형을 배경으로 사용하지 마십시오. 대신 스테이지의 배경색을 설정합니다.

  • 비트맵 반복의 기본 비트맵 채우기 모드를 가급적 사용하지 마십시오. 대신 비트맵 클램프 모드를 사용하면 더 나은 성능을 얻을 수 있습니다.