Cubism SDK‎ > ‎시작하며‎ > ‎

04. 다른 시스템과의 연동에 관하여

※파란 글씨는 2013/10/03에 추가한 항목)

 Live2D를 다른 회사의 시스템 (게임 엔진 등)에 연동할 경우, 확인해야할 부분에 대해서 기재한 문서입니다.

 Unity, cocos2d-x에 대해서는 SDK에서 정식 대응하고 있기 때문에, 이 문서는 그 이외의 환경에 연동할 경우 확인해야할 것에 대한 문서입니다.  그리고, Live2D를 플랫폼마다 표준적인 프로그램 환경에서 사용하는 경우에도 이 문서는 필요하지 않습니다.

Live2D의 초기화와 해제
 Live2D::init( )를 호출하여 Live2D를 초기화합니다. Live2D::dispose()를 호출하여 사용하고 있는 메모리를 해제하여, 라이브러리를 언로드할 수 있는 상태로 만듭니다. (물론 대부분의 게임에서는 실행 도중 라이브러리를 언로드할 상황은 없습니다)

메모리 관리
 Live2D에서는 사용하는 메모리(CPU, GPU)를 확보하기 위해 외부에서 메모리 관리자(Allocator)를 지정 하여 Live2D를 초기화할 때 (Live2D::init()) 등록할 수 있습니다. Live2D에서는 지정된 메모리 관리자에게 필요할 때마다 4kb 블록 단위로 메모리 할당을 요청합니다.


모델, 텍스쳐의 로드와 초기화
 Live2D는 렌더링 기능만을 제공하기 때문에 Live2D내 리소스들에 특별한 관리를 행하지 않고 외부의 코드 혹은 게임 엔진 측의 리소스 관리를 받는 것을 전제로 설계되어 있습니다.

  • 모델과 같은 독자적인 데이터는 Live2D 밖에서 파일을 바이트 배열로 불러와 Live2D 라이브러리에 전달해서 초기화
  • 텍스쳐는 Live2D 밖에서 텍스쳐를 불러와 초기화한 후 Live2D에 등록

액션, 모션의 재생
 클릭 같은 이벤트에 대응하여 Live2D용 애니메이션, 표정 변화등의 명령을 호출합니다. Live2D 라이브러리는 Thread-safe하지 않기 때문에 동시에 여러 스레드에서 모델의 갱신, 렌더링하지 않게 코드를 작성할 필요가 있습니다.


매 프레임 모델의 업데이트과 렌더링
 매 프레임마다 위의 과정을 거쳐 초기화를 거친 모델들을 아래의 명령들을 순서대로 수행해야 합니다.
  • 모델의 각 파라미터 설정, 애니메이션 재생, 정지와 같은 조작
  • 모델의 update() 처리 (주로 CPU 연산)
  • 모델의 draw() 처리 (주로 폴리곤 렌더링) 세부 내용은 후술

렌더링 세부
 일반적인 깊이 버퍼를 이용하는 3D 렌더링과는 달리, Live2D에서는 평면 폴리곤(반투명 픽셀을 포함하는 텍스쳐)을, 배경부터 순서대로 겹쳐서 렌더링합니다. (Photoshop의 레이어를 3D에서 표현한다고 생각하시면 됩니다)

 구체적인 렌더링 설정, 내용은
  • 깊이 버퍼 테스트는 기본적으로 OFF (지정한 폴리곤 단위로 Z값을 변경해서 렌더링할 수 있습니다)
  • 셰이더는 기본적인 텍스쳐의 알파 블렌딩처리만 합니다.
  • 정점 배열, UV 배열, 인덱스 배열에 텍스쳐를 씌워서 렌더링합니다.
입니다.

렌더링은 OpenGL이나 각 플랫폼에 맞는 렌더링 명령 도중에 Live2D 모델의 draw()를 호출하여 실행할 수 있습니다. 실제 렌더링 명령은 Live2D 라이브러리 내에서 은닉되어 있습니다. 렌더링 부분의 소스코드는 공개되어 있지 않습니다만 계약 형태에 따라 렌더링 부분의 소스코드를 제공할 수도 있습니다. 자세한 것은 지원팀에 문의해주시길 바랍니다.

・・・
 렌더링시 3D와 같은 스크린에 직접 렌더링 하는 경우와 Live2D용 오프스크린 버퍼(렌더 텍스쳐)에 먼저 렌더링 한 후 화면에 그리는 경우, 처리 방식이 조금 다릅니다. Live2D 캐릭터를 반투명 상태로 그리고 싶은 경우에는 후자의 오프스크린 버퍼를 이용해야합니다.

    1. 스크린에 Live2D를 직접 렌더링하는 경우

 불투명 3D 폴리곤을 모두 렌더링한 다음에 Live2D 렌더링 명령을 수행합니다. Live2D 모델이 3D 객체들 앞뒤에 겹쳐져있는 상태를 표현하기 위해서는 기존 깊이 버퍼를 이용하는 방식으로는 매우 복잡하기 때문에, 애플리케이션에 맞는 특별한 테크닉이 필요합니다.
 2D 게임에서는 Live2D 캐릭터가 반투명으로 표시되는 경우가 없다면 일반적인 방식을 사용해도 문제가 없습니다.

    2.오프스크린 (렌더 텍스쳐)에 Live2D를 렌더링하는 경우

 프레임 버퍼 오브젝트(FBO)등의 오프스크린에 Live2D를 렌더링하고나서, 스크린에 렌더링하는 경우에는 아래의 프로세스가 됩니다. 이하 FBO에 대해 설명하겠습니다.

2-1 투명한 FBO에 Live2D를 렌더링
2-2 FBO를 스크린에 렌더링 (일반적인 투명도 있는 텍스쳐 평면을 렌더링하는 것과 같은 방법을 이용)
FBO에 Live2D를 렌더링한 후 FBO를 반투명으로 스크린에 렌더링하는 것으로 Live2D 모델을 완벽하게 반투명으로 렌더링할 수 있습니다.
(1번 방법인 스크린에 렌더링하는 방식으로 반투명을 표현할 경우, 각 레이어가 비쳐보입니다. 예를들면 얼굴에 가려야하는 뒷머리가 비쳐보이는 현상)

※오프스크린, 텍스쳐가 premultiplied (사전에 RGB에 알파 값을 미리 적용하는 방식) 가 아닌 환경에서는 , 1. 색이 약간 이상함, 2. 캐릭터 주변에 살짝 색깔이 남아있을 수 있습니다.

Comments