호흡

업데이트: 2022/10/06

OW에서 모델에 호흡을 시키려면 CubismBreath를 이용합니다.
파라미터를 주기적으로 동작시킬 수 있으므로 호흡 외에 다양한 것에 응용시킬 수도 있습니다.

적용할 파라미터는 임의로 지정할 수 있습니다.
또 파라미터마다 주기, 파라미터값의 범위, 값을 적용할 때의 Weight값을 지정하는 것도 가능합니다.

CubismBreath 사용

CubismBreath 인스턴스 생성

CubismBreath 인스턴스를 생성하려면 Native(C++)의 CubismBreath::Create 함수 또는 Web(TypeScript), Java의 CubismBreath.create 함수를 사용합니다.

// C++
CubismBreath* breath = CubismBreath::Create();
// TypeScript
let breath: CubismBreath = CubismBreath.create();
// Java
CubismBreath breath = CubismBreath.create();

파라미터 지정

호흡을 설정할 파라미터를 지정하려면 Native(C++)의 CubismBreath::BreathParameterData 구조체 또는 Web(TypeScript), Java의 BreathParameterData 클래스를 사용합니다.
첫 번째 인수에 설정할 파라미터 ID를 CubismId* 형식(SDK for Web, SDK for Java의 경우 CubismId 형식)으로 전달합니다.
두 번째 인수는 주기 동작의 오프셋 값을 전달합니다. 호흡 주기 동작의 값은 사인파로 설정되며 시작 위치를 지정합니다.
세 번째 인수는 사인파의 최대 값을 설정합니다.
네 번째 인수는 사인파의 주기를 설정합니다.
다섯 번째 인수는 파라미터에 값을 적용할 때 가중치를 설정합니다.

// C++
csmVector<CubismBreath::BreathParameterData> breathParameters;

breathParameters.PushBack(CubismBreath::BreathParameterData(CubismFramework::GetIdManager()->GetId("ParamAngleX"), 0.0f, 15.0f, 6.5345f, 0.5f));
breathParameters.PushBack(CubismBreath::BreathParameterData(CubismFramework::GetIdManager()->GetId("ParamAngleY"), 0.0f, 8.0f, 3.5345f, 0.5f));
breathParameters.PushBack(CubismBreath::BreathParameterData(CubismFramework::GetIdManager()->GetId("ParamAngleZ"), 0.0f, 10.0f, 5.5345f, 0.5f));
breathParameters.PushBack(CubismBreath::BreathParameterData(CubismFramework::GetIdManager()->GetId("ParamBodyAngleX"), 0.0f, 4.0f, 15.5345f, 0.5f));
breathParameters.PushBack(CubismBreath::BreathParameterData(CubismFramework::GetIdManager()->GetId("ParamBreath"), 0.5f, 0.5f, 3.2345f, 0.5f));

breath->SetParameters(breathParameters);
// TypeScript
const breathParameters: csmVector<BreathParameterData> = new csmVector();

breathParameters.pushBack(new BreathParameterData(CubismFramework.getIdManager().getId("ParamAngleX"), 0.0, 15.0, 6.5345, 0.5));
breathParameters.pushBack(new BreathParameterData(CubismFramework.getIdManager().getId("ParamAngleY"), 0.0, 8.0, 3.5345, 0.5));
breathParameters.pushBack(new BreathParameterData(CubismFramework.getIdManager().getId("ParamAngleZ"), 0.0, 10.0, 5.5345, 0.5));
breathParameters.pushBack(new BreathParameterData(CubismFramework.getIdManager().getId("ParamBodyAngleX"), 0.0, 4.0, 15.5345, 0.5));
breathParameters.pushBack(new BreathParameterData(CubismFramework.getIdManager().getId("ParamBreath"), 0.5, 0.5, 3.2345, 1));

breath.setParameters(breathParameters);
// Java
List<CubismBreath.BreathParameterData> breathParameters = new ArrayList<>();

breathParameters.add(new CubismBreath.BreathParameterData(CubismFramework.getIdManager().getId("ParamAngleX"), 0.0f, 15.0f, 6.5345f, 0
breathParameters.add(new CubismBreath.BreathParameterData(CubismFramework.getIdManager().getId("ParamAngleY"), 0.0f, 8.0f, 3.5345f, 0.
breathParameters.add(new CubismBreath.BreathParameterData(CubismFramework.getIdManager().getId("ParamAngleZ"), 0.0f, 10.0f, 5.5345f, 0
breathParameters.add(new CubismBreath.BreathParameterData(CubismFramework.getIdManager().getId("ParamBodyAngleX"), 0.0f, 4.0f, 15.5345
breathParameters.add(new CubismBreath.BreathParameterData(CubismFramework.getIdManager().getId("ParamBreath"), 0.5f, 0.5f, 3.2345f, 0.

_breath.setParameters(breathParameters);

모델에 값 적용

호흡을 적용하려면 Native(C++)의 CubismBreath::UpdateParameters 함수, Web(TypeScript), Java의 CubismBreath.updateParameters 함수를 사용합니다.

첫 번째 인수는 대상 모델, 두 번째 인수는 마지막 업데이트 이후의 차이 시간을 넣습니다.

// C++
if (breath ! = NULL)
{
    breath->UpdateParameters(cubismModel, deltaTimeSeconds);
}
// TypeScript
if (this._breath ! = null) {
  this._breath.updateParameters(this._model, deltaTimeSeconds);
}
// Java
if (breath ! = null) {
    breath.updateParameters(cubismModel, deltaTimeSeconds);
}

CubismBreath 파기

모델이 해제될 때 CubismBreath 인스턴스도 파기해야 합니다.

// C++
CubismBreath::Delete(breath);
// TypeScript
CubismBreath.delete(breath);

Java에서는 가비지 콜렉션에 해방을 맡기는 방침이므로 파기 절차는 불필요합니다.

이 기사에 관한 의견 및 요청사항을 보내 주시기 바랍니다.