diff --git a/manifest.json b/manifest.json
index 03e093c..96ce6ab 100644
--- a/manifest.json
+++ b/manifest.json
@@ -5,6 +5,9 @@
"author": "ct",
"description": "Live2D Cubism C# runtime: model loading, rendering, physics, animation, effects",
"category": "library, visual",
- "depends": ["visual_novel_core>=1", "interface>=1"],
- "depends_native": ["native/*.dll", "native/*.so"]
+ "depends": ["interface>=1"],
+ "depends_native": ["native/*.dll", "native/*.so"],
+ "test_suites": [
+ {"id": "avatar", "activate": ["--itest=live2d_avatar"]}
+ ]
}
diff --git a/test_suites/avatar/locale/en.properties b/test_suites/avatar/locale/en.properties
new file mode 100644
index 0000000..4c8ebe8
--- /dev/null
+++ b/test_suites/avatar/locale/en.properties
@@ -0,0 +1,2 @@
+mod_live2d__avatar_name = Live2D Test
+mod_live2d__avatar_desc = Test and demo mod for the live2d runtime: the sample Ren model (expressions, motions) shown by the home_outside overlay scene plus an avatar test driver.
diff --git a/test_suites/avatar/locale/ru.properties b/test_suites/avatar/locale/ru.properties
new file mode 100644
index 0000000..f6fb66f
--- /dev/null
+++ b/test_suites/avatar/locale/ru.properties
@@ -0,0 +1,2 @@
+mod_live2d__avatar_name = Live2D: тестовый мод
+mod_live2d__avatar_desc = Тестовый мод для live2d: демо-модель Ren (эмоции, анимации) в оверлее сцены home_outside и тестовый драйвер аватара.
diff --git a/test_suites/avatar/manifest.json b/test_suites/avatar/manifest.json
new file mode 100644
index 0000000..8285229
--- /dev/null
+++ b/test_suites/avatar/manifest.json
@@ -0,0 +1,23 @@
+{
+ "name": "Live2D Test",
+ "description": "Test and demo mod for the live2d runtime: the sample Ren model (expressions, motions) shown by the home_outside overlay scene plus an avatar test driver. Requires live2d>=1.",
+ "sources": [
+ "src/*.cs"
+ ],
+ "ui": [
+ {
+ "id": "live2d_overlay",
+ "kind": "overlay",
+ "scene": "home_outside",
+ "slot": "ModBeforeUIPanel",
+ "scene_path": "scenes/live2d_overlay.tscn",
+ "once": false,
+ "show_on_start": true,
+ "priority": 10
+ }
+ ],
+ "depends": [
+ "visual_novel_core>=1",
+ "interface>=1"
+ ]
+}
diff --git a/test_suites/avatar/mod.png b/test_suites/avatar/mod.png
new file mode 100644
index 0000000..d112f2e
Binary files /dev/null and b/test_suites/avatar/mod.png differ
diff --git a/test_suites/avatar/models/ReadMe.txt b/test_suites/avatar/models/ReadMe.txt
new file mode 100644
index 0000000..6c84dab
--- /dev/null
+++ b/test_suites/avatar/models/ReadMe.txt
@@ -0,0 +1,57 @@
+
+============================================================
+
+ Sample Model
+ Ren Foster - PRO
+
+============================================================
+
+ This model focuses on learning expressions that use the rich drawing features introduced in Cubism 5.3.
+ It serves as a reference for using features such as alpha blend for creating masks flexibly,
+ and offscreen drawing for displaying semi-transparency cleanly by drawing multiple objects together.
+ It is designed for use in environments with sufficient machine specifications,
+ such as video streaming on a PC using tracking software like nizima LIVE.
+
+
+------------------------------
+ License Agreement
+------------------------------
+
+ You need to agree "Free Material License Agreement" and "Terms of Use" to use this sample model.
+ General Users and Small-Scale Enterprise Users can use the model for commercial purposes by accepting the "Free Material License Agreement".
+ Parties other than General User or Small-Scale Enterprise User are allowed to use the model for Internal or Supervision Purpose.
+ Please refer to this agreement for more details.
+
+ For more information on licensing, please see the following page.
+ https://www.live2d.com/en/download/sample-data/
+
+
+------------------------------
+ Creator
+------------------------------
+
+ - Illustration: Live2D Inc.
+ - Modeling: Live2D Inc.
+
+
+------------------------------
+ Sample Data Composition
+------------------------------
+
+ - Model data (.cmo3)
+ - Basic motion (.can3)
+ - Embedded file set (.runtime folder)
+ - Model data (.moc3)
+ - Expression data (.exp3.json)
+ - Motion data (.motion3.json)
+ - Model setting file (.model3.json)
+ - Physical calculation setting file (.physics3.json)
+ - Display auxiliary file (.cdi3.json)
+
+
+------------------------------
+ Release Note
+------------------------------
+
+ - 2026-01-20
+ - Released.
diff --git a/test_suites/avatar/models/ren_t01.can3 b/test_suites/avatar/models/ren_t01.can3
new file mode 100644
index 0000000..7008985
Binary files /dev/null and b/test_suites/avatar/models/ren_t01.can3 differ
diff --git a/test_suites/avatar/models/ren_t01.cmo3 b/test_suites/avatar/models/ren_t01.cmo3
new file mode 100644
index 0000000..0bd2a30
Binary files /dev/null and b/test_suites/avatar/models/ren_t01.cmo3 differ
diff --git a/test_suites/avatar/models/runtime/expressions/exp_01.exp3.json b/test_suites/avatar/models/runtime/expressions/exp_01.exp3.json
new file mode 100644
index 0000000..074b514
--- /dev/null
+++ b/test_suites/avatar/models/runtime/expressions/exp_01.exp3.json
@@ -0,0 +1,77 @@
+{
+ "Type": "Live2D Expression",
+ "FadeInTime": 0.5,
+ "FadeOutTime": 0.5,
+ "Parameters": [
+ {
+ "Id": "ParamEyeLOpen",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamEyeLSmile",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamEyeROpen",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamEyeRSmile",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamEyeSize",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowLY",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowRY",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowLX",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowRX",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowLAngle",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowRAngle",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowLForm",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowRForm",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamMouthForm",
+ "Value": 0,
+ "Blend": "Add"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test_suites/avatar/models/runtime/expressions/exp_02.exp3.json b/test_suites/avatar/models/runtime/expressions/exp_02.exp3.json
new file mode 100644
index 0000000..649db79
--- /dev/null
+++ b/test_suites/avatar/models/runtime/expressions/exp_02.exp3.json
@@ -0,0 +1,77 @@
+{
+ "Type": "Live2D Expression",
+ "FadeInTime": 0.5,
+ "FadeOutTime": 0.5,
+ "Parameters": [
+ {
+ "Id": "ParamEyeLOpen",
+ "Value": -1,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamEyeLSmile",
+ "Value": 1,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamEyeROpen",
+ "Value": -1,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamEyeRSmile",
+ "Value": 1,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamEyeSize",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowLY",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowRY",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowLX",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowRX",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowLAngle",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowRAngle",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowLForm",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowRForm",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamMouthForm",
+ "Value": 0,
+ "Blend": "Add"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test_suites/avatar/models/runtime/expressions/exp_03.exp3.json b/test_suites/avatar/models/runtime/expressions/exp_03.exp3.json
new file mode 100644
index 0000000..f3cf361
--- /dev/null
+++ b/test_suites/avatar/models/runtime/expressions/exp_03.exp3.json
@@ -0,0 +1,77 @@
+{
+ "Type": "Live2D Expression",
+ "FadeInTime": 0.5,
+ "FadeOutTime": 0.5,
+ "Parameters": [
+ {
+ "Id": "ParamEyeLOpen",
+ "Value": -1,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamEyeLSmile",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamEyeROpen",
+ "Value": -1,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamEyeRSmile",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamEyeSize",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowLY",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowRY",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowLX",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowRX",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowLAngle",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowRAngle",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowLForm",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowRForm",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamMouthForm",
+ "Value": 0,
+ "Blend": "Add"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test_suites/avatar/models/runtime/expressions/exp_04.exp3.json b/test_suites/avatar/models/runtime/expressions/exp_04.exp3.json
new file mode 100644
index 0000000..c39eb0e
--- /dev/null
+++ b/test_suites/avatar/models/runtime/expressions/exp_04.exp3.json
@@ -0,0 +1,77 @@
+{
+ "Type": "Live2D Expression",
+ "FadeInTime": 0.5,
+ "FadeOutTime": 0.5,
+ "Parameters": [
+ {
+ "Id": "ParamEyeLOpen",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamEyeLSmile",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamEyeROpen",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamEyeRSmile",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamEyeSize",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowLY",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowRY",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowLX",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowRX",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowLAngle",
+ "Value": -1,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowRAngle",
+ "Value": -1,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowLForm",
+ "Value": -1,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowRForm",
+ "Value": -1,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamMouthForm",
+ "Value": -1,
+ "Blend": "Add"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test_suites/avatar/models/runtime/expressions/exp_05.exp3.json b/test_suites/avatar/models/runtime/expressions/exp_05.exp3.json
new file mode 100644
index 0000000..57519c4
--- /dev/null
+++ b/test_suites/avatar/models/runtime/expressions/exp_05.exp3.json
@@ -0,0 +1,77 @@
+{
+ "Type": "Live2D Expression",
+ "FadeInTime": 0.5,
+ "FadeOutTime": 0.5,
+ "Parameters": [
+ {
+ "Id": "ParamEyeLOpen",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamEyeLSmile",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamEyeROpen",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamEyeRSmile",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamEyeSize",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowLY",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowRY",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowLX",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowRX",
+ "Value": 0,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowLAngle",
+ "Value": 0.7,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowRAngle",
+ "Value": 0.7,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowLForm",
+ "Value": -1,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamBrowRForm",
+ "Value": -1,
+ "Blend": "Add"
+ },
+ {
+ "Id": "ParamMouthForm",
+ "Value": -1,
+ "Blend": "Add"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test_suites/avatar/models/runtime/motions/mtn_01.motion3.json b/test_suites/avatar/models/runtime/motions/mtn_01.motion3.json
new file mode 100644
index 0000000..6ff4631
--- /dev/null
+++ b/test_suites/avatar/models/runtime/motions/mtn_01.motion3.json
@@ -0,0 +1,1785 @@
+{
+ "Version": 3,
+ "Meta": {
+ "Duration": 5.85,
+ "Fps": 60.0,
+ "Loop": true,
+ "AreBeziersRestricted": true,
+ "CurveCount": 68,
+ "TotalSegmentCount": 175,
+ "TotalPointCount": 593,
+ "UserDataCount": 0,
+ "TotalUserDataSize": 0
+ },
+ "Curves": [
+ {
+ "Target": "Parameter",
+ "Id": "ParamAngleX",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.183,
+ 0,
+ 0.367,
+ 0.267,
+ 0.55,
+ 0.267,
+ 1,
+ 0.822,
+ 0.267,
+ 1.094,
+ -1.077,
+ 1.367,
+ -1.077,
+ 1,
+ 1.528,
+ -1.077,
+ 1.689,
+ 0,
+ 1.85,
+ 0,
+ 1,
+ 2.183,
+ 0,
+ 2.517,
+ 0,
+ 2.85,
+ 0,
+ 1,
+ 3.322,
+ 0,
+ 3.794,
+ 2.76,
+ 4.267,
+ 2.76,
+ 1,
+ 4.428,
+ 2.76,
+ 4.589,
+ 2.055,
+ 4.75,
+ 1.54,
+ 1,
+ 5.117,
+ 0.368,
+ 5.483,
+ 0.011,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamAngleY",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.183,
+ 0,
+ 0.367,
+ 4.284,
+ 0.55,
+ 4.284,
+ 1,
+ 0.717,
+ 4.284,
+ 0.883,
+ 4.386,
+ 1.05,
+ 3.091,
+ 1,
+ 1.217,
+ 1.797,
+ 1.383,
+ -2.242,
+ 1.55,
+ -2.242,
+ 1,
+ 1.733,
+ -2.242,
+ 1.917,
+ 0,
+ 2.1,
+ 0,
+ 1,
+ 2.372,
+ 0,
+ 2.644,
+ 0,
+ 2.917,
+ 0,
+ 1,
+ 3.094,
+ 0,
+ 3.272,
+ 3.56,
+ 3.45,
+ 3.56,
+ 1,
+ 3.589,
+ 3.56,
+ 3.728,
+ 3.671,
+ 3.867,
+ 3.091,
+ 1,
+ 4.011,
+ 2.488,
+ 4.156,
+ -2.242,
+ 4.3,
+ -2.242,
+ 1,
+ 4.511,
+ -2.242,
+ 4.722,
+ 0,
+ 4.933,
+ 0,
+ 1,
+ 5.239,
+ 0,
+ 5.544,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamAngleZ",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.283,
+ 0,
+ 0.567,
+ 1.356,
+ 0.85,
+ 1.356,
+ 1,
+ 1.078,
+ 1.356,
+ 1.306,
+ -0.928,
+ 1.533,
+ -0.928,
+ 1,
+ 1.733,
+ -0.928,
+ 1.933,
+ -0.409,
+ 2.133,
+ -0.375,
+ 1,
+ 2.6,
+ -0.297,
+ 3.067,
+ -0.295,
+ 3.533,
+ -0.206,
+ 1,
+ 3.833,
+ -0.148,
+ 4.133,
+ 0.716,
+ 4.433,
+ 0.716,
+ 1,
+ 4.644,
+ 0.716,
+ 4.856,
+ 0,
+ 5.067,
+ 0,
+ 1,
+ 5.328,
+ 0,
+ 5.589,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamEyeLOpen",
+ "Segments": [
+ 0,
+ 1,
+ 1,
+ 0.383,
+ 1,
+ 0.767,
+ 1,
+ 1.15,
+ 1,
+ 1,
+ 1.172,
+ 1,
+ 1.194,
+ 0,
+ 1.217,
+ 0,
+ 1,
+ 1.244,
+ 0,
+ 1.272,
+ 0,
+ 1.3,
+ 0,
+ 1,
+ 1.322,
+ 0,
+ 1.344,
+ 1,
+ 1.367,
+ 1,
+ 1,
+ 2.261,
+ 1,
+ 3.156,
+ 1,
+ 4.05,
+ 1,
+ 1,
+ 4.072,
+ 1,
+ 4.094,
+ 0,
+ 4.117,
+ 0,
+ 1,
+ 4.144,
+ 0,
+ 4.172,
+ 0,
+ 4.2,
+ 0,
+ 1,
+ 4.222,
+ 0,
+ 4.244,
+ 1,
+ 4.267,
+ 1,
+ 1,
+ 4.794,
+ 1,
+ 5.322,
+ 1,
+ 5.85,
+ 1
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamEyeLSmile",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamEyeROpen",
+ "Segments": [
+ 0,
+ 1,
+ 1,
+ 0.383,
+ 1,
+ 0.767,
+ 1,
+ 1.15,
+ 1,
+ 1,
+ 1.172,
+ 1,
+ 1.194,
+ 0,
+ 1.217,
+ 0,
+ 1,
+ 1.244,
+ 0,
+ 1.272,
+ 0,
+ 1.3,
+ 0,
+ 1,
+ 1.322,
+ 0,
+ 1.344,
+ 1,
+ 1.367,
+ 1,
+ 1,
+ 2.261,
+ 1,
+ 3.156,
+ 1,
+ 4.05,
+ 1,
+ 1,
+ 4.072,
+ 1,
+ 4.094,
+ 0,
+ 4.117,
+ 0,
+ 1,
+ 4.144,
+ 0,
+ 4.172,
+ 0,
+ 4.2,
+ 0,
+ 1,
+ 4.222,
+ 0,
+ 4.244,
+ 1,
+ 4.267,
+ 1,
+ 1,
+ 4.794,
+ 1,
+ 5.322,
+ 1,
+ 5.85,
+ 1
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamEyeRSmile",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamEyeBallX",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamEyeBallY",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamEyeSize",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBrowLY",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBrowRY",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBrowLX",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBrowRX",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBrowLAngle",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBrowRAngle",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBrowLForm",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBrowRForm",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamMouthForm",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamMouthOpenY",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBodyAngleX",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.433,
+ 0,
+ 0.867,
+ -0.487,
+ 1.3,
+ -0.487,
+ 1,
+ 1.844,
+ -0.487,
+ 2.389,
+ -0.487,
+ 2.933,
+ -0.487,
+ 1,
+ 3.361,
+ -0.487,
+ 3.789,
+ 0.366,
+ 4.217,
+ 0.366,
+ 1,
+ 4.506,
+ 0.366,
+ 4.794,
+ 0,
+ 5.083,
+ 0,
+ 1,
+ 5.339,
+ 0,
+ 5.594,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBodyAngleY",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.244,
+ 0,
+ 0.489,
+ 1.056,
+ 0.733,
+ 1.056,
+ 1,
+ 0.95,
+ 1.056,
+ 1.167,
+ -0.358,
+ 1.383,
+ -0.358,
+ 1,
+ 1.517,
+ -0.358,
+ 1.65,
+ 0,
+ 1.783,
+ 0,
+ 1,
+ 2.183,
+ 0,
+ 2.583,
+ 0,
+ 2.983,
+ 0,
+ 1,
+ 3.2,
+ 0,
+ 3.417,
+ 0.449,
+ 3.633,
+ 0.449,
+ 1,
+ 3.85,
+ 0.449,
+ 4.067,
+ -0.413,
+ 4.283,
+ -0.413,
+ 1,
+ 4.417,
+ -0.413,
+ 4.55,
+ 0,
+ 4.683,
+ 0,
+ 1,
+ 5.072,
+ 0,
+ 5.461,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBodyAngleZ",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.478,
+ 0,
+ 0.956,
+ -0.353,
+ 1.433,
+ -0.353,
+ 1,
+ 1.972,
+ -0.353,
+ 2.511,
+ -0.344,
+ 3.05,
+ -0.239,
+ 1,
+ 3.472,
+ -0.156,
+ 3.894,
+ 0,
+ 4.317,
+ 0,
+ 1,
+ 4.828,
+ 0,
+ 5.339,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamWaistAngleZ",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBodyCenter",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.361,
+ 0,
+ 0.722,
+ 4,
+ 1.083,
+ 4,
+ 1,
+ 1.678,
+ 4,
+ 2.272,
+ 4,
+ 2.867,
+ 4,
+ 1,
+ 3.422,
+ 4,
+ 3.978,
+ 0,
+ 4.533,
+ 0,
+ 1,
+ 4.972,
+ 0,
+ 5.411,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBreath",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamLeftShoulderUp",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.172,
+ 0,
+ 0.344,
+ 0.648,
+ 0.517,
+ 0.648,
+ 1,
+ 0.833,
+ 0.648,
+ 1.15,
+ -1.204,
+ 1.467,
+ -1.204,
+ 1,
+ 1.728,
+ -1.204,
+ 1.989,
+ 0,
+ 2.25,
+ 0,
+ 1,
+ 2.5,
+ 0,
+ 2.75,
+ 0,
+ 3,
+ 0,
+ 1,
+ 3.2,
+ 0,
+ 3.4,
+ 1.507,
+ 3.6,
+ 1.507,
+ 1,
+ 3.856,
+ 1.507,
+ 4.111,
+ -1.204,
+ 4.367,
+ -1.204,
+ 1,
+ 4.628,
+ -1.204,
+ 4.889,
+ 0,
+ 5.15,
+ 0,
+ 1,
+ 5.383,
+ 0,
+ 5.617,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamRightShoulderUp",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.172,
+ 0,
+ 0.344,
+ 0.661,
+ 0.517,
+ 0.661,
+ 1,
+ 0.833,
+ 0.661,
+ 1.15,
+ -1.197,
+ 1.467,
+ -1.197,
+ 1,
+ 1.728,
+ -1.197,
+ 1.989,
+ 0,
+ 2.25,
+ 0,
+ 1,
+ 2.5,
+ 0,
+ 2.75,
+ 0,
+ 3,
+ 0,
+ 1,
+ 3.2,
+ 0,
+ 3.4,
+ 1.537,
+ 3.6,
+ 1.537,
+ 1,
+ 3.856,
+ 1.537,
+ 4.111,
+ -1.197,
+ 4.367,
+ -1.197,
+ 1,
+ 4.628,
+ -1.197,
+ 4.889,
+ 0,
+ 5.15,
+ 0,
+ 1,
+ 5.383,
+ 0,
+ 5.617,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamLegR",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.056,
+ 0,
+ 0.111,
+ 0,
+ 0.167,
+ 0,
+ 1,
+ 0.283,
+ 0,
+ 0.4,
+ 3.164,
+ 0.517,
+ 3.556,
+ 1,
+ 0.672,
+ 4.079,
+ 0.828,
+ 4.04,
+ 0.983,
+ 4.04,
+ 1,
+ 1.572,
+ 4.04,
+ 2.161,
+ 4.04,
+ 2.75,
+ 4.04,
+ 1,
+ 2.983,
+ 4.04,
+ 3.217,
+ 4.003,
+ 3.45,
+ 3.505,
+ 1,
+ 3.578,
+ 3.232,
+ 3.706,
+ 0.966,
+ 3.833,
+ 0.515,
+ 1,
+ 3.978,
+ 0.006,
+ 4.122,
+ 0,
+ 4.267,
+ 0,
+ 1,
+ 4.794,
+ 0,
+ 5.322,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamLegL",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamArmL01",
+ "Segments": [
+ 0,
+ -1.482,
+ 1,
+ 0.167,
+ -1.42,
+ 0.333,
+ -0.562,
+ 0.5,
+ -0.562,
+ 1,
+ 0.828,
+ -0.562,
+ 1.156,
+ -1.994,
+ 1.483,
+ -1.994,
+ 1,
+ 1.733,
+ -1.994,
+ 1.983,
+ -1.482,
+ 2.233,
+ -1.482,
+ 1,
+ 2.494,
+ -1.482,
+ 2.756,
+ -1.482,
+ 3.017,
+ -1.482,
+ 1,
+ 3.183,
+ -1.482,
+ 3.35,
+ -1.062,
+ 3.517,
+ -1.062,
+ 1,
+ 3.806,
+ -1.062,
+ 4.094,
+ -1.694,
+ 4.383,
+ -1.694,
+ 1,
+ 4.872,
+ -1.694,
+ 5.361,
+ -1.667,
+ 5.85,
+ -1.488
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamArmL02",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.178,
+ 0.104,
+ 0.356,
+ 0.33,
+ 0.533,
+ 0.33,
+ 1,
+ 0.867,
+ 0.33,
+ 1.2,
+ -0.651,
+ 1.533,
+ -0.651,
+ 1,
+ 2.039,
+ -0.651,
+ 2.544,
+ -0.607,
+ 3.05,
+ -0.39,
+ 1,
+ 3.217,
+ -0.319,
+ 3.383,
+ 0.03,
+ 3.55,
+ 0.03,
+ 1,
+ 3.844,
+ 0.03,
+ 4.139,
+ -0.351,
+ 4.433,
+ -0.351,
+ 1,
+ 4.906,
+ -0.351,
+ 5.378,
+ -0.282,
+ 5.85,
+ -0.01
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamArmL03",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.178,
+ 0.232,
+ 0.356,
+ 0.72,
+ 0.533,
+ 0.72,
+ 1,
+ 0.867,
+ 0.72,
+ 1.2,
+ -1.584,
+ 1.533,
+ -1.584,
+ 1,
+ 2.039,
+ -1.584,
+ 2.544,
+ -1.476,
+ 3.05,
+ -0.9,
+ 1,
+ 3.217,
+ -0.71,
+ 3.383,
+ 0.52,
+ 3.55,
+ 0.52,
+ 1,
+ 3.844,
+ 0.52,
+ 4.139,
+ -0.784,
+ 4.433,
+ -0.784,
+ 1,
+ 4.906,
+ -0.784,
+ 5.378,
+ -0.627,
+ 5.85,
+ -0.022
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHandL",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHandLDrawOrder",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamArmR01",
+ "Segments": [
+ 0,
+ -1.482,
+ 1,
+ 0.167,
+ -1.42,
+ 0.333,
+ -0.562,
+ 0.5,
+ -0.562,
+ 1,
+ 0.828,
+ -0.562,
+ 1.156,
+ -1.992,
+ 1.483,
+ -1.992,
+ 1,
+ 1.733,
+ -1.992,
+ 1.983,
+ -1.482,
+ 2.233,
+ -1.482,
+ 1,
+ 2.494,
+ -1.482,
+ 2.756,
+ -1.482,
+ 3.017,
+ -1.482,
+ 1,
+ 3.183,
+ -1.482,
+ 3.35,
+ -1.062,
+ 3.517,
+ -1.062,
+ 1,
+ 3.806,
+ -1.062,
+ 4.094,
+ -1.692,
+ 4.383,
+ -1.692,
+ 1,
+ 4.872,
+ -1.692,
+ 5.361,
+ -1.665,
+ 5.85,
+ -1.488
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamArmR02",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.178,
+ 0.104,
+ 0.356,
+ 0.33,
+ 0.533,
+ 0.33,
+ 1,
+ 0.867,
+ 0.33,
+ 1.2,
+ -0.65,
+ 1.533,
+ -0.65,
+ 1,
+ 2.039,
+ -0.65,
+ 2.544,
+ -0.606,
+ 3.05,
+ -0.39,
+ 1,
+ 3.217,
+ -0.319,
+ 3.383,
+ 0.03,
+ 3.55,
+ 0.03,
+ 1,
+ 3.844,
+ 0.03,
+ 4.139,
+ -0.35,
+ 4.433,
+ -0.35,
+ 1,
+ 4.906,
+ -0.35,
+ 5.378,
+ -0.281,
+ 5.85,
+ -0.01
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamArmR03",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.178,
+ 0.231,
+ 0.356,
+ 0.72,
+ 0.533,
+ 0.72,
+ 1,
+ 0.867,
+ 0.72,
+ 1.2,
+ -1.58,
+ 1.533,
+ -1.58,
+ 1,
+ 2.039,
+ -1.58,
+ 2.544,
+ -1.473,
+ 3.05,
+ -0.9,
+ 1,
+ 3.217,
+ -0.711,
+ 3.383,
+ 0.52,
+ 3.55,
+ 0.52,
+ 1,
+ 3.844,
+ 0.52,
+ 4.139,
+ -0.78,
+ 4.433,
+ -0.78,
+ 1,
+ 4.906,
+ -0.78,
+ 5.378,
+ -0.624,
+ 5.85,
+ -0.021
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHandR",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHandRDrawOrder",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHairFront",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHairSide",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHairBack",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHairFrontFuwa",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHairSideFuwa",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHairBackFuwa",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamCollarString",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamNecklace1",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamNecklace2",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamNecklace3",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamPullHandle",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamPocketString",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamJacket",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamCollarFuwa",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamCollarStringFuwa",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHologram",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamTransparent",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHologramPattern",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamMonochrome",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamNight",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamLight",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamDisplayWidth1",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamDisplayHeight1",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamDisplayWidth2",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamDisplayHeight2",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamDisplayAngle",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamNoise",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamNoiseRotate",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.95,
+ 0,
+ 3.9,
+ 0,
+ 5.85,
+ 0
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test_suites/avatar/models/runtime/motions/mtn_02.motion3.json b/test_suites/avatar/models/runtime/motions/mtn_02.motion3.json
new file mode 100644
index 0000000..227f6e7
--- /dev/null
+++ b/test_suites/avatar/models/runtime/motions/mtn_02.motion3.json
@@ -0,0 +1,3738 @@
+{
+ "Version": 3,
+ "Meta": {
+ "Duration": 7.6,
+ "Fps": 60.0,
+ "FadeInTime": 0.25,
+ "FadeOutTime": 0.25,
+ "Loop": true,
+ "AreBeziersRestricted": true,
+ "CurveCount": 68,
+ "TotalSegmentCount": 492,
+ "TotalPointCount": 1410,
+ "UserDataCount": 0,
+ "TotalUserDataSize": 0
+ },
+ "Curves": [
+ {
+ "Target": "Parameter",
+ "Id": "ParamAngleX",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.078,
+ 0,
+ 0.156,
+ 0.202,
+ 0.233,
+ 2.44,
+ 1,
+ 0.356,
+ 5.957,
+ 0.478,
+ 13.037,
+ 0.6,
+ 16.469,
+ 1,
+ 0.8,
+ 22.085,
+ 1,
+ 23.743,
+ 1.2,
+ 23.743,
+ 1,
+ 1.306,
+ 23.743,
+ 1.411,
+ 20.292,
+ 1.517,
+ 20.292,
+ 1,
+ 1.633,
+ 20.292,
+ 1.75,
+ 22.479,
+ 1.867,
+ 22.479,
+ 1,
+ 1.95,
+ 22.479,
+ 2.033,
+ 19.253,
+ 2.117,
+ 19.253,
+ 1,
+ 2.167,
+ 19.253,
+ 2.217,
+ 19.253,
+ 2.267,
+ 19.253,
+ 1,
+ 2.394,
+ 19.253,
+ 2.522,
+ 17.345,
+ 2.65,
+ 17.345,
+ 1,
+ 2.861,
+ 17.345,
+ 3.072,
+ 17.345,
+ 3.283,
+ 17.345,
+ 1,
+ 3.456,
+ 17.345,
+ 3.628,
+ 17.22,
+ 3.8,
+ 14.072,
+ 1,
+ 4.067,
+ 9.197,
+ 4.333,
+ -1.451,
+ 4.6,
+ -6.572,
+ 1,
+ 4.694,
+ -8.386,
+ 4.789,
+ -8.167,
+ 4.883,
+ -8.167,
+ 1,
+ 4.994,
+ -8.167,
+ 5.106,
+ -3.612,
+ 5.217,
+ -1.005,
+ 1,
+ 5.35,
+ 2.124,
+ 5.483,
+ 2.44,
+ 5.617,
+ 2.44,
+ 0,
+ 7.6,
+ 2.44
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamAngleY",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.15,
+ 0,
+ 0.3,
+ 1.546,
+ 0.45,
+ 1.546,
+ 1,
+ 0.578,
+ 1.546,
+ 0.706,
+ -22.5,
+ 0.833,
+ -22.5,
+ 1,
+ 0.967,
+ -22.5,
+ 1.1,
+ -21.666,
+ 1.233,
+ -21,
+ 1,
+ 1.417,
+ -20.084,
+ 1.6,
+ -19.84,
+ 1.783,
+ -18.789,
+ 1,
+ 1.872,
+ -18.28,
+ 1.961,
+ -11.289,
+ 2.05,
+ -11.289,
+ 1,
+ 2.089,
+ -11.289,
+ 2.128,
+ -11.263,
+ 2.167,
+ -13.222,
+ 1,
+ 2.206,
+ -15.181,
+ 2.244,
+ -26.393,
+ 2.283,
+ -28.222,
+ 1,
+ 2.322,
+ -30,
+ 2.361,
+ -30,
+ 2.4,
+ -30,
+ 1,
+ 2.489,
+ -30,
+ 2.578,
+ -9.272,
+ 2.667,
+ -5.258,
+ 1,
+ 2.728,
+ -2.498,
+ 2.789,
+ -1.234,
+ 2.85,
+ -0.894,
+ 1,
+ 2.933,
+ -0.43,
+ 3.017,
+ -0.46,
+ 3.1,
+ 0,
+ 1,
+ 3.15,
+ 0.276,
+ 3.2,
+ 5.876,
+ 3.25,
+ 5.876,
+ 1,
+ 3.356,
+ 5.876,
+ 3.461,
+ -30,
+ 3.567,
+ -30,
+ 1,
+ 3.772,
+ -30,
+ 3.978,
+ -19.263,
+ 4.183,
+ -19.263,
+ 1,
+ 4.356,
+ -19.263,
+ 4.528,
+ -19.338,
+ 4.7,
+ -20,
+ 1,
+ 4.772,
+ -20.278,
+ 4.844,
+ -22.531,
+ 4.917,
+ -22.531,
+ 1,
+ 4.956,
+ -22.531,
+ 4.994,
+ -20.826,
+ 5.033,
+ -14.209,
+ 1,
+ 5.1,
+ -2.865,
+ 5.167,
+ 5.072,
+ 5.233,
+ 5.072,
+ 1,
+ 5.267,
+ 5.072,
+ 5.3,
+ 5.295,
+ 5.333,
+ 3.433,
+ 1,
+ 5.389,
+ 0.328,
+ 5.444,
+ -5.722,
+ 5.5,
+ -5.722,
+ 1,
+ 5.544,
+ -5.722,
+ 5.589,
+ -5.507,
+ 5.633,
+ -4.751,
+ 1,
+ 5.694,
+ -3.71,
+ 5.756,
+ -1.908,
+ 5.817,
+ -1.187,
+ 1,
+ 5.928,
+ 0.124,
+ 6.039,
+ 0.433,
+ 6.15,
+ 0.433,
+ 0,
+ 7.6,
+ 0.433
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamAngleZ",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.133,
+ 0,
+ 0.267,
+ 0,
+ 0.4,
+ 0,
+ 1,
+ 0.6,
+ 0,
+ 0.8,
+ 2.974,
+ 1,
+ 2.974,
+ 1,
+ 1.217,
+ 2.974,
+ 1.433,
+ 2.448,
+ 1.65,
+ 2.448,
+ 1,
+ 1.778,
+ 2.448,
+ 1.906,
+ 2.448,
+ 2.033,
+ 2.448,
+ 1,
+ 2.15,
+ 2.448,
+ 2.267,
+ 0.899,
+ 2.383,
+ -0.312,
+ 1,
+ 2.539,
+ -1.927,
+ 2.694,
+ -2.242,
+ 2.85,
+ -2.242,
+ 1,
+ 2.972,
+ -2.242,
+ 3.094,
+ -2.242,
+ 3.217,
+ -2.242,
+ 1,
+ 3.361,
+ -2.242,
+ 3.506,
+ 1.317,
+ 3.65,
+ 2,
+ 1,
+ 3.789,
+ 2.656,
+ 3.928,
+ 2.552,
+ 4.067,
+ 2.552,
+ 1,
+ 4.294,
+ 2.552,
+ 4.522,
+ 2.515,
+ 4.75,
+ 0.773,
+ 1,
+ 4.9,
+ -0.374,
+ 5.05,
+ -5.422,
+ 5.2,
+ -5.422,
+ 1,
+ 5.383,
+ -5.422,
+ 5.567,
+ -4.911,
+ 5.75,
+ -4.911,
+ 1,
+ 5.839,
+ -4.911,
+ 5.928,
+ -5.56,
+ 6.017,
+ -5.56,
+ 0,
+ 7.6,
+ -5.56
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamEyeLOpen",
+ "Segments": [
+ 0,
+ 1,
+ 1,
+ 0.15,
+ 1,
+ 0.3,
+ 1,
+ 0.45,
+ 1,
+ 1,
+ 0.483,
+ 1,
+ 0.517,
+ 0,
+ 0.55,
+ 0,
+ 1,
+ 0.561,
+ 0,
+ 0.572,
+ 0,
+ 0.583,
+ 0,
+ 1,
+ 0.628,
+ 0,
+ 0.672,
+ 0.782,
+ 0.717,
+ 0.782,
+ 1,
+ 0.95,
+ 0.782,
+ 1.183,
+ 0.782,
+ 1.417,
+ 0.782,
+ 1,
+ 1.672,
+ 0.782,
+ 1.928,
+ 0.934,
+ 2.183,
+ 0.934,
+ 1,
+ 2.211,
+ 0.934,
+ 2.239,
+ 0,
+ 2.267,
+ 0,
+ 1,
+ 2.3,
+ 0,
+ 2.333,
+ 0,
+ 2.367,
+ 0,
+ 1,
+ 2.406,
+ 0,
+ 2.444,
+ 1,
+ 2.483,
+ 1,
+ 1,
+ 2.756,
+ 1,
+ 3.028,
+ 1,
+ 3.3,
+ 1,
+ 1,
+ 3.328,
+ 1,
+ 3.356,
+ 0,
+ 3.383,
+ 0,
+ 1,
+ 3.389,
+ 0,
+ 3.394,
+ 0,
+ 3.4,
+ 0,
+ 1,
+ 3.439,
+ 0,
+ 3.478,
+ 1,
+ 3.517,
+ 1,
+ 1,
+ 3.933,
+ 1,
+ 4.35,
+ 1,
+ 4.767,
+ 1,
+ 1,
+ 4.789,
+ 1,
+ 4.811,
+ 0,
+ 4.833,
+ 0,
+ 1,
+ 4.867,
+ 0,
+ 4.9,
+ 0,
+ 4.933,
+ 0,
+ 1,
+ 4.961,
+ 0,
+ 4.989,
+ 1,
+ 5.017,
+ 1,
+ 1,
+ 5.128,
+ 1,
+ 5.239,
+ 1,
+ 5.35,
+ 1,
+ 1,
+ 5.439,
+ 1,
+ 5.528,
+ 0.759,
+ 5.617,
+ 0.759,
+ 1,
+ 5.65,
+ 0.759,
+ 5.683,
+ 0.8,
+ 5.717,
+ 0.8,
+ 0,
+ 7.6,
+ 0.8
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamEyeLSmile",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.783,
+ 0,
+ 3.567,
+ 0,
+ 5.35,
+ 0,
+ 1,
+ 5.439,
+ 0,
+ 5.528,
+ 1,
+ 5.617,
+ 1,
+ 0,
+ 7.6,
+ 1
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamEyeROpen",
+ "Segments": [
+ 0,
+ 1,
+ 1,
+ 0.15,
+ 1,
+ 0.3,
+ 1,
+ 0.45,
+ 1,
+ 1,
+ 0.483,
+ 1,
+ 0.517,
+ 0,
+ 0.55,
+ 0,
+ 1,
+ 0.561,
+ 0,
+ 0.572,
+ 0,
+ 0.583,
+ 0,
+ 1,
+ 0.628,
+ 0,
+ 0.672,
+ 0.782,
+ 0.717,
+ 0.782,
+ 1,
+ 0.95,
+ 0.782,
+ 1.183,
+ 0.782,
+ 1.417,
+ 0.782,
+ 1,
+ 1.672,
+ 0.782,
+ 1.928,
+ 0.934,
+ 2.183,
+ 0.934,
+ 1,
+ 2.211,
+ 0.934,
+ 2.239,
+ 0,
+ 2.267,
+ 0,
+ 1,
+ 2.3,
+ 0,
+ 2.333,
+ 0,
+ 2.367,
+ 0,
+ 1,
+ 2.406,
+ 0,
+ 2.444,
+ 1,
+ 2.483,
+ 1,
+ 1,
+ 2.756,
+ 1,
+ 3.028,
+ 1,
+ 3.3,
+ 1,
+ 1,
+ 3.328,
+ 1,
+ 3.356,
+ 0,
+ 3.383,
+ 0,
+ 1,
+ 3.389,
+ 0,
+ 3.394,
+ 0,
+ 3.4,
+ 0,
+ 1,
+ 3.439,
+ 0,
+ 3.478,
+ 1,
+ 3.517,
+ 1,
+ 1,
+ 3.933,
+ 1,
+ 4.35,
+ 1,
+ 4.767,
+ 1,
+ 1,
+ 4.789,
+ 1,
+ 4.811,
+ 0,
+ 4.833,
+ 0,
+ 1,
+ 4.867,
+ 0,
+ 4.9,
+ 0,
+ 4.933,
+ 0,
+ 1,
+ 4.961,
+ 0,
+ 4.989,
+ 1,
+ 5.017,
+ 1,
+ 1,
+ 5.128,
+ 1,
+ 5.239,
+ 1,
+ 5.35,
+ 1,
+ 1,
+ 5.439,
+ 1,
+ 5.528,
+ 0.759,
+ 5.617,
+ 0.759,
+ 1,
+ 5.65,
+ 0.759,
+ 5.683,
+ 0.8,
+ 5.717,
+ 0.8,
+ 0,
+ 7.6,
+ 0.8
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamEyeRSmile",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.783,
+ 0,
+ 3.567,
+ 0,
+ 5.35,
+ 0,
+ 1,
+ 5.439,
+ 0,
+ 5.528,
+ 1,
+ 5.617,
+ 1,
+ 0,
+ 7.6,
+ 1
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamEyeBallX",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.128,
+ 0,
+ 0.256,
+ 0,
+ 0.383,
+ 0,
+ 1,
+ 0.572,
+ 0,
+ 0.761,
+ 1,
+ 0.95,
+ 1,
+ 1,
+ 1.1,
+ 1,
+ 1.25,
+ -0.459,
+ 1.4,
+ -0.459,
+ 1,
+ 1.444,
+ -0.459,
+ 1.489,
+ -0.492,
+ 1.533,
+ -0.423,
+ 1,
+ 1.633,
+ -0.268,
+ 1.733,
+ 1,
+ 1.833,
+ 1,
+ 1,
+ 1.861,
+ 1,
+ 1.889,
+ 1,
+ 1.917,
+ 0.943,
+ 1,
+ 2,
+ 0.703,
+ 2.083,
+ -0.097,
+ 2.167,
+ -0.206,
+ 1,
+ 2.211,
+ -0.264,
+ 2.256,
+ -0.239,
+ 2.3,
+ -0.281,
+ 1,
+ 2.417,
+ -0.39,
+ 2.533,
+ -0.5,
+ 2.65,
+ -0.5,
+ 1,
+ 2.917,
+ -0.5,
+ 3.183,
+ -0.5,
+ 3.45,
+ -0.5,
+ 1,
+ 3.622,
+ -0.5,
+ 3.794,
+ -0.206,
+ 3.967,
+ -0.206,
+ 1,
+ 4.172,
+ -0.206,
+ 4.378,
+ -0.206,
+ 4.583,
+ -0.206,
+ 1,
+ 4.706,
+ -0.206,
+ 4.828,
+ -0.08,
+ 4.95,
+ 0,
+ 1,
+ 4.978,
+ 0.018,
+ 5.006,
+ 0.094,
+ 5.033,
+ 0.094,
+ 1,
+ 5.178,
+ 0.094,
+ 5.322,
+ 0,
+ 5.467,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamEyeBallY",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.128,
+ 0,
+ 0.256,
+ 0,
+ 0.383,
+ 0,
+ 1,
+ 0.572,
+ 0,
+ 0.761,
+ -0.5,
+ 0.95,
+ -0.5,
+ 1,
+ 1.45,
+ -0.5,
+ 1.95,
+ -0.5,
+ 2.45,
+ -0.5,
+ 1,
+ 2.517,
+ -0.5,
+ 2.583,
+ 0.1,
+ 2.65,
+ 0.1,
+ 1,
+ 2.833,
+ 0.1,
+ 3.017,
+ 0.1,
+ 3.2,
+ 0.1,
+ 1,
+ 3.339,
+ 0.1,
+ 3.478,
+ -0.8,
+ 3.617,
+ -0.8,
+ 1,
+ 4.033,
+ -0.8,
+ 4.45,
+ -0.78,
+ 4.867,
+ -0.722,
+ 1,
+ 4.917,
+ -0.715,
+ 4.967,
+ 0.477,
+ 5.017,
+ 0.477,
+ 1,
+ 5.089,
+ 0.477,
+ 5.161,
+ 0.072,
+ 5.233,
+ 0.044,
+ 1,
+ 5.35,
+ -0.002,
+ 5.467,
+ 0,
+ 5.583,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamEyeSize",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.128,
+ 0,
+ 2.256,
+ 0,
+ 3.383,
+ 0,
+ 1,
+ 3.461,
+ 0,
+ 3.539,
+ -0.7,
+ 3.617,
+ -0.7,
+ 1,
+ 3.75,
+ -0.7,
+ 3.883,
+ -0.2,
+ 4.017,
+ -0.2,
+ 1,
+ 4.261,
+ -0.2,
+ 4.506,
+ -0.2,
+ 4.75,
+ -0.2,
+ 1,
+ 4.811,
+ -0.2,
+ 4.872,
+ 0,
+ 4.933,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBrowLY",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.144,
+ 0,
+ 0.289,
+ 0.4,
+ 0.433,
+ 0.4,
+ 1,
+ 0.522,
+ 0.4,
+ 0.611,
+ 0,
+ 0.7,
+ 0,
+ 1,
+ 1.444,
+ 0,
+ 2.189,
+ 0,
+ 2.933,
+ 0,
+ 1,
+ 3.056,
+ 0,
+ 3.178,
+ 0.049,
+ 3.3,
+ 0.302,
+ 1,
+ 3.372,
+ 0.452,
+ 3.444,
+ 0.7,
+ 3.517,
+ 0.7,
+ 1,
+ 3.922,
+ 0.7,
+ 4.328,
+ 0.7,
+ 4.733,
+ 0.7,
+ 1,
+ 4.8,
+ 0.7,
+ 4.867,
+ 0,
+ 4.933,
+ 0,
+ 1,
+ 5.072,
+ 0,
+ 5.211,
+ 0,
+ 5.35,
+ 0,
+ 1,
+ 5.439,
+ 0,
+ 5.528,
+ -1,
+ 5.617,
+ -1,
+ 0,
+ 7.6,
+ -1
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBrowRY",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.144,
+ 0,
+ 0.289,
+ 0.4,
+ 0.433,
+ 0.4,
+ 1,
+ 0.522,
+ 0.4,
+ 0.611,
+ 0,
+ 0.7,
+ 0,
+ 1,
+ 1.444,
+ 0,
+ 2.189,
+ 0,
+ 2.933,
+ 0,
+ 1,
+ 3.056,
+ 0,
+ 3.178,
+ 0.05,
+ 3.3,
+ 0.304,
+ 1,
+ 3.372,
+ 0.454,
+ 3.444,
+ 0.7,
+ 3.517,
+ 0.7,
+ 1,
+ 3.922,
+ 0.7,
+ 4.328,
+ 0.7,
+ 4.733,
+ 0.7,
+ 1,
+ 4.8,
+ 0.7,
+ 4.867,
+ 0,
+ 4.933,
+ 0,
+ 1,
+ 5.072,
+ 0,
+ 5.211,
+ 0,
+ 5.35,
+ 0,
+ 1,
+ 5.439,
+ 0,
+ 5.528,
+ -1,
+ 5.617,
+ -1,
+ 0,
+ 7.6,
+ -1
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBrowLX",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBrowRX",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBrowLAngle",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.783,
+ 0,
+ 3.567,
+ 0,
+ 5.35,
+ 0,
+ 1,
+ 5.439,
+ 0,
+ 5.528,
+ 0.33,
+ 5.617,
+ 0.33,
+ 0,
+ 7.6,
+ 0.33
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBrowRAngle",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.783,
+ 0,
+ 3.567,
+ 0,
+ 5.35,
+ 0,
+ 1,
+ 5.439,
+ 0,
+ 5.528,
+ 0.327,
+ 5.617,
+ 0.327,
+ 0,
+ 7.6,
+ 0.327
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBrowLForm",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.1,
+ 0,
+ 2.2,
+ 0,
+ 3.3,
+ 0,
+ 1,
+ 3.372,
+ 0,
+ 3.444,
+ 0.5,
+ 3.517,
+ 0.5,
+ 1,
+ 3.922,
+ 0.5,
+ 4.328,
+ 0.5,
+ 4.733,
+ 0.5,
+ 1,
+ 4.8,
+ 0.5,
+ 4.867,
+ 0,
+ 4.933,
+ 0,
+ 1,
+ 4.956,
+ 0,
+ 4.978,
+ 0,
+ 5,
+ 0,
+ 1,
+ 5.05,
+ 0,
+ 5.1,
+ 0.08,
+ 5.15,
+ 0.15,
+ 1,
+ 5.228,
+ 0.26,
+ 5.306,
+ 0.289,
+ 5.383,
+ 0.289,
+ 1,
+ 5.444,
+ 0.289,
+ 5.506,
+ 0.268,
+ 5.567,
+ 0.268,
+ 0,
+ 7.6,
+ 0.268
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBrowRForm",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.1,
+ 0,
+ 2.2,
+ 0,
+ 3.3,
+ 0,
+ 1,
+ 3.372,
+ 0,
+ 3.444,
+ 0.5,
+ 3.517,
+ 0.5,
+ 1,
+ 3.922,
+ 0.5,
+ 4.328,
+ 0.5,
+ 4.733,
+ 0.5,
+ 1,
+ 4.8,
+ 0.5,
+ 4.867,
+ 0,
+ 4.933,
+ 0,
+ 1,
+ 4.956,
+ 0,
+ 4.978,
+ 0,
+ 5,
+ 0,
+ 1,
+ 5.05,
+ 0,
+ 5.1,
+ 0.08,
+ 5.15,
+ 0.15,
+ 1,
+ 5.228,
+ 0.26,
+ 5.306,
+ 0.289,
+ 5.383,
+ 0.289,
+ 1,
+ 5.444,
+ 0.289,
+ 5.506,
+ 0.268,
+ 5.567,
+ 0.268,
+ 0,
+ 7.6,
+ 0.268
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamMouthForm",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.233,
+ 0,
+ 0.467,
+ -0.436,
+ 0.7,
+ -0.436,
+ 1,
+ 0.844,
+ -0.436,
+ 0.989,
+ -0.438,
+ 1.133,
+ -0.427,
+ 1,
+ 1.278,
+ -0.417,
+ 1.422,
+ -0.178,
+ 1.567,
+ -0.1,
+ 1,
+ 1.722,
+ -0.016,
+ 1.878,
+ 0,
+ 2.033,
+ 0,
+ 1,
+ 2.078,
+ 0,
+ 2.122,
+ -0.129,
+ 2.167,
+ -0.129,
+ 1,
+ 2.256,
+ -0.129,
+ 2.344,
+ 0.649,
+ 2.433,
+ 0.912,
+ 1,
+ 2.478,
+ 1,
+ 2.522,
+ 1,
+ 2.567,
+ 1,
+ 1,
+ 2.739,
+ 1,
+ 2.911,
+ 1,
+ 3.083,
+ 1,
+ 1,
+ 3.239,
+ 1,
+ 3.394,
+ 0.692,
+ 3.55,
+ -0.028,
+ 1,
+ 3.578,
+ -0.157,
+ 3.606,
+ -0.299,
+ 3.633,
+ -0.299,
+ 1,
+ 3.717,
+ -0.299,
+ 3.8,
+ -0.1,
+ 3.883,
+ -0.1,
+ 1,
+ 4.044,
+ -0.1,
+ 4.206,
+ -0.1,
+ 4.367,
+ -0.1,
+ 1,
+ 4.428,
+ -0.1,
+ 4.489,
+ 0,
+ 4.55,
+ 0,
+ 1,
+ 4.683,
+ 0,
+ 4.817,
+ 0,
+ 4.95,
+ 0,
+ 1,
+ 5.028,
+ 0,
+ 5.106,
+ -0.206,
+ 5.183,
+ -0.206,
+ 1,
+ 5.25,
+ -0.206,
+ 5.317,
+ -0.23,
+ 5.383,
+ -0.1,
+ 1,
+ 5.461,
+ 0.052,
+ 5.539,
+ 0.71,
+ 5.617,
+ 0.71,
+ 0,
+ 7.6,
+ 0.71
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamMouthOpenY",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.856,
+ 0,
+ 1.711,
+ 0,
+ 2.567,
+ 0,
+ 1,
+ 2.939,
+ 0,
+ 3.311,
+ 0,
+ 3.683,
+ 0,
+ 1,
+ 3.75,
+ 0,
+ 3.817,
+ 0.9,
+ 3.883,
+ 0.9,
+ 1,
+ 4.044,
+ 0.9,
+ 4.206,
+ 0.9,
+ 4.367,
+ 0.9,
+ 1,
+ 4.428,
+ 0.9,
+ 4.489,
+ 0,
+ 4.55,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBodyAngleX",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.067,
+ 0,
+ 0.133,
+ 0,
+ 0.2,
+ 0,
+ 1,
+ 0.344,
+ 0,
+ 0.489,
+ 4.942,
+ 0.633,
+ 6.753,
+ 1,
+ 0.75,
+ 8.216,
+ 0.867,
+ 8.027,
+ 0.983,
+ 8.027,
+ 1,
+ 1.178,
+ 8.027,
+ 1.372,
+ 7.607,
+ 1.567,
+ 7.607,
+ 1,
+ 2.244,
+ 7.607,
+ 2.922,
+ 7.607,
+ 3.6,
+ 7.607,
+ 1,
+ 3.767,
+ 7.607,
+ 3.933,
+ 7.587,
+ 4.1,
+ 6.392,
+ 1,
+ 4.256,
+ 5.277,
+ 4.411,
+ 0.903,
+ 4.567,
+ -0.464,
+ 1,
+ 4.694,
+ -1.587,
+ 4.822,
+ -1.598,
+ 4.95,
+ -1.598,
+ 1,
+ 5.011,
+ -1.598,
+ 5.072,
+ -1.469,
+ 5.133,
+ -1.469,
+ 1,
+ 5.256,
+ -1.469,
+ 5.378,
+ -6,
+ 5.5,
+ -6,
+ 0,
+ 7.6,
+ -6
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBodyAngleY",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.028,
+ 0,
+ 0.056,
+ 0,
+ 0.083,
+ 0,
+ 1,
+ 0.194,
+ 0,
+ 0.306,
+ 1.634,
+ 0.417,
+ 1.634,
+ 1,
+ 0.489,
+ 1.634,
+ 0.561,
+ 1.657,
+ 0.633,
+ 1.082,
+ 1,
+ 0.761,
+ 0.065,
+ 0.889,
+ -1.16,
+ 1.017,
+ -1.16,
+ 1,
+ 1.194,
+ -1.16,
+ 1.372,
+ -0.421,
+ 1.55,
+ -0.421,
+ 1,
+ 1.644,
+ -0.421,
+ 1.739,
+ -0.421,
+ 1.833,
+ -0.421,
+ 1,
+ 1.9,
+ -0.421,
+ 1.967,
+ -0.155,
+ 2.033,
+ -0.155,
+ 1,
+ 2.072,
+ -0.155,
+ 2.111,
+ -0.201,
+ 2.15,
+ -0.388,
+ 1,
+ 2.206,
+ -0.655,
+ 2.261,
+ -0.856,
+ 2.317,
+ -0.856,
+ 1,
+ 2.389,
+ -0.856,
+ 2.461,
+ -0.141,
+ 2.533,
+ -0.103,
+ 1,
+ 2.711,
+ -0.012,
+ 2.889,
+ -0.025,
+ 3.067,
+ 0.096,
+ 1,
+ 3.233,
+ 0.209,
+ 3.4,
+ 1.504,
+ 3.567,
+ 1.504,
+ 1,
+ 3.772,
+ 1.504,
+ 3.978,
+ 1.445,
+ 4.183,
+ 1.299,
+ 1,
+ 4.256,
+ 1.248,
+ 4.328,
+ 1.217,
+ 4.4,
+ 1.11,
+ 1,
+ 4.494,
+ 0.971,
+ 4.589,
+ 0.441,
+ 4.683,
+ 0.22,
+ 1,
+ 4.794,
+ -0.04,
+ 4.906,
+ -0.101,
+ 5.017,
+ -0.101,
+ 1,
+ 5.056,
+ -0.101,
+ 5.094,
+ 1.323,
+ 5.133,
+ 2.069,
+ 1,
+ 5.156,
+ 2.495,
+ 5.178,
+ 2.421,
+ 5.2,
+ 2.421,
+ 1,
+ 5.228,
+ 2.421,
+ 5.256,
+ 2.521,
+ 5.283,
+ 2.13,
+ 1,
+ 5.389,
+ 0.641,
+ 5.494,
+ -0.933,
+ 5.6,
+ -0.933,
+ 1,
+ 5.65,
+ -0.933,
+ 5.7,
+ -0.917,
+ 5.75,
+ -0.799,
+ 1,
+ 5.822,
+ -0.628,
+ 5.894,
+ -0.198,
+ 5.967,
+ -0.136,
+ 1,
+ 6.111,
+ -0.013,
+ 6.256,
+ 0,
+ 6.4,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBodyAngleZ",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.317,
+ 0,
+ 0.633,
+ 0.56,
+ 0.95,
+ 0.56,
+ 1,
+ 1.294,
+ 0.56,
+ 1.639,
+ 0.56,
+ 1.983,
+ 0.56,
+ 1,
+ 2.211,
+ 0.56,
+ 2.439,
+ 1.083,
+ 2.667,
+ 1.083,
+ 1,
+ 3.444,
+ 1.083,
+ 4.222,
+ 1.083,
+ 5,
+ 1.083,
+ 1,
+ 5.206,
+ 1.083,
+ 5.411,
+ -0.534,
+ 5.617,
+ -0.78,
+ 1,
+ 5.744,
+ -0.933,
+ 5.872,
+ -0.88,
+ 6,
+ -0.88,
+ 0,
+ 7.6,
+ -0.88
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamWaistAngleZ",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBodyCenter",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.072,
+ 0,
+ 0.144,
+ 0.207,
+ 0.217,
+ -0.412,
+ 1,
+ 0.394,
+ -1.936,
+ 0.572,
+ -5.129,
+ 0.75,
+ -5.129,
+ 1,
+ 0.928,
+ -5.129,
+ 1.106,
+ -4.845,
+ 1.283,
+ -4.845,
+ 1,
+ 1.467,
+ -4.845,
+ 1.65,
+ -4.845,
+ 1.833,
+ -4.845,
+ 1,
+ 1.956,
+ -4.845,
+ 2.078,
+ -4.859,
+ 2.2,
+ -5.105,
+ 1,
+ 2.317,
+ -5.34,
+ 2.433,
+ -6.17,
+ 2.55,
+ -6.361,
+ 1,
+ 2.667,
+ -6.552,
+ 2.783,
+ -6.546,
+ 2.9,
+ -6.546,
+ 1,
+ 3.056,
+ -6.546,
+ 3.211,
+ -6.546,
+ 3.367,
+ -6.546,
+ 1,
+ 3.456,
+ -6.546,
+ 3.544,
+ -5.456,
+ 3.633,
+ -5.284,
+ 1,
+ 3.744,
+ -5.069,
+ 3.856,
+ -4.922,
+ 3.967,
+ -4.845,
+ 1,
+ 4.311,
+ -4.608,
+ 4.656,
+ -4.528,
+ 5,
+ -4.227,
+ 1,
+ 5.172,
+ -4.076,
+ 5.344,
+ 0.439,
+ 5.517,
+ 1.583,
+ 1,
+ 5.583,
+ 2.026,
+ 5.65,
+ 1.907,
+ 5.717,
+ 1.907,
+ 1,
+ 6.006,
+ 1.907,
+ 6.294,
+ 1.698,
+ 6.583,
+ 1.698,
+ 0,
+ 7.6,
+ 1.698
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBreath",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.067,
+ 0,
+ 0.133,
+ 0,
+ 0.2,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamLeftShoulderUp",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.067,
+ 0,
+ 0.133,
+ 0,
+ 0.2,
+ 0,
+ 1,
+ 0.578,
+ 0,
+ 0.956,
+ -3,
+ 1.333,
+ -3,
+ 1,
+ 1.539,
+ -3,
+ 1.744,
+ -3,
+ 1.95,
+ -3,
+ 1,
+ 2.028,
+ -3,
+ 2.106,
+ -2.062,
+ 2.183,
+ -2.062,
+ 1,
+ 2.256,
+ -2.062,
+ 2.328,
+ -3.351,
+ 2.4,
+ -3.351,
+ 1,
+ 2.444,
+ -3.351,
+ 2.489,
+ -3,
+ 2.533,
+ -3,
+ 1,
+ 2.911,
+ -3,
+ 3.289,
+ -3,
+ 3.667,
+ -3,
+ 1,
+ 3.811,
+ -3,
+ 3.956,
+ -2.865,
+ 4.1,
+ -1.907,
+ 1,
+ 4.217,
+ -1.133,
+ 4.333,
+ 0,
+ 4.45,
+ 0,
+ 1,
+ 4.578,
+ 0,
+ 4.706,
+ 0,
+ 4.833,
+ 0,
+ 1,
+ 4.906,
+ 0,
+ 4.978,
+ -0.309,
+ 5.05,
+ -0.309,
+ 1,
+ 5.117,
+ -0.309,
+ 5.183,
+ 8.552,
+ 5.25,
+ 8.552,
+ 1,
+ 5.278,
+ 8.552,
+ 5.306,
+ 8.69,
+ 5.333,
+ 8.067,
+ 1,
+ 5.4,
+ 6.572,
+ 5.467,
+ 4.304,
+ 5.533,
+ 4.304,
+ 1,
+ 5.694,
+ 4.304,
+ 5.856,
+ 5.077,
+ 6.017,
+ 5.077,
+ 0,
+ 7.6,
+ 5.077
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamRightShoulderUp",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.039,
+ 0,
+ 0.078,
+ -0.464,
+ 0.117,
+ -0.464,
+ 1,
+ 0.172,
+ -0.464,
+ 0.228,
+ 0.731,
+ 0.283,
+ 3.119,
+ 1,
+ 0.333,
+ 5.268,
+ 0.383,
+ 6.34,
+ 0.433,
+ 6.34,
+ 1,
+ 0.489,
+ 6.34,
+ 0.544,
+ 6.294,
+ 0.6,
+ 4.356,
+ 1,
+ 0.661,
+ 2.224,
+ 0.722,
+ -1.546,
+ 0.783,
+ -1.546,
+ 1,
+ 0.839,
+ -1.546,
+ 0.894,
+ -0.85,
+ 0.95,
+ -0.515,
+ 1,
+ 1.028,
+ -0.046,
+ 1.106,
+ 0,
+ 1.183,
+ 0,
+ 1,
+ 1.439,
+ 0,
+ 1.694,
+ 0,
+ 1.95,
+ 0,
+ 1,
+ 2.028,
+ 0,
+ 2.106,
+ 1.366,
+ 2.183,
+ 1.366,
+ 1,
+ 2.256,
+ 1.366,
+ 2.328,
+ -0.314,
+ 2.4,
+ -0.314,
+ 1,
+ 2.45,
+ -0.314,
+ 2.5,
+ 0,
+ 2.55,
+ 0,
+ 1,
+ 2.8,
+ 0,
+ 3.05,
+ 0,
+ 3.3,
+ 0,
+ 1,
+ 3.528,
+ 0,
+ 3.756,
+ -5,
+ 3.983,
+ -5,
+ 1,
+ 4.2,
+ -5,
+ 4.417,
+ -5,
+ 4.633,
+ -5,
+ 1,
+ 4.772,
+ -5,
+ 4.911,
+ -4.534,
+ 5.05,
+ -2.964,
+ 1,
+ 5.144,
+ -1.896,
+ 5.239,
+ -0.881,
+ 5.333,
+ -0.881,
+ 1,
+ 5.439,
+ -0.881,
+ 5.544,
+ -2.603,
+ 5.65,
+ -2.603,
+ 1,
+ 5.728,
+ -2.603,
+ 5.806,
+ -1.546,
+ 5.883,
+ -1.546,
+ 0,
+ 7.6,
+ -1.546
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamLegR",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.667,
+ 0,
+ 3.333,
+ 0,
+ 5,
+ 0,
+ 1,
+ 5.111,
+ 0,
+ 5.222,
+ 7.912,
+ 5.333,
+ 9.046,
+ 1,
+ 5.444,
+ 10,
+ 5.556,
+ 10,
+ 5.667,
+ 10,
+ 0,
+ 7.6,
+ 10
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamLegL",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.078,
+ 0,
+ 0.156,
+ 0,
+ 0.233,
+ 0,
+ 1,
+ 0.339,
+ 0,
+ 0.444,
+ 8.043,
+ 0.55,
+ 9.407,
+ 1,
+ 0.617,
+ 10,
+ 0.683,
+ 10,
+ 0.75,
+ 10,
+ 1,
+ 1.533,
+ 10,
+ 2.317,
+ 10,
+ 3.1,
+ 10,
+ 1,
+ 3.194,
+ 10,
+ 3.289,
+ 10,
+ 3.383,
+ 9.407,
+ 1,
+ 3.533,
+ 8.198,
+ 3.683,
+ 1.974,
+ 3.833,
+ 0.593,
+ 1,
+ 3.917,
+ -0.175,
+ 4,
+ 0,
+ 4.083,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamArmL01",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.2,
+ 0,
+ 0.4,
+ -1.928,
+ 0.6,
+ -1.928,
+ 1,
+ 0.867,
+ -1.928,
+ 1.133,
+ -1.156,
+ 1.4,
+ -0.64,
+ 1,
+ 1.633,
+ -0.188,
+ 1.867,
+ -0.175,
+ 2.1,
+ -0.175,
+ 1,
+ 2.217,
+ -0.175,
+ 2.333,
+ -0.893,
+ 2.45,
+ -0.893,
+ 1,
+ 2.617,
+ -0.893,
+ 2.783,
+ -0.286,
+ 2.95,
+ -0.172,
+ 1,
+ 3.156,
+ -0.032,
+ 3.361,
+ -0.05,
+ 3.567,
+ 0.087,
+ 1,
+ 3.722,
+ 0.191,
+ 3.878,
+ 0.855,
+ 4.033,
+ 1.461,
+ 1,
+ 4.2,
+ 2.111,
+ 4.367,
+ 3.241,
+ 4.533,
+ 4.256,
+ 1,
+ 4.606,
+ 4.697,
+ 4.678,
+ 5.09,
+ 4.75,
+ 5.09,
+ 1,
+ 4.85,
+ 5.09,
+ 4.95,
+ 2.964,
+ 5.05,
+ 2.964,
+ 1,
+ 5.078,
+ 2.964,
+ 5.106,
+ 2.488,
+ 5.133,
+ 4.343,
+ 1,
+ 5.194,
+ 8.423,
+ 5.256,
+ 27.49,
+ 5.317,
+ 32.744,
+ 1,
+ 5.356,
+ 36.088,
+ 5.394,
+ 35.889,
+ 5.433,
+ 35.889,
+ 1,
+ 5.489,
+ 35.889,
+ 5.544,
+ 35.026,
+ 5.6,
+ 35.026,
+ 0,
+ 7.6,
+ 35.026
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamArmL02",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.072,
+ 0,
+ 0.144,
+ 0,
+ 0.217,
+ 0,
+ 1,
+ 0.344,
+ 0,
+ 0.472,
+ 0,
+ 0.6,
+ 0,
+ 1,
+ 0.894,
+ 0,
+ 1.189,
+ -0.253,
+ 1.483,
+ -0.253,
+ 1,
+ 2.228,
+ -0.253,
+ 2.972,
+ -0.17,
+ 3.717,
+ -0.17,
+ 1,
+ 3.989,
+ -0.17,
+ 4.261,
+ -0.432,
+ 4.533,
+ -1.186,
+ 1,
+ 4.644,
+ -1.493,
+ 4.756,
+ -1.823,
+ 4.867,
+ -1.823,
+ 1,
+ 4.95,
+ -1.823,
+ 5.033,
+ -1.34,
+ 5.117,
+ -1.34,
+ 1,
+ 5.178,
+ -1.34,
+ 5.239,
+ -8.602,
+ 5.3,
+ -17.371,
+ 1,
+ 5.356,
+ -25.343,
+ 5.411,
+ -27.448,
+ 5.467,
+ -27.448,
+ 1,
+ 5.517,
+ -27.448,
+ 5.567,
+ -27.24,
+ 5.617,
+ -27.24,
+ 0,
+ 7.6,
+ -27.24
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamArmL03",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.094,
+ 0,
+ 0.189,
+ 0,
+ 0.283,
+ 0,
+ 1,
+ 0.433,
+ 0,
+ 0.583,
+ -2.4,
+ 0.733,
+ -2.4,
+ 1,
+ 0.989,
+ -2.4,
+ 1.244,
+ -2.4,
+ 1.5,
+ -2.4,
+ 1,
+ 2.006,
+ -2.4,
+ 2.511,
+ -1.67,
+ 3.017,
+ -1.67,
+ 1,
+ 3.367,
+ -1.67,
+ 3.717,
+ -1.67,
+ 4.067,
+ -1.67,
+ 1,
+ 4.256,
+ -1.67,
+ 4.444,
+ 3.289,
+ 4.633,
+ 3.289,
+ 1,
+ 4.744,
+ 3.289,
+ 4.856,
+ 0,
+ 4.967,
+ 0,
+ 1,
+ 5.067,
+ 0,
+ 5.167,
+ -0.027,
+ 5.267,
+ 0.584,
+ 1,
+ 5.328,
+ 0.957,
+ 5.389,
+ 25.32,
+ 5.45,
+ 25.32,
+ 0,
+ 7.6,
+ 25.32
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHandL",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.117,
+ 0,
+ 0.233,
+ 0,
+ 0.35,
+ 0,
+ 1,
+ 0.5,
+ 0,
+ 0.65,
+ -6,
+ 0.8,
+ -6,
+ 1,
+ 1.083,
+ -6,
+ 1.367,
+ -5,
+ 1.65,
+ -5,
+ 1,
+ 1.828,
+ -5,
+ 2.006,
+ -5.747,
+ 2.183,
+ -5.747,
+ 1,
+ 2.306,
+ -5.747,
+ 2.428,
+ -4.668,
+ 2.55,
+ -3.789,
+ 1,
+ 2.683,
+ -2.83,
+ 2.817,
+ -2.68,
+ 2.95,
+ -2.68,
+ 1,
+ 3.067,
+ -2.68,
+ 3.183,
+ -2.68,
+ 3.3,
+ -2.68,
+ 1,
+ 3.472,
+ -2.68,
+ 3.644,
+ -6.153,
+ 3.817,
+ -7.629,
+ 1,
+ 3.928,
+ -8.581,
+ 4.039,
+ -8.402,
+ 4.15,
+ -8.402,
+ 1,
+ 4.222,
+ -8.402,
+ 4.294,
+ -6.127,
+ 4.367,
+ -5.464,
+ 1,
+ 4.472,
+ -4.495,
+ 4.578,
+ -4.459,
+ 4.683,
+ -4.459,
+ 1,
+ 4.856,
+ -4.459,
+ 5.028,
+ -7,
+ 5.2,
+ -7,
+ 1,
+ 5.256,
+ -7,
+ 5.311,
+ 10,
+ 5.367,
+ 10,
+ 0,
+ 7.6,
+ 10
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHandLDrawOrder",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.75,
+ 0,
+ 3.5,
+ 0,
+ 5.25,
+ 0,
+ 1,
+ 5.256,
+ 0,
+ 5.261,
+ 1,
+ 5.267,
+ 1,
+ 0,
+ 7.6,
+ 1
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamArmR01",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.039,
+ 0,
+ 0.078,
+ -0.539,
+ 0.117,
+ 1.379,
+ 1,
+ 0.228,
+ 6.858,
+ 0.339,
+ 24.256,
+ 0.45,
+ 30.618,
+ 1,
+ 0.483,
+ 32.527,
+ 0.517,
+ 33.401,
+ 0.55,
+ 33.471,
+ 1,
+ 0.578,
+ 33.529,
+ 0.606,
+ 33.512,
+ 0.633,
+ 33.512,
+ 1,
+ 0.672,
+ 33.512,
+ 0.711,
+ 33.163,
+ 0.75,
+ 33.076,
+ 1,
+ 0.822,
+ 32.914,
+ 0.894,
+ 32.9,
+ 0.967,
+ 32.9,
+ 1,
+ 1.294,
+ 32.9,
+ 1.622,
+ 32.9,
+ 1.95,
+ 32.9,
+ 1,
+ 2.028,
+ 32.9,
+ 2.106,
+ 32.65,
+ 2.183,
+ 32.65,
+ 1,
+ 2.256,
+ 32.65,
+ 2.328,
+ 32.9,
+ 2.4,
+ 32.9,
+ 1,
+ 2.75,
+ 32.9,
+ 3.1,
+ 32.9,
+ 3.45,
+ 32.9,
+ 1,
+ 3.5,
+ 32.9,
+ 3.55,
+ 33.166,
+ 3.6,
+ 30.828,
+ 1,
+ 3.672,
+ 27.45,
+ 3.744,
+ 12.303,
+ 3.817,
+ 8.119,
+ 1,
+ 3.933,
+ 1.359,
+ 4.05,
+ 0,
+ 4.167,
+ 0,
+ 1,
+ 4.283,
+ 0,
+ 4.4,
+ 1.16,
+ 4.517,
+ 3.415,
+ 1,
+ 4.589,
+ 4.811,
+ 4.661,
+ 5.477,
+ 4.733,
+ 5.477,
+ 1,
+ 4.883,
+ 5.477,
+ 5.033,
+ 1.483,
+ 5.183,
+ -1.346,
+ 1,
+ 5.256,
+ -2.709,
+ 5.328,
+ -2.506,
+ 5.4,
+ -2.506,
+ 1,
+ 5.617,
+ -2.506,
+ 5.833,
+ -1.712,
+ 6.05,
+ -1.712,
+ 0,
+ 7.6,
+ -1.712
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamArmR02",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.144,
+ 0,
+ 0.289,
+ -4.804,
+ 0.433,
+ -15.512,
+ 1,
+ 0.533,
+ -22.925,
+ 0.633,
+ -27.24,
+ 0.733,
+ -27.24,
+ 1,
+ 1.139,
+ -27.24,
+ 1.544,
+ -27.24,
+ 1.95,
+ -27.24,
+ 1,
+ 2.028,
+ -27.24,
+ 2.106,
+ -26.96,
+ 2.183,
+ -26.96,
+ 1,
+ 2.256,
+ -26.96,
+ 2.328,
+ -27.24,
+ 2.4,
+ -27.24,
+ 1,
+ 2.728,
+ -27.24,
+ 3.056,
+ -27.24,
+ 3.383,
+ -27.24,
+ 1,
+ 3.539,
+ -27.24,
+ 3.694,
+ -5.411,
+ 3.85,
+ -2.516,
+ 1,
+ 3.961,
+ -0.448,
+ 4.072,
+ -1.002,
+ 4.183,
+ -1.002,
+ 1,
+ 4.328,
+ -1.002,
+ 4.472,
+ -2.062,
+ 4.617,
+ -2.062,
+ 1,
+ 4.789,
+ -2.062,
+ 4.961,
+ -1.805,
+ 5.133,
+ -1.237,
+ 1,
+ 5.35,
+ -0.522,
+ 5.567,
+ -0.135,
+ 5.783,
+ -0.135,
+ 0,
+ 7.6,
+ -0.135
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamArmR03",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.15,
+ 0,
+ 0.3,
+ -0.008,
+ 0.45,
+ 0.584,
+ 1,
+ 0.533,
+ 0.913,
+ 0.617,
+ 23.976,
+ 0.7,
+ 24.825,
+ 1,
+ 0.767,
+ 25.504,
+ 0.833,
+ 25.32,
+ 0.9,
+ 25.32,
+ 1,
+ 1.25,
+ 25.32,
+ 1.6,
+ 25.32,
+ 1.95,
+ 25.32,
+ 1,
+ 2.028,
+ 25.32,
+ 2.106,
+ 24.825,
+ 2.183,
+ 24.825,
+ 1,
+ 2.256,
+ 24.825,
+ 2.328,
+ 25.32,
+ 2.4,
+ 25.32,
+ 1,
+ 2.728,
+ 25.32,
+ 3.056,
+ 25.32,
+ 3.383,
+ 25.32,
+ 1,
+ 3.444,
+ 25.32,
+ 3.506,
+ 8.042,
+ 3.567,
+ 5.07,
+ 1,
+ 3.689,
+ -0.875,
+ 3.811,
+ -1.67,
+ 3.933,
+ -1.67,
+ 1,
+ 4.022,
+ -1.67,
+ 4.111,
+ 3.298,
+ 4.2,
+ 3.298,
+ 0,
+ 7.6,
+ 3.298
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHandR",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.111,
+ 0,
+ 0.222,
+ -7,
+ 0.333,
+ -7,
+ 1,
+ 0.433,
+ -7,
+ 0.533,
+ 6.349,
+ 0.633,
+ 8.995,
+ 1,
+ 0.689,
+ 10,
+ 0.744,
+ 10,
+ 0.8,
+ 10,
+ 1,
+ 1.183,
+ 10,
+ 1.567,
+ 10,
+ 1.95,
+ 10,
+ 1,
+ 2.1,
+ 10,
+ 2.25,
+ 10,
+ 2.4,
+ 10,
+ 1,
+ 2.722,
+ 10,
+ 3.044,
+ 10,
+ 3.367,
+ 10,
+ 1,
+ 3.478,
+ 10,
+ 3.589,
+ -10,
+ 3.7,
+ -10,
+ 1,
+ 3.828,
+ -10,
+ 3.956,
+ -10,
+ 4.083,
+ -10,
+ 1,
+ 4.244,
+ -10,
+ 4.406,
+ 0.141,
+ 4.567,
+ 2.088,
+ 1,
+ 4.678,
+ 3.43,
+ 4.789,
+ 3.067,
+ 4.9,
+ 3.067,
+ 1,
+ 5.056,
+ 3.067,
+ 5.211,
+ -1.703,
+ 5.367,
+ -5.103,
+ 1,
+ 5.417,
+ -6.196,
+ 5.467,
+ -5.876,
+ 5.517,
+ -5.876,
+ 1,
+ 5.622,
+ -5.876,
+ 5.728,
+ -4.682,
+ 5.833,
+ -4.098,
+ 1,
+ 5.978,
+ -3.298,
+ 6.122,
+ -3.222,
+ 6.267,
+ -3.222,
+ 0,
+ 7.6,
+ -3.222
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHandRDrawOrder",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.161,
+ 0,
+ 0.322,
+ 0,
+ 0.483,
+ 0,
+ 1,
+ 0.489,
+ 0,
+ 0.494,
+ 1,
+ 0.5,
+ 1,
+ 1,
+ 0.983,
+ 1,
+ 1.467,
+ 1,
+ 1.95,
+ 1,
+ 1,
+ 2.1,
+ 1,
+ 2.25,
+ 1,
+ 2.4,
+ 1,
+ 1,
+ 2.806,
+ 1,
+ 3.211,
+ 1,
+ 3.617,
+ 1,
+ 1,
+ 3.622,
+ 1,
+ 3.628,
+ 0,
+ 3.633,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHairFront",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHairSide",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHairBack",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHairFrontFuwa",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHairSideFuwa",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHairBackFuwa",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamCollarString",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamNecklace1",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamNecklace2",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamNecklace3",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamPullHandle",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamPocketString",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamJacket",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamCollarFuwa",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamCollarStringFuwa",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHologram",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.822,
+ 0,
+ 1.644,
+ 0,
+ 2.467,
+ 0,
+ 1,
+ 3.094,
+ 0,
+ 3.722,
+ 1,
+ 4.35,
+ 1,
+ 0,
+ 7.6,
+ 1
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamTransparent",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.067,
+ 0,
+ 2.133,
+ 0,
+ 3.2,
+ 0,
+ 1,
+ 3.622,
+ 0,
+ 4.044,
+ 1,
+ 4.467,
+ 1,
+ 1,
+ 4.889,
+ 1,
+ 5.311,
+ 0,
+ 5.733,
+ 0,
+ 1,
+ 6.156,
+ 0,
+ 6.578,
+ 1,
+ 7,
+ 1,
+ 1,
+ 7.2,
+ 1,
+ 7.4,
+ 0.776,
+ 7.6,
+ 0.539
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHologramPattern",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 7.6,
+ 0.38
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamMonochrome",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamNight",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamLight",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamDisplayWidth1",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.089,
+ 0,
+ 0.178,
+ 0,
+ 0.267,
+ 0,
+ 1,
+ 0.322,
+ 0,
+ 0.378,
+ 0.428,
+ 0.433,
+ 0.763,
+ 1,
+ 0.472,
+ 0.998,
+ 0.511,
+ 1,
+ 0.55,
+ 1,
+ 1,
+ 1.261,
+ 1,
+ 1.972,
+ 1,
+ 2.683,
+ 1,
+ 1,
+ 2.706,
+ 1,
+ 2.728,
+ 0.29,
+ 2.75,
+ 0.135,
+ 1,
+ 2.772,
+ 0,
+ 2.794,
+ 0,
+ 2.817,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamDisplayHeight1",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.15,
+ 0,
+ 0.3,
+ 0,
+ 0.45,
+ 0,
+ 1,
+ 0.472,
+ 0,
+ 0.494,
+ 0,
+ 0.517,
+ 0.035,
+ 1,
+ 0.539,
+ 0.08,
+ 0.561,
+ 1.042,
+ 0.583,
+ 1.042,
+ 1,
+ 0.606,
+ 1.042,
+ 0.628,
+ 1,
+ 0.65,
+ 1,
+ 1,
+ 1.278,
+ 1,
+ 1.906,
+ 1,
+ 2.533,
+ 1,
+ 1,
+ 2.55,
+ 1,
+ 2.567,
+ 1.148,
+ 2.583,
+ 1.148,
+ 1,
+ 2.622,
+ 1.148,
+ 2.661,
+ 0,
+ 2.7,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamDisplayWidth2",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.072,
+ 0,
+ 0.144,
+ 0,
+ 0.217,
+ 0,
+ 1,
+ 0.272,
+ 0,
+ 0.328,
+ 0.428,
+ 0.383,
+ 0.763,
+ 1,
+ 0.422,
+ 0.998,
+ 0.461,
+ 1,
+ 0.5,
+ 1,
+ 1,
+ 1.239,
+ 1,
+ 1.978,
+ 1,
+ 2.717,
+ 1,
+ 1,
+ 2.739,
+ 1,
+ 2.761,
+ 0.29,
+ 2.783,
+ 0.135,
+ 1,
+ 2.806,
+ 0,
+ 2.828,
+ 0,
+ 2.85,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamDisplayHeight2",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.133,
+ 0,
+ 0.267,
+ 0,
+ 0.4,
+ 0,
+ 1,
+ 0.422,
+ 0,
+ 0.444,
+ 0,
+ 0.467,
+ 0.035,
+ 1,
+ 0.489,
+ 0.08,
+ 0.511,
+ 1.042,
+ 0.533,
+ 1.042,
+ 1,
+ 0.556,
+ 1.042,
+ 0.578,
+ 1,
+ 0.6,
+ 1,
+ 1,
+ 1.256,
+ 1,
+ 1.911,
+ 1,
+ 2.567,
+ 1,
+ 1,
+ 2.583,
+ 1,
+ 2.6,
+ 1.148,
+ 2.617,
+ 1.148,
+ 1,
+ 2.656,
+ 1.148,
+ 2.694,
+ 0,
+ 2.733,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamDisplayAngle",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.111,
+ 0,
+ 0.222,
+ 0,
+ 0.333,
+ 0,
+ 1,
+ 0.411,
+ 0,
+ 0.489,
+ 1,
+ 0.567,
+ 1,
+ 1,
+ 1.367,
+ 1,
+ 2.167,
+ 1,
+ 2.967,
+ 1,
+ 1,
+ 2.978,
+ 1,
+ 2.989,
+ 0,
+ 3,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamNoise",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamNoiseRotate",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 7.6,
+ 0
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test_suites/avatar/models/runtime/motions/mtn_03.motion3.json b/test_suites/avatar/models/runtime/motions/mtn_03.motion3.json
new file mode 100644
index 0000000..564fbab
--- /dev/null
+++ b/test_suites/avatar/models/runtime/motions/mtn_03.motion3.json
@@ -0,0 +1,5104 @@
+{
+ "Version": 3,
+ "Meta": {
+ "Duration": 8.517,
+ "Fps": 60.0,
+ "FadeInTime": 0.25,
+ "FadeOutTime": 0.25,
+ "Loop": true,
+ "AreBeziersRestricted": true,
+ "CurveCount": 68,
+ "TotalSegmentCount": 694,
+ "TotalPointCount": 1992,
+ "UserDataCount": 0,
+ "TotalUserDataSize": 0
+ },
+ "Curves": [
+ {
+ "Target": "Parameter",
+ "Id": "ParamAngleX",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.061,
+ 0,
+ 0.122,
+ 0,
+ 0.183,
+ 0,
+ 1,
+ 0.389,
+ 0,
+ 0.594,
+ 12.377,
+ 0.8,
+ 17.706,
+ 1,
+ 0.878,
+ 19.722,
+ 0.956,
+ 19,
+ 1.033,
+ 19,
+ 1,
+ 1.144,
+ 19,
+ 1.256,
+ 19,
+ 1.367,
+ 19,
+ 1,
+ 1.506,
+ 19,
+ 1.644,
+ 23.603,
+ 1.783,
+ 23.603,
+ 1,
+ 1.944,
+ 23.603,
+ 2.106,
+ 23.603,
+ 2.267,
+ 23.603,
+ 1,
+ 2.439,
+ 23.603,
+ 2.611,
+ 23.608,
+ 2.783,
+ 21.52,
+ 1,
+ 2.889,
+ 20.24,
+ 2.994,
+ 6.194,
+ 3.1,
+ 6.194,
+ 1,
+ 3.178,
+ 6.194,
+ 3.256,
+ 30,
+ 3.333,
+ 30,
+ 1,
+ 3.411,
+ 30,
+ 3.489,
+ 13.189,
+ 3.567,
+ 13.189,
+ 1,
+ 3.644,
+ 13.189,
+ 3.722,
+ 28.02,
+ 3.8,
+ 28.02,
+ 1,
+ 3.878,
+ 28.02,
+ 3.956,
+ 14.449,
+ 4.033,
+ 14.449,
+ 1,
+ 4.167,
+ 14.449,
+ 4.3,
+ 19,
+ 4.433,
+ 19,
+ 1,
+ 4.7,
+ 19,
+ 4.967,
+ 19,
+ 5.233,
+ 19,
+ 1,
+ 5.322,
+ 19,
+ 5.411,
+ 18.236,
+ 5.5,
+ 18.22,
+ 1,
+ 5.689,
+ 18.186,
+ 5.878,
+ 18.185,
+ 6.067,
+ 18.149,
+ 1,
+ 6.167,
+ 18.13,
+ 6.267,
+ 6.696,
+ 6.367,
+ 0,
+ 1,
+ 6.439,
+ -4.836,
+ 6.511,
+ -8.572,
+ 6.583,
+ -8.572,
+ 1,
+ 6.694,
+ -8.572,
+ 6.806,
+ -7.78,
+ 6.917,
+ -7.634,
+ 1,
+ 7.111,
+ -7.378,
+ 7.306,
+ -7.367,
+ 7.5,
+ -7.367,
+ 0,
+ 8.517,
+ -7.367
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamAngleY",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.094,
+ 0,
+ 0.189,
+ 0,
+ 0.283,
+ 0,
+ 1,
+ 0.361,
+ 0,
+ 0.439,
+ 0.114,
+ 0.517,
+ -2.32,
+ 1,
+ 0.611,
+ -5.275,
+ 0.706,
+ -17.231,
+ 0.8,
+ -20.529,
+ 1,
+ 0.822,
+ -21.305,
+ 0.844,
+ -20.954,
+ 0.867,
+ -20.954,
+ 1,
+ 0.928,
+ -20.954,
+ 0.989,
+ -20,
+ 1.05,
+ -20,
+ 1,
+ 1.144,
+ -20,
+ 1.239,
+ -20,
+ 1.333,
+ -20,
+ 1,
+ 1.383,
+ -20,
+ 1.433,
+ -22.5,
+ 1.483,
+ -22.5,
+ 1,
+ 1.539,
+ -22.5,
+ 1.594,
+ -13.116,
+ 1.65,
+ -11.521,
+ 1,
+ 1.711,
+ -9.767,
+ 1.772,
+ -9.897,
+ 1.833,
+ -9.897,
+ 1,
+ 1.961,
+ -9.897,
+ 2.089,
+ -9.897,
+ 2.217,
+ -9.897,
+ 1,
+ 2.372,
+ -9.897,
+ 2.528,
+ -12.68,
+ 2.683,
+ -12.68,
+ 1,
+ 2.767,
+ -12.68,
+ 2.85,
+ 4.407,
+ 2.933,
+ 4.407,
+ 1,
+ 3.039,
+ 4.407,
+ 3.144,
+ -24.94,
+ 3.25,
+ -24.94,
+ 1,
+ 3.328,
+ -24.94,
+ 3.406,
+ -20,
+ 3.483,
+ -20,
+ 1,
+ 3.561,
+ -20,
+ 3.639,
+ -20.911,
+ 3.717,
+ -21.701,
+ 1,
+ 3.85,
+ -23.055,
+ 3.983,
+ -23.428,
+ 4.117,
+ -23.428,
+ 1,
+ 4.244,
+ -23.428,
+ 4.372,
+ -6.339,
+ 4.5,
+ -5.026,
+ 1,
+ 4.644,
+ -3.542,
+ 4.789,
+ -2.708,
+ 4.933,
+ -2.479,
+ 1,
+ 5.033,
+ -2.321,
+ 5.133,
+ -2.38,
+ 5.233,
+ -2.248,
+ 1,
+ 5.311,
+ -2.146,
+ 5.389,
+ 1.216,
+ 5.467,
+ 1.392,
+ 1,
+ 5.628,
+ 1.756,
+ 5.789,
+ 1.815,
+ 5.95,
+ 2.165,
+ 1,
+ 6.011,
+ 2.298,
+ 6.072,
+ 6.572,
+ 6.133,
+ 6.572,
+ 1,
+ 6.172,
+ 6.572,
+ 6.211,
+ 6.936,
+ 6.25,
+ 4.407,
+ 1,
+ 6.311,
+ 0.433,
+ 6.372,
+ -18.791,
+ 6.433,
+ -23.892,
+ 1,
+ 6.5,
+ -29.456,
+ 6.567,
+ -30,
+ 6.633,
+ -30,
+ 1,
+ 6.75,
+ -30,
+ 6.867,
+ -27.623,
+ 6.983,
+ -27.173,
+ 1,
+ 7.178,
+ -26.423,
+ 7.372,
+ -26.4,
+ 7.567,
+ -26.4,
+ 0,
+ 8.517,
+ -26.4
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamAngleZ",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.161,
+ 0,
+ 0.322,
+ 1.083,
+ 0.483,
+ 1.083,
+ 1,
+ 0.583,
+ 1.083,
+ 0.683,
+ -2,
+ 0.783,
+ -2,
+ 1,
+ 0.967,
+ -2,
+ 1.15,
+ -2,
+ 1.333,
+ -2,
+ 1,
+ 1.389,
+ -2,
+ 1.444,
+ -0.846,
+ 1.5,
+ 0,
+ 1,
+ 1.611,
+ 1.692,
+ 1.722,
+ 2.15,
+ 1.833,
+ 2.15,
+ 1,
+ 2.111,
+ 2.15,
+ 2.389,
+ 2.15,
+ 2.667,
+ 2.15,
+ 1,
+ 2.8,
+ 2.15,
+ 2.933,
+ -0.91,
+ 3.067,
+ -0.91,
+ 1,
+ 3.161,
+ -0.91,
+ 3.256,
+ 2.15,
+ 3.35,
+ 2.15,
+ 1,
+ 3.428,
+ 2.15,
+ 3.506,
+ -0.434,
+ 3.583,
+ -0.434,
+ 1,
+ 3.661,
+ -0.434,
+ 3.739,
+ 2.15,
+ 3.817,
+ 2.15,
+ 1,
+ 3.894,
+ 2.15,
+ 3.972,
+ -0.073,
+ 4.05,
+ -0.073,
+ 1,
+ 4.194,
+ -0.073,
+ 4.339,
+ 0.825,
+ 4.483,
+ 0.825,
+ 1,
+ 4.972,
+ 0.825,
+ 5.461,
+ 0.825,
+ 5.95,
+ 0.825,
+ 1,
+ 6.039,
+ 0.825,
+ 6.128,
+ -2.14,
+ 6.217,
+ -2.14,
+ 1,
+ 6.356,
+ -2.14,
+ 6.494,
+ 18,
+ 6.633,
+ 18,
+ 1,
+ 6.794,
+ 18,
+ 6.956,
+ 17.038,
+ 7.117,
+ 16.796,
+ 1,
+ 7.328,
+ 16.479,
+ 7.539,
+ 16.486,
+ 7.75,
+ 16.486,
+ 0,
+ 8.517,
+ 16.486
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamEyeLOpen",
+ "Segments": [
+ 0,
+ 1,
+ 1,
+ 0.478,
+ 1,
+ 0.956,
+ 1,
+ 1.433,
+ 1,
+ 1,
+ 1.456,
+ 1,
+ 1.478,
+ 0,
+ 1.5,
+ 0,
+ 1,
+ 1.506,
+ 0,
+ 1.511,
+ 0,
+ 1.517,
+ 0,
+ 1,
+ 1.544,
+ 0,
+ 1.572,
+ 1,
+ 1.6,
+ 1,
+ 1,
+ 1.783,
+ 1,
+ 1.967,
+ 1,
+ 2.15,
+ 1,
+ 1,
+ 2.344,
+ 1,
+ 2.539,
+ 0.9,
+ 2.733,
+ 0.9,
+ 1,
+ 2.856,
+ 0.9,
+ 2.978,
+ 1,
+ 3.1,
+ 1,
+ 1,
+ 3.178,
+ 1,
+ 3.256,
+ 0,
+ 3.333,
+ 0,
+ 1,
+ 3.633,
+ 0,
+ 3.933,
+ 0,
+ 4.233,
+ 0,
+ 1,
+ 4.333,
+ 0,
+ 4.433,
+ 1,
+ 4.533,
+ 1,
+ 1,
+ 4.722,
+ 1,
+ 4.911,
+ 1,
+ 5.1,
+ 1,
+ 1,
+ 5.128,
+ 1,
+ 5.156,
+ 0,
+ 5.183,
+ 0,
+ 1,
+ 5.2,
+ 0,
+ 5.217,
+ 0,
+ 5.233,
+ 0,
+ 1,
+ 5.261,
+ 0,
+ 5.289,
+ 1,
+ 5.317,
+ 1,
+ 1,
+ 5.517,
+ 1,
+ 5.717,
+ 1,
+ 5.917,
+ 1,
+ 1,
+ 5.989,
+ 1,
+ 6.061,
+ 0,
+ 6.133,
+ 0,
+ 1,
+ 6.161,
+ 0,
+ 6.189,
+ 0,
+ 6.217,
+ 0,
+ 1,
+ 6.294,
+ 0,
+ 6.372,
+ 1,
+ 6.45,
+ 1,
+ 1,
+ 6.506,
+ 1,
+ 6.561,
+ 0.8,
+ 6.617,
+ 0.8,
+ 0,
+ 8.517,
+ 0.8
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamEyeLSmile",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 8.517,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamEyeROpen",
+ "Segments": [
+ 0,
+ 1,
+ 1,
+ 0.478,
+ 1,
+ 0.956,
+ 1,
+ 1.433,
+ 1,
+ 1,
+ 1.456,
+ 1,
+ 1.478,
+ 0,
+ 1.5,
+ 0,
+ 1,
+ 1.506,
+ 0,
+ 1.511,
+ 0,
+ 1.517,
+ 0,
+ 1,
+ 1.544,
+ 0,
+ 1.572,
+ 1,
+ 1.6,
+ 1,
+ 1,
+ 1.783,
+ 1,
+ 1.967,
+ 1,
+ 2.15,
+ 1,
+ 1,
+ 2.344,
+ 1,
+ 2.539,
+ 0.9,
+ 2.733,
+ 0.9,
+ 1,
+ 2.856,
+ 0.9,
+ 2.978,
+ 1,
+ 3.1,
+ 1,
+ 1,
+ 3.178,
+ 1,
+ 3.256,
+ 0,
+ 3.333,
+ 0,
+ 1,
+ 3.633,
+ 0,
+ 3.933,
+ 0,
+ 4.233,
+ 0,
+ 1,
+ 4.333,
+ 0,
+ 4.433,
+ 1,
+ 4.533,
+ 1,
+ 1,
+ 4.722,
+ 1,
+ 4.911,
+ 1,
+ 5.1,
+ 1,
+ 1,
+ 5.128,
+ 1,
+ 5.156,
+ 0,
+ 5.183,
+ 0,
+ 1,
+ 5.2,
+ 0,
+ 5.217,
+ 0,
+ 5.233,
+ 0,
+ 1,
+ 5.261,
+ 0,
+ 5.289,
+ 1,
+ 5.317,
+ 1,
+ 1,
+ 5.517,
+ 1,
+ 5.717,
+ 1,
+ 5.917,
+ 1,
+ 1,
+ 5.989,
+ 1,
+ 6.061,
+ 0,
+ 6.133,
+ 0,
+ 1,
+ 6.161,
+ 0,
+ 6.189,
+ 0,
+ 6.217,
+ 0,
+ 1,
+ 6.294,
+ 0,
+ 6.372,
+ 1,
+ 6.45,
+ 1,
+ 1,
+ 6.506,
+ 1,
+ 6.561,
+ 0.8,
+ 6.617,
+ 0.8,
+ 0,
+ 8.517,
+ 0.8
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamEyeRSmile",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 8.517,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamEyeBallX",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.067,
+ 0,
+ 0.133,
+ 0,
+ 0.2,
+ 0,
+ 1,
+ 0.422,
+ 0,
+ 0.644,
+ 0.079,
+ 0.867,
+ 0.296,
+ 1,
+ 0.978,
+ 0.405,
+ 1.089,
+ 0.5,
+ 1.2,
+ 0.5,
+ 1,
+ 1.678,
+ 0.5,
+ 2.156,
+ 0.5,
+ 2.633,
+ 0.5,
+ 1,
+ 2.8,
+ 0.5,
+ 2.967,
+ 0.158,
+ 3.133,
+ 0.158,
+ 1,
+ 3.467,
+ 0.158,
+ 3.8,
+ 0.158,
+ 4.133,
+ 0.158,
+ 1,
+ 4.456,
+ 0.158,
+ 4.778,
+ 0.5,
+ 5.1,
+ 0.5,
+ 1,
+ 5.189,
+ 0.5,
+ 5.278,
+ -0.907,
+ 5.367,
+ -0.907,
+ 1,
+ 5.539,
+ -0.907,
+ 5.711,
+ -0.907,
+ 5.883,
+ -0.907,
+ 1,
+ 6.172,
+ -0.907,
+ 6.461,
+ 0.608,
+ 6.75,
+ 0.608,
+ 0,
+ 8.517,
+ 0.608
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamEyeBallY",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.067,
+ 0,
+ 0.133,
+ 0,
+ 0.2,
+ 0,
+ 1,
+ 0.422,
+ 0,
+ 0.644,
+ -0.5,
+ 0.867,
+ -0.5,
+ 1,
+ 1.456,
+ -0.5,
+ 2.044,
+ -0.5,
+ 2.633,
+ -0.5,
+ 1,
+ 2.8,
+ -0.5,
+ 2.967,
+ -0.9,
+ 3.133,
+ -0.9,
+ 1,
+ 3.789,
+ -0.9,
+ 4.444,
+ -0.9,
+ 5.1,
+ -0.9,
+ 1,
+ 5.189,
+ -0.9,
+ 5.278,
+ 0.717,
+ 5.367,
+ 0.717,
+ 1,
+ 5.539,
+ 0.717,
+ 5.711,
+ 0.717,
+ 5.883,
+ 0.717,
+ 1,
+ 5.928,
+ 0.717,
+ 5.972,
+ 0.351,
+ 6.017,
+ 0.249,
+ 1,
+ 6.261,
+ -0.311,
+ 6.506,
+ -0.5,
+ 6.75,
+ -0.5,
+ 0,
+ 8.517,
+ -0.5
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamEyeSize",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.494,
+ 0,
+ 0.989,
+ 0,
+ 1.483,
+ 0,
+ 1,
+ 1.517,
+ 0,
+ 1.55,
+ -1,
+ 1.583,
+ -1,
+ 1,
+ 1.661,
+ -1,
+ 1.739,
+ -0.4,
+ 1.817,
+ -0.4,
+ 1,
+ 2.089,
+ -0.4,
+ 2.361,
+ -0.4,
+ 2.633,
+ -0.4,
+ 1,
+ 2.833,
+ -0.4,
+ 3.033,
+ 0,
+ 3.233,
+ 0,
+ 0,
+ 8.517,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBrowLY",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.478,
+ 0,
+ 0.956,
+ 0,
+ 1.433,
+ 0,
+ 1,
+ 1.456,
+ 0,
+ 1.478,
+ -0.5,
+ 1.5,
+ -0.5,
+ 1,
+ 1.539,
+ -0.5,
+ 1.578,
+ 1,
+ 1.617,
+ 1,
+ 1,
+ 1.794,
+ 1,
+ 1.972,
+ 1,
+ 2.15,
+ 1,
+ 1,
+ 2.322,
+ 1,
+ 2.494,
+ 0.636,
+ 2.667,
+ 0.4,
+ 1,
+ 2.811,
+ 0.202,
+ 2.956,
+ 0.191,
+ 3.1,
+ 0,
+ 1,
+ 3.178,
+ -0.103,
+ 3.256,
+ -0.8,
+ 3.333,
+ -0.8,
+ 1,
+ 3.633,
+ -0.8,
+ 3.933,
+ -0.8,
+ 4.233,
+ -0.8,
+ 1,
+ 4.333,
+ -0.8,
+ 4.433,
+ 0,
+ 4.533,
+ 0,
+ 1,
+ 4.722,
+ 0,
+ 4.911,
+ 0,
+ 5.1,
+ 0,
+ 1,
+ 5.189,
+ 0,
+ 5.278,
+ -0.5,
+ 5.367,
+ -0.5,
+ 1,
+ 5.556,
+ -0.5,
+ 5.744,
+ -0.5,
+ 5.933,
+ -0.5,
+ 1,
+ 6.039,
+ -0.5,
+ 6.144,
+ 0,
+ 6.25,
+ 0,
+ 1,
+ 6.322,
+ 0,
+ 6.394,
+ -0.4,
+ 6.467,
+ -0.4,
+ 0,
+ 8.517,
+ -0.4
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBrowRY",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.478,
+ 0,
+ 0.956,
+ 0,
+ 1.433,
+ 0,
+ 1,
+ 1.456,
+ 0,
+ 1.478,
+ -0.4,
+ 1.5,
+ -0.4,
+ 1,
+ 1.539,
+ -0.4,
+ 1.578,
+ 0.9,
+ 1.617,
+ 0.9,
+ 1,
+ 1.794,
+ 0.9,
+ 1.972,
+ 0.9,
+ 2.15,
+ 0.9,
+ 1,
+ 2.322,
+ 0.9,
+ 2.494,
+ 0.493,
+ 2.667,
+ 0.3,
+ 1,
+ 2.811,
+ 0.138,
+ 2.956,
+ 0.146,
+ 3.1,
+ 0,
+ 1,
+ 3.178,
+ -0.079,
+ 3.256,
+ -0.8,
+ 3.333,
+ -0.8,
+ 1,
+ 3.633,
+ -0.8,
+ 3.933,
+ -0.8,
+ 4.233,
+ -0.8,
+ 1,
+ 4.333,
+ -0.8,
+ 4.433,
+ 0,
+ 4.533,
+ 0,
+ 1,
+ 4.722,
+ 0,
+ 4.911,
+ 0,
+ 5.1,
+ 0,
+ 1,
+ 5.189,
+ 0,
+ 5.278,
+ 0,
+ 5.367,
+ 0,
+ 1,
+ 5.556,
+ 0,
+ 5.744,
+ 0,
+ 5.933,
+ 0,
+ 1,
+ 6.039,
+ 0,
+ 6.144,
+ 0,
+ 6.25,
+ 0,
+ 1,
+ 6.322,
+ 0,
+ 6.394,
+ -0.4,
+ 6.467,
+ -0.4,
+ 0,
+ 8.517,
+ -0.4
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBrowLX",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.478,
+ 0,
+ 0.956,
+ 0,
+ 1.433,
+ 0,
+ 1,
+ 1.494,
+ 0,
+ 1.556,
+ 0.7,
+ 1.617,
+ 0.7,
+ 1,
+ 1.794,
+ 0.7,
+ 1.972,
+ 0.7,
+ 2.15,
+ 0.7,
+ 1,
+ 2.322,
+ 0.7,
+ 2.494,
+ 0.641,
+ 2.667,
+ 0.4,
+ 1,
+ 2.811,
+ 0.198,
+ 2.956,
+ 0,
+ 3.1,
+ 0,
+ 1,
+ 3.578,
+ 0,
+ 4.056,
+ 0,
+ 4.533,
+ 0,
+ 1,
+ 4.722,
+ 0,
+ 4.911,
+ 0,
+ 5.1,
+ 0,
+ 1,
+ 5.189,
+ 0,
+ 5.278,
+ 0.182,
+ 5.367,
+ 0.182,
+ 1,
+ 5.556,
+ 0.182,
+ 5.744,
+ 0.182,
+ 5.933,
+ 0.182,
+ 0,
+ 8.517,
+ 0.182
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBrowRX",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.478,
+ 0,
+ 0.956,
+ 0,
+ 1.433,
+ 0,
+ 1,
+ 1.494,
+ 0,
+ 1.556,
+ 0.2,
+ 1.617,
+ 0.2,
+ 1,
+ 1.794,
+ 0.2,
+ 1.972,
+ 0.2,
+ 2.15,
+ 0.2,
+ 1,
+ 2.322,
+ 0.2,
+ 2.494,
+ 0.2,
+ 2.667,
+ 0.2,
+ 1,
+ 2.811,
+ 0.2,
+ 2.956,
+ 0,
+ 3.1,
+ 0,
+ 1,
+ 3.578,
+ 0,
+ 4.056,
+ 0,
+ 4.533,
+ 0,
+ 1,
+ 4.722,
+ 0,
+ 4.911,
+ 0,
+ 5.1,
+ 0,
+ 1,
+ 5.189,
+ 0,
+ 5.278,
+ -0.5,
+ 5.367,
+ -0.5,
+ 1,
+ 5.556,
+ -0.5,
+ 5.744,
+ -0.5,
+ 5.933,
+ -0.5,
+ 0,
+ 8.517,
+ -0.5
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBrowLAngle",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.478,
+ 0,
+ 0.956,
+ 0,
+ 1.433,
+ 0,
+ 1,
+ 1.494,
+ 0,
+ 1.556,
+ -0.2,
+ 1.617,
+ -0.2,
+ 1,
+ 1.794,
+ -0.2,
+ 1.972,
+ -0.2,
+ 2.15,
+ -0.2,
+ 1,
+ 2.322,
+ -0.2,
+ 2.494,
+ -0.2,
+ 2.667,
+ -0.2,
+ 1,
+ 2.811,
+ -0.2,
+ 2.956,
+ 0,
+ 3.1,
+ 0,
+ 1,
+ 3.178,
+ 0,
+ 3.256,
+ -0.7,
+ 3.333,
+ -0.7,
+ 1,
+ 3.633,
+ -0.7,
+ 3.933,
+ -0.7,
+ 4.233,
+ -0.7,
+ 1,
+ 4.333,
+ -0.7,
+ 4.433,
+ -0.308,
+ 4.533,
+ -0.308,
+ 1,
+ 4.722,
+ -0.308,
+ 4.911,
+ -0.308,
+ 5.1,
+ -0.308,
+ 1,
+ 5.189,
+ -0.308,
+ 5.278,
+ -0.158,
+ 5.367,
+ -0.158,
+ 1,
+ 5.556,
+ -0.158,
+ 5.744,
+ -0.158,
+ 5.933,
+ -0.158,
+ 1,
+ 6.039,
+ -0.158,
+ 6.144,
+ -0.158,
+ 6.25,
+ 0,
+ 1,
+ 6.322,
+ 0.108,
+ 6.394,
+ 0.6,
+ 6.467,
+ 0.6,
+ 0,
+ 8.517,
+ 0.6
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBrowRAngle",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.478,
+ 0,
+ 0.956,
+ 0,
+ 1.433,
+ 0,
+ 1,
+ 1.494,
+ 0,
+ 1.556,
+ -0.2,
+ 1.617,
+ -0.2,
+ 1,
+ 1.794,
+ -0.2,
+ 1.972,
+ -0.2,
+ 2.15,
+ -0.2,
+ 1,
+ 2.322,
+ -0.2,
+ 2.494,
+ -0.2,
+ 2.667,
+ -0.2,
+ 1,
+ 2.811,
+ -0.2,
+ 2.956,
+ 0,
+ 3.1,
+ 0,
+ 1,
+ 3.178,
+ 0,
+ 3.256,
+ -0.7,
+ 3.333,
+ -0.7,
+ 1,
+ 3.633,
+ -0.7,
+ 3.933,
+ -0.7,
+ 4.233,
+ -0.7,
+ 1,
+ 4.333,
+ -0.7,
+ 4.433,
+ -0.102,
+ 4.533,
+ -0.102,
+ 1,
+ 4.722,
+ -0.102,
+ 4.911,
+ -0.102,
+ 5.1,
+ -0.102,
+ 1,
+ 5.189,
+ -0.102,
+ 5.278,
+ 0.1,
+ 5.367,
+ 0.1,
+ 1,
+ 5.556,
+ 0.1,
+ 5.744,
+ 0.1,
+ 5.933,
+ 0.1,
+ 1,
+ 6.039,
+ 0.1,
+ 6.144,
+ 0,
+ 6.25,
+ 0,
+ 1,
+ 6.322,
+ 0,
+ 6.394,
+ 0.6,
+ 6.467,
+ 0.6,
+ 0,
+ 8.517,
+ 0.6
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBrowLForm",
+ "Segments": [
+ 0,
+ 0.01,
+ 1,
+ 0.478,
+ 0.01,
+ 0.956,
+ 0.007,
+ 1.433,
+ 0,
+ 1,
+ 1.456,
+ 0,
+ 1.478,
+ -0.5,
+ 1.5,
+ -0.5,
+ 1,
+ 1.539,
+ -0.5,
+ 1.578,
+ 0.4,
+ 1.617,
+ 0.4,
+ 1,
+ 1.794,
+ 0.4,
+ 1.972,
+ 0.4,
+ 2.15,
+ 0.4,
+ 1,
+ 2.322,
+ 0.4,
+ 2.494,
+ 0.302,
+ 2.667,
+ 0.2,
+ 1,
+ 2.811,
+ 0.115,
+ 2.956,
+ 0.099,
+ 3.1,
+ 0,
+ 1,
+ 3.178,
+ -0.053,
+ 3.256,
+ -0.8,
+ 3.333,
+ -0.8,
+ 1,
+ 3.633,
+ -0.8,
+ 3.933,
+ -0.8,
+ 4.233,
+ -0.8,
+ 1,
+ 4.333,
+ -0.8,
+ 4.433,
+ -0.468,
+ 4.533,
+ -0.468,
+ 1,
+ 4.722,
+ -0.468,
+ 4.911,
+ -0.468,
+ 5.1,
+ -0.468,
+ 1,
+ 5.189,
+ -0.468,
+ 5.278,
+ 0.108,
+ 5.367,
+ 0.108,
+ 1,
+ 5.556,
+ 0.108,
+ 5.744,
+ 0.108,
+ 5.933,
+ 0.108,
+ 1,
+ 6.039,
+ 0.108,
+ 6.144,
+ 0.462,
+ 6.25,
+ 0.462,
+ 1,
+ 6.322,
+ 0.462,
+ 6.394,
+ -1,
+ 6.467,
+ -1,
+ 0,
+ 8.517,
+ -1
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBrowRForm",
+ "Segments": [
+ 0,
+ 0.01,
+ 1,
+ 0.478,
+ 0.01,
+ 0.956,
+ 0.007,
+ 1.433,
+ 0,
+ 1,
+ 1.456,
+ 0,
+ 1.478,
+ -0.5,
+ 1.5,
+ -0.5,
+ 1,
+ 1.539,
+ -0.5,
+ 1.578,
+ 0.4,
+ 1.617,
+ 0.4,
+ 1,
+ 1.794,
+ 0.4,
+ 1.972,
+ 0.4,
+ 2.15,
+ 0.4,
+ 1,
+ 2.322,
+ 0.4,
+ 2.494,
+ 0.302,
+ 2.667,
+ 0.2,
+ 1,
+ 2.811,
+ 0.115,
+ 2.956,
+ 0.099,
+ 3.1,
+ 0,
+ 1,
+ 3.178,
+ -0.053,
+ 3.256,
+ -0.8,
+ 3.333,
+ -0.8,
+ 1,
+ 3.633,
+ -0.8,
+ 3.933,
+ -0.8,
+ 4.233,
+ -0.8,
+ 1,
+ 4.333,
+ -0.8,
+ 4.433,
+ -0.69,
+ 4.533,
+ -0.69,
+ 1,
+ 4.722,
+ -0.69,
+ 4.911,
+ -0.69,
+ 5.1,
+ -0.69,
+ 1,
+ 5.189,
+ -0.69,
+ 5.278,
+ -0.69,
+ 5.367,
+ -0.69,
+ 1,
+ 5.556,
+ -0.69,
+ 5.744,
+ -0.69,
+ 5.933,
+ -0.69,
+ 1,
+ 6,
+ -0.69,
+ 6.067,
+ 0.418,
+ 6.133,
+ 0.418,
+ 1,
+ 6.172,
+ 0.418,
+ 6.211,
+ 0.463,
+ 6.25,
+ 0.342,
+ 1,
+ 6.322,
+ 0.117,
+ 6.394,
+ -1,
+ 6.467,
+ -1,
+ 0,
+ 8.517,
+ -1
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamMouthForm",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.378,
+ 0,
+ 0.756,
+ 0,
+ 1.133,
+ 0,
+ 1,
+ 1.328,
+ 0,
+ 1.522,
+ -1,
+ 1.717,
+ -1,
+ 1,
+ 1.722,
+ -1,
+ 1.728,
+ -1,
+ 1.733,
+ -1,
+ 1,
+ 2.044,
+ -1,
+ 2.356,
+ -1,
+ 2.667,
+ -1,
+ 1,
+ 2.756,
+ -1,
+ 2.844,
+ -0.9,
+ 2.933,
+ -0.9,
+ 1,
+ 3.039,
+ -0.9,
+ 3.144,
+ -1,
+ 3.25,
+ -1,
+ 1,
+ 3.539,
+ -1,
+ 3.828,
+ -1,
+ 4.117,
+ -1,
+ 1,
+ 4.217,
+ -1,
+ 4.317,
+ -0.967,
+ 4.417,
+ -0.897,
+ 1,
+ 4.489,
+ -0.847,
+ 4.561,
+ -0.82,
+ 4.633,
+ -0.82,
+ 1,
+ 4.789,
+ -0.82,
+ 4.944,
+ -0.82,
+ 5.1,
+ -0.82,
+ 1,
+ 5.189,
+ -0.82,
+ 5.278,
+ -0.731,
+ 5.367,
+ -0.731,
+ 1,
+ 5.494,
+ -0.731,
+ 5.622,
+ -0.731,
+ 5.75,
+ -0.731,
+ 1,
+ 5.822,
+ -0.731,
+ 5.894,
+ -1,
+ 5.967,
+ -1,
+ 1,
+ 6.094,
+ -1,
+ 6.222,
+ -1,
+ 6.35,
+ -1,
+ 1,
+ 6.428,
+ -1,
+ 6.506,
+ -0.7,
+ 6.583,
+ -0.7,
+ 1,
+ 6.639,
+ -0.7,
+ 6.694,
+ -0.7,
+ 6.75,
+ -0.7,
+ 1,
+ 6.856,
+ -0.7,
+ 6.961,
+ -1,
+ 7.067,
+ -1,
+ 0,
+ 8.517,
+ -1
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamMouthOpenY",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.506,
+ 0,
+ 1.011,
+ 0,
+ 1.517,
+ 0,
+ 1,
+ 1.55,
+ 0,
+ 1.583,
+ 1,
+ 1.617,
+ 1,
+ 1,
+ 1.872,
+ 1,
+ 2.128,
+ 1,
+ 2.383,
+ 1,
+ 1,
+ 2.461,
+ 1,
+ 2.539,
+ 0,
+ 2.617,
+ 0,
+ 1,
+ 2.633,
+ 0,
+ 2.65,
+ 0,
+ 2.667,
+ 0,
+ 1,
+ 2.756,
+ 0,
+ 2.844,
+ 0.7,
+ 2.933,
+ 0.7,
+ 1,
+ 3.039,
+ 0.7,
+ 3.144,
+ 0,
+ 3.25,
+ 0,
+ 1,
+ 4.283,
+ 0,
+ 5.317,
+ 0,
+ 6.35,
+ 0,
+ 1,
+ 6.428,
+ 0,
+ 6.506,
+ 0.6,
+ 6.583,
+ 0.6,
+ 1,
+ 6.639,
+ 0.6,
+ 6.694,
+ 0.6,
+ 6.75,
+ 0.6,
+ 1,
+ 6.856,
+ 0.6,
+ 6.961,
+ 0,
+ 7.067,
+ 0,
+ 0,
+ 8.517,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBodyAngleX",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.028,
+ 0,
+ 0.056,
+ 0,
+ 0.083,
+ 0,
+ 1,
+ 0.278,
+ 0,
+ 0.472,
+ 5.074,
+ 0.667,
+ 7.371,
+ 1,
+ 0.767,
+ 8.552,
+ 0.867,
+ 8.25,
+ 0.967,
+ 8.25,
+ 1,
+ 1.1,
+ 8.25,
+ 1.233,
+ 8.25,
+ 1.367,
+ 8.25,
+ 1,
+ 1.483,
+ 8.25,
+ 1.6,
+ 10,
+ 1.717,
+ 10,
+ 1,
+ 1.9,
+ 10,
+ 2.083,
+ 10,
+ 2.267,
+ 10,
+ 1,
+ 2.45,
+ 10,
+ 2.633,
+ 9.539,
+ 2.817,
+ 8.428,
+ 1,
+ 2.933,
+ 7.721,
+ 3.05,
+ 7.258,
+ 3.167,
+ 7.258,
+ 1,
+ 3.244,
+ 7.258,
+ 3.322,
+ 7.383,
+ 3.4,
+ 7.383,
+ 1,
+ 3.478,
+ 7.383,
+ 3.556,
+ 7.052,
+ 3.633,
+ 7.052,
+ 1,
+ 3.711,
+ 7.052,
+ 3.789,
+ 7.293,
+ 3.867,
+ 7.293,
+ 1,
+ 3.95,
+ 7.293,
+ 4.033,
+ 7.084,
+ 4.117,
+ 7.084,
+ 1,
+ 4.244,
+ 7.084,
+ 4.372,
+ 7.275,
+ 4.5,
+ 7.275,
+ 1,
+ 4.7,
+ 7.275,
+ 4.9,
+ 6.794,
+ 5.1,
+ 6.794,
+ 1,
+ 5.372,
+ 6.794,
+ 5.644,
+ 6.794,
+ 5.917,
+ 6.794,
+ 1,
+ 6,
+ 6.794,
+ 6.083,
+ 7.036,
+ 6.167,
+ 4.614,
+ 1,
+ 6.306,
+ 0.577,
+ 6.444,
+ -5.944,
+ 6.583,
+ -5.944,
+ 1,
+ 6.683,
+ -5.944,
+ 6.783,
+ -5.57,
+ 6.883,
+ -5.57,
+ 1,
+ 7.028,
+ -5.57,
+ 7.172,
+ -5.67,
+ 7.317,
+ -5.67,
+ 0,
+ 8.517,
+ -5.67
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBodyAngleY",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.028,
+ 0,
+ 0.056,
+ 0,
+ 0.083,
+ 0,
+ 1,
+ 0.144,
+ 0,
+ 0.206,
+ 0.408,
+ 0.267,
+ 0.484,
+ 1,
+ 0.356,
+ 0.594,
+ 0.444,
+ 0.592,
+ 0.533,
+ 0.592,
+ 1,
+ 0.639,
+ 0.592,
+ 0.744,
+ -1.641,
+ 0.85,
+ -1.641,
+ 1,
+ 0.967,
+ -1.641,
+ 1.083,
+ -1.18,
+ 1.2,
+ -1.18,
+ 1,
+ 1.272,
+ -1.18,
+ 1.344,
+ -1.18,
+ 1.417,
+ -1.18,
+ 1,
+ 1.444,
+ -1.18,
+ 1.472,
+ -1.641,
+ 1.5,
+ -1.641,
+ 1,
+ 1.544,
+ -1.641,
+ 1.589,
+ -0.338,
+ 1.633,
+ 0,
+ 1,
+ 1.733,
+ 0.761,
+ 1.833,
+ 0.876,
+ 1.933,
+ 0.876,
+ 1,
+ 2.094,
+ 0.876,
+ 2.256,
+ 0.881,
+ 2.417,
+ 0.484,
+ 1,
+ 2.528,
+ 0.21,
+ 2.639,
+ -1.2,
+ 2.75,
+ -1.2,
+ 1,
+ 2.8,
+ -1.2,
+ 2.85,
+ 2.2,
+ 2.9,
+ 2.2,
+ 1,
+ 2.967,
+ 2.2,
+ 3.033,
+ 2.233,
+ 3.1,
+ 2.038,
+ 1,
+ 3.167,
+ 1.843,
+ 3.233,
+ -0.852,
+ 3.3,
+ -1.056,
+ 1,
+ 3.406,
+ -1.379,
+ 3.511,
+ -1.579,
+ 3.617,
+ -1.701,
+ 1,
+ 3.844,
+ -1.965,
+ 4.072,
+ -2.031,
+ 4.3,
+ -2.031,
+ 1,
+ 4.428,
+ -2.031,
+ 4.556,
+ -1.221,
+ 4.683,
+ -1.108,
+ 1,
+ 4.85,
+ -0.961,
+ 5.017,
+ -0.959,
+ 5.183,
+ -0.836,
+ 1,
+ 5.278,
+ -0.766,
+ 5.372,
+ -0.315,
+ 5.467,
+ -0.255,
+ 1,
+ 5.556,
+ -0.198,
+ 5.644,
+ -0.206,
+ 5.733,
+ -0.206,
+ 1,
+ 5.767,
+ -0.206,
+ 5.8,
+ -0.472,
+ 5.833,
+ -0.472,
+ 1,
+ 5.878,
+ -0.472,
+ 5.922,
+ -0.59,
+ 5.967,
+ 0.368,
+ 1,
+ 6.011,
+ 1.326,
+ 6.056,
+ 7.06,
+ 6.1,
+ 7.06,
+ 1,
+ 6.156,
+ 7.06,
+ 6.211,
+ 7.125,
+ 6.267,
+ 6.904,
+ 1,
+ 6.333,
+ 6.639,
+ 6.4,
+ -1.76,
+ 6.467,
+ -1.76,
+ 1,
+ 6.639,
+ -1.76,
+ 6.811,
+ -0.84,
+ 6.983,
+ -0.84,
+ 0,
+ 8.517,
+ -0.84
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBodyAngleZ",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.044,
+ 0,
+ 0.089,
+ 0,
+ 0.133,
+ 0,
+ 1,
+ 0.378,
+ 0,
+ 0.622,
+ 0.345,
+ 0.867,
+ 0.56,
+ 1,
+ 1.033,
+ 0.707,
+ 1.2,
+ 0.696,
+ 1.367,
+ 0.696,
+ 1,
+ 1.422,
+ 0.696,
+ 1.478,
+ 0.702,
+ 1.533,
+ 0.679,
+ 1,
+ 1.594,
+ 0.654,
+ 1.656,
+ -0.372,
+ 1.717,
+ -0.603,
+ 1,
+ 1.794,
+ -0.898,
+ 1.872,
+ -0.928,
+ 1.95,
+ -0.928,
+ 1,
+ 2.106,
+ -0.928,
+ 2.261,
+ -0.944,
+ 2.417,
+ -0.644,
+ 1,
+ 2.55,
+ -0.387,
+ 2.683,
+ 0.56,
+ 2.817,
+ 0.56,
+ 1,
+ 2.922,
+ 0.56,
+ 3.028,
+ 0.46,
+ 3.133,
+ 0.46,
+ 1,
+ 3.211,
+ 0.46,
+ 3.289,
+ 0.591,
+ 3.367,
+ 0.591,
+ 1,
+ 3.45,
+ 0.591,
+ 3.533,
+ 0.417,
+ 3.617,
+ 0.417,
+ 1,
+ 3.689,
+ 0.417,
+ 3.761,
+ 0.513,
+ 3.833,
+ 0.513,
+ 1,
+ 3.922,
+ 0.513,
+ 4.011,
+ 0.439,
+ 4.1,
+ 0.439,
+ 1,
+ 4.25,
+ 0.439,
+ 4.4,
+ 0.56,
+ 4.55,
+ 0.56,
+ 1,
+ 5.022,
+ 0.56,
+ 5.494,
+ 0.56,
+ 5.967,
+ 0.56,
+ 1,
+ 6.128,
+ 0.56,
+ 6.289,
+ -3.505,
+ 6.45,
+ -3.505,
+ 1,
+ 6.528,
+ -3.505,
+ 6.606,
+ -3.407,
+ 6.683,
+ -3.299,
+ 1,
+ 6.772,
+ -3.176,
+ 6.861,
+ -3.144,
+ 6.95,
+ -3.144,
+ 1,
+ 7.083,
+ -3.144,
+ 7.217,
+ -3.196,
+ 7.35,
+ -3.196,
+ 0,
+ 8.517,
+ -3.196
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamWaistAngleZ",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.439,
+ 0,
+ 0.878,
+ 0,
+ 1.317,
+ 0,
+ 1,
+ 1.467,
+ 0,
+ 1.617,
+ -3,
+ 1.767,
+ -3,
+ 1,
+ 1.989,
+ -3,
+ 2.211,
+ -2.416,
+ 2.433,
+ -1,
+ 1,
+ 2.628,
+ 0.239,
+ 2.822,
+ 1,
+ 3.017,
+ 1,
+ 1,
+ 3.139,
+ 1,
+ 3.261,
+ 0,
+ 3.383,
+ 0,
+ 1,
+ 4.317,
+ 0,
+ 5.25,
+ 0,
+ 6.183,
+ 0,
+ 1,
+ 6.283,
+ 0,
+ 6.383,
+ -3.66,
+ 6.483,
+ -3.66,
+ 0,
+ 8.517,
+ -3.66
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBodyCenter",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.05,
+ 0,
+ 0.1,
+ -0.019,
+ 0.15,
+ -0.224,
+ 1,
+ 0.194,
+ -0.407,
+ 0.239,
+ -0.696,
+ 0.283,
+ -0.696,
+ 1,
+ 0.45,
+ -0.696,
+ 0.617,
+ 2.538,
+ 0.783,
+ 3.376,
+ 1,
+ 0.917,
+ 4.046,
+ 1.05,
+ 3.917,
+ 1.183,
+ 3.917,
+ 1,
+ 1.244,
+ 3.917,
+ 1.306,
+ 3.917,
+ 1.367,
+ 3.917,
+ 1,
+ 1.394,
+ 3.917,
+ 1.422,
+ 3.943,
+ 1.45,
+ 3.943,
+ 1,
+ 1.528,
+ 3.943,
+ 1.606,
+ 2.631,
+ 1.683,
+ 1.83,
+ 1,
+ 1.783,
+ 0.8,
+ 1.883,
+ 0.67,
+ 1.983,
+ 0.67,
+ 1,
+ 2.25,
+ 0.67,
+ 2.517,
+ 0.67,
+ 2.783,
+ 0.67,
+ 1,
+ 2.911,
+ 0.67,
+ 3.039,
+ -3,
+ 3.167,
+ -3,
+ 1,
+ 3.833,
+ -3,
+ 4.5,
+ -3,
+ 5.167,
+ -3,
+ 1,
+ 5.322,
+ -3,
+ 5.478,
+ -3.26,
+ 5.633,
+ -3.26,
+ 1,
+ 5.761,
+ -3.26,
+ 5.889,
+ -3.258,
+ 6.017,
+ -3.258,
+ 1,
+ 6.111,
+ -3.258,
+ 6.206,
+ -3.313,
+ 6.3,
+ -4.098,
+ 1,
+ 6.367,
+ -4.652,
+ 6.433,
+ -6.057,
+ 6.5,
+ -6.057,
+ 1,
+ 6.622,
+ -6.057,
+ 6.744,
+ -5.747,
+ 6.867,
+ -5.747,
+ 0,
+ 8.517,
+ -5.747
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamBreath",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 8.517,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamLeftShoulderUp",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.15,
+ 0,
+ 0.3,
+ 0,
+ 0.45,
+ 0,
+ 1,
+ 0.65,
+ 0,
+ 0.85,
+ -3,
+ 1.05,
+ -3,
+ 1,
+ 1.139,
+ -3,
+ 1.228,
+ -3,
+ 1.317,
+ -3,
+ 1,
+ 1.372,
+ -3,
+ 1.428,
+ -4.583,
+ 1.483,
+ -4.583,
+ 1,
+ 1.556,
+ -4.583,
+ 1.628,
+ 1.245,
+ 1.7,
+ 1.245,
+ 1,
+ 1.733,
+ 1.245,
+ 1.767,
+ -0.042,
+ 1.8,
+ -0.042,
+ 1,
+ 2.033,
+ -0.042,
+ 2.267,
+ -0.05,
+ 2.5,
+ 0,
+ 1,
+ 2.683,
+ 0.039,
+ 2.867,
+ 5,
+ 3.05,
+ 5,
+ 1,
+ 3.139,
+ 5,
+ 3.228,
+ -6.597,
+ 3.317,
+ -7.562,
+ 1,
+ 3.389,
+ -8.346,
+ 3.461,
+ -8.574,
+ 3.533,
+ -8.722,
+ 1,
+ 3.689,
+ -9.04,
+ 3.844,
+ -9.093,
+ 4,
+ -9.093,
+ 1,
+ 4.133,
+ -9.093,
+ 4.267,
+ -8.443,
+ 4.4,
+ -7.222,
+ 1,
+ 4.483,
+ -6.459,
+ 4.567,
+ -6.114,
+ 4.65,
+ -6.114,
+ 1,
+ 4.85,
+ -6.114,
+ 5.05,
+ -6.706,
+ 5.25,
+ -6.706,
+ 1,
+ 5.45,
+ -6.706,
+ 5.65,
+ -6.68,
+ 5.85,
+ -6.68,
+ 1,
+ 5.9,
+ -6.68,
+ 5.95,
+ -8.206,
+ 6,
+ -8.206,
+ 1,
+ 6.089,
+ -8.206,
+ 6.178,
+ 10,
+ 6.267,
+ 10,
+ 1,
+ 6.35,
+ 10,
+ 6.433,
+ 6.314,
+ 6.517,
+ 6.314,
+ 1,
+ 6.572,
+ 6.314,
+ 6.628,
+ 8.995,
+ 6.683,
+ 8.995,
+ 0,
+ 8.517,
+ 8.995
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamRightShoulderUp",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.15,
+ 0,
+ 0.3,
+ 0,
+ 0.45,
+ 0,
+ 1,
+ 0.617,
+ 0,
+ 0.783,
+ -3,
+ 0.95,
+ -3,
+ 1,
+ 1.067,
+ -3,
+ 1.183,
+ -2.973,
+ 1.3,
+ -2.973,
+ 1,
+ 1.356,
+ -2.973,
+ 1.411,
+ -4.536,
+ 1.467,
+ -4.536,
+ 1,
+ 1.539,
+ -4.536,
+ 1.611,
+ 1.434,
+ 1.683,
+ 1.434,
+ 1,
+ 1.739,
+ 1.434,
+ 1.794,
+ -0.008,
+ 1.85,
+ -0.008,
+ 1,
+ 2.067,
+ -0.008,
+ 2.283,
+ -0.01,
+ 2.5,
+ 0,
+ 1,
+ 2.683,
+ 0.008,
+ 2.867,
+ 5,
+ 3.05,
+ 5,
+ 1,
+ 3.139,
+ 5,
+ 3.228,
+ -6.597,
+ 3.317,
+ -7.562,
+ 1,
+ 3.389,
+ -8.346,
+ 3.461,
+ -8.596,
+ 3.533,
+ -8.722,
+ 1,
+ 3.689,
+ -8.994,
+ 3.844,
+ -9.033,
+ 4,
+ -9.033,
+ 1,
+ 4.133,
+ -9.033,
+ 4.267,
+ -8.419,
+ 4.4,
+ -7.222,
+ 1,
+ 4.483,
+ -6.474,
+ 4.567,
+ -6.114,
+ 4.65,
+ -6.114,
+ 1,
+ 4.85,
+ -6.114,
+ 5.05,
+ -6.706,
+ 5.25,
+ -6.706,
+ 1,
+ 5.45,
+ -6.706,
+ 5.65,
+ -6.68,
+ 5.85,
+ -6.68,
+ 1,
+ 5.9,
+ -6.68,
+ 5.95,
+ -8.206,
+ 6,
+ -8.206,
+ 1,
+ 6.089,
+ -8.206,
+ 6.178,
+ 10,
+ 6.267,
+ 10,
+ 1,
+ 6.35,
+ 10,
+ 6.433,
+ 6.314,
+ 6.517,
+ 6.314,
+ 1,
+ 6.572,
+ 6.314,
+ 6.628,
+ 9,
+ 6.683,
+ 9,
+ 0,
+ 8.517,
+ 9
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamLegR",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.061,
+ 0,
+ 0.122,
+ 0,
+ 0.183,
+ 0,
+ 1,
+ 0.25,
+ 0,
+ 0.317,
+ -0.17,
+ 0.383,
+ 0.722,
+ 1,
+ 0.472,
+ 1.911,
+ 0.561,
+ 6,
+ 0.65,
+ 6,
+ 1,
+ 0.9,
+ 6,
+ 1.15,
+ 6,
+ 1.4,
+ 6,
+ 1,
+ 1.494,
+ 6,
+ 1.589,
+ 5.25,
+ 1.683,
+ 4.768,
+ 1,
+ 1.794,
+ 4.202,
+ 1.906,
+ 4.139,
+ 2.017,
+ 4.139,
+ 1,
+ 2.267,
+ 4.139,
+ 2.517,
+ 4.139,
+ 2.767,
+ 4.139,
+ 1,
+ 2.878,
+ 4.139,
+ 2.989,
+ 0,
+ 3.1,
+ 0,
+ 0,
+ 8.517,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamLegL",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 2.017,
+ 0,
+ 4.033,
+ 0,
+ 6.05,
+ 0,
+ 1,
+ 6.133,
+ 0,
+ 6.217,
+ 8.166,
+ 6.3,
+ 9.124,
+ 1,
+ 6.389,
+ 10,
+ 6.478,
+ 10,
+ 6.567,
+ 10,
+ 0,
+ 8.517,
+ 10
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamArmL01",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.033,
+ 0,
+ 0.067,
+ 0,
+ 0.1,
+ 0,
+ 1,
+ 0.172,
+ 0,
+ 0.244,
+ -0.233,
+ 0.317,
+ 1.379,
+ 1,
+ 0.4,
+ 3.239,
+ 0.483,
+ 14.171,
+ 0.567,
+ 20.76,
+ 1,
+ 0.589,
+ 22.517,
+ 0.611,
+ 23.613,
+ 0.633,
+ 23.613,
+ 1,
+ 0.75,
+ 23.613,
+ 0.867,
+ 23.042,
+ 0.983,
+ 23.042,
+ 1,
+ 1.161,
+ 23.042,
+ 1.339,
+ 23.042,
+ 1.517,
+ 23.042,
+ 1,
+ 1.556,
+ 23.042,
+ 1.594,
+ 22.843,
+ 1.633,
+ 22.358,
+ 1,
+ 1.744,
+ 20.972,
+ 1.856,
+ 20.232,
+ 1.967,
+ 20.232,
+ 1,
+ 2.25,
+ 20.232,
+ 2.533,
+ 20.232,
+ 2.817,
+ 20.232,
+ 1,
+ 2.889,
+ 20.232,
+ 2.961,
+ 20.03,
+ 3.033,
+ 14.948,
+ 1,
+ 3.144,
+ 7.129,
+ 3.256,
+ -2.338,
+ 3.367,
+ -2.338,
+ 1,
+ 3.55,
+ -2.338,
+ 3.733,
+ -1.613,
+ 3.917,
+ -1.613,
+ 1,
+ 4.25,
+ -1.613,
+ 4.583,
+ -1.613,
+ 4.917,
+ -1.613,
+ 1,
+ 5.072,
+ -1.613,
+ 5.228,
+ -1.864,
+ 5.383,
+ -1.864,
+ 1,
+ 5.589,
+ -1.864,
+ 5.794,
+ -1.872,
+ 6,
+ -1.675,
+ 1,
+ 6.117,
+ -1.563,
+ 6.233,
+ 40,
+ 6.35,
+ 40,
+ 1,
+ 6.4,
+ 40,
+ 6.45,
+ 39.091,
+ 6.5,
+ 38.127,
+ 1,
+ 6.517,
+ 37.806,
+ 6.533,
+ 37.67,
+ 6.55,
+ 37.55,
+ 1,
+ 6.611,
+ 37.109,
+ 6.672,
+ 36.95,
+ 6.733,
+ 36.95,
+ 0,
+ 8.517,
+ 36.95
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamArmL02",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.044,
+ 0,
+ 0.089,
+ 0,
+ 0.133,
+ 0,
+ 1,
+ 0.217,
+ 0,
+ 0.3,
+ 0.1,
+ 0.383,
+ -1.753,
+ 1,
+ 0.472,
+ -3.729,
+ 0.561,
+ -14.496,
+ 0.65,
+ -15.979,
+ 1,
+ 0.794,
+ -18.389,
+ 0.939,
+ -18.557,
+ 1.083,
+ -18.557,
+ 1,
+ 1.183,
+ -18.557,
+ 1.283,
+ -18.551,
+ 1.383,
+ -18.506,
+ 1,
+ 1.439,
+ -18.481,
+ 1.494,
+ -18.433,
+ 1.55,
+ -18.331,
+ 1,
+ 1.617,
+ -18.209,
+ 1.683,
+ -17.515,
+ 1.75,
+ -17.371,
+ 1,
+ 1.839,
+ -17.179,
+ 1.928,
+ -16.987,
+ 2.017,
+ -16.962,
+ 1,
+ 2.261,
+ -16.894,
+ 2.506,
+ -16.887,
+ 2.75,
+ -16.804,
+ 1,
+ 2.894,
+ -16.755,
+ 3.039,
+ -8.104,
+ 3.183,
+ -3.753,
+ 1,
+ 3.25,
+ -1.745,
+ 3.317,
+ -0.74,
+ 3.383,
+ -0.74,
+ 1,
+ 3.944,
+ -0.74,
+ 4.506,
+ -0.74,
+ 5.067,
+ -0.74,
+ 1,
+ 5.378,
+ -0.74,
+ 5.689,
+ -0.515,
+ 6,
+ -0.515,
+ 1,
+ 6.161,
+ -0.515,
+ 6.322,
+ -30,
+ 6.483,
+ -30,
+ 1,
+ 6.556,
+ -30,
+ 6.628,
+ -29.6,
+ 6.7,
+ -29.6,
+ 0,
+ 8.517,
+ -29.6
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamArmL03",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.106,
+ 0,
+ 0.211,
+ 0,
+ 0.317,
+ 0,
+ 1,
+ 0.411,
+ 0,
+ 0.506,
+ -1.544,
+ 0.6,
+ -1.544,
+ 1,
+ 0.722,
+ -1.544,
+ 0.844,
+ 12.512,
+ 0.967,
+ 13.132,
+ 1,
+ 1.056,
+ 13.583,
+ 1.144,
+ 13.432,
+ 1.233,
+ 13.432,
+ 1,
+ 1.417,
+ 13.432,
+ 1.6,
+ 11.983,
+ 1.783,
+ 11.983,
+ 1,
+ 2.106,
+ 11.983,
+ 2.428,
+ 11.983,
+ 2.75,
+ 11.983,
+ 1,
+ 2.8,
+ 11.983,
+ 2.85,
+ 11.797,
+ 2.9,
+ 9.742,
+ 1,
+ 3.061,
+ 3.119,
+ 3.222,
+ -1.566,
+ 3.383,
+ -1.566,
+ 1,
+ 3.483,
+ -1.566,
+ 3.583,
+ 0,
+ 3.683,
+ 0,
+ 1,
+ 4.528,
+ 0,
+ 5.372,
+ 0,
+ 6.217,
+ 0,
+ 1,
+ 6.311,
+ 0,
+ 6.406,
+ 30,
+ 6.5,
+ 30,
+ 0,
+ 8.517,
+ 30
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHandL",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.1,
+ 0,
+ 0.2,
+ 0,
+ 0.3,
+ 0,
+ 1,
+ 0.428,
+ 0,
+ 0.556,
+ 10,
+ 0.683,
+ 10,
+ 1,
+ 1.333,
+ 10,
+ 1.983,
+ 10,
+ 2.633,
+ 10,
+ 1,
+ 2.85,
+ 10,
+ 3.067,
+ -4,
+ 3.283,
+ -4,
+ 1,
+ 3.544,
+ -4,
+ 3.806,
+ 0.902,
+ 4.067,
+ 0.902,
+ 1,
+ 4.25,
+ 0.902,
+ 4.433,
+ 0,
+ 4.617,
+ 0,
+ 1,
+ 4.8,
+ 0,
+ 4.983,
+ 0,
+ 5.167,
+ 0,
+ 1,
+ 5.306,
+ 0,
+ 5.444,
+ -1.257,
+ 5.583,
+ -1.326,
+ 1,
+ 5.672,
+ -1.37,
+ 5.761,
+ -1.34,
+ 5.85,
+ -1.38,
+ 1,
+ 5.961,
+ -1.43,
+ 6.072,
+ -4.639,
+ 6.183,
+ -4.639,
+ 1,
+ 6.283,
+ -4.639,
+ 6.383,
+ 10,
+ 6.483,
+ 10,
+ 0,
+ 8.517,
+ 10
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHandLDrawOrder",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.1,
+ 0,
+ 0.2,
+ 0,
+ 0.3,
+ 0,
+ 1,
+ 2.306,
+ 0,
+ 4.311,
+ 0,
+ 6.317,
+ 0,
+ 1,
+ 6.322,
+ 0,
+ 6.328,
+ 1,
+ 6.333,
+ 1,
+ 0,
+ 8.517,
+ 1
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamArmR01",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.089,
+ 0,
+ 0.178,
+ 0.391,
+ 0.267,
+ 0.391,
+ 1,
+ 0.428,
+ 0.391,
+ 0.589,
+ -2.558,
+ 0.75,
+ -2.701,
+ 1,
+ 0.939,
+ -2.87,
+ 1.128,
+ -2.869,
+ 1.317,
+ -2.983,
+ 1,
+ 1.361,
+ -3.009,
+ 1.406,
+ -3.351,
+ 1.45,
+ -3.351,
+ 1,
+ 1.522,
+ -3.351,
+ 1.594,
+ 1.572,
+ 1.667,
+ 3.791,
+ 1,
+ 1.744,
+ 6.18,
+ 1.822,
+ 6.25,
+ 1.9,
+ 6.25,
+ 1,
+ 2.011,
+ 6.25,
+ 2.122,
+ 6.105,
+ 2.233,
+ 5.999,
+ 1,
+ 2.378,
+ 5.861,
+ 2.522,
+ 5.858,
+ 2.667,
+ 5.677,
+ 1,
+ 2.789,
+ 5.524,
+ 2.911,
+ 4.537,
+ 3.033,
+ 3.182,
+ 1,
+ 3.161,
+ 1.766,
+ 3.289,
+ -2.32,
+ 3.417,
+ -2.32,
+ 1,
+ 3.628,
+ -2.32,
+ 3.839,
+ -2.328,
+ 4.05,
+ -2.122,
+ 1,
+ 4.339,
+ -1.84,
+ 4.628,
+ -1.406,
+ 4.917,
+ -1.406,
+ 1,
+ 5.072,
+ -1.406,
+ 5.228,
+ -1.607,
+ 5.383,
+ -1.607,
+ 1,
+ 5.589,
+ -1.607,
+ 5.794,
+ -1.551,
+ 6,
+ -1.289,
+ 1,
+ 6.05,
+ -1.225,
+ 6.1,
+ 3.952,
+ 6.15,
+ 10.234,
+ 1,
+ 6.217,
+ 18.61,
+ 6.283,
+ 40,
+ 6.35,
+ 40,
+ 0,
+ 8.517,
+ 40
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamArmR02",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.461,
+ 0,
+ 0.922,
+ -0.072,
+ 1.383,
+ -0.25,
+ 1,
+ 1.417,
+ -0.263,
+ 1.45,
+ -0.526,
+ 1.483,
+ -0.84,
+ 1,
+ 1.544,
+ -1.417,
+ 1.606,
+ -2.73,
+ 1.667,
+ -3.418,
+ 1,
+ 1.706,
+ -3.856,
+ 1.744,
+ -3.918,
+ 1.783,
+ -3.918,
+ 1,
+ 2.144,
+ -3.918,
+ 2.506,
+ -3.918,
+ 2.867,
+ -3.917,
+ 1,
+ 3.044,
+ -3.917,
+ 3.222,
+ -1.07,
+ 3.4,
+ -0.84,
+ 1,
+ 3.517,
+ -0.689,
+ 3.633,
+ -0.736,
+ 3.75,
+ -0.736,
+ 1,
+ 3.95,
+ -0.736,
+ 4.15,
+ -0.726,
+ 4.35,
+ -0.776,
+ 1,
+ 4.589,
+ -0.836,
+ 4.828,
+ -1.134,
+ 5.067,
+ -1.134,
+ 1,
+ 5.378,
+ -1.134,
+ 5.689,
+ -0.84,
+ 6,
+ -0.84,
+ 1,
+ 6.106,
+ -0.84,
+ 6.211,
+ -7.442,
+ 6.317,
+ -19.978,
+ 1,
+ 6.372,
+ -26.576,
+ 6.428,
+ -29.56,
+ 6.483,
+ -29.56,
+ 0,
+ 8.517,
+ -29.56
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamArmR03",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.167,
+ 0,
+ 0.333,
+ 0.218,
+ 0.5,
+ 0.218,
+ 1,
+ 0.644,
+ 0.218,
+ 0.789,
+ -2.61,
+ 0.933,
+ -2.61,
+ 1,
+ 1.05,
+ -2.61,
+ 1.167,
+ -2.644,
+ 1.283,
+ -2.4,
+ 1,
+ 1.383,
+ -2.191,
+ 1.483,
+ 0,
+ 1.583,
+ 0,
+ 1,
+ 1.85,
+ 0,
+ 2.117,
+ 0,
+ 2.383,
+ 0,
+ 1,
+ 2.539,
+ 0,
+ 2.694,
+ 2.88,
+ 2.85,
+ 2.88,
+ 1,
+ 3.056,
+ 2.88,
+ 3.261,
+ -1.306,
+ 3.467,
+ -1.306,
+ 1,
+ 3.744,
+ -1.306,
+ 4.022,
+ -1.308,
+ 4.3,
+ -1.235,
+ 1,
+ 4.556,
+ -1.168,
+ 4.811,
+ -0.986,
+ 5.067,
+ -0.986,
+ 1,
+ 5.444,
+ -0.986,
+ 5.822,
+ -0.986,
+ 6.2,
+ -0.986,
+ 1,
+ 6.3,
+ -0.986,
+ 6.4,
+ 30,
+ 6.5,
+ 30,
+ 1,
+ 6.572,
+ 30,
+ 6.644,
+ 30,
+ 6.717,
+ 30,
+ 0,
+ 8.517,
+ 30
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHandR",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.128,
+ 0,
+ 0.256,
+ 0,
+ 0.383,
+ 0,
+ 1,
+ 0.5,
+ 0,
+ 0.617,
+ -2.752,
+ 0.733,
+ -4.716,
+ 1,
+ 0.856,
+ -6.773,
+ 0.978,
+ -7,
+ 1.1,
+ -7,
+ 1,
+ 1.194,
+ -7,
+ 1.289,
+ -7,
+ 1.383,
+ -7,
+ 1,
+ 1.422,
+ -7,
+ 1.461,
+ -7.912,
+ 1.5,
+ -7.912,
+ 1,
+ 1.556,
+ -7.912,
+ 1.611,
+ -0.902,
+ 1.667,
+ -0.902,
+ 1,
+ 1.717,
+ -0.902,
+ 1.767,
+ -2.261,
+ 1.817,
+ -2.526,
+ 1,
+ 1.967,
+ -3.32,
+ 2.117,
+ -3.479,
+ 2.267,
+ -3.479,
+ 1,
+ 2.606,
+ -3.479,
+ 2.944,
+ -3.509,
+ 3.283,
+ -3.271,
+ 1,
+ 3.544,
+ -3.087,
+ 3.806,
+ 0.902,
+ 4.067,
+ 0.902,
+ 1,
+ 4.25,
+ 0.902,
+ 4.433,
+ 0,
+ 4.617,
+ 0,
+ 1,
+ 4.8,
+ 0,
+ 4.983,
+ 0,
+ 5.167,
+ 0,
+ 1,
+ 5.306,
+ 0,
+ 5.444,
+ -1.655,
+ 5.583,
+ -1.78,
+ 1,
+ 5.672,
+ -1.86,
+ 5.761,
+ -1.807,
+ 5.85,
+ -1.88,
+ 1,
+ 5.961,
+ -1.971,
+ 6.072,
+ -4.639,
+ 6.183,
+ -4.639,
+ 1,
+ 6.283,
+ -4.639,
+ 6.383,
+ 10,
+ 6.483,
+ 10,
+ 0,
+ 8.517,
+ 10
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHandRDrawOrder",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 2.106,
+ 0,
+ 4.211,
+ 0,
+ 6.317,
+ 0,
+ 1,
+ 6.322,
+ 0,
+ 6.328,
+ 1,
+ 6.333,
+ 1,
+ 0,
+ 8.517,
+ 1
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHairFront",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 8.517,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHairSide",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 8.517,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHairBack",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 8.517,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHairFrontFuwa",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 8.517,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHairSideFuwa",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 8.517,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHairBackFuwa",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 8.517,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamCollarString",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 8.517,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamNecklace1",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 8.517,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamNecklace2",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 8.517,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamNecklace3",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 8.517,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamPullHandle",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 8.517,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamPocketString",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 8.517,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamJacket",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 8.517,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamCollarFuwa",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 8.517,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamCollarStringFuwa",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 8.517,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHologram",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 8.517,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamTransparent",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 8.517,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamHologramPattern",
+ "Segments": [
+ 0,
+ 0,
+ 0,
+ 8.517,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamMonochrome",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.561,
+ 0,
+ 1.122,
+ 0,
+ 1.683,
+ 0,
+ 1,
+ 1.844,
+ 0,
+ 2.006,
+ 1,
+ 2.167,
+ 1,
+ 1,
+ 2.733,
+ 1,
+ 3.3,
+ 1,
+ 3.867,
+ 1,
+ 1,
+ 4.156,
+ 1,
+ 4.444,
+ 0,
+ 4.733,
+ 0,
+ 0,
+ 8.517,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamNight",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.261,
+ 0,
+ 2.522,
+ 0,
+ 3.783,
+ 0,
+ 1,
+ 4.078,
+ 0,
+ 4.372,
+ 1,
+ 4.667,
+ 1,
+ 0,
+ 8.517,
+ 1
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamLight",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 1.261,
+ 0,
+ 2.522,
+ 0,
+ 3.783,
+ 0,
+ 1,
+ 4.267,
+ 0,
+ 4.75,
+ 1,
+ 5.233,
+ 1,
+ 1,
+ 5.694,
+ 1,
+ 6.156,
+ 0,
+ 6.617,
+ 0,
+ 1,
+ 7.017,
+ 0,
+ 7.417,
+ 1,
+ 7.817,
+ 1,
+ 1,
+ 8.05,
+ 1,
+ 8.283,
+ 0.476,
+ 8.517,
+ 0.186
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamDisplayWidth1",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.1,
+ 0,
+ 0.2,
+ 0,
+ 0.3,
+ 0,
+ 1,
+ 0.367,
+ 0,
+ 0.433,
+ 0.379,
+ 0.5,
+ 0.763,
+ 1,
+ 0.539,
+ 0.987,
+ 0.578,
+ 1,
+ 0.617,
+ 1,
+ 1,
+ 2.772,
+ 1,
+ 4.928,
+ 1,
+ 7.083,
+ 1,
+ 1,
+ 7.167,
+ 1,
+ 7.25,
+ 0.637,
+ 7.333,
+ 0.135,
+ 1,
+ 7.356,
+ 0.001,
+ 7.378,
+ 0,
+ 7.4,
+ 0,
+ 0,
+ 8.517,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamDisplayHeight1",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.172,
+ 0,
+ 0.344,
+ 0,
+ 0.517,
+ 0,
+ 1,
+ 0.539,
+ 0,
+ 0.561,
+ 0,
+ 0.583,
+ 0.035,
+ 1,
+ 0.606,
+ 0.08,
+ 0.628,
+ 1.042,
+ 0.65,
+ 1.042,
+ 1,
+ 0.672,
+ 1.042,
+ 0.694,
+ 1,
+ 0.717,
+ 1,
+ 1,
+ 2.789,
+ 1,
+ 4.861,
+ 1,
+ 6.933,
+ 1,
+ 1,
+ 6.95,
+ 1,
+ 6.967,
+ 1.011,
+ 6.983,
+ 1.011,
+ 1,
+ 7.05,
+ 1.011,
+ 7.117,
+ 0,
+ 7.183,
+ 0,
+ 0,
+ 8.517,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamDisplayWidth2",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.083,
+ 0,
+ 0.167,
+ 0,
+ 0.25,
+ 0,
+ 1,
+ 0.317,
+ 0,
+ 0.383,
+ 0.379,
+ 0.45,
+ 0.763,
+ 1,
+ 0.489,
+ 0.987,
+ 0.528,
+ 1,
+ 0.567,
+ 1,
+ 1,
+ 2.75,
+ 1,
+ 4.933,
+ 1,
+ 7.117,
+ 1,
+ 1,
+ 7.2,
+ 1,
+ 7.283,
+ 0.637,
+ 7.367,
+ 0.135,
+ 1,
+ 7.389,
+ 0.001,
+ 7.411,
+ 0,
+ 7.433,
+ 0,
+ 0,
+ 8.517,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamDisplayHeight2",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.156,
+ 0,
+ 0.311,
+ 0,
+ 0.467,
+ 0,
+ 1,
+ 0.489,
+ 0,
+ 0.511,
+ 0,
+ 0.533,
+ 0.035,
+ 1,
+ 0.556,
+ 0.08,
+ 0.578,
+ 1.042,
+ 0.6,
+ 1.042,
+ 1,
+ 0.622,
+ 1.042,
+ 0.644,
+ 1,
+ 0.667,
+ 1,
+ 1,
+ 2.767,
+ 1,
+ 4.867,
+ 1,
+ 6.967,
+ 1,
+ 1,
+ 6.983,
+ 1,
+ 7,
+ 1.011,
+ 7.017,
+ 1.011,
+ 1,
+ 7.083,
+ 1.011,
+ 7.15,
+ 0,
+ 7.217,
+ 0,
+ 0,
+ 8.517,
+ 0
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamDisplayAngle",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.133,
+ 0,
+ 0.267,
+ 0,
+ 0.4,
+ 0,
+ 1,
+ 0.478,
+ 0,
+ 0.556,
+ 1,
+ 0.633,
+ 1,
+ 1,
+ 2.917,
+ 1,
+ 5.2,
+ 1,
+ 7.483,
+ 1,
+ 1,
+ 7.7,
+ 1,
+ 7.917,
+ 0.017,
+ 8.133,
+ 0.017,
+ 0,
+ 8.517,
+ 0.017
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamNoise",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.383,
+ 0,
+ 0.767,
+ 0,
+ 1.15,
+ 0,
+ 1,
+ 1.178,
+ 0,
+ 1.206,
+ 0,
+ 1.233,
+ 0,
+ 1,
+ 1.239,
+ 0,
+ 1.244,
+ 0.554,
+ 1.25,
+ 0.554,
+ 1,
+ 1.256,
+ 0.554,
+ 1.261,
+ 0.575,
+ 1.267,
+ 0.5,
+ 1,
+ 1.278,
+ 0.351,
+ 1.289,
+ 0,
+ 1.3,
+ 0,
+ 1,
+ 1.317,
+ 0,
+ 1.333,
+ 0.9,
+ 1.35,
+ 0.9,
+ 1,
+ 1.356,
+ 0.9,
+ 1.361,
+ 0,
+ 1.367,
+ 0,
+ 1,
+ 1.389,
+ 0,
+ 1.411,
+ 0.8,
+ 1.433,
+ 0.8,
+ 1,
+ 1.439,
+ 0.8,
+ 1.444,
+ 0,
+ 1.45,
+ 0,
+ 1,
+ 1.456,
+ 0,
+ 1.461,
+ 0.616,
+ 1.467,
+ 0.7,
+ 1,
+ 1.483,
+ 0.951,
+ 1.5,
+ 1,
+ 1.517,
+ 1,
+ 1,
+ 1.528,
+ 1,
+ 1.539,
+ 0.721,
+ 1.55,
+ 0.5,
+ 1,
+ 1.556,
+ 0.39,
+ 1.561,
+ 0.4,
+ 1.567,
+ 0.4,
+ 1,
+ 1.583,
+ 0.4,
+ 1.6,
+ 0.4,
+ 1.617,
+ 0.4,
+ 1,
+ 1.622,
+ 0.4,
+ 1.628,
+ 1,
+ 1.633,
+ 1,
+ 1,
+ 1.639,
+ 1,
+ 1.644,
+ 0.5,
+ 1.65,
+ 0.5,
+ 1,
+ 1.7,
+ 0.5,
+ 1.75,
+ 1,
+ 1.8,
+ 1,
+ 1,
+ 1.828,
+ 1,
+ 1.856,
+ 0.7,
+ 1.883,
+ 0.7,
+ 1,
+ 1.9,
+ 0.7,
+ 1.917,
+ 1,
+ 1.933,
+ 1,
+ 1,
+ 1.939,
+ 1,
+ 1.944,
+ 0,
+ 1.95,
+ 0,
+ 1,
+ 1.956,
+ 0,
+ 1.961,
+ 0.5,
+ 1.967,
+ 0.5,
+ 1,
+ 1.972,
+ 0.5,
+ 1.978,
+ 0.4,
+ 1.983,
+ 0.4,
+ 1,
+ 2,
+ 0.4,
+ 2.017,
+ 0.4,
+ 2.033,
+ 0.4,
+ 1,
+ 2.039,
+ 0.4,
+ 2.044,
+ 1,
+ 2.05,
+ 1,
+ 1,
+ 2.056,
+ 1,
+ 2.061,
+ 0.5,
+ 2.067,
+ 0.5,
+ 1,
+ 2.122,
+ 0.5,
+ 2.178,
+ 1,
+ 2.233,
+ 1,
+ 1,
+ 2.356,
+ 1,
+ 2.478,
+ 1,
+ 2.6,
+ 1,
+ 1,
+ 2.617,
+ 1,
+ 2.633,
+ 0.4,
+ 2.65,
+ 0.4,
+ 1,
+ 2.656,
+ 0.4,
+ 2.661,
+ 1,
+ 2.667,
+ 1,
+ 1,
+ 2.672,
+ 1,
+ 2.678,
+ 0.5,
+ 2.683,
+ 0.5,
+ 1,
+ 2.739,
+ 0.5,
+ 2.794,
+ 1,
+ 2.85,
+ 1,
+ 1,
+ 3.017,
+ 1,
+ 3.183,
+ 1,
+ 3.35,
+ 1,
+ 1,
+ 3.367,
+ 1,
+ 3.383,
+ 0.87,
+ 3.4,
+ 0.87,
+ 1,
+ 3.422,
+ 0.87,
+ 3.444,
+ 1,
+ 3.467,
+ 1,
+ 1,
+ 3.578,
+ 1,
+ 3.689,
+ 1,
+ 3.8,
+ 1,
+ 1,
+ 3.817,
+ 1,
+ 3.833,
+ 0.4,
+ 3.85,
+ 0.4,
+ 1,
+ 3.856,
+ 0.4,
+ 3.861,
+ 1,
+ 3.867,
+ 1,
+ 1,
+ 3.872,
+ 1,
+ 3.878,
+ 0.5,
+ 3.883,
+ 0.5,
+ 1,
+ 3.939,
+ 0.5,
+ 3.994,
+ 1,
+ 4.05,
+ 1,
+ 1,
+ 4.2,
+ 1,
+ 4.35,
+ 1,
+ 4.5,
+ 1,
+ 1,
+ 4.517,
+ 1,
+ 4.533,
+ 0.871,
+ 4.55,
+ 0.871,
+ 1,
+ 4.556,
+ 0.871,
+ 4.561,
+ 1,
+ 4.567,
+ 1,
+ 1,
+ 4.572,
+ 1,
+ 4.578,
+ 0.5,
+ 4.583,
+ 0.5,
+ 1,
+ 4.639,
+ 0.5,
+ 4.694,
+ 1,
+ 4.75,
+ 1,
+ 1,
+ 4.883,
+ 1,
+ 5.017,
+ 1,
+ 5.15,
+ 1,
+ 1,
+ 5.161,
+ 1,
+ 5.172,
+ 0.7,
+ 5.183,
+ 0.7,
+ 1,
+ 5.2,
+ 0.7,
+ 5.217,
+ 1,
+ 5.233,
+ 1,
+ 1,
+ 5.261,
+ 1,
+ 5.289,
+ 1,
+ 5.317,
+ 1,
+ 1,
+ 5.333,
+ 1,
+ 5.35,
+ 0.825,
+ 5.367,
+ 0.825,
+ 1,
+ 5.394,
+ 0.825,
+ 5.422,
+ 1,
+ 5.45,
+ 1,
+ 1,
+ 5.583,
+ 1,
+ 5.717,
+ 1,
+ 5.85,
+ 1,
+ 1,
+ 5.867,
+ 1,
+ 5.883,
+ 0.635,
+ 5.9,
+ 0.635,
+ 1,
+ 5.906,
+ 0.635,
+ 5.911,
+ 1,
+ 5.917,
+ 1,
+ 1,
+ 5.922,
+ 1,
+ 5.928,
+ 0.825,
+ 5.933,
+ 0.825,
+ 1,
+ 5.967,
+ 0.825,
+ 6,
+ 1,
+ 6.033,
+ 1,
+ 1,
+ 6.206,
+ 1,
+ 6.378,
+ 1,
+ 6.55,
+ 1,
+ 1,
+ 6.561,
+ 1,
+ 6.572,
+ 0.849,
+ 6.583,
+ 0.849,
+ 1,
+ 6.594,
+ 0.849,
+ 6.606,
+ 1,
+ 6.617,
+ 1,
+ 1,
+ 6.622,
+ 1,
+ 6.628,
+ 0.762,
+ 6.633,
+ 0.762,
+ 1,
+ 6.661,
+ 0.762,
+ 6.689,
+ 1,
+ 6.717,
+ 1,
+ 1,
+ 6.8,
+ 1,
+ 6.883,
+ 1,
+ 6.967,
+ 1,
+ 1,
+ 6.978,
+ 1,
+ 6.989,
+ 0.419,
+ 7,
+ 0.419,
+ 1,
+ 7.011,
+ 0.419,
+ 7.022,
+ 1,
+ 7.033,
+ 1,
+ 1,
+ 7.039,
+ 1,
+ 7.044,
+ 0.849,
+ 7.05,
+ 0.849,
+ 1,
+ 7.078,
+ 0.849,
+ 7.106,
+ 1,
+ 7.133,
+ 1,
+ 0,
+ 8.517,
+ 1
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Id": "ParamNoiseRotate",
+ "Segments": [
+ 0,
+ 0,
+ 1,
+ 0.033,
+ 0,
+ 0.067,
+ 0,
+ 0.1,
+ 0,
+ 0,
+ 1.483,
+ 0.99,
+ 0,
+ 1.5,
+ 0,
+ 0,
+ 2.883,
+ 0.99,
+ 0,
+ 2.9,
+ 0,
+ 0,
+ 4.283,
+ 0.99,
+ 0,
+ 4.3,
+ 0,
+ 0,
+ 5.683,
+ 0.99,
+ 0,
+ 5.7,
+ 0,
+ 0,
+ 7.083,
+ 0.99,
+ 0,
+ 7.1,
+ 0,
+ 0,
+ 8.483,
+ 0.99,
+ 0,
+ 8.5,
+ 0,
+ 0,
+ 8.517,
+ 0.012
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test_suites/avatar/models/runtime/ren.4096/texture_00.png b/test_suites/avatar/models/runtime/ren.4096/texture_00.png
new file mode 100644
index 0000000..82829f8
Binary files /dev/null and b/test_suites/avatar/models/runtime/ren.4096/texture_00.png differ
diff --git a/test_suites/avatar/models/runtime/ren.cdi3.json b/test_suites/avatar/models/runtime/ren.cdi3.json
new file mode 100644
index 0000000..5c6f232
--- /dev/null
+++ b/test_suites/avatar/models/runtime/ren.cdi3.json
@@ -0,0 +1,647 @@
+{
+ "Version": 3,
+ "Parameters": [
+ {
+ "Id": "ParamAngleX",
+ "GroupId": "ParamGroupFace",
+ "Name": "Angle X"
+ },
+ {
+ "Id": "ParamAngleY",
+ "GroupId": "ParamGroupFace",
+ "Name": "Angle Y"
+ },
+ {
+ "Id": "ParamAngleZ",
+ "GroupId": "ParamGroupFace",
+ "Name": "Angle Z"
+ },
+ {
+ "Id": "ParamEyeLOpen",
+ "GroupId": "ParamGroupEye",
+ "Name": "Eye L Open"
+ },
+ {
+ "Id": "ParamEyeLSmile",
+ "GroupId": "ParamGroupEye",
+ "Name": "Eye L Smile"
+ },
+ {
+ "Id": "ParamEyeROpen",
+ "GroupId": "ParamGroupEye",
+ "Name": "Eye R Open"
+ },
+ {
+ "Id": "ParamEyeRSmile",
+ "GroupId": "ParamGroupEye",
+ "Name": "Eye R Smile"
+ },
+ {
+ "Id": "ParamEyeBallX",
+ "GroupId": "ParamGroupEyeballs",
+ "Name": "Eyeballs X"
+ },
+ {
+ "Id": "ParamEyeBallY",
+ "GroupId": "ParamGroupEyeballs",
+ "Name": "Eyeballs Y"
+ },
+ {
+ "Id": "ParamEyeSize",
+ "GroupId": "ParamGroupEyeballs",
+ "Name": "Eyeballs Shrink"
+ },
+ {
+ "Id": "ParamBrowLY",
+ "GroupId": "ParamGroupBrows",
+ "Name": "Eyebrow L Y"
+ },
+ {
+ "Id": "ParamBrowRY",
+ "GroupId": "ParamGroupBrows",
+ "Name": "Eyebrow R Y"
+ },
+ {
+ "Id": "ParamBrowLX",
+ "GroupId": "ParamGroupBrows",
+ "Name": "Eyebrow L X"
+ },
+ {
+ "Id": "ParamBrowRX",
+ "GroupId": "ParamGroupBrows",
+ "Name": "Eyebrow R X"
+ },
+ {
+ "Id": "ParamBrowLAngle",
+ "GroupId": "ParamGroupBrows",
+ "Name": "Eyebrow L Angle"
+ },
+ {
+ "Id": "ParamBrowRAngle",
+ "GroupId": "ParamGroupBrows",
+ "Name": "Eyebrow R Angle"
+ },
+ {
+ "Id": "ParamBrowLForm",
+ "GroupId": "ParamGroupBrows",
+ "Name": "Eyebrow L Form"
+ },
+ {
+ "Id": "ParamBrowRForm",
+ "GroupId": "ParamGroupBrows",
+ "Name": "Eyebrow R Form"
+ },
+ {
+ "Id": "ParamMouthForm",
+ "GroupId": "ParamGroupMouth",
+ "Name": "Mouth Form"
+ },
+ {
+ "Id": "ParamMouthOpenY",
+ "GroupId": "ParamGroupMouth",
+ "Name": "Mouth Open"
+ },
+ {
+ "Id": "ParamBodyAngleX",
+ "GroupId": "ParamGroupBody",
+ "Name": "Body Rotatoin X"
+ },
+ {
+ "Id": "ParamBodyAngleY",
+ "GroupId": "ParamGroupBody",
+ "Name": "Body Rotatoin Y"
+ },
+ {
+ "Id": "ParamBodyAngleZ",
+ "GroupId": "ParamGroupBody",
+ "Name": "Body Rotatoin Z"
+ },
+ {
+ "Id": "ParamWaistAngleZ",
+ "GroupId": "ParamGroupBody",
+ "Name": "Waist Rotation Z"
+ },
+ {
+ "Id": "ParamBodyCenter",
+ "GroupId": "ParamGroupBody",
+ "Name": "Weight Shift"
+ },
+ {
+ "Id": "ParamBreath",
+ "GroupId": "ParamGroupBody",
+ "Name": "Breath"
+ },
+ {
+ "Id": "ParamLeftShoulderUp",
+ "GroupId": "ParamGroupBody",
+ "Name": "Shoulder L Y"
+ },
+ {
+ "Id": "ParamRightShoulderUp",
+ "GroupId": "ParamGroupBody",
+ "Name": "Shoulder R Y"
+ },
+ {
+ "Id": "ParamLegR",
+ "GroupId": "ParamGroupBody",
+ "Name": "Leg R"
+ },
+ {
+ "Id": "ParamLegL",
+ "GroupId": "ParamGroupBody",
+ "Name": "Leg L"
+ },
+ {
+ "Id": "ParamBodyAngleX2",
+ "GroupId": "ParamGroup",
+ "Name": "Body Rotation X2"
+ },
+ {
+ "Id": "ParamBodyAngleY2",
+ "GroupId": "ParamGroup",
+ "Name": "Body Rotation Y2"
+ },
+ {
+ "Id": "ParamBodyCenter2",
+ "GroupId": "ParamGroup",
+ "Name": "Weight Shift 2"
+ },
+ {
+ "Id": "ParamLeftShoulderUp2",
+ "GroupId": "ParamGroup",
+ "Name": "Shoulder L Y 2"
+ },
+ {
+ "Id": "ParamRightShoulderUp2",
+ "GroupId": "ParamGroup",
+ "Name": "Shoulder R Y 2"
+ },
+ {
+ "Id": "ParamArmL01",
+ "GroupId": "ParamGroupArmL",
+ "Name": "Arm L Shoulder Rotation"
+ },
+ {
+ "Id": "ParamArmL02",
+ "GroupId": "ParamGroupArmL",
+ "Name": "Arm L Elbow Rotation"
+ },
+ {
+ "Id": "ParamArmL03",
+ "GroupId": "ParamGroupArmL",
+ "Name": "Arm L Wrist Rotation"
+ },
+ {
+ "Id": "ParamHandL",
+ "GroupId": "ParamGroupArmL",
+ "Name": "Hand L"
+ },
+ {
+ "Id": "ParamHandLDrawOrder",
+ "GroupId": "ParamGroupArmL",
+ "Name": "Hand L Draw Order"
+ },
+ {
+ "Id": "ParamArmR01",
+ "GroupId": "ParamGroupArmR",
+ "Name": "Arm R Shoulder Rotation"
+ },
+ {
+ "Id": "ParamArmR02",
+ "GroupId": "ParamGroupArmR",
+ "Name": "Arm R Elbow Rotation"
+ },
+ {
+ "Id": "ParamArmR03",
+ "GroupId": "ParamGroupArmR",
+ "Name": "Arm R Wrist Rotation"
+ },
+ {
+ "Id": "ParamHandR",
+ "GroupId": "ParamGroupArmR",
+ "Name": "Hand R"
+ },
+ {
+ "Id": "ParamHandRDrawOrder",
+ "GroupId": "ParamGroupArmR",
+ "Name": "Hand R Draw Order"
+ },
+ {
+ "Id": "ParamHairFront",
+ "GroupId": "ParamGroupSway",
+ "Name": "Hair Sway Front"
+ },
+ {
+ "Id": "ParamHairSide",
+ "GroupId": "ParamGroupSway",
+ "Name": "Hair Move Side"
+ },
+ {
+ "Id": "ParamHairBack",
+ "GroupId": "ParamGroupSway",
+ "Name": "Hair Move Back"
+ },
+ {
+ "Id": "ParamHairFrontFuwa",
+ "GroupId": "ParamGroupSway",
+ "Name": "Front Hair Fluff"
+ },
+ {
+ "Id": "ParamHairSideFuwa",
+ "GroupId": "ParamGroupSway",
+ "Name": "Side Hair Flap"
+ },
+ {
+ "Id": "ParamHairBackFuwa",
+ "GroupId": "ParamGroupSway",
+ "Name": "Back Hair Fluff"
+ },
+ {
+ "Id": "ParamCollarString",
+ "GroupId": "ParamGroupSway",
+ "Name": "Collar Strap Sway"
+ },
+ {
+ "Id": "ParamNecklace1",
+ "GroupId": "ParamGroupSway",
+ "Name": "Necklace Sway 1"
+ },
+ {
+ "Id": "ParamNecklace2",
+ "GroupId": "ParamGroupSway",
+ "Name": "Necklace Sway 2"
+ },
+ {
+ "Id": "ParamNecklace3",
+ "GroupId": "ParamGroupSway",
+ "Name": "Necklace Sway 3"
+ },
+ {
+ "Id": "ParamPullHandle",
+ "GroupId": "ParamGroupSway",
+ "Name": "Puller Sway"
+ },
+ {
+ "Id": "ParamPocketString",
+ "GroupId": "ParamGroupSway",
+ "Name": "Pocket Band Sway"
+ },
+ {
+ "Id": "ParamJacket",
+ "GroupId": "ParamGroupSway",
+ "Name": "Jacket Sway"
+ },
+ {
+ "Id": "ParamCollarFuwa",
+ "GroupId": "ParamGroupSway",
+ "Name": "Collar Flap"
+ },
+ {
+ "Id": "ParamCollarStringFuwa",
+ "GroupId": "ParamGroupSway",
+ "Name": "Collar Strap Flap"
+ },
+ {
+ "Id": "ParamHologram",
+ "GroupId": "ParamGroupEffect",
+ "Name": "Hologram"
+ },
+ {
+ "Id": "ParamTransparent",
+ "GroupId": "ParamGroupEffect",
+ "Name": "See-through"
+ },
+ {
+ "Id": "ParamHologramPattern",
+ "GroupId": "ParamGroupEffect",
+ "Name": "Hologram Pattern"
+ },
+ {
+ "Id": "ParamMonochrome",
+ "GroupId": "ParamGroupEffect",
+ "Name": "Monochrome"
+ },
+ {
+ "Id": "ParamNight",
+ "GroupId": "ParamGroupEffect",
+ "Name": "Night"
+ },
+ {
+ "Id": "ParamLight",
+ "GroupId": "ParamGroupEffect",
+ "Name": "Light"
+ },
+ {
+ "Id": "ParamDisplayWidth1",
+ "GroupId": "ParamGroupEffect",
+ "Name": "Display 1 Width"
+ },
+ {
+ "Id": "ParamDisplayHeight1",
+ "GroupId": "ParamGroupEffect",
+ "Name": "Display 1 Height"
+ },
+ {
+ "Id": "ParamDisplayWidth2",
+ "GroupId": "ParamGroupEffect",
+ "Name": "Display 2 Width"
+ },
+ {
+ "Id": "ParamDisplayHeight2",
+ "GroupId": "ParamGroupEffect",
+ "Name": "Display 2 Height"
+ },
+ {
+ "Id": "ParamDisplayAngle",
+ "GroupId": "ParamGroupEffect",
+ "Name": "Display Angle"
+ },
+ {
+ "Id": "ParamNoise",
+ "GroupId": "ParamGroupEffect",
+ "Name": "Noise"
+ },
+ {
+ "Id": "ParamNoiseRotate",
+ "GroupId": "ParamGroupEffect",
+ "Name": "Noise Rotation"
+ }
+ ],
+ "ParameterGroups": [
+ {
+ "Id": "ParamGroupFace",
+ "GroupId": "",
+ "Name": "Face"
+ },
+ {
+ "Id": "ParamGroupEye",
+ "GroupId": "",
+ "Name": "Eyes"
+ },
+ {
+ "Id": "ParamGroupEyeballs",
+ "GroupId": "",
+ "Name": "Eyeballs"
+ },
+ {
+ "Id": "ParamGroupBrows",
+ "GroupId": "",
+ "Name": "Eyebrows"
+ },
+ {
+ "Id": "ParamGroupMouth",
+ "GroupId": "",
+ "Name": "Mouth"
+ },
+ {
+ "Id": "ParamGroupBody",
+ "GroupId": "",
+ "Name": "Body"
+ },
+ {
+ "Id": "ParamGroup",
+ "GroupId": "",
+ "Name": "Body Physics"
+ },
+ {
+ "Id": "ParamGroupArmL",
+ "GroupId": "",
+ "Name": "Arm L"
+ },
+ {
+ "Id": "ParamGroupArmR",
+ "GroupId": "",
+ "Name": "Arm R"
+ },
+ {
+ "Id": "ParamGroupSway",
+ "GroupId": "",
+ "Name": "Sway"
+ },
+ {
+ "Id": "ParamGroupEffect",
+ "GroupId": "",
+ "Name": "Effect"
+ }
+ ],
+ "Parts": [
+ {
+ "Id": "PartAll",
+ "Name": "Overall"
+ },
+ {
+ "Id": "PartSketch",
+ "Name": "[Guide Image]"
+ },
+ {
+ "Id": "PartEffect",
+ "Name": "Effect"
+ },
+ {
+ "Id": "PartCore",
+ "Name": "Core"
+ },
+ {
+ "Id": "PartHairFront",
+ "Name": "Front Hair"
+ },
+ {
+ "Id": "PartBrow",
+ "Name": "Eyebrow"
+ },
+ {
+ "Id": "PartEyeL",
+ "Name": "Eye L"
+ },
+ {
+ "Id": "PartEyeR",
+ "Name": "Eye R"
+ },
+ {
+ "Id": "PartNose",
+ "Name": "Nose"
+ },
+ {
+ "Id": "PartMouth",
+ "Name": "Mouth"
+ },
+ {
+ "Id": "PartFace",
+ "Name": "Face"
+ },
+ {
+ "Id": "PartEar",
+ "Name": "Ears"
+ },
+ {
+ "Id": "PartNeck",
+ "Name": "Neck"
+ },
+ {
+ "Id": "PartHairBack",
+ "Name": "Back Hair"
+ },
+ {
+ "Id": "PartJacket01",
+ "Name": "Jacket"
+ },
+ {
+ "Id": "PartArmL",
+ "Name": "Arm L"
+ },
+ {
+ "Id": "PartArmR",
+ "Name": "Arm R"
+ },
+ {
+ "Id": "PartBody",
+ "Name": "Upper Body"
+ },
+ {
+ "Id": "PartDisplay",
+ "Name": "Display"
+ },
+ {
+ "Id": "PartMonochrome",
+ "Name": "Monochrome"
+ },
+ {
+ "Id": "PartNight",
+ "Name": "Night"
+ },
+ {
+ "Id": "PartHologram",
+ "Name": "Hologram"
+ },
+ {
+ "Id": "PartTransparent",
+ "Name": "See-through"
+ },
+ {
+ "Id": "PartHairShadow",
+ "Name": "Hair Shadow"
+ },
+ {
+ "Id": "PartEyeballL",
+ "Name": "Eyeball L"
+ },
+ {
+ "Id": "PartEyeballR",
+ "Name": "Eyeball R"
+ },
+ {
+ "Id": "PartHairline",
+ "Name": "Hairline L"
+ },
+ {
+ "Id": "PartJacket02",
+ "Name": "Jacket"
+ },
+ {
+ "Id": "PartJacketArmL",
+ "Name": "Jacket Arm L"
+ },
+ {
+ "Id": "PartJacketArmR",
+ "Name": "Jacket Arm R"
+ },
+ {
+ "Id": "PartJacketShadow",
+ "Name": "Jacket Shadow"
+ },
+ {
+ "Id": "PartNecklace",
+ "Name": "Necklace"
+ },
+ {
+ "Id": "PartShirt",
+ "Name": "Shirt"
+ },
+ {
+ "Id": "PartLowerBody",
+ "Name": "Lower Body"
+ },
+ {
+ "Id": "PartDisplayPaint",
+ "Name": "Display Fill"
+ },
+ {
+ "Id": "PartShadow",
+ "Name": "Shadow"
+ },
+ {
+ "Id": "PartBrow2",
+ "Name": "Eyebrow"
+ },
+ {
+ "Id": "PartEyeL2",
+ "Name": "Eye L"
+ },
+ {
+ "Id": "PartEyeR2",
+ "Name": "Eye R"
+ },
+ {
+ "Id": "PartHairShadowOut",
+ "Name": "Hair Shadow Out"
+ },
+ {
+ "Id": "PartPupilL",
+ "Name": "Pupil L"
+ },
+ {
+ "Id": "PartPupilR",
+ "Name": "Pupil R"
+ },
+ {
+ "Id": "PartArmLDrawOrder",
+ "Name": "Arm L Draw Order"
+ },
+ {
+ "Id": "PartArmRDrawOrder",
+ "Name": "Arm R Draw Order"
+ },
+ {
+ "Id": "PartBodyOut",
+ "Name": "Torso Out"
+ },
+ {
+ "Id": "PartDisplay01",
+ "Name": "Display 1"
+ },
+ {
+ "Id": "PartDisplay02",
+ "Name": "Display 2"
+ },
+ {
+ "Id": "PartEyeballL2",
+ "Name": "Eyeball L"
+ },
+ {
+ "Id": "PartEyeballR2",
+ "Name": "Eyeball R"
+ },
+ {
+ "Id": "PartHairBackOut",
+ "Name": "Back Hair Out"
+ },
+ {
+ "Id": "PartPupilL2",
+ "Name": "Pupil L"
+ },
+ {
+ "Id": "PartPupilR2",
+ "Name": "Pupil R"
+ }
+ ],
+ "CombinedParameters": [
+ [
+ "ParamAngleX",
+ "ParamAngleY"
+ ],
+ [
+ "ParamMouthForm",
+ "ParamMouthOpenY"
+ ]
+ ]
+}
\ No newline at end of file
diff --git a/test_suites/avatar/models/runtime/ren.moc3 b/test_suites/avatar/models/runtime/ren.moc3
new file mode 100644
index 0000000..845b04f
Binary files /dev/null and b/test_suites/avatar/models/runtime/ren.moc3 differ
diff --git a/test_suites/avatar/models/runtime/ren.model3.json b/test_suites/avatar/models/runtime/ren.model3.json
new file mode 100644
index 0000000..f3cf8b8
--- /dev/null
+++ b/test_suites/avatar/models/runtime/ren.model3.json
@@ -0,0 +1,75 @@
+{
+ "Version": 3,
+ "FileReferences": {
+ "Moc": "ren.moc3",
+ "Textures": [
+ "ren.4096/texture_00.png"
+ ],
+ "Physics": "ren.physics3.json",
+ "DisplayInfo": "ren.cdi3.json",
+ "Expressions": [
+ {
+ "Name": "exp_01",
+ "File": "expressions/exp_01.exp3.json"
+ },
+ {
+ "Name": "exp_02",
+ "File": "expressions/exp_02.exp3.json"
+ },
+ {
+ "Name": "exp_03",
+ "File": "expressions/exp_03.exp3.json"
+ },
+ {
+ "Name": "exp_04",
+ "File": "expressions/exp_04.exp3.json"
+ },
+ {
+ "Name": "exp_05",
+ "File": "expressions/exp_05.exp3.json"
+ }
+ ],
+ "Motions": {
+ "Idle": [
+ {
+ "File": "motions/mtn_01.motion3.json"
+ }
+ ],
+ "": [
+ {
+ "File": "motions/mtn_02.motion3.json"
+ },
+ {
+ "File": "motions/mtn_03.motion3.json"
+ }
+ ]
+ }
+ },
+ "Groups": [
+ {
+ "Target": "Parameter",
+ "Name": "EyeBlink",
+ "Ids": [
+ "ParamEyeLOpen",
+ "ParamEyeROpen"
+ ]
+ },
+ {
+ "Target": "Parameter",
+ "Name": "LipSync",
+ "Ids": [
+ "ParamMouthOpenY"
+ ]
+ }
+ ],
+ "HitAreas": [
+ {
+ "Id": "HitAreaBody",
+ "Name": "Body"
+ },
+ {
+ "Id": "HitAreaHead",
+ "Name": "Head"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test_suites/avatar/models/runtime/ren.physics3.json b/test_suites/avatar/models/runtime/ren.physics3.json
new file mode 100644
index 0000000..d2c79fe
--- /dev/null
+++ b/test_suites/avatar/models/runtime/ren.physics3.json
@@ -0,0 +1,1301 @@
+{
+ "Version": 3,
+ "Meta": {
+ "PhysicsSettingCount": 16,
+ "TotalInputCount": 33,
+ "TotalOutputCount": 20,
+ "VertexCount": 36,
+ "Fps": 60,
+ "EffectiveForces": {
+ "Gravity": {
+ "X": 0,
+ "Y": -1
+ },
+ "Wind": {
+ "X": 0,
+ "Y": 0
+ }
+ },
+ "PhysicsDictionary": [
+ {
+ "Id": "PhysicsSetting1",
+ "Name": "体 X"
+ },
+ {
+ "Id": "PhysicsSetting2",
+ "Name": "重心"
+ },
+ {
+ "Id": "PhysicsSetting3",
+ "Name": "体 Y"
+ },
+ {
+ "Id": "PhysicsSetting4",
+ "Name": "肩"
+ },
+ {
+ "Id": "PhysicsSetting5",
+ "Name": "前髪"
+ },
+ {
+ "Id": "PhysicsSetting6",
+ "Name": "後ろ髪"
+ },
+ {
+ "Id": "PhysicsSetting7",
+ "Name": "横髪"
+ },
+ {
+ "Id": "PhysicsSetting8",
+ "Name": "前髪のふわ"
+ },
+ {
+ "Id": "PhysicsSetting9",
+ "Name": "横髪のふわ"
+ },
+ {
+ "Id": "PhysicsSetting10",
+ "Name": "後ろ髪のふわ"
+ },
+ {
+ "Id": "PhysicsSetting11",
+ "Name": "襟ひも"
+ },
+ {
+ "Id": "PhysicsSetting12",
+ "Name": "ネックレス"
+ },
+ {
+ "Id": "PhysicsSetting13",
+ "Name": "引き手"
+ },
+ {
+ "Id": "PhysicsSetting14",
+ "Name": "ポケットひも"
+ },
+ {
+ "Id": "PhysicsSetting15",
+ "Name": "ジャケット"
+ },
+ {
+ "Id": "PhysicsSetting16",
+ "Name": "襟のふわ"
+ }
+ ]
+ },
+ "PhysicsSettings": [
+ {
+ "Id": "PhysicsSetting1",
+ "Input": [
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamAngleX"
+ },
+ "Weight": 100,
+ "Type": "Angle",
+ "Reflect": false
+ }
+ ],
+ "Output": [
+ {
+ "Destination": {
+ "Target": "Parameter",
+ "Id": "ParamBodyAngleX2"
+ },
+ "VertexIndex": 1,
+ "Scale": 40,
+ "Weight": 100,
+ "Type": "Angle",
+ "Reflect": false
+ }
+ ],
+ "Vertices": [
+ {
+ "Position": {
+ "X": 0,
+ "Y": 0
+ },
+ "Mobility": 1,
+ "Delay": 1,
+ "Acceleration": 1,
+ "Radius": 0
+ },
+ {
+ "Position": {
+ "X": 0,
+ "Y": 20
+ },
+ "Mobility": 0.6,
+ "Delay": 0.4,
+ "Acceleration": 10,
+ "Radius": 20
+ }
+ ],
+ "Normalization": {
+ "Position": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ },
+ "Angle": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ }
+ }
+ },
+ {
+ "Id": "PhysicsSetting2",
+ "Input": [
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamAngleX"
+ },
+ "Weight": 100,
+ "Type": "Angle",
+ "Reflect": false
+ }
+ ],
+ "Output": [
+ {
+ "Destination": {
+ "Target": "Parameter",
+ "Id": "ParamBodyCenter2"
+ },
+ "VertexIndex": 1,
+ "Scale": 10,
+ "Weight": 100,
+ "Type": "Angle",
+ "Reflect": false
+ }
+ ],
+ "Vertices": [
+ {
+ "Position": {
+ "X": 0,
+ "Y": 0
+ },
+ "Mobility": 1,
+ "Delay": 1,
+ "Acceleration": 1,
+ "Radius": 0
+ },
+ {
+ "Position": {
+ "X": 0,
+ "Y": 15
+ },
+ "Mobility": 0.6,
+ "Delay": 0.6,
+ "Acceleration": 10,
+ "Radius": 15
+ }
+ ],
+ "Normalization": {
+ "Position": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ },
+ "Angle": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ }
+ }
+ },
+ {
+ "Id": "PhysicsSetting3",
+ "Input": [
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamAngleY"
+ },
+ "Weight": 100,
+ "Type": "Angle",
+ "Reflect": false
+ }
+ ],
+ "Output": [
+ {
+ "Destination": {
+ "Target": "Parameter",
+ "Id": "ParamBodyAngleY2"
+ },
+ "VertexIndex": 1,
+ "Scale": 20,
+ "Weight": 100,
+ "Type": "Angle",
+ "Reflect": false
+ }
+ ],
+ "Vertices": [
+ {
+ "Position": {
+ "X": 0,
+ "Y": 0
+ },
+ "Mobility": 1,
+ "Delay": 1,
+ "Acceleration": 1,
+ "Radius": 0
+ },
+ {
+ "Position": {
+ "X": 0,
+ "Y": 20
+ },
+ "Mobility": 0.8,
+ "Delay": 0.4,
+ "Acceleration": 10,
+ "Radius": 20
+ }
+ ],
+ "Normalization": {
+ "Position": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ },
+ "Angle": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ }
+ }
+ },
+ {
+ "Id": "PhysicsSetting4",
+ "Input": [
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamAngleY"
+ },
+ "Weight": 100,
+ "Type": "X",
+ "Reflect": true
+ }
+ ],
+ "Output": [
+ {
+ "Destination": {
+ "Target": "Parameter",
+ "Id": "ParamLeftShoulderUp2"
+ },
+ "VertexIndex": 2,
+ "Scale": 8,
+ "Weight": 100,
+ "Type": "Angle",
+ "Reflect": false
+ },
+ {
+ "Destination": {
+ "Target": "Parameter",
+ "Id": "ParamRightShoulderUp2"
+ },
+ "VertexIndex": 2,
+ "Scale": 8,
+ "Weight": 100,
+ "Type": "Angle",
+ "Reflect": false
+ }
+ ],
+ "Vertices": [
+ {
+ "Position": {
+ "X": 0,
+ "Y": 0
+ },
+ "Mobility": 1,
+ "Delay": 1,
+ "Acceleration": 1,
+ "Radius": 0
+ },
+ {
+ "Position": {
+ "X": 0,
+ "Y": 15
+ },
+ "Mobility": 0.6,
+ "Delay": 0.4,
+ "Acceleration": 10,
+ "Radius": 15
+ },
+ {
+ "Position": {
+ "X": 0,
+ "Y": 25
+ },
+ "Mobility": 0.6,
+ "Delay": 0.4,
+ "Acceleration": 10,
+ "Radius": 10
+ }
+ ],
+ "Normalization": {
+ "Position": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ },
+ "Angle": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ }
+ }
+ },
+ {
+ "Id": "PhysicsSetting5",
+ "Input": [
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamAngleX"
+ },
+ "Weight": 60,
+ "Type": "X",
+ "Reflect": false
+ },
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamAngleZ"
+ },
+ "Weight": 60,
+ "Type": "Angle",
+ "Reflect": false
+ },
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamBodyAngleX"
+ },
+ "Weight": 40,
+ "Type": "X",
+ "Reflect": false
+ },
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamBodyAngleZ"
+ },
+ "Weight": 40,
+ "Type": "Angle",
+ "Reflect": false
+ }
+ ],
+ "Output": [
+ {
+ "Destination": {
+ "Target": "Parameter",
+ "Id": "ParamHairFront"
+ },
+ "VertexIndex": 1,
+ "Scale": 1,
+ "Weight": 100,
+ "Type": "Angle",
+ "Reflect": false
+ }
+ ],
+ "Vertices": [
+ {
+ "Position": {
+ "X": 0,
+ "Y": 0
+ },
+ "Mobility": 1,
+ "Delay": 1,
+ "Acceleration": 1,
+ "Radius": 0
+ },
+ {
+ "Position": {
+ "X": 0,
+ "Y": 9
+ },
+ "Mobility": 0.95,
+ "Delay": 0.7,
+ "Acceleration": 1.5,
+ "Radius": 9
+ }
+ ],
+ "Normalization": {
+ "Position": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ },
+ "Angle": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ }
+ }
+ },
+ {
+ "Id": "PhysicsSetting6",
+ "Input": [
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamAngleX"
+ },
+ "Weight": 60,
+ "Type": "X",
+ "Reflect": false
+ },
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamAngleZ"
+ },
+ "Weight": 60,
+ "Type": "Angle",
+ "Reflect": false
+ },
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamBodyAngleX"
+ },
+ "Weight": 40,
+ "Type": "X",
+ "Reflect": false
+ },
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamBodyAngleZ"
+ },
+ "Weight": 40,
+ "Type": "Angle",
+ "Reflect": false
+ }
+ ],
+ "Output": [
+ {
+ "Destination": {
+ "Target": "Parameter",
+ "Id": "ParamHairBack"
+ },
+ "VertexIndex": 1,
+ "Scale": 1,
+ "Weight": 100,
+ "Type": "Angle",
+ "Reflect": false
+ }
+ ],
+ "Vertices": [
+ {
+ "Position": {
+ "X": 0,
+ "Y": 0
+ },
+ "Mobility": 1,
+ "Delay": 1,
+ "Acceleration": 1,
+ "Radius": 0
+ },
+ {
+ "Position": {
+ "X": 0,
+ "Y": 12
+ },
+ "Mobility": 0.95,
+ "Delay": 0.7,
+ "Acceleration": 1.5,
+ "Radius": 12
+ }
+ ],
+ "Normalization": {
+ "Position": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ },
+ "Angle": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ }
+ }
+ },
+ {
+ "Id": "PhysicsSetting7",
+ "Input": [
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamAngleX"
+ },
+ "Weight": 60,
+ "Type": "X",
+ "Reflect": false
+ },
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamAngleZ"
+ },
+ "Weight": 60,
+ "Type": "Angle",
+ "Reflect": false
+ },
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamBodyAngleX"
+ },
+ "Weight": 40,
+ "Type": "X",
+ "Reflect": false
+ },
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamBodyAngleZ"
+ },
+ "Weight": 40,
+ "Type": "Angle",
+ "Reflect": false
+ }
+ ],
+ "Output": [
+ {
+ "Destination": {
+ "Target": "Parameter",
+ "Id": "ParamHairSide"
+ },
+ "VertexIndex": 1,
+ "Scale": 1,
+ "Weight": 100,
+ "Type": "Angle",
+ "Reflect": false
+ }
+ ],
+ "Vertices": [
+ {
+ "Position": {
+ "X": 0,
+ "Y": 0
+ },
+ "Mobility": 1,
+ "Delay": 1,
+ "Acceleration": 1,
+ "Radius": 0
+ },
+ {
+ "Position": {
+ "X": 0,
+ "Y": 10
+ },
+ "Mobility": 0.95,
+ "Delay": 0.8,
+ "Acceleration": 1.5,
+ "Radius": 10
+ }
+ ],
+ "Normalization": {
+ "Position": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ },
+ "Angle": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ }
+ }
+ },
+ {
+ "Id": "PhysicsSetting8",
+ "Input": [
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamAngleY"
+ },
+ "Weight": 60,
+ "Type": "X",
+ "Reflect": false
+ },
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamBodyAngleY"
+ },
+ "Weight": 40,
+ "Type": "X",
+ "Reflect": false
+ }
+ ],
+ "Output": [
+ {
+ "Destination": {
+ "Target": "Parameter",
+ "Id": "ParamHairFrontFuwa"
+ },
+ "VertexIndex": 1,
+ "Scale": 1,
+ "Weight": 100,
+ "Type": "Angle",
+ "Reflect": false
+ }
+ ],
+ "Vertices": [
+ {
+ "Position": {
+ "X": 0,
+ "Y": 0
+ },
+ "Mobility": 1,
+ "Delay": 1,
+ "Acceleration": 1,
+ "Radius": 0
+ },
+ {
+ "Position": {
+ "X": 0,
+ "Y": 13
+ },
+ "Mobility": 0.95,
+ "Delay": 0.8,
+ "Acceleration": 1.5,
+ "Radius": 13
+ }
+ ],
+ "Normalization": {
+ "Position": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ },
+ "Angle": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ }
+ }
+ },
+ {
+ "Id": "PhysicsSetting9",
+ "Input": [
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamAngleY"
+ },
+ "Weight": 60,
+ "Type": "X",
+ "Reflect": false
+ },
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamBodyAngleY"
+ },
+ "Weight": 40,
+ "Type": "X",
+ "Reflect": false
+ }
+ ],
+ "Output": [
+ {
+ "Destination": {
+ "Target": "Parameter",
+ "Id": "ParamHairSideFuwa"
+ },
+ "VertexIndex": 1,
+ "Scale": 1,
+ "Weight": 100,
+ "Type": "Angle",
+ "Reflect": false
+ }
+ ],
+ "Vertices": [
+ {
+ "Position": {
+ "X": 0,
+ "Y": 0
+ },
+ "Mobility": 1,
+ "Delay": 1,
+ "Acceleration": 1,
+ "Radius": 0
+ },
+ {
+ "Position": {
+ "X": 0,
+ "Y": 15
+ },
+ "Mobility": 0.95,
+ "Delay": 0.8,
+ "Acceleration": 1.5,
+ "Radius": 15
+ }
+ ],
+ "Normalization": {
+ "Position": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ },
+ "Angle": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ }
+ }
+ },
+ {
+ "Id": "PhysicsSetting10",
+ "Input": [
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamAngleY"
+ },
+ "Weight": 60,
+ "Type": "X",
+ "Reflect": false
+ },
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamBodyAngleY"
+ },
+ "Weight": 40,
+ "Type": "X",
+ "Reflect": false
+ }
+ ],
+ "Output": [
+ {
+ "Destination": {
+ "Target": "Parameter",
+ "Id": "ParamHairBackFuwa"
+ },
+ "VertexIndex": 1,
+ "Scale": 1,
+ "Weight": 100,
+ "Type": "Angle",
+ "Reflect": false
+ }
+ ],
+ "Vertices": [
+ {
+ "Position": {
+ "X": 0,
+ "Y": 0
+ },
+ "Mobility": 1,
+ "Delay": 1,
+ "Acceleration": 1,
+ "Radius": 0
+ },
+ {
+ "Position": {
+ "X": 0,
+ "Y": 14
+ },
+ "Mobility": 0.95,
+ "Delay": 0.8,
+ "Acceleration": 1.5,
+ "Radius": 14
+ }
+ ],
+ "Normalization": {
+ "Position": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ },
+ "Angle": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ }
+ }
+ },
+ {
+ "Id": "PhysicsSetting11",
+ "Input": [
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamBodyAngleX"
+ },
+ "Weight": 100,
+ "Type": "X",
+ "Reflect": false
+ },
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamBodyAngleZ"
+ },
+ "Weight": 100,
+ "Type": "Angle",
+ "Reflect": false
+ }
+ ],
+ "Output": [
+ {
+ "Destination": {
+ "Target": "Parameter",
+ "Id": "ParamCollarString"
+ },
+ "VertexIndex": 1,
+ "Scale": 1,
+ "Weight": 100,
+ "Type": "Angle",
+ "Reflect": false
+ }
+ ],
+ "Vertices": [
+ {
+ "Position": {
+ "X": 0,
+ "Y": 0
+ },
+ "Mobility": 1,
+ "Delay": 1,
+ "Acceleration": 1,
+ "Radius": 0
+ },
+ {
+ "Position": {
+ "X": 0,
+ "Y": 15
+ },
+ "Mobility": 0.95,
+ "Delay": 0.8,
+ "Acceleration": 1.5,
+ "Radius": 15
+ }
+ ],
+ "Normalization": {
+ "Position": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ },
+ "Angle": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ }
+ }
+ },
+ {
+ "Id": "PhysicsSetting12",
+ "Input": [
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamBodyAngleX"
+ },
+ "Weight": 100,
+ "Type": "X",
+ "Reflect": false
+ },
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamBodyAngleZ"
+ },
+ "Weight": 100,
+ "Type": "Angle",
+ "Reflect": false
+ }
+ ],
+ "Output": [
+ {
+ "Destination": {
+ "Target": "Parameter",
+ "Id": "ParamNecklace1"
+ },
+ "VertexIndex": 1,
+ "Scale": 1,
+ "Weight": 100,
+ "Type": "Angle",
+ "Reflect": false
+ },
+ {
+ "Destination": {
+ "Target": "Parameter",
+ "Id": "ParamNecklace2"
+ },
+ "VertexIndex": 2,
+ "Scale": 1,
+ "Weight": 100,
+ "Type": "Angle",
+ "Reflect": false
+ },
+ {
+ "Destination": {
+ "Target": "Parameter",
+ "Id": "ParamNecklace3"
+ },
+ "VertexIndex": 3,
+ "Scale": 1,
+ "Weight": 100,
+ "Type": "Angle",
+ "Reflect": false
+ }
+ ],
+ "Vertices": [
+ {
+ "Position": {
+ "X": 0,
+ "Y": 0
+ },
+ "Mobility": 1,
+ "Delay": 1,
+ "Acceleration": 1,
+ "Radius": 0
+ },
+ {
+ "Position": {
+ "X": 0,
+ "Y": 10
+ },
+ "Mobility": 0.85,
+ "Delay": 0.9,
+ "Acceleration": 1,
+ "Radius": 10
+ },
+ {
+ "Position": {
+ "X": 0,
+ "Y": 14
+ },
+ "Mobility": 0.95,
+ "Delay": 0.9,
+ "Acceleration": 1,
+ "Radius": 4
+ },
+ {
+ "Position": {
+ "X": 0,
+ "Y": 18
+ },
+ "Mobility": 1,
+ "Delay": 0.9,
+ "Acceleration": 0.9,
+ "Radius": 4
+ }
+ ],
+ "Normalization": {
+ "Position": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ },
+ "Angle": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ }
+ }
+ },
+ {
+ "Id": "PhysicsSetting13",
+ "Input": [
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamBodyAngleX"
+ },
+ "Weight": 100,
+ "Type": "X",
+ "Reflect": false
+ },
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamBodyAngleZ"
+ },
+ "Weight": 100,
+ "Type": "Angle",
+ "Reflect": false
+ }
+ ],
+ "Output": [
+ {
+ "Destination": {
+ "Target": "Parameter",
+ "Id": "ParamPullHandle"
+ },
+ "VertexIndex": 1,
+ "Scale": 1,
+ "Weight": 100,
+ "Type": "Angle",
+ "Reflect": false
+ }
+ ],
+ "Vertices": [
+ {
+ "Position": {
+ "X": 0,
+ "Y": 0
+ },
+ "Mobility": 1,
+ "Delay": 1,
+ "Acceleration": 1,
+ "Radius": 0
+ },
+ {
+ "Position": {
+ "X": 0,
+ "Y": 6
+ },
+ "Mobility": 0.95,
+ "Delay": 0.9,
+ "Acceleration": 1.2,
+ "Radius": 6
+ }
+ ],
+ "Normalization": {
+ "Position": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ },
+ "Angle": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ }
+ }
+ },
+ {
+ "Id": "PhysicsSetting14",
+ "Input": [
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamBodyAngleX"
+ },
+ "Weight": 100,
+ "Type": "X",
+ "Reflect": false
+ },
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamBodyAngleZ"
+ },
+ "Weight": 100,
+ "Type": "Angle",
+ "Reflect": false
+ }
+ ],
+ "Output": [
+ {
+ "Destination": {
+ "Target": "Parameter",
+ "Id": "ParamPocketString"
+ },
+ "VertexIndex": 1,
+ "Scale": 1,
+ "Weight": 100,
+ "Type": "Angle",
+ "Reflect": false
+ }
+ ],
+ "Vertices": [
+ {
+ "Position": {
+ "X": 0,
+ "Y": 0
+ },
+ "Mobility": 1,
+ "Delay": 1,
+ "Acceleration": 1,
+ "Radius": 0
+ },
+ {
+ "Position": {
+ "X": 0,
+ "Y": 6
+ },
+ "Mobility": 0.9,
+ "Delay": 0.8,
+ "Acceleration": 1.5,
+ "Radius": 6
+ }
+ ],
+ "Normalization": {
+ "Position": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ },
+ "Angle": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ }
+ }
+ },
+ {
+ "Id": "PhysicsSetting15",
+ "Input": [
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamBodyAngleX"
+ },
+ "Weight": 100,
+ "Type": "X",
+ "Reflect": false
+ },
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamBodyAngleZ"
+ },
+ "Weight": 100,
+ "Type": "Angle",
+ "Reflect": false
+ }
+ ],
+ "Output": [
+ {
+ "Destination": {
+ "Target": "Parameter",
+ "Id": "ParamJacket"
+ },
+ "VertexIndex": 1,
+ "Scale": 1,
+ "Weight": 100,
+ "Type": "Angle",
+ "Reflect": false
+ }
+ ],
+ "Vertices": [
+ {
+ "Position": {
+ "X": 0,
+ "Y": 0
+ },
+ "Mobility": 1,
+ "Delay": 1,
+ "Acceleration": 1,
+ "Radius": 0
+ },
+ {
+ "Position": {
+ "X": 0,
+ "Y": 11
+ },
+ "Mobility": 0.8,
+ "Delay": 0.6,
+ "Acceleration": 1.5,
+ "Radius": 11
+ }
+ ],
+ "Normalization": {
+ "Position": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ },
+ "Angle": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ }
+ }
+ },
+ {
+ "Id": "PhysicsSetting16",
+ "Input": [
+ {
+ "Source": {
+ "Target": "Parameter",
+ "Id": "ParamBodyAngleY"
+ },
+ "Weight": 100,
+ "Type": "X",
+ "Reflect": false
+ }
+ ],
+ "Output": [
+ {
+ "Destination": {
+ "Target": "Parameter",
+ "Id": "ParamCollarFuwa"
+ },
+ "VertexIndex": 1,
+ "Scale": 1,
+ "Weight": 100,
+ "Type": "Angle",
+ "Reflect": false
+ },
+ {
+ "Destination": {
+ "Target": "Parameter",
+ "Id": "ParamCollarStringFuwa"
+ },
+ "VertexIndex": 2,
+ "Scale": 1,
+ "Weight": 100,
+ "Type": "Angle",
+ "Reflect": false
+ }
+ ],
+ "Vertices": [
+ {
+ "Position": {
+ "X": 0,
+ "Y": 0
+ },
+ "Mobility": 1,
+ "Delay": 1,
+ "Acceleration": 1,
+ "Radius": 0
+ },
+ {
+ "Position": {
+ "X": 0,
+ "Y": 15
+ },
+ "Mobility": 0.95,
+ "Delay": 0.8,
+ "Acceleration": 1.5,
+ "Radius": 15
+ },
+ {
+ "Position": {
+ "X": 0,
+ "Y": 28
+ },
+ "Mobility": 0.85,
+ "Delay": 0.7,
+ "Acceleration": 1.8,
+ "Radius": 13
+ }
+ ],
+ "Normalization": {
+ "Position": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ },
+ "Angle": {
+ "Minimum": -10,
+ "Default": 0,
+ "Maximum": 10
+ }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test_suites/avatar/scenes/live2d_avatar_test.tscn b/test_suites/avatar/scenes/live2d_avatar_test.tscn
new file mode 100644
index 0000000..a35c7f5
--- /dev/null
+++ b/test_suites/avatar/scenes/live2d_avatar_test.tscn
@@ -0,0 +1,6 @@
+[gd_scene format=3]
+
+[ext_resource type="Script" path="src/Live2DAvatarTestDriver.cs" id="1_driver"]
+
+[node name="Live2DAvatarTestDriver" type="Node2D"]
+script = ExtResource("1_driver")
diff --git a/test_suites/avatar/scenes/live2d_overlay.tscn b/test_suites/avatar/scenes/live2d_overlay.tscn
new file mode 100644
index 0000000..5ece254
--- /dev/null
+++ b/test_suites/avatar/scenes/live2d_overlay.tscn
@@ -0,0 +1,13 @@
+[gd_scene format=3]
+
+[ext_resource type="Script" path="src/Live2DOverlay.cs" id="1_script"]
+
+[node name="Live2DOverlay" type="Control"]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+script = ExtResource("1_script")
diff --git a/test_suites/avatar/src/Live2DAvatarTestDriver.cs b/test_suites/avatar/src/Live2DAvatarTestDriver.cs
new file mode 100644
index 0000000..70d7aad
--- /dev/null
+++ b/test_suites/avatar/src/Live2DAvatarTestDriver.cs
@@ -0,0 +1,290 @@
+using System.Collections.Generic;
+using System.IO;
+using Cthangover.Core.Mods;
+using Cthangover.Core.Utils;
+using Cthangover.Live2D.Cubism.Framework;
+using Cthangover.Live2D.Cubism.Services;
+using Godot;
+
+namespace Mods.Live2DTest
+{
+ ///
+ /// Интеграционный тест Live2D-аватара: создаёт модель через мод-пайплайн
+ /// (тот же путь, что и ), держит руки опущенными
+ /// секунду, затем поднимает правую руку через ParamArmR01 и
+ /// проверяет смену позы компьютерным зрением по скриншотам вьюпорта:
+ ///
+ /// - детерминизм — два кадра статичной позы идентичны попиксельно;
+ /// - видимость — команда смены позы перекрашивает значимую часть кадра;
+ /// - силуэт — в верхнем боковом секторе (зона над плечом) площадь
+ /// аватара растёт после подъёма руки;
+ /// - удержание — параметр держит поднятое значение между кадрами
+ /// (регрессия на Load/SaveParameters-брекет).
+ ///
+ /// Скриншоты сохраняются в tests/artifacts/live2d_avatar. Инстанцируется
+ /// игровой интеграционной сценой через TscnScenes (мод — единственное место
+ /// с компайл-тайм доступом к Live2D-обёртке); сам печатает [TEST_RESULT]
+ /// и завершает дерево с кодом выхода.
+ ///
+ public partial class Live2DAvatarTestDriver : Node2D
+ {
+ private const string ModId = "live2d__avatar";
+ private const string ModelPath = "models/runtime/ren.model3.json";
+ private const string LeftArmParam = "ParamArmL01";
+ private const string RightArmParam = "ParamArmR01";
+
+ /// Сколько держим опущенные руки до скриншота (по ТЗ — секунду).
+ private const float LoweredHoldSeconds = 1.0f;
+
+ /// Пауза между кадрами проверки детерминизма.
+ private const float StabilityGapSeconds = 0.4f;
+
+ /// Ожидание растеризации поднятой руки.
+ private const float RaisedSettleSeconds = 0.8f;
+
+ /// Порог «далёкий от фона» пиксель силуэта, 0..1.
+ private const float SilhouetteTolerance = 0.2f;
+
+ /// Порог значимого изменения канала для diff-подсчёта.
+ private const float DiffTolerance = 0.1f;
+
+ private int passed;
+ private int failed;
+ private string artifactDir;
+
+ public override void _Ready() => _ = RunAsync();
+
+ private async System.Threading.Tasks.Task RunAsync()
+ {
+ try
+ {
+ GameLogger.Log("TEST", "Live2DAvatarTestDriver: starting Live2D avatar integration test");
+ artifactDir = ProjectSettings.GlobalizePath("res://tests/artifacts/live2d_avatar");
+ Directory.CreateDirectory(artifactDir);
+
+ await RunTest();
+ }
+ catch (System.Exception ex)
+ {
+ Fail($"unexpected crash: {ex.GetType().Name}: {ex.Message}");
+ GameLogger.Log("TEST", ex.StackTrace ?? "(no stack)");
+ }
+
+ GameLogger.Log("TEST", $"Live2DAvatarTestDriver: {passed} passed, {failed} failed");
+ GameLogger.Log("TEST", $"[TEST_RESULT] name=live2d_avatar passed={passed} failed={failed}");
+ GetTree().Quit(failed == 0 ? 0 : 1);
+ }
+
+ private async System.Threading.Tasks.Task RunTest()
+ {
+ Pass($"driver started for mod '{ModId}'");
+
+
+ // Тот же путь создания, что в продовом оверлее; моргание выключено,
+ // чтобы кадры были пиксельно детерминированы.
+ var model = Live2DService.CreateModel(this, new Live2DModelConfig
+ {
+ ModelPath = ModelPath,
+ ModId = ModId,
+ NodeName = "Live2DTestAvatar",
+ EnableEyeBlink = false
+ });
+
+ if (model == null || model.Parameters.Length == 0)
+ {
+ Fail("avatar creation failed (no parameters)");
+ }
+ Pass($"avatar created: {model.Parameters.Length} parameters, canvas {model.CanvasWidth:F0}x{model.CanvasHeight:F0}");
+
+ var leftArm = model.FindParameter(LeftArmParam);
+ var rightArm = model.FindParameter(RightArmParam);
+ if (leftArm == null || rightArm == null)
+ {
+ Fail($"arm parameters not found ('{LeftArmParam}' / '{RightArmParam}')");
+ return;
+ }
+ Pass($"{LeftArmParam} [{leftArm.MinimumValue}..{leftArm.MaximumValue}], {RightArmParam} [{rightArm.MinimumValue}..{rightArm.MaximumValue}]");
+
+ // Фаза 1 — руки опущены, держим ~1 секунду.
+ model.SetLiveParameter(LeftArmParam, leftArm.MinimumValue);
+ model.SetLiveParameter(RightArmParam, rightArm.MinimumValue);
+ await Delay(LoweredHoldSeconds);
+
+ var lowered = await Capture();
+ await Delay(StabilityGapSeconds);
+ var stability = await Capture();
+
+ // Фаза 2 — поднимаем руку.
+ model.SetLiveParameter(RightArmParam, rightArm.MaximumValue);
+ await Delay(RaisedSettleSeconds);
+ var raised = await Capture();
+
+ SavePng("01_lowered.png", lowered);
+ SavePng("02_lowered_stability.png", stability);
+ SavePng("03_raised.png", raised);
+
+ Analyze(model, lowered, stability, raised);
+ }
+
+ ///
+ /// Компьютерное зрение по трём кадрам: детерминизм статичной позы,
+ /// видимая площадь смены позы, рост силуэта над плечом и удержание
+ /// параметром поднятого значения.
+ ///
+ private void Analyze(
+ CubismModelNode model, Image lowered, Image stability, Image raised)
+ {
+ var bg = lowered.GetPixel(2, 2);
+ Pass($"background reference color: {bg}");
+
+ var sil = SilhouetteBounds(lowered, bg);
+ if (sil.Size.X <= 0 || sil.Size.Y <= 0)
+ {
+ Fail("avatar silhouette not found on the lowered frame");
+ return;
+ }
+ Pass($"silhouette bbox: pos={sil.Position} size={sil.Size}");
+
+ int framePixels = lowered.GetWidth() * lowered.GetHeight();
+
+ // 1) Детерминизм: статичная поза должна рендериться идентично.
+ int stabilityDiff = CountChangedPixels(lowered, stability);
+ double stabilityRatio = stabilityDiff / (double)framePixels;
+ if (stabilityRatio <= 0.001)
+ Pass($"static pose deterministic: {stabilityDiff} changed px ({stabilityRatio:P3})");
+ else
+ Fail($"static pose not deterministic: {stabilityDiff} changed px ({stabilityRatio:P3}) — ambient animation is on");
+
+ // 2) Команда смены позы должна перекрасить значимую часть кадра.
+ int poseDiff = CountChangedPixels(lowered, raised);
+ double poseRatio = poseDiff / (double)framePixels;
+ if (poseRatio >= 0.003)
+ Pass($"pose change visible: {poseDiff} changed px ({poseRatio:P3})");
+ else
+ Fail($"pose change too small: {poseDiff} changed px ({poseRatio:P3})");
+
+ // 3) CV: поднятая рука добавляет силуэт ЗА пределами опущенного
+ // bbox'а на высоте плеча (лево или право — модель может быть
+ // зеркальна зрителю). Полосы фиксированы по bbox опущенной позы,
+ // поэтому не съезжают вместе с bbox поднятой руки.
+ int stripH = System.Math.Max(1, (int)(sil.Size.Y * 0.30f));
+ int stripY = (int)(sil.Position.Y + sil.Size.Y * 0.25f);
+ int stripW = System.Math.Max(1, (int)(sil.Size.X * 2.0f));
+ int margin = 4;
+ int leftX = System.Math.Max(0, (int)sil.Position.X - margin - stripW);
+ int rightX = System.Math.Min(lowered.GetWidth() - stripW, (int)sil.End.X + margin);
+ var leftStrip = new Rect2I(leftX, stripY, stripW, stripH);
+ var rightStrip = new Rect2I(rightX, stripY, stripW, stripH);
+ int loweredLeft = CountModelPixels(lowered, leftStrip, bg);
+ int raisedLeft = CountModelPixels(raised, leftStrip, bg);
+ int loweredRight = CountModelPixels(lowered, rightStrip, bg);
+ int raisedRight = CountModelPixels(raised, rightStrip, bg);
+ int gain = System.Math.Max(raisedLeft - loweredLeft, raisedRight - loweredRight);
+ int threshold = System.Math.Max(300, (int)(stripW * stripH * 0.02f));
+ GameLogger.Log("TEST",
+ $" side strips @shoulder: left {loweredLeft}->{raisedLeft}, right {loweredRight}->{raisedRight} px (strip {stripW}x{stripH}, need {threshold})");
+ if (gain >= threshold)
+ Pass($"raised arm silhouette appears beside the body: +{gain} px");
+ else
+ Fail($"no raised-arm silhouette beside the body: +{gain} px (threshold {threshold})");
+ // 4) Параметр держит поднятое значение между кадрами
+ // (регрессия на Load/SaveParameters-брекет и SetLiveParameter).
+ var armNow = model.FindParameter(RightArmParam);
+ if (armNow != null && System.Math.Abs(armNow.Value - armNow.MaximumValue) < 0.001f)
+ Pass($"{RightArmParam} holds MaximumValue across frames ({armNow.Value})");
+ else
+ Fail($"{RightArmParam} did not hold MaximumValue (value={armNow?.Value})");
+ }
+
+ private async System.Threading.Tasks.Task Delay(float seconds) =>
+ await ToSignal(GetTree().CreateTimer(seconds), SceneTreeTimer.SignalName.Timeout);
+
+ /// Ждёт обработки кадра и снимает вьюпорт в RGBA8.
+ private async System.Threading.Tasks.Task Capture()
+ {
+ await ToSignal(GetTree(), SceneTree.SignalName.ProcessFrame);
+ await ToSignal(GetTree(), SceneTree.SignalName.ProcessFrame);
+ var image = GetViewport().GetTexture().GetImage();
+ image.Convert(Image.Format.Rgba8);
+ return image;
+ }
+
+ private void SavePng(string fileName, Image image)
+ {
+ var path = Path.Combine(artifactDir, fileName);
+ if (image.SavePng(path) == Error.Ok)
+ Pass($"screenshot saved: {path}");
+ else
+ Fail($"SavePng failed for '{path}'");
+ }
+
+ private static Rect2 SilhouetteBounds(Image image, Color bg)
+ {
+ byte[] data = image.GetData();
+ int w = image.GetWidth(), h = image.GetHeight();
+ int minX = int.MaxValue, minY = int.MaxValue, maxX = -1, maxY = -1;
+ for (int y = 0; y < h; y++)
+ {
+ for (int x = 0; x < w; x++)
+ {
+ int i = (y * w + x) * 4;
+ if (IsFarFromBackground(data, i, bg))
+ {
+ if (x < minX) minX = x;
+ if (x > maxX) maxX = x;
+ if (y < minY) minY = y;
+ if (y > maxY) maxY = y;
+ }
+ }
+ }
+ return maxX < 0 ? new Rect2(0, 0, 0, 0) : new Rect2(minX, minY, maxX - minX + 1, maxY - minY + 1);
+ }
+
+ private static int CountModelPixels(Image image, Rect2I region, Color bg)
+ {
+ byte[] data = image.GetData();
+ int w = image.GetWidth();
+ int count = 0;
+ for (int y = region.Position.Y; y < region.End.Y; y++)
+ {
+ for (int x = region.Position.X; x < region.End.X; x++)
+ {
+ if (IsFarFromBackground(data, (y * w + x) * 4, bg)) count++;
+ }
+ }
+ return count;
+ }
+
+ private static int CountChangedPixels(Image a, Image b)
+ {
+ byte[] da = a.GetData(), db = b.GetData();
+ int count = 0;
+ int limit = System.Math.Min(da.Length, db.Length);
+ for (int i = 0; i < limit; i += 4)
+ {
+ if (System.Math.Abs(da[i] - db[i]) > DiffTolerance * 255f
+ || System.Math.Abs(da[i + 1] - db[i + 1]) > DiffTolerance * 255f
+ || System.Math.Abs(da[i + 2] - db[i + 2]) > DiffTolerance * 255f)
+ count++;
+ }
+ return count;
+ }
+
+ private static bool IsFarFromBackground(byte[] data, int i, Color bg) =>
+ System.Math.Abs(data[i] / 255f - bg.R) > SilhouetteTolerance
+ || System.Math.Abs(data[i + 1] / 255f - bg.G) > SilhouetteTolerance
+ || System.Math.Abs(data[i + 2] / 255f - bg.B) > SilhouetteTolerance;
+
+ private void Pass(string msg)
+ {
+ passed++;
+ GameLogger.Log("TEST", $" [PASS] {msg}");
+ }
+
+ private void Fail(string msg)
+ {
+ failed++;
+ GameLogger.Log("TEST", $" [FAIL] {msg}", LogLevel.Error);
+ }
+ }
+}
diff --git a/test_suites/avatar/src/Live2DOverlay.cs b/test_suites/avatar/src/Live2DOverlay.cs
new file mode 100644
index 0000000..b803541
--- /dev/null
+++ b/test_suites/avatar/src/Live2DOverlay.cs
@@ -0,0 +1,109 @@
+using Cthangover.Core.UI;
+using Cthangover.Core.Utils;
+using Cthangover.Live2D.Cubism.Framework;
+using Cthangover.Live2D.Cubism.Services;
+using Godot;
+
+using Cthangover.Mods.Interface.Base.Lists;
+namespace Mods.Live2DTest
+{
+ ///
+ /// Scene-driven replacement for the old live2d_test subscription snippet.
+ /// The overlay root is added to a shell slot by ; it
+ /// spawns the Cubism model into the Lastground anchor and keeps a
+ /// transparent drag handle on top so the player can steer the model's head
+ /// parameters with the mouse. Created per home_outside visit
+ /// (once=false) and destroyed together with the overlay.
+ ///
+ public partial class Live2DOverlay : ModWidget
+ {
+ private const string ModelPath = "models/runtime/ren.model3.json";
+ private const string ModelNodeName = "Live2DTestModel";
+ private const string ContainerNodeName = "Lastground";
+
+ private CubismModelNode model;
+ private ColorRect dragHandle;
+ private bool dragging;
+ private float mouseStartX;
+ private float mouseStartY;
+ private float baseValueX;
+ private float baseValueY;
+
+ protected override void Construct()
+ {
+ MouseFilter = MouseFilterEnum.Ignore;
+
+ var container = UiHost.Instance?.FindNode(ContainerNodeName);
+ if (container == null)
+ {
+ GameLogger.Log("LIVE2D_TEST", $"Live2DOverlay: container '{ContainerNodeName}' not found", LogLevel.Error);
+ return;
+ }
+
+ model = Live2DService.CreateModel(container, ModelPath, ModelNodeName, "live2d__avatar");
+ if (model == null)
+ {
+ GameLogger.Log("LIVE2D_TEST", "Live2DOverlay: model creation failed", LogLevel.Error);
+ return;
+ }
+
+ dragHandle = new ColorRect
+ {
+ Name = "Live2DDragPanel",
+ MouseFilter = MouseFilterEnum.Stop,
+ Color = new Color(0, 1f, 0, 0f),
+ Size = new Vector2(400, 400),
+ AnchorLeft = 0.5f,
+ AnchorRight = 0.5f,
+ AnchorTop = 0.5f,
+ AnchorBottom = 0.5f,
+ OffsetLeft = -200f,
+ OffsetRight = 200f,
+ OffsetTop = -200f,
+ OffsetBottom = -200f
+ };
+ AddChild(dragHandle);
+ dragHandle.GuiInput += OnDragInput;
+ }
+
+ protected override void Destruct()
+ {
+ if (model != null && GodotObject.IsInstanceValid(model))
+ model.QueueFree();
+ model = null;
+ }
+
+ private void OnDragInput(InputEvent @event)
+ {
+ if (@event is InputEventMouseButton mb && mb.ButtonIndex == MouseButton.Left)
+ {
+ if (mb.Pressed)
+ {
+ dragging = true;
+ mouseStartX = mb.GlobalPosition.X;
+ mouseStartY = mb.GlobalPosition.Y;
+ baseValueX = model.FindParameter("ParamAngleX")?.Value ?? 0f;
+ baseValueY = model.FindParameter("ParamAngleY")?.Value ?? 0f;
+ }
+ else
+ {
+ dragging = false;
+ }
+ return;
+ }
+
+ if (!dragging || @event is not InputEventMouseMotion mm || model == null)
+ return;
+
+ var targetX = model.FindParameter("ParamAngleX");
+ var targetY = model.FindParameter("ParamAngleY");
+ var deltaX = (mm.GlobalPosition.X - mouseStartX) / 30f;
+ var deltaY = (mm.GlobalPosition.Y - mouseStartY) / 30f;
+
+ if (targetX != null)
+ model.SetLiveParameter("ParamAngleX", Mathf.Clamp(baseValueX + deltaX, targetX.MinimumValue, targetX.MaximumValue));
+ if (targetY != null)
+ model.SetLiveParameter("ParamAngleY", Mathf.Clamp(baseValueY + deltaY, targetY.MinimumValue, targetY.MaximumValue));
+ }
+ }
+}