呼吸

最終更新: 2022年10月6日

使用CubismBreath在OW中使模型呼吸。
由于可以使参数周期性地动作,因此不仅可以应用于呼吸,还可以应用于各种项目。

可以任意指定要应用的参数。
您还可以为各参数指定周期、参数值的范围、应用数值时的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类型)传递。
将周期动作的偏移值传递给第2参数。从正弦波设置呼吸周期动作的值,并指定其开始位置。
在第3参数中设置正弦波的最大值。
在第4参数中设置正弦波的周期。
在第5参数中设置将值应用于参数时的权重。

// 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函数。

在第1参数中输入对象模型,在第2参数中输入与上次更新的时间差。

// 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不需要放弃过程,因为政策是将释放留给垃圾回收。

请问这篇文章对您有帮助吗?
关于本报道,敬请提出您的意见及要求。