feat: add mouth open and close

This commit is contained in:
冯琪 2025-03-09 18:25:31 +08:00
parent f2d974e235
commit 0738e12e55
40 changed files with 6928 additions and 7 deletions

View File

@ -69,6 +69,7 @@
position: absolute;
bottom: 0;
right: 0;
overflow: show;
}
/*
#live2d-container {

View File

@ -81,6 +81,7 @@
<option value="Natori">Natori</option>
<option value="Rice">Rice</option>
<option value="Wanko">Wanko</option>
<option value="狐狸2.00">Fox</option>
</select>
</div>

View File

@ -345,6 +345,7 @@ export class AITeacherApp {
// 创建URL并设置到音频播放器
const audioUrl = URL.createObjectURL(blob);
// self.Live2DController.playAudio(audioUrl)
this.audioPlayer.src = audioUrl;
this.audioPlayer.style.display = 'block';

View File

@ -18,6 +18,10 @@ export class Live2DController {
this.offsetX = 0;
this.offsetY = 0;
this.model_setting = null;
this.audioContext = null;
this.analyzerNode = null;
this.frequencyData = new Uint8Array(0);
this.audioSource = null;
this.init();
// window.addEventListener('resize', this.onWindowResize.bind(this));
window.addEventListener('resize', () => {
@ -54,7 +58,7 @@ export class Live2DController {
try {
this.model_setting.model = "Mao";
this.model = await this.loadModel(this.model_setting.model);
await this.loadModel(this.model_setting.model);
} catch (error) {
console.error('Error loading Live2D model:', error);
}
@ -84,7 +88,6 @@ export class Live2DController {
this.setLive2dContainerSize();
// remove ws connection
// await this.setupWebSocket();
return this;
}
@ -97,17 +100,65 @@ export class Live2DController {
const scale = this.calculateScale();
this.model.scale.set(scale);
this.model.position.set(this.app.screen.width / 2, this.app.screen.height * 0.5);
if(this.model_setting[this.model_setting.model].position){
this.model.position.set(this.app.screen.width * this.model_setting[this.model_setting.model].position.x, this.app.screen.height * this.model_setting[this.model_setting.model].position.y);
}else{
this.model.position.set(this.app.screen.width / 2, this.app.screen.height * 0.5);
}
}
setMouthOpenY(v){
// v = Math.max(0,Math.min(1,-v));
v = Math.max(0,Math.min(1,Math.abs(v)));
this.model.internalModel.coreModel.setParameterValueById('ParamMouthOpenY',v);
}
startAudioAnalysis() {
if (!this.audioContext) {
this.audioContext = new (window.AudioContext || window.webkitAudioContext)();
}
this.analyzerNode = this.audioContext.createAnalyser();
this.analyzerNode.fftSize = 256;
this.frequencyData = new Uint8Array(this.analyzerNode.frequencyBinCount);
this.audioSource.connect(this.analyzerNode);
this.analyzerNode.connect(this.audioContext.destination);
this.analyzeAudio();
}
analyzeAudio() {
if (!this.audioContext) return;
this.analyzerNode.getByteFrequencyData(this.frequencyData);
const frequencySum = this.frequencyData.reduce((sum, value) => sum + value, 0);
const avgFrequency = frequencySum / this.frequencyData.length;
const mouthOpenness = (avgFrequency - 100) / 256;
this.setMouthOpenY(mouthOpenness);
requestAnimationFrame(() => this.analyzeAudio());
}
playAudio(audioFile) {
// const audioFile = './received_audio.wav';
if(!audioFile) audioFile = './received_audio.wav';
const audio = new Audio(audioFile);
if(!this.audioContext) {
this.audioContext = new (window.AudioContext || window.webkitAudioContext)();
}
this.audioSource = this.audioContext.createMediaElementSource(audio);
this.startAudioAnalysis();
audio.play();
// 结束播放后设置嘴巴闭合
audio.onended = () => {
this.setMouthOpenY(
0
);
console.log('audio ended');
};
}
async loadModel(modelName) {
const modelPath = `resouces/${modelName}/${modelName}.model3.json`
this.model_setting.model = modelName;
console.log('loadModel', modelPath);
if (this.model) {
// 取消注册 ticker这里要等待 ticker 停止
this.app.ticker.remove(this.model.update);
this.app.stage.removeChild(this.model);
this.initialized = false;
@ -126,6 +177,11 @@ export class Live2DController {
this.model = null;
this.model = model;
this.initialized = true;
// this.modelSpeak();
// 禁用鼠标交互
this.app.renderer.plugins.interaction.destroy();
this.setLive2dContainerSize();
this.playAudio(0);
return model;
}
@ -168,5 +224,41 @@ export class Live2DController {
this.onWindowResize();
}
modelSpeak(){
// function talk(model, audio) {
// var audio_link = audio; //[Optional arg, can be null or empty] [relative or full url path] [mp3 or wav file] "./Keira.wav"
// var volume = 1; // [Optional arg, can be null or empty] [0.0 - 1.0]
// var expression = 8; // [Optional arg, can be null or empty] [index|name of expression]
// var resetExpression = true; // [Optional arg, can be null or empty] [true|false] [default: true] [if true, expression will be reset to default after animation is over]
// var crossOrigin = "anonymous"; // [Optional arg, to use not same-origin audios] [DEFAULT: null]
// model.speak(audio_link, {
// volume: volume,
// expression: expression,
// resetExpression: resetExpression,
// crossOrigin: crossOrigin
// })
// model.speak(audio_link)
// model.speak(audio_link, {volume: volume})
// model.speak(audio_link, {expression: expression, resetExpression: resetExpression})
// }
// audio path : ./received_audio.wav
let audio = "./received_audio.wav";
if (!this.model || !this.initialized) {
console.error('模型未加载或未初始化');
return;
}
try {
if (this.model.speak && typeof this.model.speak === 'function') {
console.log(`播放动作: ${audio}`);
this.model.speak(audio);
} else {
console.error('模型没有动作功能');
}
} catch (error) {
console.error('播放动作时出错:', error);
}
}
}

View File

@ -19,5 +19,9 @@
},
"Wanko":{
"scale": 1200.0
},
"狐狸2.00":{
"scale": 2000.0,
"position": {"x": 0.5, "y": 1.9}
}
}

View File

@ -0,0 +1,212 @@
[
[
],
[
],
[
],
[
{
"FaceTrackerDataName" : 3,
"CubismParameter" : "ParamAngleX",
"FaceTrackerDataMin" : -30,
"FaceTrackerDataMax" : 30,
"ParameterMin" : -30,
"ParameterMax" : 30,
"Smooth" : 0.15
},
{
"FaceTrackerDataName" : 3,
"CubismParameter" : "ParamBodyAngleX",
"FaceTrackerDataMin" : -30,
"FaceTrackerDataMax" : 30,
"ParameterMin" : -10,
"ParameterMax" : 10,
"Smooth" : 0.2
}
],
[
{
"FaceTrackerDataName" : 4,
"CubismParameter" : "ParamAngleY",
"FaceTrackerDataMin" : -30,
"FaceTrackerDataMax" : 30,
"ParameterMin" : -30,
"ParameterMax" : 30,
"Smooth" : 0.15
},
{
"FaceTrackerDataName" : 4,
"CubismParameter" : "ParamBodyAngleY",
"FaceTrackerDataMin" : -30,
"FaceTrackerDataMax" : 30,
"ParameterMin" : -10,
"ParameterMax" : 10,
"Smooth" : 0.2
}
],
[
{
"FaceTrackerDataName" : 5,
"CubismParameter" : "ParamAngleZ",
"FaceTrackerDataMin" : -30,
"FaceTrackerDataMax" : 30,
"ParameterMin" : -30,
"ParameterMax" : 30,
"Smooth" : 0.3
},
{
"FaceTrackerDataName" : 5,
"CubismParameter" : "ParamBodyAngleZ",
"FaceTrackerDataMin" : -30,
"FaceTrackerDataMax" : 30,
"ParameterMin" : -10,
"ParameterMax" : 10,
"Smooth" : 0.2
}
],
[
{
"FaceTrackerDataName" : 6,
"CubismParameter" : "ParamMouthForm",
"FaceTrackerDataMin" : -1,
"FaceTrackerDataMax" : 1,
"ParameterMin" : -1,
"ParameterMax" : 1,
"Smooth" : 0.2
},
{
"FaceTrackerDataName" : 6,
"CubismParameter" : "ParamEyeLSmile",
"FaceTrackerDataMin" : -1,
"FaceTrackerDataMax" : 1,
"ParameterMin" : 0,
"ParameterMax" : 1,
"Smooth" : 0.2
},
{
"FaceTrackerDataName" : 6,
"CubismParameter" : "ParamEyeRSmile",
"FaceTrackerDataMin" : -1,
"FaceTrackerDataMax" : 1,
"ParameterMin" : 0,
"ParameterMax" : 1,
"Smooth" : 0.2
},
{
"FaceTrackerDataName" : 6,
"CubismParameter" : "ParamCheek",
"FaceTrackerDataMin" : -1,
"FaceTrackerDataMax" : 1,
"ParameterMin" : 0,
"ParameterMax" : 1,
"Smooth" : 0.2
}
],
[
],
[
{
"FaceTrackerDataName" : 8,
"CubismParameter" : "ParamMouthOpenY",
"FaceTrackerDataMin" : 0,
"FaceTrackerDataMax" : 0.6,
"ParameterMin" : 0,
"ParameterMax" : 1,
"Smooth" : 0.1
}
],
[
{
"FaceTrackerDataName" : 9,
"CubismParameter" : "ParamBrowLY",
"FaceTrackerDataMin" : -1,
"FaceTrackerDataMax" : 1,
"ParameterMin" : -1,
"ParameterMax" : 1,
"Smooth" : 0.1
}
],
[
{
"FaceTrackerDataName" : 10,
"CubismParameter" : "ParamBrowRY",
"FaceTrackerDataMin" : -1,
"FaceTrackerDataMax" : 1,
"ParameterMin" : -1,
"ParameterMax" : 1,
"Smooth" : 0.1
}
],
[
{
"FaceTrackerDataName" : 11,
"CubismParameter" : "ParamBrowLAngle",
"FaceTrackerDataMin" : -1,
"FaceTrackerDataMax" : 1,
"ParameterMin" : -1,
"ParameterMax" : 1,
"Smooth" : 0.1
},
{
"FaceTrackerDataName" : 11,
"CubismParameter" : "ParamBrowRAngle",
"FaceTrackerDataMin" : -1,
"FaceTrackerDataMax" : 1,
"ParameterMin" : -1,
"ParameterMax" : 1,
"Smooth" : 0.1
}
],
[
],
[
{
"FaceTrackerDataName" : 13,
"CubismParameter" : "ParamEyeLOpen",
"FaceTrackerDataMin" : 0.2,
"FaceTrackerDataMax" : 1,
"ParameterMin" : 0,
"ParameterMax" : 2,
"Smooth" : 0.05
}
],
[
{
"FaceTrackerDataName" : 14,
"CubismParameter" : "ParamEyeROpen",
"FaceTrackerDataMin" : 0.2,
"FaceTrackerDataMax" : 1,
"ParameterMin" : 0,
"ParameterMax" : 2,
"Smooth" : 0.05
}
],
[
{
"FaceTrackerDataName" : 15,
"CubismParameter" : "ParamEyeBallX",
"FaceTrackerDataMin" : -1,
"FaceTrackerDataMax" : 1,
"ParameterMin" : -1,
"ParameterMax" : 1,
"Smooth" : 0.1
}
],
[
{
"FaceTrackerDataName" : 16,
"CubismParameter" : "ParamEyeBallY",
"FaceTrackerDataMin" : -1,
"FaceTrackerDataMax" : 1,
"ParameterMin" : -1,
"ParameterMax" : 1,
"Smooth" : 0.1
}
],
[
],
[
]
]

View File

@ -0,0 +1,16 @@
set_special_pose_param 狐狸2.00 'Param52' 0 1 1
set_special_pose_param 狐狸2.00 'Param49' 0 1 2
set_special_pose_param 狐狸2.00 'Param51' 0 1 3
set_special_pose_param 狐狸2.00 'Param50' 0 1 4
set_special_pose_param 狐狸2.00 'Param47' 0 1 5
set_special_pose_param 狐狸2.00 'Param48' 0 1 6
set_special_pose_param 狐狸2.00 'Param9' 0 1 7
set_special_pose_param 狐狸2.00 'Param39' 0 1 8
set_special_pose_param 狐狸2.00 'Param54' 0 1 9
set_special_pose_param 狐狸2.00 'Param38' 0 1 10
set_special_action_anim 狐狸2.00 'er1 m.motion3.json' 0 1 12
set_special_action_anim 狐狸2.00 'er2 k.motion3.json' 0 1 13
set_special_action_anim 狐狸2.00 '摇动小发.motion3.json' 0 1 14

View File

@ -0,0 +1,10 @@
{
"Type": "Live2D Expression",
"Parameters": [
{
"Id": "Param49",
"Value": 1,
"Blend": "Add"
}
]
}

View File

@ -0,0 +1,10 @@
{
"Type": "Live2D Expression",
"Parameters": [
{
"Id": "Param51",
"Value": 1,
"Blend": "Add"
}
]
}

View File

@ -0,0 +1,10 @@
{
"Type": "Live2D Expression",
"Parameters": [
{
"Id": "ParamMouthForm",
"Value": -1,
"Blend": "Add"
}
]
}

View File

@ -0,0 +1,10 @@
{
"Type": "Live2D Expression",
"Parameters": [
{
"Id": "Param40",
"Value": 1,
"Blend": "Add"
}
]
}

View File

@ -0,0 +1,10 @@
{
"Type": "Live2D Expression",
"Parameters": [
{
"Id": "Param40",
"Value": -1,
"Blend": "Add"
}
]
}

View File

@ -0,0 +1,10 @@
{
"Type": "Live2D Expression",
"Parameters": [
{
"Id": "Param41",
"Value": 1,
"Blend": "Add"
}
]
}

View File

@ -0,0 +1,10 @@
{
"Type": "Live2D Expression",
"Parameters": [
{
"Id": "Param41",
"Value": -1,
"Blend": "Add"
}
]
}

View File

@ -0,0 +1,10 @@
{
"Type": "Live2D Expression",
"Parameters": [
{
"Id": "Param39",
"Value": 1,
"Blend": "Add"
}
]
}

View File

@ -0,0 +1,10 @@
{
"Type": "Live2D Expression",
"Parameters": [
{
"Id": "Param47",
"Value": 1,
"Blend": "Add"
}
]
}

View File

@ -0,0 +1,10 @@
{
"Type": "Live2D Expression",
"Parameters": [
{
"Id": "ParamMouthForm",
"Value": 1,
"Blend": "Add"
}
]
}

View File

@ -0,0 +1,10 @@
{
"Type": "Live2D Expression",
"Parameters": [
{
"Id": "Param52",
"Value": 1,
"Blend": "Add"
}
]
}

View File

@ -0,0 +1,10 @@
{
"Type": "Live2D Expression",
"Parameters": [
{
"Id": "Param48",
"Value": 1,
"Blend": "Add"
}
]
}

View File

@ -0,0 +1,15 @@
{
"Type": "Live2D Expression",
"Parameters": [
{
"Id": "ParamBrowRAngle",
"Value": -1,
"Blend": "Add"
},
{
"Id": "ParamBrowLAngle",
"Value": -1,
"Blend": "Add"
}
]
}

View File

@ -0,0 +1,120 @@
{
"Type": "Live2D Expression",
"Parameters": [
{
"Id": "Param_Angle_Rotation_1_ArtMesh182",
"Value": 0,
"Blend": "Add"
},
{
"Id": "Param_Angle_Rotation_7_ArtMesh183",
"Value": 0,
"Blend": "Add"
},
{
"Id": "Param_Angle_Rotation_5_ArtMesh183",
"Value": 0,
"Blend": "Add"
},
{
"Id": "Param_Angle_Rotation_4_ArtMesh183",
"Value": 0,
"Blend": "Add"
},
{
"Id": "Param_Angle_Rotation_3_ArtMesh183",
"Value": 0,
"Blend": "Add"
},
{
"Id": "Param_Angle_Rotation_1_ArtMesh183",
"Value": 0,
"Blend": "Add"
},
{
"Id": "Param_Angle_Rotation_9_ArtMesh248",
"Value": 0,
"Blend": "Add"
},
{
"Id": "Param_Angle_Rotation_7_ArtMesh248",
"Value": 0,
"Blend": "Add"
},
{
"Id": "Param_Angle_Rotation_6_ArtMesh248",
"Value": 0,
"Blend": "Add"
},
{
"Id": "Param_Angle_Rotation_4_ArtMesh248",
"Value": 0,
"Blend": "Add"
},
{
"Id": "Param_Angle_Rotation_2_ArtMesh248",
"Value": 0,
"Blend": "Add"
},
{
"Id": "Param_Angle_Rotation_1_ArtMesh248",
"Value": 0,
"Blend": "Add"
},
{
"Id": "Param_Angle_Rotation_6_ArtMesh182",
"Value": 0,
"Blend": "Add"
},
{
"Id": "Param_Angle_Rotation_5_ArtMesh182",
"Value": 0,
"Blend": "Add"
},
{
"Id": "Param_Angle_Rotation_4_ArtMesh182",
"Value": 0,
"Blend": "Add"
},
{
"Id": "Param_Angle_Rotation_3_ArtMesh182",
"Value": 0,
"Blend": "Add"
},
{
"Id": "Param_Angle_Rotation_7_ArtMesh182",
"Value": 0,
"Blend": "Add"
},
{
"Id": "Param_Angle_Rotation_2_ArtMesh182",
"Value": 0,
"Blend": "Add"
},
{
"Id": "Param_Angle_Rotation_3_ArtMesh248",
"Value": 0,
"Blend": "Add"
},
{
"Id": "Param_Angle_Rotation_8_ArtMesh248",
"Value": 0,
"Blend": "Add"
},
{
"Id": "Param_Angle_Rotation_5_ArtMesh248",
"Value": 0,
"Blend": "Add"
},
{
"Id": "Param_Angle_Rotation_6_ArtMesh183",
"Value": 0,
"Blend": "Add"
},
{
"Id": "Param_Angle_Rotation_2_ArtMesh183",
"Value": 0,
"Blend": "Add"
}
]
}

View File

@ -0,0 +1,10 @@
{
"Type": "Live2D Expression",
"Parameters": [
{
"Id": "Param9",
"Value": 1,
"Blend": "Add"
}
]
}

View File

@ -0,0 +1,10 @@
{
"Type": "Live2D Expression",
"Parameters": [
{
"Id": "Param46",
"Value": 1,
"Blend": "Add"
}
]
}

View File

@ -0,0 +1,10 @@
{
"Type": "Live2D Expression",
"Parameters": [
{
"Id": "Param46",
"Value": -1,
"Blend": "Add"
}
]
}

View File

@ -0,0 +1,10 @@
{
"Type": "Live2D Expression",
"Parameters": [
{
"Id": "Param54",
"Value": 1,
"Blend": "Add"
}
]
}

View File

@ -0,0 +1,10 @@
{
"Type": "Live2D Expression",
"Parameters": [
{
"Id": "Param50",
"Value": 1,
"Blend": "Add"
}
]
}

View File

@ -0,0 +1,15 @@
{
"Type": "Live2D Expression",
"Parameters": [
{
"Id": "ParamBrowLAngle",
"Value": 1,
"Blend": "Add"
},
{
"Id": "ParamBrowRAngle",
"Value": 1,
"Blend": "Add"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

View File

@ -0,0 +1,14 @@
{
"FileMetadata": {
"LastSavedVTubeStudioVersion": "1.23.5",
"LastSavedPlatform": "Steam",
"LastSavedDateUTC": "Wednesday, 18 January 2023, 14:14:52",
"LastSavedDateLocalTime": "Wednesday, 18 January 2023, 22:14:52",
"LastSavedDateUnixMillisecondTimestamp": "1674051292326"
},
"SceneName": "",
"SceneGroupName": "",
"SceneModel": "",
"SceneID": "",
"Items": []
}

View File

@ -0,0 +1,116 @@
{
"Version": 3,
"Meta": {
"Duration": 3.333,
"Fps": 30.0,
"Loop": true,
"AreBeziersRestricted": false,
"CurveCount": 2,
"TotalSegmentCount": 12,
"TotalPointCount": 38,
"UserDataCount": 0,
"TotalUserDataSize": 0
},
"Curves": [
{
"Target": "Parameter",
"Id": "Param40",
"Segments": [
0,
0,
1,
0.178,
0,
0.356,
1,
0.533,
1,
1,
0.744,
1,
0.956,
-0.7,
1.167,
-0.7,
1,
1.344,
-0.7,
1.522,
1,
1.7,
1,
1,
1.911,
1,
2.122,
-0.6,
2.333,
-0.6,
1,
2.544,
-0.6,
2.756,
0.6,
2.967,
0.6,
1,
3.089,
0.6,
3.211,
0,
3.333,
0
]
},
{
"Target": "Parameter",
"Id": "Param41",
"Segments": [
0,
0,
1,
0.222,
0,
0.444,
-1,
0.667,
-1,
1,
0.9,
-1,
1.133,
0.7,
1.367,
0.7,
1,
1.533,
0.7,
1.7,
-0.8,
1.867,
-0.8,
1,
2.1,
-0.8,
2.333,
0.7,
2.567,
0.7,
1,
2.778,
0.7,
2.989,
-0.6,
3.2,
-0.6,
1,
3.244,
-0.6,
3.289,
0,
3.333,
0
]
}
]
}

View File

@ -0,0 +1,129 @@
{
"Version": 3,
"Meta": {
"Duration": 2.133,
"Fps": 30.0,
"Loop": true,
"AreBeziersRestricted": false,
"CurveCount": 2,
"TotalSegmentCount": 15,
"TotalPointCount": 43,
"UserDataCount": 0,
"TotalUserDataSize": 0
},
"Curves": [
{
"Target": "Parameter",
"Id": "Param40",
"Segments": [
0,
0,
1,
0.056,
0,
0.111,
1,
0.167,
1,
1,
0.311,
1,
0.456,
-0.7,
0.6,
-0.7,
1,
0.722,
-0.7,
0.844,
1,
0.967,
1,
1,
1.111,
1,
1.256,
-1,
1.4,
-1,
1,
1.456,
-1,
1.511,
-1,
1.567,
-1,
1,
1.667,
-1,
1.767,
0.6,
1.867,
0.6,
1,
1.944,
0.6,
2.022,
0,
2.1,
0,
0,
2.133,
0
]
},
{
"Target": "Parameter",
"Id": "Param41",
"Segments": [
0,
0,
1,
0.078,
0,
0.156,
-1,
0.233,
-1,
1,
0.4,
-1,
0.567,
1,
0.733,
1,
1,
0.856,
1,
0.978,
-0.8,
1.1,
-0.8,
1,
1.256,
-0.8,
1.411,
1,
1.567,
1,
1,
1.7,
1,
1.833,
-0.6,
1.967,
-0.6,
1,
2.011,
-0.6,
2.056,
0,
2.1,
0,
0,
2.133,
0
]
}
]
}

View File

@ -0,0 +1,191 @@
{
"Version": 3,
"Meta": {
"Duration": 13,
"Fps": 30.0,
"Loop": true,
"AreBeziersRestricted": false,
"CurveCount": 3,
"TotalSegmentCount": 25,
"TotalPointCount": 66,
"UserDataCount": 0,
"TotalUserDataSize": 0
},
"Curves": [
{
"Target": "Parameter",
"Id": "Param44",
"Segments": [
0,
0,
0,
0.067,
0,
1,
0.222,
0,
0.378,
-1,
0.533,
-1,
1,
0.689,
-1,
0.844,
0.508,
1,
0.8,
1,
1.106,
1,
1.267,
1,
1.4,
1,
1,
1.522,
1,
1.644,
0.712,
1.767,
0.4,
1,
1.933,
-0.026,
2.1,
-0.516,
2.267,
-0.7,
1,
2.444,
-0.896,
2.622,
-0.9,
2.8,
-0.9,
1,
2.833,
-0.9,
2.867,
0,
2.9,
0,
0,
13,
0
]
},
{
"Target": "Parameter",
"Id": "Param45",
"Segments": [
0,
0,
0,
0.1,
0,
1,
0.256,
0,
0.411,
1,
0.567,
1,
1,
0.722,
1,
0.878,
0.974,
1.033,
0.8,
1,
1.167,
0.651,
1.3,
0.427,
1.433,
0.1,
1,
1.556,
-0.2,
1.678,
-0.7,
1.8,
-0.7,
1,
1.967,
-0.7,
2.133,
-0.7,
2.3,
-0.7,
1,
2.478,
-0.7,
2.656,
0.2,
2.833,
0.2,
1,
2.867,
0.2,
2.9,
0,
2.933,
0,
0,
13,
0
]
},
{
"Target": "Parameter",
"Id": "Param13",
"Segments": [
0,
0,
0,
0.167,
0,
1,
0.322,
0,
0.478,
1,
0.633,
1,
1,
0.833,
1,
1.033,
0.982,
1.233,
0.6,
1,
1.422,
0.239,
1.611,
-0.4,
1.8,
-0.4,
1,
2.044,
-0.4,
2.289,
0.5,
2.533,
0.5,
1,
2.667,
0.5,
2.8,
0,
2.933,
0,
0,
13,
0
]
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 MiB

View File

@ -0,0 +1,817 @@
{
"Version": 3,
"Parameters": [
{
"Id": "ParamAngleX",
"GroupId": "",
"Name": "角度 X"
},
{
"Id": "ParamAngleY",
"GroupId": "",
"Name": "角度 Y"
},
{
"Id": "Param44",
"GroupId": "",
"Name": "摇动 小发"
},
{
"Id": "Param45",
"GroupId": "",
"Name": "摇动 小发2"
},
{
"Id": "Param13",
"GroupId": "",
"Name": "摇动 小发3"
},
{
"Id": "Param52",
"GroupId": "",
"Name": "脸红"
},
{
"Id": "Param49",
"GroupId": "",
"Name": "爱心"
},
{
"Id": "Param51",
"GroupId": "",
"Name": "爱心2"
},
{
"Id": "Param50",
"GroupId": "",
"Name": "星星"
},
{
"Id": "Param47",
"GroupId": "",
"Name": "黑艳"
},
{
"Id": "Param48",
"GroupId": "",
"Name": "流汗"
},
{
"Id": "Param9",
"GroupId": "",
"Name": "吐舌"
},
{
"Id": "Param39",
"GroupId": "",
"Name": "鼓腮"
},
{
"Id": "Param54",
"GroupId": "",
"Name": "尾巴"
},
{
"Id": "Param38",
"GroupId": "",
"Name": "笑"
},
{
"Id": "ParamAngleZ",
"GroupId": "",
"Name": "角度 Z"
},
{
"Id": "Param40",
"GroupId": "",
"Name": "耳朵1"
},
{
"Id": "Param41",
"GroupId": "",
"Name": "耳朵2"
},
{
"Id": "ParamEyeLOpen",
"GroupId": "",
"Name": "左眼 开闭"
},
{
"Id": "ParamEyeROpen",
"GroupId": "",
"Name": "右眼"
},
{
"Id": "Param43",
"GroupId": "",
"Name": "耳朵12"
},
{
"Id": "Param42",
"GroupId": "",
"Name": "耳朵22"
},
{
"Id": "Param12",
"GroupId": "",
"Name": "耸肩"
},
{
"Id": "ParamEyeLSmile",
"GroupId": "",
"Name": "左眼 微笑"
},
{
"Id": "Param46",
"GroupId": "",
"Name": "歪嘴"
},
{
"Id": "Param53",
"GroupId": "",
"Name": "歪眉眼"
},
{
"Id": "ParamEyeRSmile",
"GroupId": "",
"Name": "右眼 微笑"
},
{
"Id": "ParamEyeBallX",
"GroupId": "",
"Name": "眼珠 X"
},
{
"Id": "ParamEyeBallY",
"GroupId": "",
"Name": "眼珠 Y"
},
{
"Id": "ParamBrowRY",
"GroupId": "",
"Name": "右眉 上下"
},
{
"Id": "ParamBrowRX",
"GroupId": "",
"Name": "右眉 左右"
},
{
"Id": "ParamBrowLX",
"GroupId": "",
"Name": "左眉 左右"
},
{
"Id": "ParamBrowLY",
"GroupId": "",
"Name": "左眉上下"
},
{
"Id": "ParamBrowLAngle",
"GroupId": "",
"Name": "左眉 角度"
},
{
"Id": "ParamBrowLForm",
"GroupId": "",
"Name": "左眉 変形"
},
{
"Id": "ParamBrowRAngle",
"GroupId": "",
"Name": "右眉 角度"
},
{
"Id": "ParamBrowRForm",
"GroupId": "",
"Name": "右眉 変形"
},
{
"Id": "ParamMouthForm",
"GroupId": "",
"Name": "嘴 变形"
},
{
"Id": "ParamMouthOpenY",
"GroupId": "",
"Name": "嘴 张开和闭合"
},
{
"Id": "ParamCheek",
"GroupId": "",
"Name": "脸颊泛红"
},
{
"Id": "ParamBodyAngleX",
"GroupId": "",
"Name": "身体旋转 X"
},
{
"Id": "ParamBodyAngleY",
"GroupId": "",
"Name": "身体旋转 Y"
},
{
"Id": "Param11",
"GroupId": "",
"Name": "胸摇动X"
},
{
"Id": "Param10",
"GroupId": "",
"Name": "胸摇动y"
},
{
"Id": "ParamBreath",
"GroupId": "",
"Name": "呼吸"
},
{
"Id": "ParamBreath2",
"GroupId": "",
"Name": "尾巴"
},
{
"Id": "ParamBodyAngleZ",
"GroupId": "",
"Name": "身体旋转 Z"
},
{
"Id": "Param14",
"GroupId": "",
"Name": "身体旋转Z2"
},
{
"Id": "Param25",
"GroupId": "ParamGroup3",
"Name": "果1"
},
{
"Id": "Param114",
"GroupId": "ParamGroup3",
"Name": "果2"
},
{
"Id": "Param27",
"GroupId": "ParamGroup3",
"Name": "果7"
},
{
"Id": "Param115",
"GroupId": "ParamGroup3",
"Name": "果8"
},
{
"Id": "Param28",
"GroupId": "ParamGroup3",
"Name": "果5"
},
{
"Id": "Param116",
"GroupId": "ParamGroup3",
"Name": "果6"
},
{
"Id": "Param26",
"GroupId": "ParamGroup3",
"Name": "果3"
},
{
"Id": "Param117",
"GroupId": "ParamGroup3",
"Name": "果4"
},
{
"Id": "Param",
"GroupId": "ParamGroup4",
"Name": "果1"
},
{
"Id": "Param3",
"GroupId": "ParamGroup4",
"Name": "果2"
},
{
"Id": "Param2",
"GroupId": "ParamGroup4",
"Name": "果3"
},
{
"Id": "Param4",
"GroupId": "ParamGroup4",
"Name": "果4"
},
{
"Id": "Param5",
"GroupId": "ParamGroup4",
"Name": "果5"
},
{
"Id": "Param6",
"GroupId": "ParamGroup4",
"Name": "果6"
},
{
"Id": "Param7",
"GroupId": "ParamGroup4",
"Name": "果7"
},
{
"Id": "Param8",
"GroupId": "ParamGroup4",
"Name": "果8"
},
{
"Id": "Param15",
"GroupId": "ParamGroup2",
"Name": "摇动发饰"
},
{
"Id": "Param16",
"GroupId": "ParamGroup2",
"Name": "摇动发饰2"
},
{
"Id": "Param17",
"GroupId": "ParamGroup2",
"Name": "摇动发饰3"
},
{
"Id": "Param18",
"GroupId": "ParamGroup2",
"Name": "摇动发饰4"
},
{
"Id": "Param19",
"GroupId": "ParamGroup2",
"Name": "摇动肩膀巾"
},
{
"Id": "Param36",
"GroupId": "ParamGroup2",
"Name": "摇动袖子"
},
{
"Id": "Param37",
"GroupId": "ParamGroup2",
"Name": "摇动袖子"
},
{
"Id": "Param29",
"GroupId": "ParamGroup2",
"Name": "摇动肩膀巾y"
},
{
"Id": "Param30",
"GroupId": "ParamGroup2",
"Name": "摇动 裙"
},
{
"Id": "Param31",
"GroupId": "ParamGroup2",
"Name": "摇动 裙2"
},
{
"Id": "Param34",
"GroupId": "ParamGroup2",
"Name": "摇动 手花"
},
{
"Id": "Param35",
"GroupId": "ParamGroup2",
"Name": "摇动 手花"
},
{
"Id": "Param32",
"GroupId": "ParamGroup2",
"Name": "裙子y"
},
{
"Id": "Param33",
"GroupId": "ParamGroup2",
"Name": "裙子y2"
},
{
"Id": "Param21",
"GroupId": "ParamGroup2",
"Name": "大后发"
},
{
"Id": "Param20",
"GroupId": "ParamGroup2",
"Name": "大后发"
},
{
"Id": "Param24",
"GroupId": "ParamGroup2",
"Name": "大后发y"
},
{
"Id": "Param22",
"GroupId": "ParamGroup2",
"Name": "长后发"
},
{
"Id": "Param23",
"GroupId": "ParamGroup2",
"Name": "长后发"
},
{
"Id": "ParamHairFront",
"GroupId": "ParamGroup2",
"Name": "摇动 前发"
},
{
"Id": "ParamHairFront3",
"GroupId": "ParamGroup2",
"Name": "摇动 前发y"
},
{
"Id": "ParamHairFront4",
"GroupId": "ParamGroup2",
"Name": "摇动 前发y2"
},
{
"Id": "ParamHairFront2",
"GroupId": "ParamGroup2",
"Name": "摇动 前发2"
},
{
"Id": "ParamHairSide",
"GroupId": "ParamGroup2",
"Name": "摇动 侧发"
},
{
"Id": "ParamHairSide3",
"GroupId": "ParamGroup2",
"Name": "摇动 侧发y"
},
{
"Id": "ParamHairSide4",
"GroupId": "ParamGroup2",
"Name": "摇动 侧发y2"
},
{
"Id": "ParamHairSide2",
"GroupId": "ParamGroup2",
"Name": "摇动 侧发2"
},
{
"Id": "ParamHairBack",
"GroupId": "ParamGroup2",
"Name": "摇动 后发"
},
{
"Id": "ParamHairBack2",
"GroupId": "ParamGroup2",
"Name": "摇动 后发y"
},
{
"Id": "Param_Angle_Rotation_1_ArtMesh182",
"GroupId": "ParamGroup",
"Name": "[0]组 1 副本"
},
{
"Id": "Param_Angle_Rotation_2_ArtMesh182",
"GroupId": "ParamGroup",
"Name": "[1]组 1 副本"
},
{
"Id": "Param_Angle_Rotation_3_ArtMesh182",
"GroupId": "ParamGroup",
"Name": "[2]组 1 副本"
},
{
"Id": "Param_Angle_Rotation_4_ArtMesh182",
"GroupId": "ParamGroup",
"Name": "[3]组 1 副本"
},
{
"Id": "Param_Angle_Rotation_5_ArtMesh182",
"GroupId": "ParamGroup",
"Name": "[4]组 1 副本"
},
{
"Id": "Param_Angle_Rotation_6_ArtMesh182",
"GroupId": "ParamGroup",
"Name": "[5]组 1 副本"
},
{
"Id": "Param_Angle_Rotation_7_ArtMesh182",
"GroupId": "ParamGroup",
"Name": "[6]组 1 副本"
},
{
"Id": "Param_Angle_Rotation_1_ArtMesh248",
"GroupId": "ParamGroup5",
"Name": "[0]尾巴2 副本"
},
{
"Id": "Param_Angle_Rotation_2_ArtMesh248",
"GroupId": "ParamGroup5",
"Name": "[1]尾巴2 副本"
},
{
"Id": "Param_Angle_Rotation_3_ArtMesh248",
"GroupId": "ParamGroup5",
"Name": "[2]尾巴2 副本"
},
{
"Id": "Param_Angle_Rotation_4_ArtMesh248",
"GroupId": "ParamGroup5",
"Name": "[3]尾巴2 副本"
},
{
"Id": "Param_Angle_Rotation_5_ArtMesh248",
"GroupId": "ParamGroup5",
"Name": "[4]尾巴2 副本"
},
{
"Id": "Param_Angle_Rotation_6_ArtMesh248",
"GroupId": "ParamGroup5",
"Name": "[5]尾巴2 副本"
},
{
"Id": "Param_Angle_Rotation_7_ArtMesh248",
"GroupId": "ParamGroup5",
"Name": "[6]尾巴2 副本"
},
{
"Id": "Param_Angle_Rotation_8_ArtMesh248",
"GroupId": "ParamGroup5",
"Name": "[7]尾巴2 副本"
},
{
"Id": "Param_Angle_Rotation_9_ArtMesh248",
"GroupId": "ParamGroup5",
"Name": "[8]尾巴2 副本"
},
{
"Id": "Param_Angle_Rotation_1_ArtMesh183",
"GroupId": "ParamGroup6",
"Name": "[0]组 1 副本"
},
{
"Id": "Param_Angle_Rotation_2_ArtMesh183",
"GroupId": "ParamGroup6",
"Name": "[1]组 1 副本"
},
{
"Id": "Param_Angle_Rotation_3_ArtMesh183",
"GroupId": "ParamGroup6",
"Name": "[2]组 1 副本"
},
{
"Id": "Param_Angle_Rotation_4_ArtMesh183",
"GroupId": "ParamGroup6",
"Name": "[3]组 1 副本"
},
{
"Id": "Param_Angle_Rotation_5_ArtMesh183",
"GroupId": "ParamGroup6",
"Name": "[4]组 1 副本"
},
{
"Id": "Param_Angle_Rotation_6_ArtMesh183",
"GroupId": "ParamGroup6",
"Name": "[5]组 1 副本"
},
{
"Id": "Param_Angle_Rotation_7_ArtMesh183",
"GroupId": "ParamGroup6",
"Name": "[6]组 1 副本"
}
],
"ParameterGroups": [
{
"Id": "ParamGroup3",
"GroupId": "",
"Name": "右眼果冻"
},
{
"Id": "ParamGroup4",
"GroupId": "",
"Name": "左眼果冻"
},
{
"Id": "ParamGroup2",
"GroupId": "",
"Name": "物理"
},
{
"Id": "ParamGroup",
"GroupId": "",
"Name": "组 1 副本"
},
{
"Id": "ParamGroup5",
"GroupId": "",
"Name": "尾巴2 副本"
},
{
"Id": "ParamGroup6",
"GroupId": "",
"Name": "组 1 副本"
}
],
"Parts": [
{
"Id": "Part49",
"Name": "88拆模型(5).psd(未找到对应图层)"
},
{
"Id": "Part",
"Name": "头发"
},
{
"Id": "Part5",
"Name": "右眼"
},
{
"Id": "Part23",
"Name": "左眼"
},
{
"Id": "Part6",
"Name": "左眼"
},
{
"Id": "Part7",
"Name": "脸"
},
{
"Id": "Part9",
"Name": "脖子饰品"
},
{
"Id": "Part25",
"Name": "下后发"
},
{
"Id": "Part10",
"Name": "白衣"
},
{
"Id": "Part11",
"Name": "裙子"
},
{
"Id": "Part12",
"Name": "左臂 副本"
},
{
"Id": "Part13",
"Name": "左腿 副本"
},
{
"Id": "Part15",
"Name": "上肢"
},
{
"Id": "Part16",
"Name": "脖子"
},
{
"Id": "Part17",
"Name": "左外耳"
},
{
"Id": "Part18",
"Name": "右耳"
},
{
"Id": "Part19",
"Name": "后发,左耳"
},
{
"Id": "Part20",
"Name": "腿"
},
{
"Id": "ArtMesh248_Skinning",
"Name": "尾巴2 副本(蒙皮)"
},
{
"Id": "Part27",
"Name": "尾巴2 副本(旋转)"
},
{
"Id": "ArtMesh182_Skinning2",
"Name": "组 1 副本(蒙皮)"
},
{
"Id": "Part28",
"Name": "组 1 副本(旋转)"
},
{
"Id": "ArtMesh182_Skinning",
"Name": "组 1 副本(蒙皮)"
},
{
"Id": "Part24",
"Name": "组 1 副本(旋转)"
},
{
"Id": "Part35",
"Name": "脸"
},
{
"Id": "Part2",
"Name": "前发组"
},
{
"Id": "Part21",
"Name": "左辫"
},
{
"Id": "Part3",
"Name": "右辫"
},
{
"Id": "Part4",
"Name": "左辫"
},
{
"Id": "Part8",
"Name": "组 2"
},
{
"Id": "Part26",
"Name": "边下发"
},
{
"Id": "Part14",
"Name": "左新鞋"
},
{
"Id": "Part22",
"Name": "左耳 复制"
}
],
"CombinedParameters": [
[
"ParamAngleX",
"ParamAngleY"
],
[
"Param44",
"Param45"
],
[
"ParamEyeBallX",
"ParamEyeBallY"
],
[
"ParamBrowLAngle",
"ParamBrowLForm"
],
[
"ParamBrowRAngle",
"ParamBrowRForm"
],
[
"ParamMouthForm",
"ParamMouthOpenY"
],
[
"Param11",
"Param10"
],
[
"Param17",
"Param18"
],
[
"Param36",
"Param37"
],
[
"Param30",
"Param31"
],
[
"Param34",
"Param35"
],
[
"Param32",
"Param33"
],
[
"Param20",
"Param24"
],
[
"Param22",
"Param23"
],
[
"ParamHairFront",
"ParamHairFront3"
],
[
"ParamHairSide3",
"ParamHairSide4"
]
]
}

Binary file not shown.

View File

@ -0,0 +1,23 @@
{
"Version": 3,
"FileReferences": {
"Moc": "狐狸2.00.moc3",
"Textures": [
"狐狸2.00.4096/texture_00.png"
],
"Physics": "狐狸2.00.physics3.json",
"DisplayInfo": "狐狸2.00.cdi3.json"
},
"Groups": [
{
"Target": "Parameter",
"Name": "LipSync",
"Ids": []
},
{
"Target": "Parameter",
"Name": "EyeBlink",
"Ids": []
}
]
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,295 @@
{
"customName" : "\u72D0\u72F82.00",
"iconPath" : "ico_\u72D0\u72F82.00.jpg",
"bodyPhysics" : 0.6,
"useAnimBlend" : 0,
"modelPos" : {
"x" : -0.0111108422279358,
"y" : -6.73333358764648,
"z" : -0.800000011920929
},
"modelSize" : {
"x" : 16.0,
"y" : 16.0,
"z" : 5.0
},
"modelAngle" : {
"x" : 0.0,
"y" : 0.0,
"z" : 6.99999952316284
},
"capsuleRadius" : 3.200001,
"capsuleHeight" : 12.8,
"capsulePos" : {
"x" : -0.0111108422279358,
"y" : -6.73333358764648,
"z" : -1.79999995231628
},
"defaultAnimIndex" : -1,
"keys" : [
{
"type" : 0,
"bindAction" : "-1",
"bindVirtualAction" : {
"Keys" : [
48
],
"actionName" : "",
"isGlobal" : false,
"isApply" : true
}
}
],
"useVoice" : false,
"voiceParams" : [
1,
1,
0.5,
0.3,
0.4,
0.1,
1,
-1,
0.4,
1
],
"facialSettingMapV2" : {
"yaw" : {
"dataIndex" : 0,
"enableMapping" : true,
"paramSettingData" : [
{
"paramName" : "ParamAngleX",
"fMinValue" : -1,
"fMaxValue" : 1,
"pMinValue" : -30,
"pMaxValue" : 30,
"lerpValue" : 0.6
},
{
"paramName" : "ParamBodyAngleX",
"fMinValue" : -1,
"fMaxValue" : 1,
"pMinValue" : -10,
"pMaxValue" : 10,
"lerpValue" : 0.6
}
]
},
"pitch" : {
"dataIndex" : 1,
"enableMapping" : true,
"paramSettingData" : [
{
"paramName" : "ParamAngleY",
"fMinValue" : -1,
"fMaxValue" : 1,
"pMinValue" : -30,
"pMaxValue" : 30,
"lerpValue" : 0.6
},
{
"paramName" : "ParamBodyAngleY",
"fMinValue" : -1,
"fMaxValue" : 1,
"pMinValue" : -10,
"pMaxValue" : 10,
"lerpValue" : 0.6
}
]
},
"roll" : {
"dataIndex" : 2,
"enableMapping" : true,
"paramSettingData" : [
{
"paramName" : "ParamAngleZ",
"fMinValue" : -1,
"fMaxValue" : 1,
"pMinValue" : -30,
"pMaxValue" : 30,
"lerpValue" : 0.6
},
{
"paramName" : "ParamBodyAngleZ",
"fMinValue" : -1,
"fMaxValue" : 1,
"pMinValue" : -10,
"pMaxValue" : 10,
"lerpValue" : 0.6
}
]
},
"eyeL" : {
"dataIndex" : 3,
"enableMapping" : true,
"paramSettingData" : [
{
"paramName" : "ParamEyeLOpen",
"fMinValue" : -0.8,
"fMaxValue" : 0.8,
"pMinValue" : 0,
"pMaxValue" : 2,
"lerpValue" : 0.4
}
]
},
"eyeR" : {
"dataIndex" : 4,
"enableMapping" : true,
"paramSettingData" : [
{
"paramName" : "ParamEyeROpen",
"fMinValue" : -0.8,
"fMaxValue" : 0.8,
"pMinValue" : 0,
"pMaxValue" : 2,
"lerpValue" : 0.4
}
]
},
"browLY" : {
"dataIndex" : 5,
"enableMapping" : true,
"paramSettingData" : [
{
"paramName" : "ParamBrowLY",
"fMinValue" : -0.5,
"fMaxValue" : 0.5,
"pMinValue" : -1,
"pMaxValue" : 1,
"lerpValue" : 0.5
},
{
"paramName" : "ParamBrowLAngle",
"fMinValue" : -0.5,
"fMaxValue" : 0.5,
"pMinValue" : -1,
"pMaxValue" : 1,
"lerpValue" : 0.5
}
]
},
"browRY" : {
"dataIndex" : 6,
"enableMapping" : true,
"paramSettingData" : [
{
"paramName" : "ParamBrowRY",
"fMinValue" : -0.5,
"fMaxValue" : 0.5,
"pMinValue" : -1,
"pMaxValue" : 1,
"lerpValue" : 0.5
},
{
"paramName" : "ParamBrowRAngle",
"fMinValue" : -0.5,
"fMaxValue" : 0.5,
"pMinValue" : -1,
"pMaxValue" : 1,
"lerpValue" : 0.5
}
]
},
"mouthY" : {
"dataIndex" : 7,
"enableMapping" : true,
"paramSettingData" : [
{
"paramName" : "ParamMouthOpenY",
"fMinValue" : -1,
"fMaxValue" : 0,
"pMinValue" : 0,
"pMaxValue" : 1,
"lerpValue" : 0.4
}
]
},
"mouthX" : {
"dataIndex" : 8,
"enableMapping" : true,
"paramSettingData" : [
{
"paramName" : "ParamMouthForm",
"fMinValue" : -0.6,
"fMaxValue" : 0.6,
"pMinValue" : -1,
"pMaxValue" : 1,
"lerpValue" : 0.5
}
]
},
"eyeballX" : {
"dataIndex" : 9,
"enableMapping" : true,
"paramSettingData" : [
{
"paramName" : "ParamEyeBallX",
"fMinValue" : -0.5,
"fMaxValue" : 0.5,
"pMinValue" : -1,
"pMaxValue" : 1,
"lerpValue" : 0.5
}
]
},
"eyeballY" : {
"dataIndex" : 10,
"enableMapping" : true,
"paramSettingData" : [
{
"paramName" : "ParamEyeBallY",
"fMinValue" : -0.5,
"fMaxValue" : 0.5,
"pMinValue" : -1,
"pMaxValue" : 1,
"lerpValue" : 0.5
}
]
},
"browform" : {
"dataIndex" : 11,
"enableMapping" : true,
"paramSettingData" : [
{
"paramName" : "ParamBrowLForm",
"fMinValue" : -1,
"fMaxValue" : 1,
"pMinValue" : -1,
"pMaxValue" : 1,
"lerpValue" : 0.5
},
{
"paramName" : "ParamBrowRForm",
"fMinValue" : -1,
"fMaxValue" : 1,
"pMinValue" : -1,
"pMaxValue" : 1,
"lerpValue" : 0.5
}
]
},
"facesite" : {
"dataIndex" : 12,
"enableMapping" : true,
"paramSettingData" : [
]
},
"facedistance" : {
"dataIndex" : 13,
"enableMapping" : true,
"paramSettingData" : [
]
},
"tongue" : {
"dataIndex" : 14,
"enableMapping" : true,
"paramSettingData" : [
]
}
},
"L2DName" : "",
"mapIsGlobal" : false
}

File diff suppressed because it is too large Load Diff