모델 정보 (Java)

[마지막 갱신일: 2022/10/06]

Cubism SDK for Java는 현재 알파 버전입니다. beta판이나 정식판으로 사양이 바뀌는 경우도 있습니다.

 

 

 

모델 정보 편집 정보

모델 정보는 기본적으로 Cubism Editor의 모델 작업 공간에서 생성됩니다.
파라미터에 대한 정점 등의 움직임은 .moc3 파일에 기록됩니다.
그 외의 물리 연산이나 아트 메쉬에 붙일 수 있는 유저 데이터 등은 다른 파일로서 출력되어, 모델에 대한 모든 파일 참조를 기록하는 것이 .model3.json 파일입니다.

이들은 .moc3 파일을 출력할 때 동시에 출력할 수 있습니다. 「임베디드 데이터 내보내기」
또한 Cubism Viewer (for OW)를 사용하여 모션, 표정 파일, 포즈 파일의 내장 설정을 추가할 수 있습니다.

 

Framework를 사용하여 .model3.json 파일에서 로드

Framework를 이용한 로드에서는 모델에 필요한 정보를 .model3.json 파일에서 추출하고, CubismUserModel 클래스를 상속한 인스턴스를 정비하고 이용하는 것을 상정하고 있습니다.

ICubismModelSetting 클래스로 추출한 각 요소는 CubismUserModel.load~~ 계열 함수로 로드할 수 있습니다.

.model3.json 파일의 전체 로드 흐름은 샘플의 LAppmodel.loadAssets 함수에서 다음 함수의 흐름을 따라가면 파악하기 쉽습니다.

  • LAppModel.setupModel 함수
  • CubismUserModel.createRenderer 함수
  • LAppModel.setupTextures 함수

 

인스턴스 생성(.moc3 파일 로드)

먼저 .moc3 파일을 메모리에 로드합니다.
읽은 버퍼를 CubismMoc.create 함수에 전달하고 먼저 CubismMoc 인스턴스를 만듭니다.
그런 다음 CubismMoc.createModel 함수를 호출하여 CubismModel 인스턴스를 만듭니다.
이 CubismModel 인스턴스로부터 파라미터의 조작이나 draw를 위한 정보 취득등을 실시합니다.

CubismMoc.createModel 함수는 CubismMoc 내부에서 함수에 의해 생성된 Model 수를 세고 있으며, CubismMoc을 파기할 때는 그 CubismMoc에서 생성한 CubismModel을 모두 파기해 둘 필요가 있습니다.

 

 

그래픽 환경 연결

Framework는 모델의 텍스쳐 정보를 그래픽 API에 의존하지 않기 위해 CubismRenderer 클래스의 파생 클래스를 사용합니다.
모델과 관련된 그래픽 관련 정보는 모두 CubismRenderer 클래스의 파생 클래스에서 관리합니다.
SDK for Java R1 alpha1 시점에서는 Android에만 대응하고 있기 때문에 파생 클래스가 관리할 필요는 없습니다만, 장래의 그래픽스 API 추가의 가능성, 및 기존 SDK와의 사양 통일의 면을 고려해 이러한 사양으로하고 있습니다.

먼저 생성하고 싶은 그래픽 환경의 종류를 RendererType 열거형으로 지정해, CubismUserModel.createRenderer 함수의 인수로 해 호출합니다.
(SDK for Java R1 alpha1에서는 Android에만 대응하고 있습니다.)
createRenderer 함수 내에서 인수에 해당하는 그래픽 API에 대한 파생 클래스를 생성하고 CubismRenderer.initialize 함수에서 CubismModel 인스턴스를 등록하여 CubismRenderer 인스턴스와 CubismModel 인스턴스를 연결합니다.

 

 

텍스쳐 연관

Framework에서 모델이 가지는 텍스쳐는 CubismRenderer 클래스의 파생 클래스가 관리합니다.
Android OpenGL ES 2.0의 처리에서는 CubismRenderer 클래스의 파생 클래스인 CubismRendererAndroid 클래스내의 CubismRendererAndroid.bindTexture 함수를 사용해 등록하고 있습니다.
첫 번째 인수는 모델의 텍스쳐 번호, Editor에서 텍스쳐 아틀라스의 번호로 확인할 수 있습니다.
두 번째 인수는 텍스쳐 OpenGL ES 2.0의 관리 번호입니다.

 

 

표시 위치와 크기 지정

지금까지 설정하면 모델을 그릴 수 있지만 대부분의 경우 표시 위치나 축척이 너무 달라 그대로는 화면에는 표시되지 않습니다.
CubismModel.getDrawableVertexPositions 함수로 반환되는 정점 범위에 대해서는 「DrawableVertexPosition 범위」를 참조하십시오.
크기를 조정하려면 CubismModelMatrix 클래스와 CubismModel.getCanvasWidth 함수, CubismModel.getCanvasHeight 함수를 사용합니다.

이 행렬은 그리기 전에 Projection 행렬에 곱해지고 MVP 행렬로 렌더러로 전달됩니다.

 

 

정점 업데이트

CubismModel 인스턴스에 대한 파라미터 조작을 아트 메쉬의 정점에 반영하기 위해 CubismModel.update 함수를 실행합니다.

 

 

드로잉

드로잉은 CubismModel 인스턴스에서 실행되지 않고 연결되어 있는 렌더러에 명령합니다.

 

 

폐기

인스턴스를 삭제하려면 모든 CubismModel을 삭제한 다음 CubismMoc을 삭제해야 합니다.
이 순서를 지키기 위해, CubismModel의 파기는 CubismMoc.deleteModel 함수로 삭제합니다.
이 함수를 경유하지 않는 경우는 CubismMoc 내부에서 확인하고 있는 모델의 수가 일치하지 않기 때문에 경고가 나옵니다.

 

 

CubismModel 클래스에서 모델에 존재하지 않는 파라미터 ID 사용

CubismModel 클래스의 파라미터, 파트 불투명도의 조작에서는, .moc 파일에 존재하지 않는 ID에서도 취급을 실시하는 기능이 있습니다.
이 기능은 CubismMotion 클래스, CubismPose 클래스 등이 이용하고 있으며, 이용해 새로운 기구를 작성할 때에는 기존의 기능과 충돌하지 않게 사용하는 ID를 주의해 주세요.
또한 Framework를 읽을 때 작성된 매개변수를 사용하여 다른 기능과 연동할 가능성에 유의하십시오.
※존재하지 않는 최대치, 최소치, 초기치에의 액세스는 에러가 발생합니다

© 2010 - 2022 Live2D Inc.