From fef5887fe4aae8d4a9dc344721426237368a08e5 Mon Sep 17 00:00:00 2001 From: yum Date: Wed, 9 Aug 2023 20:21:57 -0700 Subject: Begin work on show/hide animations --- Animations/TaSTT_Emerge_000.anim | 98 +++++++++++++++++++++++++++ Animations/TaSTT_Emerge_100.anim | 143 +++++++++++++++++++++++++++++++++++++++ GUI/GUI/GUI/PythonWrapper.cpp | 2 + Scripts/libtastt.py | 24 +++++-- Scripts/libunity.py | 3 +- Shaders/TaSTT_template.shader | 3 +- Shaders/ray_march.cginc | 39 +++++++++-- 7 files changed, 300 insertions(+), 12 deletions(-) create mode 100644 Animations/TaSTT_Emerge_000.anim create mode 100644 Animations/TaSTT_Emerge_100.anim diff --git a/Animations/TaSTT_Emerge_000.anim b/Animations/TaSTT_Emerge_000.anim new file mode 100644 index 0000000..4cfce83 --- /dev/null +++ b/Animations/TaSTT_Emerge_000.anim @@ -0,0 +1,98 @@ +%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_Emerge_000 + 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 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: material.Ray_March_Emerge + path: World Constraint/Container/TaSTT + classID: 23 + 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: 1272388438 + attribute: 2395822321 + script: {fileID: 0} + typeID: 23 + 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: 1 + 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 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: material.Ray_March_Emerge + path: World Constraint/Container/TaSTT + classID: 23 + script: {fileID: 0} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Animations/TaSTT_Emerge_100.anim b/Animations/TaSTT_Emerge_100.anim new file mode 100644 index 0000000..493225f --- /dev/null +++ b/Animations/TaSTT_Emerge_100.anim @@ -0,0 +1,143 @@ +%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_Emerge_100 + 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: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: material.Ray_March_Emerge + path: World Constraint/Container/TaSTT + classID: 23 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: Infinity + outSlope: Infinity + tangentMode: 103 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_IsActive + path: World Constraint/Container/TaSTT + classID: 1 + 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: 1272388438 + attribute: 2086281974 + script: {fileID: 0} + typeID: 1 + customType: 0 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 1272388438 + attribute: 2395822321 + script: {fileID: 0} + typeID: 23 + 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: 1 + 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: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: material.Ray_March_Emerge + path: World Constraint/Container/TaSTT + classID: 23 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: Infinity + outSlope: Infinity + tangentMode: 103 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_IsActive + path: World Constraint/Container/TaSTT + classID: 1 + script: {fileID: 0} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/GUI/GUI/GUI/PythonWrapper.cpp b/GUI/GUI/GUI/PythonWrapper.cpp index d1e684f..2b6443a 100644 --- a/GUI/GUI/GUI/PythonWrapper.cpp +++ b/GUI/GUI/GUI/PythonWrapper.cpp @@ -755,6 +755,7 @@ bool PythonWrapper::GenerateAnimator( return false; } } +#if 0 { Log(out, "Adding enable/disable toggle... "); if (!InvokeWithArgs({ libunity_path, "add_toggle", @@ -766,6 +767,7 @@ bool PythonWrapper::GenerateAnimator( return false; } } +#endif { Log(out, "Merging with user animator... "); if (!InvokeWithArgs({ libunity_path, "merge", diff --git a/Scripts/libtastt.py b/Scripts/libtastt.py index f205373..1cec20c 100644 --- a/Scripts/libtastt.py +++ b/Scripts/libtastt.py @@ -619,17 +619,19 @@ def generateFXLayer(which_layer: int, anim: libunity.UnityAnimator, layer: # Returns a map containing the off and on states, as well as the # transitions between them. def generateToggle(layer_name: str, + parameter_name: str, gen_anim_dir: str, off_anim_basename: str, on_anim_basename: str, anim: libunity.UnityAnimator, - guid_map: typing.Dict[str, str]) -> typing.Dict[str, + guid_map: typing.Dict[str, str], + duration_s: float = 0.0) -> typing.Dict[str, libunity.UnityDocument]: layer = anim.addLayer(layer_name) # For simplicity, use the layer name as the parameter name. - parameter_name = layer_name - anim.addParameter(parameter_name, bool) + if parameter_name is not None: + anim.addParameter(parameter_name, bool) off_state = anim.addAnimatorState(layer, layer_name + "_Off", is_default_state = True) @@ -647,11 +649,11 @@ def generateToggle(layer_name: str, on_anim_meta.loadOrCreate(on_anim_path, guid_map) anim.setAnimatorStateAnimation(on_state, on_anim_meta.guid) - off_to_on_trans = anim.addTransition(on_state) + off_to_on_trans = anim.addTransition(on_state, duration_s) anim.addTransitionBooleanCondition(off_state, off_to_on_trans, parameter_name, True) - on_to_off_trans = anim.addTransition(off_state) + on_to_off_trans = anim.addTransition(off_state, duration_s) anim.addTransitionBooleanCondition(on_state, on_to_off_trans, parameter_name, False) @@ -699,6 +701,7 @@ def generateFX(guid_map, gen_anim_dir): generateFXLayer(which_layer, anim, layer, gen_anim_dir, byte) states = generateToggle( + generate_utils.getSpeechNoiseToggleParam(), generate_utils.getSpeechNoiseToggleParam(), gen_anim_dir, "TaSTT_Speech_Noise_Off.anim", @@ -712,31 +715,42 @@ def generateFX(guid_map, gen_anim_dir): states["off_to_on"], generate_utils.getToggleParam(), True) generateToggle(generate_utils.getToggleParam(), + generate_utils.getToggleParam(), gen_anim_dir, "TaSTT_Toggle_Off.anim", "TaSTT_Toggle_On.anim", anim, guid_map) generateToggle(generate_utils.getLockWorldParam(), + generate_utils.getLockWorldParam(), gen_anim_dir, "TaSTT_Lock_World_Disable.anim", "TaSTT_Lock_World_Enable.anim", anim, guid_map) generateToggle( + generate_utils.getClearBoardParam(), generate_utils.getClearBoardParam(), gen_anim_dir, None, # No animation in the `off` state. generate_utils.getClearAnimationName() + ".anim", anim, guid_map) generateToggle(generate_utils.getIndicator0Param(), + generate_utils.getIndicator0Param(), gen_anim_dir, generate_utils.getIndicator0Param() + "_Off.anim", generate_utils.getIndicator0Param() + "_On.anim", anim, guid_map) generateToggle(generate_utils.getIndicator1Param(), + generate_utils.getIndicator1Param(), gen_anim_dir, generate_utils.getIndicator1Param() + "_Off.anim", generate_utils.getIndicator1Param() + "_On.anim", anim, guid_map) + generateToggle(generate_utils.getToggleParam(), + None, + gen_anim_dir, + "TaSTT_Emerge_000.anim", + "TaSTT_Emerge_100.anim", + anim, guid_map) generateScaleLayer(anim, gen_anim_dir, guid_map) return anim diff --git a/Scripts/libunity.py b/Scripts/libunity.py index e94765d..bbf9498 100644 --- a/Scripts/libunity.py +++ b/Scripts/libunity.py @@ -727,7 +727,7 @@ class UnityAnimator(): return anim_state - def addTransition(self, dst_state): + def addTransition(self, dst_state, dur_s = 0.0): # Create animation state parser = UnityParser() parser.parse(TRANSITION_TEMPLATE) @@ -740,6 +740,7 @@ class UnityAnimator(): node.anchor = str(new_id) state = node.mapping['AnimatorStateTransition'] state.mapping['m_DstState'].mapping['fileID'] = dst_state.anchor + state.mapping['m_TransitionDuration'] = dur_s self.nodes.append(node) return node diff --git a/Shaders/TaSTT_template.shader b/Shaders/TaSTT_template.shader index 3c6feba..3a6dd2b 100644 --- a/Shaders/TaSTT_template.shader +++ b/Shaders/TaSTT_template.shader @@ -1,4 +1,4 @@ -Shader "yum_food/TaSTT_exp" +Shader "TaSTT/Chatbox" { Properties { @@ -18,6 +18,7 @@ "Enable margin effect: Squares", float) = 0 [MaterialToggle] Enable_Ray_March( "Enable ray marching", float) = 0 + Ray_March_Emerge("Ray march emerge", Range(0, 1)) = 1.0 [MaterialToggle] Enable_Dithering("Enable dithering", float) = 1 diff --git a/Shaders/ray_march.cginc b/Shaders/ray_march.cginc index 3dce6dd..95d09ac 100644 --- a/Shaders/ray_march.cginc +++ b/Shaders/ray_march.cginc @@ -10,6 +10,21 @@ #include "poi.cginc" #include "stt_text.cginc" +float Ray_March_Emerge; + +float get_phase_fraction(float r, float nth_phase, float n_phases) { + float stride = 1.0 / n_phases; + + // Prevent boundary condition where saturated values get set to 0 by the + // glsl_mod below. + r = min(.9999 * (nth_phase + 1) * stride, r); + + float r0 = clamp(r, nth_phase * stride, (nth_phase + 1) * stride); + r0 = glsl_mod(r0, stride); + + return r0 / stride; +} + float stt_map(float3 p, out float3 hsv, out float smoothness, out float alpha, out float2 text_uv) { hsv[0] = 0; @@ -18,6 +33,10 @@ float stt_map(float3 p, out float3 hsv, out float smoothness, out float alpha, o smoothness = 0.3; alpha = 0; + float p0r = get_phase_fraction(Ray_March_Emerge, 0, 3); + float p1r = get_phase_fraction(Ray_March_Emerge, 1, 3); + float p2r = get_phase_fraction(Ray_March_Emerge, 2, 3); + float dist = 1000 * 1000 * 1000; { float3 pp = p; @@ -25,7 +44,14 @@ float stt_map(float3 p, out float3 hsv, out float smoothness, out float alpha, o pp.x -= 0.02; pp.z -= 0.01; - float d = distance_from_box_frame(pp, float3(6, .5, 3) * .003, .0002); + float box_thck = .0002; + + float3 box_sz = float3(6, .5, 3) * .003; + box_sz.y = lerp(box_thck, box_sz.y, p0r) * p0r; + box_sz.x = lerp(box_thck, box_sz.x, p1r) * p0r; + box_sz.z = lerp(box_thck, box_sz.z, p2r) * p0r; + + float d = distance_from_box_frame(pp, box_sz, box_thck); alpha = (d < dist) * 1 + (d >= dist) * alpha; dist = min(dist, d); @@ -37,6 +63,12 @@ float stt_map(float3 p, out float3 hsv, out float smoothness, out float alpha, o pp.z -= 0.01; float3 box_scale = float3(.01, .0001, .005) * 1.6; + + float p3r = get_phase_fraction(Ray_March_Emerge, 3, 4); + box_scale.x *= ceil(p3r); + box_scale.y *= ceil(p3r); + box_scale.z = lerp(0, box_scale.z, p3r); + float d = distance_from_box(pp, box_scale); text_uv = (clamp(pp.xz, -1 * box_scale.xz, box_scale.xz) / box_scale.xz); @@ -132,10 +164,7 @@ float4 stt_ray_march(inout v2f v2f_i, inout float depth) //v2f_i.normal = old_normal; } - float4 background_color = float4(0, 0, 0, 0); - - float3 final_color = lerp(background_color.rgb, ray_march_color.rgb, ray_march_color.a); - return float4(final_color, 1.0); + return ray_march_color; } #endif // __RAY_MARCH_INC__ -- cgit v1.2.3