summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2022-10-02 17:24:17 -0700
committeryum <yum.food.vr@gmail.com>2022-10-02 17:24:17 -0700
commit9222e7e9a21704dd6083adf8f53ce4437ba64a74 (patch)
tree01edac9c00bfa46200a897ebf0a947006a20f13b
parent704fd9a64fb8a8b1e929700c3e7413f8c3aaa2c2 (diff)
Add 'Do Nothing' animation
Per the VRC docs, state behaviors may not execute if the total length of time in the state is < 0.02 seconds. Adding a 2-frame 'Do Nothing' animation to the top of every layer seems to help with stability. *shrug* More cleanup: * Generate a unique return-home transition for each terminal state instead of reusing the same one. * Use globally unique state names in animator. * All animations are at least 2 frames long.
-rw-r--r--Animations/TaSTT_Backplate_Resize_00_to_50.anim9
-rw-r--r--Animations/TaSTT_Backplate_Resize_50_to_00.anim9
-rw-r--r--Animations/TaSTT_Do_Nothing.anim116
-rw-r--r--TaSTT.shader2
-rw-r--r--generate_fx.py92
-rw-r--r--osc_ctrl.py16
-rw-r--r--template.anim20
7 files changed, 222 insertions, 42 deletions
diff --git a/Animations/TaSTT_Backplate_Resize_00_to_50.anim b/Animations/TaSTT_Backplate_Resize_00_to_50.anim
index cfc9354..c8f2847 100644
--- a/Animations/TaSTT_Backplate_Resize_00_to_50.anim
+++ b/Animations/TaSTT_Backplate_Resize_00_to_50.anim
@@ -29,6 +29,15 @@ AnimationClip:
weightedMode: 0
inWeight: 0
outWeight: 0
+ - serializedVersion: 3
+ time: 0.5
+ value: 1
+ inSlope: Infinity
+ outSlope: Infinity
+ tangentMode: 103
+ weightedMode: 0
+ inWeight: 0
+ outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
diff --git a/Animations/TaSTT_Backplate_Resize_50_to_00.anim b/Animations/TaSTT_Backplate_Resize_50_to_00.anim
index 35b622e..ddacce5 100644
--- a/Animations/TaSTT_Backplate_Resize_50_to_00.anim
+++ b/Animations/TaSTT_Backplate_Resize_50_to_00.anim
@@ -38,6 +38,15 @@ AnimationClip:
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
+ - serializedVersion: 3
+ time: 0.51666665
+ value: 0
+ inSlope: Infinity
+ outSlope: Infinity
+ tangentMode: 103
+ weightedMode: 0
+ inWeight: 0
+ outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
diff --git a/Animations/TaSTT_Do_Nothing.anim b/Animations/TaSTT_Do_Nothing.anim
new file mode 100644
index 0000000..9f6dc02
--- /dev/null
+++ b/Animations/TaSTT_Do_Nothing.anim
@@ -0,0 +1,116 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!74 &7400000
+AnimationClip:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: TaSTT_Do_Nothing
+ serializedVersion: 6
+ m_Legacy: 0
+ m_Compressed: 0
+ m_UseHighQualityCurve: 1
+ m_RotationCurves: []
+ m_CompressedRotationCurves: []
+ m_EulerCurves: []
+ m_PositionCurves: []
+ m_ScaleCurves: []
+ m_FloatCurves:
+ - curve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 3
+ time: 0
+ value: 0
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 136
+ weightedMode: 0
+ inWeight: 0
+ outWeight: 0
+ - serializedVersion: 3
+ time: 0.033333335
+ value: 0
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 136
+ weightedMode: 0
+ inWeight: 0
+ outWeight: 0
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ attribute: material._Dummy
+ path: CustomSTT
+ classID: 137
+ script: {fileID: 0}
+ m_PPtrCurves: []
+ m_SampleRate: 60
+ m_WrapMode: 0
+ m_Bounds:
+ m_Center: {x: 0, y: 0, z: 0}
+ m_Extent: {x: 0, y: 0, z: 0}
+ m_ClipBindingConstant:
+ genericBindings:
+ - serializedVersion: 2
+ path: 2794480623
+ attribute: 2284639795
+ script: {fileID: 0}
+ typeID: 137
+ customType: 22
+ isPPtrCurve: 0
+ pptrCurveMapping: []
+ m_AnimationClipSettings:
+ serializedVersion: 2
+ m_AdditiveReferencePoseClip: {fileID: 0}
+ m_AdditiveReferencePoseTime: 0
+ m_StartTime: 0
+ m_StopTime: 0
+ m_OrientationOffsetY: 0
+ m_Level: 0
+ m_CycleOffset: 0
+ m_HasAdditiveReferencePose: 0
+ m_LoopTime: 0
+ m_LoopBlend: 0
+ m_LoopBlendOrientation: 0
+ m_LoopBlendPositionY: 0
+ m_LoopBlendPositionXZ: 0
+ m_KeepOriginalOrientation: 0
+ m_KeepOriginalPositionY: 1
+ m_KeepOriginalPositionXZ: 0
+ m_HeightFromFeet: 0
+ m_Mirror: 0
+ m_EditorCurves:
+ - curve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 3
+ time: 0
+ value: 0
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 136
+ weightedMode: 0
+ inWeight: 0
+ outWeight: 0
+ - serializedVersion: 3
+ time: 0.033333335
+ value: 0
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 136
+ weightedMode: 0
+ inWeight: 0
+ outWeight: 0
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ attribute: material._Dummy
+ path: CustomSTT
+ classID: 137
+ script: {fileID: 0}
+ m_EulerEditorCurves: []
+ m_HasGenericRootTransform: 0
+ m_HasMotionFloatCurves: 0
+ m_Events: []
diff --git a/TaSTT.shader b/TaSTT.shader
index fb16779..510db14 100644
--- a/TaSTT.shader
+++ b/TaSTT.shader
@@ -100,6 +100,8 @@
_Letter_Row05_Col13("_Letter_Row05_Col13", float) = 0
_Letter_Row05_Col14("_Letter_Row05_Col14", float) = 0
_Letter_Row05_Col15("_Letter_Row05_Col15", float) = 0
+ // This does nothing, it's just used by the 'Do Nothing' animation.
+ _Dummy("_Dummy", float) = 0
}
SubShader
{
diff --git a/generate_fx.py b/generate_fx.py
index 36779b7..f829174 100644
--- a/generate_fx.py
+++ b/generate_fx.py
@@ -388,7 +388,7 @@ AnimatorStateTransition:
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
- m_TransitionDuration: 0.1
+ m_TransitionDuration: 0.03
m_TransitionOffset: 0
m_ExitTime: 0.75
m_HasExitTime: 0
@@ -469,43 +469,45 @@ def getAnimationGuid(anim_meta_filename):
if "guid" in line:
return line.split()[1]
-def getDefaultStateName():
- return "TaSTT_Do_Nothing"
+def getDefaultStateName(which_layer):
+ return "TaSTT_L%02d_Do_Nothing" % which_layer
+
+def getDefaultStateNameResizeLayer():
+ return "TaSTT_Resize_Do_Nothing"
def getActiveStateName(which_layer):
- return "TaSTT_Active"
+ return "TaSTT_L%02d_Active" % which_layer
def getS0StateName(which_layer, s0):
- return "TaSTT_S%02d" % (s0)
+ return "TaSTT_L%02d_S%02d" % (which_layer, s0)
def getS1StateName(which_layer, s0, s1):
- return "TaSTT_S%02d_S%02d" % (s0, s1)
+ return "TaSTT_L%02d_S%02d_S%02d" % (which_layer, s0, s1)
def getS2StateName(which_layer, s0, s1, s2):
- return "TaSTT_S%02d_S%02d_S%02d" % (s0, s1, s2)
+ return "TaSTT_L%02d_S%02d_S%02d_S%02d" % (which_layer, s0, s1, s2)
def getLetterStateName(which_layer, s0, s1, s2, letter):
- return "TaSTT_S%02d_S%02d_S%02d_L%03d" % (s0, s1, s2, letter)
+ return "TaSTT_L%02d_S%02d_S%02d_S%02d_L%03d" % (which_layer, s0, s1, s2, letter)
def getResizeStateName(e0, e1):
return "TaSTT_Resize_E%d_E%d" % (e0, e1)
-def genTasttLayer(state, which_layer):
- # Generate return-home transition
- params["TASTT_RETURN_HOME_TRANSITION_%02d_U2" % which_layer] = get_u2("1101", state)
- params["TASTT_STATE_TRANSITION_U2"] = params["TASTT_RETURN_HOME_TRANSITION_%02d_U2" % which_layer]
- params["BOOL_PARAM"] = getDummyParam()
- params["THRESHOLD"] = str(0)
- params["MODE"] = str(2) # See comment above TASTT_BOOL_STATE_UNARY_TRANSITION.
- params["TASTT_DEFAULT_STATE_U2"] = get_u2("1102", state)
- params["DST_STATE_U2"] = params["TASTT_DEFAULT_STATE_U2"]
- print(replaceMacros(TASTT_BOOL_STATE_UNARY_TRANSITION, params))
+def getReturnHomeTransitionName(which_layer, s0, s1, s2, letter):
+ return "TASTT_RETURN_HOME_TRANSITION_L%02d_S%02d_S%02d_S%02d_L%03d" % (which_layer, s0, s1, s2, letter)
+
+def getReturnHomeTransitionNameResizeLayer(e0, e1):
+ return "TASTT_RETURN_HOME_TRANSITION_E%d_E%d" % (e0, e1)
+def genTasttLayer(state, which_layer):
# Default state.
+ params["TASTT_DEFAULT_STATE_U2"] = get_u2("1102", state)
params["TASTT_STATE_U2"] = params["TASTT_DEFAULT_STATE_U2"]
- params["TASTT_STATE_NAME"] = getDefaultStateName()
+ params["TASTT_STATE_NAME"] = getDefaultStateName(which_layer)
params["TASTT_STATE_TRANSITION_U2"] = get_u2("1101", state)
- print(replaceMacros(TASTT_UNARY_STATE, params))
+ anim_meta_filename = "Animations/TaSTT_Do_Nothing.anim.meta"
+ params["TASTT_ANIM_GUID"] = getAnimationGuid(anim_meta_filename)
+ print(replaceMacros(TASTT_ANIM_STATE, params))
# Active state transition.
params["BOOL_PARAM"] = getEnableParam(which_layer)
@@ -610,11 +612,27 @@ def genTasttLayer(state, which_layer):
for letter in range(0, CHARS_PER_CELL):
params["TASTT_STATE_U2"] = params[getLetterStateName(which_layer, s0, s1, s2, letter) + "_U2"]
params["TASTT_STATE_NAME"] = getLetterStateName(which_layer, s0, s1, s2, letter)
- params["TASTT_STATE_TRANSITION_U2"] = params["TASTT_RETURN_HOME_TRANSITION_%02d_U2" % which_layer]
+ transition_name = getReturnHomeTransitionName(which_layer, s0, s1, s2, letter) + "_U2"
+ params[transition_name] = get_u2("1101", state)
+ params["TASTT_STATE_TRANSITION_U2"] = params[transition_name]
anim_meta_filename = getAnimationPath(getShaderParam(which_layer, s0, s1, s2), letter) + ".meta"
params["TASTT_ANIM_GUID"] = getAnimationGuid(anim_meta_filename)
print(replaceMacros(TASTT_ANIM_STATE, params))
+ # Return-home transitions.
+ for s0 in range(0,2):
+ for s1 in range(0,2):
+ for s2 in range(0,2):
+ for letter in range(0, CHARS_PER_CELL):
+ transition_name = getReturnHomeTransitionName(which_layer, s0, s1, s2, letter) + "_U2"
+ params["TASTT_STATE_TRANSITION_U2"] = params[transition_name]
+ params["BOOL_PARAM"] = getDummyParam()
+ params["THRESHOLD"] = str(0)
+ params["MODE"] = str(2) # See comment above TASTT_BOOL_STATE_UNARY_TRANSITION.
+ params["DST_STATE_U2"] = params["TASTT_DEFAULT_STATE_U2"]
+ print(replaceMacros(TASTT_BOOL_STATE_UNARY_TRANSITION, params))
+
+
# TaSTT layer.
params["TASTT_LAYER_U2"] = params[getLayerParam(which_layer) + "_LAYER_U2"]
@@ -656,21 +674,14 @@ for i in range(0, NUM_LAYERS):
genTasttLayer(state, i)
def genTasttResizeLayer(state):
- # Generate return-home transition
- params["TASTT_RETURN_HOME_TRANSITION_U2"] = get_u2("1101", state)
- params["TASTT_STATE_TRANSITION_U2"] = params["TASTT_RETURN_HOME_TRANSITION_U2"]
- params["BOOL_PARAM"] = getDummyParam()
- params["THRESHOLD"] = str(0)
- params["MODE"] = str(2) # See comment above TASTT_BOOL_STATE_UNARY_TRANSITION.
- params["TASTT_DEFAULT_STATE_U2"] = get_u2("1102", state)
- params["DST_STATE_U2"] = params["TASTT_DEFAULT_STATE_U2"]
- print(replaceMacros(TASTT_BOOL_STATE_UNARY_TRANSITION, params))
-
# Default state.
+ params["TASTT_DEFAULT_STATE_U2"] = get_u2("1102", state)
params["TASTT_STATE_U2"] = params["TASTT_DEFAULT_STATE_U2"]
- params["TASTT_STATE_NAME"] = getDefaultStateName()
+ params["TASTT_STATE_NAME"] = getDefaultStateNameResizeLayer()
+ anim_meta_filename = "Animations/TaSTT_Do_Nothing.anim.meta"
+ params["TASTT_ANIM_GUID"] = getAnimationGuid(anim_meta_filename)
params["TASTT_STATE_TRANSITION_U2"] = get_u2("1101", state)
- print(replaceMacros(TASTT_UNARY_STATE, params))
+ print(replaceMacros(TASTT_ANIM_STATE, params))
# Active state transition.
params["BOOL_PARAM"] = generate_utils.getResizeEnableParam()
@@ -715,7 +726,9 @@ def genTasttResizeLayer(state):
for e1 in range(0, 2):
params["TASTT_STATE_NAME"] = getResizeStateName(e0, e1)
params["TASTT_STATE_U2"] = params[getResizeStateName(e0, e1) + "_U2"]
- params["TASTT_STATE_TRANSITION_U2"] = params["TASTT_RETURN_HOME_TRANSITION_U2"]
+ transition_name = getReturnHomeTransitionNameResizeLayer(e0, e1) + "_U2"
+ params[transition_name] = get_u2("1101", state)
+ params["TASTT_STATE_TRANSITION_U2"] = params[transition_name]
anim_meta_filename="Animations/"
if e0 == 0 and e1 == 0:
anim_meta_filename += "TaSTT_Backplate_Resize_00_to_50.anim.meta"
@@ -728,6 +741,17 @@ def genTasttResizeLayer(state):
params["TASTT_ANIM_GUID"] = getAnimationGuid(anim_meta_filename)
print(replaceMacros(TASTT_ANIM_STATE, params))
+ # Generate return-home transitions
+ for e0 in range(0, 2):
+ for e1 in range(0, 2):
+ transition_name = getReturnHomeTransitionNameResizeLayer(e0, e1) + "_U2"
+ params["TASTT_STATE_TRANSITION_U2"] = params[transition_name]
+ params["BOOL_PARAM"] = getDummyParam()
+ params["THRESHOLD"] = str(0)
+ params["MODE"] = str(2) # See comment above TASTT_BOOL_STATE_UNARY_TRANSITION.
+ params["DST_STATE_U2"] = params["TASTT_DEFAULT_STATE_U2"]
+ print(replaceMacros(TASTT_BOOL_STATE_UNARY_TRANSITION, params))
+
# Layer
params["TASTT_LAYER_U2"] = params["TASTT_RESIZE_LAYER_U2"]
params["TASTT_LAYER_NAME"] = params["TASTT_LAYER_NAME"]
diff --git a/osc_ctrl.py b/osc_ctrl.py
index fcb2445..8a7d41c 100644
--- a/osc_ctrl.py
+++ b/osc_ctrl.py
@@ -17,8 +17,9 @@ from generate_utils import NUM_LAYERS
from generate_utils import BOARD_ROWS
from generate_utils import BOARD_COLS
-#CELL_TX_TIME_S=1.0
-CELL_TX_TIME_S=0.6
+#CELL_TX_TIME_S=3.0
+CELL_TX_TIME_S=1.0
+#CELL_TX_TIME_S=0.7
def usage():
print("python3 -m pip install python-osc")
@@ -181,7 +182,7 @@ def splitMessage(msg):
if len(line) + len(" ") + len(word) <= BOARD_COLS:
line += " " + word
continue
-
+
print("append line {}".format(line))
lines.append(line)
line = word
@@ -198,7 +199,7 @@ def sendMessage(msg):
print("Encoded message: {}".format(msg))
- openBoard()
+ #openBoard()
n_cells = ceil(msg_len / NUM_LAYERS)
print("n_cells: {}".format(n_cells))
@@ -209,7 +210,7 @@ def sendMessage(msg):
print("Send cell {}".format(cell))
sendMessageCellDiscrete(cell_msg, cell)
- closeBoard()
+ #closeBoard()
def sendRawMessage(msg):
n_cells = ceil(len(msg) / NUM_LAYERS)
@@ -229,12 +230,12 @@ def openBoard():
addr="/avatar/parameters/" + generate_utils.getResize1Param()
client.send_message(addr, False)
- time.sleep(0.1)
+ time.sleep(0.3)
addr="/avatar/parameters/" + generate_utils.getResizeEnableParam()
client.send_message(addr, True)
- time.sleep(0.1)
+ time.sleep(0.3)
addr="/avatar/parameters/" + generate_utils.getResizeEnableParam()
client.send_message(addr, False)
@@ -257,6 +258,7 @@ def closeBoard():
if __name__ == "__main__":
generateEncoding(state)
+ #openBoard()
clear()
for line in fileinput.input():
diff --git a/template.anim b/template.anim
index ee84cea..367f5d3 100644
--- a/template.anim
+++ b/template.anim
@@ -6,7 +6,7 @@ AnimationClip:
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_Name: template
+ m_Name: %ANIMATION_NAME%
serializedVersion: 6
m_Legacy: 0
m_Compressed: 0
@@ -29,6 +29,15 @@ AnimationClip:
weightedMode: 0
inWeight: 0
outWeight: 0
+ - serializedVersion: 3
+ time: 0.033333335
+ value: %LETTER_VALUE%
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 136
+ weightedMode: 0
+ inWeight: 0
+ outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
@@ -85,6 +94,15 @@ AnimationClip:
weightedMode: 0
inWeight: 0
outWeight: 0
+ - serializedVersion: 3
+ time: 0.033333335
+ value: %LETTER_VALUE%
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 136
+ weightedMode: 0
+ inWeight: 0
+ outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4