From e6891471db6e91b17e36314ea8d692f3de4e60cc Mon Sep 17 00:00:00 2001 From: Yamo4490 Date: Fri, 5 Sep 2025 13:48:58 +0900 Subject: [PATCH] 123 --- Assets/External/Hap Player.meta | 8 + .../jp.keijiro.klak.hap@9a47acf6295e.meta | 8 + .../Editor.meta | 8 + .../Editor/HapPlayerEditor.cs | 156 +++ .../Editor/HapPlayerEditor.cs.meta | 11 + .../Editor/Klak.Hap.Editor.asmdef | 16 + .../Editor/Klak.Hap.Editor.asmdef.meta | 7 + .../Editor/MaterialPropertySelector.cs | 87 ++ .../Editor/MaterialPropertySelector.cs.meta | 11 + .../jp.keijiro.klak.hap@9a47acf6295e/LICENSE | 215 ++++ .../LICENSE.meta | 7 + .../Plugin.meta | 8 + .../Plugin/Linux.meta | 8 + .../Plugin/Linux/libKlakHap.so | 3 + .../Plugin/Linux/libKlakHap.so.meta | 88 ++ .../Plugin/MacOS.meta | 8 + .../Plugin/MacOS/KlakHap.bundle | 3 + .../Plugin/MacOS/KlakHap.bundle.meta | 73 ++ .../Plugin/Windows.meta | 8 + .../Plugin/Windows/KlakHap.dll | 3 + .../Plugin/Windows/KlakHap.dll.meta | 88 ++ .../README.md | 3 + .../README.md.meta | 7 + .../Resources.meta | 8 + .../Resources/Hap1.shader | 57 + .../Resources/Hap1.shader.meta | 9 + .../Resources/Hap5.shader | 59 ++ .../Resources/Hap5.shader.meta | 9 + .../Resources/HapY.shader | 72 ++ .../Resources/HapY.shader.meta | 9 + .../Runtime.meta | 8 + .../Runtime/Common.cs | 4 + .../Runtime/Common.cs.meta | 11 + .../Runtime/FlipBlit.shader | 45 + .../Runtime/FlipBlit.shader.meta | 9 + .../Runtime/HapPlayer.cs | 339 ++++++ .../Runtime/HapPlayer.cs.meta | 11 + .../Runtime/Internal.meta | 8 + .../Runtime/Internal/Decoder.cs | 146 +++ .../Runtime/Internal/Decoder.cs.meta | 11 + .../Runtime/Internal/Demuxer.cs | 103 ++ .../Runtime/Internal/Demuxer.cs.meta | 11 + .../Runtime/Internal/ReadBuffer.cs | 48 + .../Runtime/Internal/ReadBuffer.cs.meta | 11 + .../Runtime/Internal/StreamReader.cs | 266 +++++ .../Runtime/Internal/StreamReader.cs.meta | 11 + .../Runtime/Internal/TextureUpdater.cs | 77 ++ .../Runtime/Internal/TextureUpdater.cs.meta | 11 + .../Runtime/Internal/Utility.cs | 48 + .../Runtime/Internal/Utility.cs.meta | 11 + .../Runtime/Klak.Hap.asmdef | 21 + .../Runtime/Klak.Hap.asmdef.meta | 7 + .../package.json | 3 + .../package.json.meta | 7 + .../Hap Player/jp.keijiro.klak.spout.meta | 8 + .../jp.keijiro.klak.spout/Editor.meta | 9 + .../Editor/Klak.Spout.Editor.asmdef | 17 + .../Editor/Klak.Spout.Editor.asmdef.meta | 7 + .../Editor/MaterialPropertySelector.cs | 85 ++ .../Editor/MaterialPropertySelector.cs.meta | 11 + .../Editor/SpoutReceiverEditor.cs | 115 ++ .../Editor/SpoutReceiverEditor.cs.meta | 12 + .../Editor/SpoutResources.asset | 15 + .../Editor/SpoutResources.asset.meta | 8 + .../Editor/SpoutSenderEditor.cs | 73 ++ .../Editor/SpoutSenderEditor.cs.meta | 11 + .../jp.keijiro.klak.spout/Editor/Utility.cs | 30 + .../Editor/Utility.cs.meta | 11 + .../Hap Player/jp.keijiro.klak.spout/LICENSE | 24 + .../jp.keijiro.klak.spout/LICENSE.meta | 7 + .../jp.keijiro.klak.spout/Plugin.meta | 8 + .../Plugin/KlakSpout.dll | 3 + .../Plugin/KlakSpout.dll.meta | 63 ++ .../jp.keijiro.klak.spout/README.md | 3 + .../jp.keijiro.klak.spout/README.md.meta | 7 + .../jp.keijiro.klak.spout/Runtime.meta | 8 + .../Runtime/Internal.meta | 9 + .../Runtime/Internal/Blit.shader | 99 ++ .../Runtime/Internal/Blit.shader.meta | 9 + .../Runtime/Internal/Event.cs | 65 ++ .../Runtime/Internal/Event.cs.meta | 11 + .../Runtime/Internal/MemoryPool.cs | 70 ++ .../Runtime/Internal/MemoryPool.cs.meta | 11 + .../Runtime/Internal/Plugin.cs | 61 ++ .../Runtime/Internal/Plugin.cs.meta | 11 + .../Runtime/Internal/Receiver.cs | 99 ++ .../Runtime/Internal/Receiver.cs.meta | 11 + .../Runtime/Internal/Sender.cs | 64 ++ .../Runtime/Internal/Sender.cs.meta | 11 + .../Runtime/Internal/Utility.cs | 65 ++ .../Runtime/Internal/Utility.cs.meta | 11 + .../Runtime/Klak.Spout.Runtime.asmdef | 22 + .../Runtime/Klak.Spout.Runtime.asmdef.meta | 7 + .../Runtime/SpoutManager.cs | 33 + .../Runtime/SpoutManager.cs.meta | 11 + .../Runtime/SpoutReceiver.cs | 101 ++ .../Runtime/SpoutReceiver.cs.meta | 14 + .../Runtime/SpoutReceiver_Properties.cs | 67 ++ .../Runtime/SpoutReceiver_Properties.cs.meta | 11 + .../Runtime/SpoutResources.cs | 17 + .../Runtime/SpoutResources.cs.meta | 12 + .../Runtime/SpoutSender.cs | 133 +++ .../Runtime/SpoutSender.cs.meta | 14 + .../Runtime/SpoutSender_Properties.cs | 73 ++ .../Runtime/SpoutSender_Properties.cs.meta | 11 + .../jp.keijiro.klak.spout/package.json | 3 + .../jp.keijiro.klak.spout/package.json.meta | 7 + .../양도끼_250826_기본/Materials/DR_01_Copy.mat | 6 +- .../양도끼_250826_기본/Materials/DR_02_Copy.mat | 6 +- .../양도끼_250826_기본/Materials/EFF 1_Copy.mat | 6 +- .../Materials/Emo_Alpha 1_Copy.mat | 6 +- .../양도끼_250826_기본/Materials/Eye 1_Copy.mat | 6 +- .../Materials/Eye_Pink 1_Copy.mat | 6 +- .../양도끼_250826_기본/Materials/Face 1_Copy.mat | 6 +- .../Materials/Face_Alpha 1_Copy.mat | 6 +- .../Materials/HighLight 1_Copy.mat | 6 +- .../Materials/Longhair 1_Copy.mat | 8 +- .../Materials/Longhair_Copy.mat | 8 +- .../Materials/Manuka_body_Copy.mat | 6 +- .../양도끼_250826_기본/Materials/OTR_Copy.mat | 6 +- .../양도끼_250826_기본/Materials/Ribbon_Copy.mat | 6 +- .../Materials/Star_Out_Copy.mat | 6 +- .../Materials/Star_White_Copy.mat | 6 +- .../양도끼_250826_기본/Materials/TW.006_Copy.mat | 8 +- .../Materials/Twintail_Copy.mat | 6 +- .../양도끼_250826_기본/Materials/cap_Copy.mat | 6 +- .../양도끼_250826_기본/Materials/gun_Copy.mat | 6 +- .../Ani_양도끼_엣호엣호_02.fbx | 4 +- .../Facial_양도끼_엣호엣호_01.anim | 4 +- .../양도끼_250901_엣호엣호_시가지A.unity | 4 +- .../양도끼_250901_엣호엣호_시가지A_Timeline.playable | 980 ++++++++++++++---- .../양도끼_250901_엣호엣호_시가지A_Volume.asset | 6 +- 132 files changed, 4788 insertions(+), 298 deletions(-) create mode 100644 Assets/External/Hap Player.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Editor.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Editor/HapPlayerEditor.cs create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Editor/HapPlayerEditor.cs.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Editor/Klak.Hap.Editor.asmdef create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Editor/Klak.Hap.Editor.asmdef.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Editor/MaterialPropertySelector.cs create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Editor/MaterialPropertySelector.cs.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/LICENSE create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/LICENSE.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/Linux.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/Linux/libKlakHap.so create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/Linux/libKlakHap.so.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/MacOS.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/MacOS/KlakHap.bundle create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/MacOS/KlakHap.bundle.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/Windows.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/Windows/KlakHap.dll create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/Windows/KlakHap.dll.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/README.md create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/README.md.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Resources.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Resources/Hap1.shader create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Resources/Hap1.shader.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Resources/Hap5.shader create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Resources/Hap5.shader.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Resources/HapY.shader create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Resources/HapY.shader.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Common.cs create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Common.cs.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/FlipBlit.shader create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/FlipBlit.shader.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/HapPlayer.cs create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/HapPlayer.cs.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/Decoder.cs create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/Decoder.cs.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/Demuxer.cs create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/Demuxer.cs.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/ReadBuffer.cs create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/ReadBuffer.cs.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/StreamReader.cs create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/StreamReader.cs.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/TextureUpdater.cs create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/TextureUpdater.cs.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/Utility.cs create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/Utility.cs.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Klak.Hap.asmdef create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Klak.Hap.asmdef.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/package.json create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/package.json.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Editor.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/Klak.Spout.Editor.asmdef create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/Klak.Spout.Editor.asmdef.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/MaterialPropertySelector.cs create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/MaterialPropertySelector.cs.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/SpoutReceiverEditor.cs create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/SpoutReceiverEditor.cs.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/SpoutResources.asset create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/SpoutResources.asset.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/SpoutSenderEditor.cs create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/SpoutSenderEditor.cs.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/Utility.cs create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/Utility.cs.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/LICENSE create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/LICENSE.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Plugin.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Plugin/KlakSpout.dll create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Plugin/KlakSpout.dll.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/README.md create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/README.md.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Blit.shader create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Blit.shader.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Event.cs create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Event.cs.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/MemoryPool.cs create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/MemoryPool.cs.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Plugin.cs create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Plugin.cs.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Receiver.cs create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Receiver.cs.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Sender.cs create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Sender.cs.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Utility.cs create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Utility.cs.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Klak.Spout.Runtime.asmdef create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Klak.Spout.Runtime.asmdef.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutManager.cs create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutManager.cs.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutReceiver.cs create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutReceiver.cs.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutReceiver_Properties.cs create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutReceiver_Properties.cs.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutResources.cs create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutResources.cs.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutSender.cs create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutSender.cs.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutSender_Properties.cs create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutSender_Properties.cs.meta create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/package.json create mode 100644 Assets/External/Hap Player/jp.keijiro.klak.spout/package.json.meta diff --git a/Assets/External/Hap Player.meta b/Assets/External/Hap Player.meta new file mode 100644 index 000000000..0016a768f --- /dev/null +++ b/Assets/External/Hap Player.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5e5431614cff2064cbe2bac3589f5fab +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e.meta b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e.meta new file mode 100644 index 000000000..6adcd4c24 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4a8e49c85c7ee7a478c2a40f7cca9061 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Editor.meta b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Editor.meta new file mode 100644 index 000000000..dd9e2ceab --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: aaf22bd5628ec0b48846a14ad7d42515 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Editor/HapPlayerEditor.cs b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Editor/HapPlayerEditor.cs new file mode 100644 index 000000000..b9957ba0d --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Editor/HapPlayerEditor.cs @@ -0,0 +1,156 @@ +using UnityEngine; +using UnityEditor; + +namespace Klak.Hap +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(HapPlayer))] + sealed class HapPlayerEditor : Editor + { + SerializedProperty _filePath; + SerializedProperty _pathMode; + SerializedProperty _time; + SerializedProperty _speed; + SerializedProperty _loop; + SerializedProperty _targetTexture; + SerializedProperty _flipHorizontal; + SerializedProperty _flipVertical; + + static class Labels + { + public static readonly GUIContent Property = new GUIContent("Property"); + public static readonly GUIContent Select = new GUIContent("Select"); + } + + string _sourceInfo; + + void ShowSourceInfo(HapPlayer player) + { + if (!player.enabled || !player.gameObject.activeInHierarchy) return; + + if (!player.isValid) + { + EditorGUILayout.HelpBox( + "Failed to open file. " + + "Please specify a valid HAP-encoded .mov file.", + MessageType.Warning + ); + return; + } + + if (_sourceInfo == null) + _sourceInfo = string.Format( + "Codec: {0}\n" + + "Frame dimensions: {1} x {2}\n" + + "Stream duration: {3:0.00}\n" + + "Frame rate: {4:0.00}", + player.codecType, + player.frameWidth, player.frameHeight, + player.streamDuration, + player.frameCount / player.streamDuration + ); + + EditorGUILayout.HelpBox(_sourceInfo, MessageType.None); + } + + void OnEnable() + { + _filePath = serializedObject.FindProperty("_filePath"); + _pathMode = serializedObject.FindProperty("_pathMode"); + _time = serializedObject.FindProperty("_time"); + _speed = serializedObject.FindProperty("_speed"); + _loop = serializedObject.FindProperty("_loop"); + _targetTexture = serializedObject.FindProperty("_targetTexture"); + _flipHorizontal = serializedObject.FindProperty("_flipHorizontal"); + _flipVertical = serializedObject.FindProperty("_flipVertical"); + } + + public override void OnInspectorGUI() + { + var reload = false; + + serializedObject.Update(); + + // Source infomation + if (!_filePath.hasMultipleDifferentValues && + !_pathMode.hasMultipleDifferentValues && + !string.IsNullOrEmpty(_filePath.stringValue)) + { + ShowSourceInfo((HapPlayer)target); + } + + // Source file (드래그 앤 드롭 + 파일 브라우저) + EditorGUILayout.BeginHorizontal(); + EditorGUI.BeginChangeCheck(); + EditorGUILayout.DelayedTextField(_filePath); + if (GUILayout.Button("파일 선택", GUILayout.Width(80))) + { + string path = EditorUtility.OpenFilePanel("HAP MOV 파일 선택", Application.dataPath, "mov"); + if (!string.IsNullOrEmpty(path)) + { + string streamingPath = Application.streamingAssetsPath; + if (path.StartsWith(streamingPath)) + path = path.Substring(streamingPath.Length + 1); + _filePath.stringValue = path; + } + } + EditorGUILayout.EndHorizontal(); + if (EditorGUI.EndChangeCheck()) reload = true; + + // 드래그 앤 드롭 지원 + Rect dropRect = GUILayoutUtility.GetLastRect(); + if (Event.current.type == EventType.DragUpdated || Event.current.type == EventType.DragPerform) + { + if (dropRect.Contains(Event.current.mousePosition)) + { + DragAndDrop.visualMode = DragAndDropVisualMode.Copy; + if (Event.current.type == EventType.DragPerform) + { + DragAndDrop.AcceptDrag(); + foreach (var dragged in DragAndDrop.paths) + { + if (dragged.ToLower().EndsWith(".mov")) + { + string path = dragged; + string streamingPath = Application.streamingAssetsPath; + if (path.StartsWith(streamingPath)) + path = path.Substring(streamingPath.Length + 1); + _filePath.stringValue = path; + GUI.FocusControl(null); + reload = true; + break; + } + } + Event.current.Use(); + } + } + } + + // Playback control + EditorGUILayout.PropertyField(_time); + EditorGUILayout.PropertyField(_speed); + EditorGUILayout.PropertyField(_loop); + + // Flip options + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Flip Options", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(_flipHorizontal, new GUIContent("Flip Horizontal")); + EditorGUILayout.PropertyField(_flipVertical, new GUIContent("Flip Vertical")); + + // Target texture + EditorGUILayout.PropertyField(_targetTexture); + + serializedObject.ApplyModifiedProperties(); + + if (reload) + { + foreach (HapPlayer hp in targets) + { + hp.SendMessage("OnDestroy"); + hp.SendMessage("LateUpdate"); + } + _sourceInfo = null; + } + } + } +} diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Editor/HapPlayerEditor.cs.meta b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Editor/HapPlayerEditor.cs.meta new file mode 100644 index 000000000..b01351e5b --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Editor/HapPlayerEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0a374e606a0d24345b93bc348a6fbf54 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Editor/Klak.Hap.Editor.asmdef b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Editor/Klak.Hap.Editor.asmdef new file mode 100644 index 000000000..99912cc79 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Editor/Klak.Hap.Editor.asmdef @@ -0,0 +1,16 @@ +{ + "name": "Klak.Hap.Editor", + "references": [ + "Klak.Hap" + ], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [] +} \ No newline at end of file diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Editor/Klak.Hap.Editor.asmdef.meta b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Editor/Klak.Hap.Editor.asmdef.meta new file mode 100644 index 000000000..cca620028 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Editor/Klak.Hap.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 26694ad9b328c7148a8fb73421baa7fe +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Editor/MaterialPropertySelector.cs b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Editor/MaterialPropertySelector.cs new file mode 100644 index 000000000..c26b97308 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Editor/MaterialPropertySelector.cs @@ -0,0 +1,87 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Collections.Generic; + +namespace Klak.Hap +{ + static class MaterialPropertySelector + { + #region Public method + + // Material property drop-down list + public static void DropdownList( + SerializedProperty rendererProperty, + SerializedProperty materialProperty + ) + { + // Try retrieving the target shader. + var shader = RetrieveTargetShader(rendererProperty); + + // Abandon the current value if it failed to get a shader. + if (shader == null) + { + materialProperty.stringValue = ""; + return; + } + + // Cache property names found in the target shader. + CachePropertyNames(shader); + + // Abandon the current value if there is no property candidate. + if (_propertyNames.Length == 0) + { + materialProperty.stringValue = ""; + return; + } + + // Show the dropdown list. + var index = Array.IndexOf(_propertyNames, materialProperty.stringValue); + var newIndex = EditorGUILayout.Popup("Property", index, _propertyNames); + + // Update the serialized property if the selection was changed. + if (index != newIndex) materialProperty.stringValue = _propertyNames[newIndex]; + } + + #endregion + + #region Private members + + static string[] _propertyNames; // Property name list + static Shader _cachedShader; // Shader used to cache the name list + + // Retrieve a shader from a given renderer. + static Shader RetrieveTargetShader(SerializedProperty rendererProperty) + { + var renderer = rendererProperty.objectReferenceValue as Renderer; + if (renderer == null) return null; + + var material = renderer.sharedMaterial; + if (material == null) return null; + + return material.shader; + } + + // Cache property names provided within a specified shader. + static void CachePropertyNames(Shader shader) + { + // Exit early when the shader is same to the cached one. + if (shader == _cachedShader) return; + + var temp = new List(); + + var count = ShaderUtil.GetPropertyCount(shader); + for (var i = 0; i < count; i++) + { + var propType = ShaderUtil.GetPropertyType(shader, i); + if (propType == ShaderUtil.ShaderPropertyType.TexEnv) + temp.Add(ShaderUtil.GetPropertyName(shader, i)); + } + + _propertyNames = temp.ToArray(); + _cachedShader = shader; + } + + #endregion + } +} diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Editor/MaterialPropertySelector.cs.meta b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Editor/MaterialPropertySelector.cs.meta new file mode 100644 index 000000000..d1fca01fb --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Editor/MaterialPropertySelector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fe3e2d486287f2f40936cd00c558818d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/LICENSE b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/LICENSE new file mode 100644 index 000000000..4c024e58f --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/LICENSE @@ -0,0 +1,215 @@ +License summary: + +KlakHAP - MIT license +HAP codec - FreeBSD license +Snappy - BSD 3-clause license +MP4 demuxer - CC0 (public domain) + +------------------------------------------------------------------------------- +KlakHAP +https://github.com/keijiro/KlakHap +------------------------------------------------------------------------------- + +Copyright (c) 2019 Unity Technologies + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +------------------------------------------------------------------------------- +HAP +https://github.com/Vidvox/hap +------------------------------------------------------------------------------- + +Copyright (c) 2012-2013, Tom Butterworth and Vidvox LLC. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------------- +Snappy +https://github.com/google/snappy +------------------------------------------------------------------------------- + +Copyright 2011, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------------- +Minimalistic MP4 muxer & demuxer +https://github.com/aspt/mp4 +------------------------------------------------------------------------------- + +CC0 1.0 Universal + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator and +subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for the +purpose of contributing to a commons of creative, cultural and scientific +works ("Commons") that the public can reliably and without fear of later +claims of infringement build upon, modify, incorporate in other works, reuse +and redistribute as freely as possible in any form whatsoever and for any +purposes, including without limitation commercial purposes. These owners may +contribute to the Commons to promote the ideal of a free culture and the +further production of creative, cultural and scientific works, or to gain +reputation or greater distribution for their Work in part through the use and +efforts of others. + +For these and/or other purposes and motivations, and without any expectation +of additional consideration or compensation, the person associating CC0 with a +Work (the "Affirmer"), to the extent that he or she is an owner of Copyright +and Related Rights in the Work, voluntarily elects to apply CC0 to the Work +and publicly distribute the Work under its terms, with knowledge of his or her +Copyright and Related Rights in the Work and the meaning and intended legal +effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not limited +to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, communicate, + and translate a Work; + + ii. moral rights retained by the original author(s) and/or performer(s); + + iii. publicity and privacy rights pertaining to a person's image or likeness + depicted in a Work; + + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + + v. rights protecting the extraction, dissemination, use and reuse of data in + a Work; + + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation thereof, + including any amended or successor version of such directive); and + + vii. other similar, equivalent or corresponding rights throughout the world + based on applicable law or treaty, and any national implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention of, +applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and +unconditionally waives, abandons, and surrenders all of Affirmer's Copyright +and Related Rights and associated claims and causes of action, whether now +known or unknown (including existing as well as future claims and causes of +action), in the Work (i) in all territories worldwide, (ii) for the maximum +duration provided by applicable law or treaty (including future time +extensions), (iii) in any current or future medium and for any number of +copies, and (iv) for any purpose whatsoever, including without limitation +commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes +the Waiver for the benefit of each member of the public at large and to the +detriment of Affirmer's heirs and successors, fully intending that such Waiver +shall not be subject to revocation, rescission, cancellation, termination, or +any other legal or equitable action to disrupt the quiet enjoyment of the Work +by the public as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason be +judged legally invalid or ineffective under applicable law, then the Waiver +shall be preserved to the maximum extent permitted taking into account +Affirmer's express Statement of Purpose. In addition, to the extent the Waiver +is so judged Affirmer hereby grants to each affected person a royalty-free, +non transferable, non sublicensable, non exclusive, irrevocable and +unconditional license to exercise Affirmer's Copyright and Related Rights in +the Work (i) in all territories worldwide, (ii) for the maximum duration +provided by applicable law or treaty (including future time extensions), (iii) +in any current or future medium and for any number of copies, and (iv) for any +purpose whatsoever, including without limitation commercial, advertising or +promotional purposes (the "License"). The License shall be deemed effective as +of the date CC0 was applied by Affirmer to the Work. Should any part of the +License for any reason be judged legally invalid or ineffective under +applicable law, such partial invalidity or ineffectiveness shall not +invalidate the remainder of the License, and in such case Affirmer hereby +affirms that he or she will not (i) exercise any of his or her remaining +Copyright and Related Rights in the Work or (ii) assert any associated claims +and causes of action with respect to the Work, in either case contrary to +Affirmer's express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + + b. Affirmer offers the Work as-is and makes no representations or warranties + of any kind concerning the Work, express, implied, statutory or otherwise, + including without limitation warranties of title, merchantability, fitness + for a particular purpose, non infringement, or the absence of latent or + other defects, accuracy, or the present or absence of errors, whether or not + discoverable, all to the greatest extent permissible under applicable law. + + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without limitation + any person's Copyright and Related Rights in the Work. Further, Affirmer + disclaims responsibility for obtaining any necessary consents, permissions + or other rights required for any use of the Work. + + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to this + CC0 or use of the Work. + +For more information, please see + diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/LICENSE.meta b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/LICENSE.meta new file mode 100644 index 000000000..5f9e30a83 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/LICENSE.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: cafc978caabfcd84e8dc32d52b4f2b79 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin.meta b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin.meta new file mode 100644 index 000000000..fd08e25c4 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dd3bd64373abe6d4bac999a0b5b69bcd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/Linux.meta b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/Linux.meta new file mode 100644 index 000000000..110f51641 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/Linux.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 47a9aaa064c67514da9f5ff173be35fb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/Linux/libKlakHap.so b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/Linux/libKlakHap.so new file mode 100644 index 000000000..e125e30e7 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/Linux/libKlakHap.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:56982cab77f6b521c20177404e0f0b1a60cef6c34f420ca55e4c077f628c8dc5 +size 78368 diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/Linux/libKlakHap.so.meta b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/Linux/libKlakHap.so.meta new file mode 100644 index 000000000..d5b1a6f3c --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/Linux/libKlakHap.so.meta @@ -0,0 +1,88 @@ +fileFormatVersion: 2 +guid: 467f13044a0a9364795fef0b526e5eed +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + platformData: + - first: + '': Any + second: + enabled: 0 + settings: + Exclude Editor: 0 + Exclude Linux: 1 + Exclude Linux64: 0 + Exclude LinuxUniversal: 0 + Exclude OSXUniversal: 1 + Exclude Win: 0 + Exclude Win64: 0 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: x86_64 + DefaultValueInitialized: true + OS: Linux + - first: + Facebook: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Facebook: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Linux + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Linux64 + second: + enabled: 1 + settings: + CPU: x86_64 + - first: + Standalone: LinuxUniversal + second: + enabled: 1 + settings: + CPU: x86_64 + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Standalone: Win64 + second: + enabled: 1 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/MacOS.meta b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/MacOS.meta new file mode 100644 index 000000000..78213a109 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/MacOS.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 93e3b14ab64306d4a85ce4feb6c9b2fd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/MacOS/KlakHap.bundle b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/MacOS/KlakHap.bundle new file mode 100644 index 000000000..68368e09e --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/MacOS/KlakHap.bundle @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c52025cb26f0455b8fe8b105798055538261a1e05603f6c44e318ff81fc68441 +size 216103 diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/MacOS/KlakHap.bundle.meta b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/MacOS/KlakHap.bundle.meta new file mode 100644 index 000000000..af6713182 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/MacOS/KlakHap.bundle.meta @@ -0,0 +1,73 @@ +fileFormatVersion: 2 +guid: 849058cd649269543a8d95c4703cf3d9 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Editor: 0 + Exclude Linux64: 1 + Exclude OSXUniversal: 0 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: OSX + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXUniversal + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: x86 + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: x86_64 + - first: + iPhone: iOS + second: + enabled: 0 + settings: + AddToEmbeddedBinaries: false + CPU: AnyCPU + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/Windows.meta b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/Windows.meta new file mode 100644 index 000000000..c53cd3ac4 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/Windows.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: afcc650d93eee184aa34e7d62096bf27 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/Windows/KlakHap.dll b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/Windows/KlakHap.dll new file mode 100644 index 000000000..93fccce9e --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/Windows/KlakHap.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c68247a7b2fef9ab9a2a6b62c7802d51d497536e80aff232f8a74228c59d19c2 +size 39936 diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/Windows/KlakHap.dll.meta b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/Windows/KlakHap.dll.meta new file mode 100644 index 000000000..8dc658b02 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Plugin/Windows/KlakHap.dll.meta @@ -0,0 +1,88 @@ +fileFormatVersion: 2 +guid: e794ded0c0aa5a4449367e5b2b2d96ed +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + platformData: + - first: + '': Any + second: + enabled: 0 + settings: + Exclude Editor: 0 + Exclude Linux: 0 + Exclude Linux64: 0 + Exclude LinuxUniversal: 0 + Exclude OSXUniversal: 0 + Exclude Win: 1 + Exclude Win64: 0 + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: x86_64 + DefaultValueInitialized: true + OS: Windows + - first: + Facebook: Win + second: + enabled: 0 + settings: + CPU: None + - first: + Facebook: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Linux + second: + enabled: 1 + settings: + CPU: x86 + - first: + Standalone: Linux64 + second: + enabled: 1 + settings: + CPU: x86_64 + - first: + Standalone: LinuxUniversal + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Standalone: OSXUniversal + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win64 + second: + enabled: 1 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/README.md b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/README.md new file mode 100644 index 000000000..baef6d225 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/README.md @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78248f00256d9b5f21740b1df8c6fc0e812aaeeeb1e3358cf66cd7266f0ec3d4 +size 5324 diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/README.md.meta b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/README.md.meta new file mode 100644 index 000000000..8c2bb8f4d --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 76ac0e324de156547a580e86fdd8ea2f +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Resources.meta b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Resources.meta new file mode 100644 index 000000000..a77ea6a99 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2b78bdcad9737cf48a8f9b23254b7f84 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Resources/Hap1.shader b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Resources/Hap1.shader new file mode 100644 index 000000000..a0bebd544 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Resources/Hap1.shader @@ -0,0 +1,57 @@ +Shader "Klak/HAP" +{ + Properties + { + _MainTex("Texture", 2D) = "white" {} + } + + CGINCLUDE + + #include "UnityCG.cginc" + + struct Attributes + { + float4 position : POSITION; + float2 texcoord : TEXCOORD; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct Varyings + { + float4 position : SV_Position; + float2 texcoord : TEXCOORD; + }; + + sampler2D _MainTex; + float4 _MainTex_ST; + + Varyings Vertex(Attributes input) + { + UNITY_SETUP_INSTANCE_ID(input); + Varyings output; + output.position = UnityObjectToClipPos(input.position); + output.texcoord = TRANSFORM_TEX(input.texcoord, _MainTex); + output.texcoord.y = 1 - output.texcoord.y; + return output; + } + + fixed4 Fragment(Varyings input) : SV_Target + { + return tex2D(_MainTex, input.texcoord); + } + + ENDCG + + SubShader + { + Tags { "RenderType"="Opaque" } + Pass + { + CGPROGRAM + #pragma vertex Vertex + #pragma fragment Fragment + #pragma multi_compile_instancing + ENDCG + } + } +} diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Resources/Hap1.shader.meta b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Resources/Hap1.shader.meta new file mode 100644 index 000000000..ea1186872 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Resources/Hap1.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 49f216cf9a0966d4493e7ba1af11c3d6 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Resources/Hap5.shader b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Resources/Hap5.shader new file mode 100644 index 000000000..18f42cfca --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Resources/Hap5.shader @@ -0,0 +1,59 @@ +Shader "Klak/HAP Alpha" +{ + Properties + { + _MainTex("Texture", 2D) = "white" {} + } + + CGINCLUDE + + #include "UnityCG.cginc" + + struct Attributes + { + float4 position : POSITION; + float2 texcoord : TEXCOORD; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct Varyings + { + float4 position : SV_Position; + float2 texcoord : TEXCOORD; + }; + + sampler2D _MainTex; + float4 _MainTex_ST; + + Varyings Vertex(Attributes input) + { + UNITY_SETUP_INSTANCE_ID(input); + Varyings output; + output.position = UnityObjectToClipPos(input.position); + output.texcoord = TRANSFORM_TEX(input.texcoord, _MainTex); + output.texcoord.y = 1 - output.texcoord.y; + return output; + } + + fixed4 Fragment(Varyings input) : SV_Target + { + return tex2D(_MainTex, input.texcoord); + } + + ENDCG + + SubShader + { + Tags { "RenderType"="Transparent" "Queue"="Transparent" } + Pass + { + ZWrite Off + Blend SrcAlpha OneMinusSrcAlpha + CGPROGRAM + #pragma vertex Vertex + #pragma fragment Fragment + #pragma multi_compile_instancing + ENDCG + } + } +} diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Resources/Hap5.shader.meta b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Resources/Hap5.shader.meta new file mode 100644 index 000000000..1efcf8801 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Resources/Hap5.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 90b82a87346a5254286d43f76863782c +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Resources/HapY.shader b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Resources/HapY.shader new file mode 100644 index 000000000..4cfb31101 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Resources/HapY.shader @@ -0,0 +1,72 @@ +Shader "Klak/HAP Q" +{ + Properties + { + _MainTex("Texture", 2D) = "white" {} + } + + CGINCLUDE + + #include "UnityCG.cginc" + + struct Attributes + { + float4 position : POSITION; + float2 texcoord : TEXCOORD; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct Varyings + { + float4 position : SV_Position; + float2 texcoord : TEXCOORD; + }; + + sampler2D _MainTex; + float4 _MainTex_ST; + + half3 CoCgSY2RGB(half4 i) + { + #if !defined(UNITY_COLORSPACE_GAMMA) + i.xyz = LinearToGammaSpace(i.xyz); + #endif + i.xy -= half2(0.50196078431373, 0.50196078431373); + half s = 1 / ((i.z * (255.0 / 8)) + 1); + half3 rgb = half3(i.x - i.y, i.y, -i.x - i.y) * s + i.w; + #if !defined(UNITY_COLORSPACE_GAMMA) + rgb = GammaToLinearSpace(rgb); + #endif + return rgb; + } + + Varyings Vertex(Attributes input) + { + UNITY_SETUP_INSTANCE_ID(input); + Varyings output; + output.position = UnityObjectToClipPos(input.position); + output.texcoord = TRANSFORM_TEX(input.texcoord, _MainTex); + output.texcoord.y = 1 - output.texcoord.y; + return output; + } + + fixed4 Fragment(Varyings input) : SV_Target + { + return fixed4(CoCgSY2RGB(tex2D(_MainTex, input.texcoord)), 1); + } + + ENDCG + + SubShader + { + Tags { "RenderType"="Opaque" } + Pass + { + CGPROGRAM + #pragma multi_compile _ UNITY_COLORSPACE_GAMMA + #pragma vertex Vertex + #pragma fragment Fragment + #pragma multi_compile_instancing + ENDCG + } + } +} diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Resources/HapY.shader.meta b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Resources/HapY.shader.meta new file mode 100644 index 000000000..1bfd3cb58 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Resources/HapY.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 807e261a8905cde469501ab123338e05 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime.meta b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime.meta new file mode 100644 index 000000000..39c1fbb70 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3a1ee959e394fc54bb43e56fdae7a146 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Common.cs b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Common.cs new file mode 100644 index 000000000..30acd6f01 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Common.cs @@ -0,0 +1,4 @@ +namespace Klak.Hap +{ + public enum CodecType { Unsupported, Hap, HapQ, HapAlpha } +} diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Common.cs.meta b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Common.cs.meta new file mode 100644 index 000000000..87e1b20d5 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Common.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ec81190dde6b4d24fb7fdb8f562fccbe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/FlipBlit.shader b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/FlipBlit.shader new file mode 100644 index 000000000..d3e2c2518 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/FlipBlit.shader @@ -0,0 +1,45 @@ +Shader "Hidden/FlipBlit" +{ + Properties + { + _MainTex ("Texture", 2D) = "white" {} + _FlipX ("Flip X", Float) = 0 + _FlipY ("Flip Y", Float) = 0 + } + SubShader + { + Pass + { + ZTest Always Cull Off ZWrite Off + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + sampler2D _MainTex; + float4 _MainTex_ST; + float _FlipX; + float _FlipY; + + struct appdata_t { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; + struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; + + v2f vert (appdata_t v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + o.uv = TRANSFORM_TEX(v.uv, _MainTex); + return o; + } + + fixed4 frag (v2f i) : SV_Target + { + float2 uv = i.uv; + if (_FlipX > 0.5) uv.x = 1.0 - uv.x; + if (_FlipY > 0.5) uv.y = 1.0 - uv.y; + return tex2D(_MainTex, uv); + } + ENDCG + } + } +} \ No newline at end of file diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/FlipBlit.shader.meta b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/FlipBlit.shader.meta new file mode 100644 index 000000000..7921aac39 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/FlipBlit.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 83fc09b934829ee489c1947480fcc03e +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/HapPlayer.cs b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/HapPlayer.cs new file mode 100644 index 000000000..a19b27103 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/HapPlayer.cs @@ -0,0 +1,339 @@ +using UnityEngine; +using UnityEngine.Playables; + +#if KLAKHAP_HAS_TIMELINE +using UnityEngine.Timeline; +#endif + +namespace Klak.Hap +{ + [ExecuteInEditMode, AddComponentMenu("Klak/HAP/HAP Player")] + #if KLAKHAP_HAS_TIMELINE + public sealed class HapPlayer : MonoBehaviour , ITimeControl, IPropertyPreview + #else + public sealed class HapPlayer : MonoBehaviour + #endif + { + #region Editable attributes + + public enum PathMode { StreamingAssets, LocalFileSystem } + + [SerializeField] PathMode _pathMode = PathMode.StreamingAssets; + [SerializeField] string _filePath = ""; + + [SerializeField] float _time = 0; + [SerializeField, Range(-10, 10)] float _speed = 1; + [SerializeField] bool _loop = true; + + [SerializeField] RenderTexture _targetTexture = null; + [SerializeField] string _targetMaterialProperty = "_MainTex"; + + [SerializeField] bool _flipHorizontal = false; + [SerializeField] bool _flipVertical = true; + + #endregion + + #region Public properties + + public float time { + get { return _time; } + set { _time = value; } + } + + public float speed { + get { return _speed; } + set { _speed = value; } + } + + public bool loop { + get { return _loop; } + set { _loop = value; } + } + + public RenderTexture targetTexture { + get { return _targetTexture; } + set { _targetTexture = value; } + } + + public string targetMaterialProperty { + get { return _targetMaterialProperty; } + set { _targetMaterialProperty = value; } + } + + public bool flipHorizontal { + get { return _flipHorizontal; } + set { _flipHorizontal = value; } + } + + public bool flipVertical { + get { return _flipVertical; } + set { _flipVertical = value; } + } + + #endregion + + #region Read-only properties + + public bool isValid { get { return _demuxer != null; } } + public int frameWidth { get { return _demuxer?.Width ?? 0; } } + public int frameHeight { get { return _demuxer?.Height ?? 0; } } + public int frameCount { get { return _demuxer?.FrameCount ?? 0; } } + public double streamDuration { get { return _demuxer?.Duration ?? 0; } } + + public CodecType codecType { get { + return Utility.DetermineCodecType(_demuxer?.VideoType ?? 0); + } } + + public string resolvedFilePath { get { + if (_pathMode == PathMode.StreamingAssets) + return System.IO.Path.Combine(Application.streamingAssetsPath, _filePath); + else + return _filePath; + } } + + public Texture2D texture { get { return _texture; } } + + #endregion + + #region Public methods + + public void Open(string filePath, PathMode pathMode = PathMode.StreamingAssets) + { + if (_demuxer != null) + { + Debug.LogError("Stream has already been opened."); + return; + } + + _filePath = filePath; + _pathMode = pathMode; + + OpenInternal(); + } + + public void UpdateNow() + => LateUpdate(); + + #endregion + + #region Private members + + Demuxer _demuxer; + StreamReader _stream; + Decoder _decoder; + + Texture2D _texture; + TextureUpdater _updater; + + float _storedTime; + float _storedSpeed; + + // Flip-related variables + Material _flipMaterial; + + void OpenInternal() + { + // Demuxer instantiation + _demuxer = new Demuxer(resolvedFilePath); + + if (!_demuxer.IsValid) + { + if (Application.isPlaying) + { + Debug.LogError("Failed to open stream (" + resolvedFilePath + ")."); + enabled = false; + } + _demuxer.Dispose(); + _demuxer = null; + return; + } + + _stream = new StreamReader(_demuxer, _time, _speed / 60); + (_storedTime, _storedSpeed) = (_time, _speed); + + _decoder = new Decoder( + _stream, _demuxer.Width, _demuxer.Height, _demuxer.VideoType + ); + + _texture = new Texture2D( + _demuxer.Width, _demuxer.Height, + Utility.DetermineTextureFormat(_demuxer.VideoType), false + ); + _texture.wrapMode = TextureWrapMode.Clamp; + _texture.hideFlags = HideFlags.DontSave; + + _updater = new TextureUpdater(_texture, _decoder); + } + + void UpdateTargetTexture() + { + if (_targetTexture == null || _texture == null || _demuxer == null) return; + if (this == null || !enabled) return; + + if (_flipMaterial == null) + { + _flipMaterial = new Material(Shader.Find("Hidden/FlipBlit")); + _flipMaterial.hideFlags = HideFlags.DontSave; + } + _flipMaterial.SetFloat("_FlipX", _flipHorizontal ? 1f : 0f); + _flipMaterial.SetFloat("_FlipY", _flipVertical ? 1f : 0f); + + try + { + Graphics.Blit(_texture, _targetTexture, _flipMaterial); + } + catch (System.NullReferenceException) + { + return; + } + } + + #endregion + + #region ITimeControl implementation + + bool _externalTime; + + public void OnControlTimeStart() + { + _externalTime = true; + + // In the external time mode, we can't know the actual playback + // speed but sure that it's positive (Control Track doesn't support + // reverse playback), so we assume that the speed is 1.0. + // Cons: Resync could happen every frame for high speed play back. + _speed = 1; + } + + public void OnControlTimeStop() + { + _externalTime = false; + } + + public void SetTime(double time) + { + _time = (float)time; + _speed = 1; + } + + #endregion + + #region IPropertyPreview implementation + + #if KLAKHAP_HAS_TIMELINE + public void GatherProperties(PlayableDirector director, IPropertyCollector driver) + { + driver.AddFromName(gameObject, "_time"); + } + #endif + + #endregion + + #region MonoBehaviour implementation + + void OnDestroy() + { + if (_updater != null) + { + _updater.Dispose(); + _updater = null; + } + + if (_decoder != null) + { + _decoder.Dispose(); + _decoder = null; + } + + if (_stream != null) + { + _stream.Dispose(); + _stream = null; + } + + if (_demuxer != null) + { + _demuxer.Dispose(); + _demuxer = null; + } + + Utility.Destroy(_texture); + Utility.Destroy(_flipMaterial); + } + + #if UNITY_EDITOR + void OnValidate() + { + // 더 이상 필요 없음: 렌더러 관련 클리어 코드 제거 + } + #endif + + int _lastUpdateFrameCount = -1; + + void LateUpdate() + { + if (!enabled || this == null) return; + if (Time.frameCount == _lastUpdateFrameCount) return; + _lastUpdateFrameCount = Time.frameCount; + + if (_demuxer == null && !string.IsNullOrEmpty(_filePath)) + OpenInternal(); + if (_demuxer == null) return; + + var duration = (float)_demuxer.Duration; + var dt = duration / _demuxer.FrameCount; + var resync = _time < _storedTime || _time > _storedTime + dt; + if (_speed != _storedSpeed) + { + resync = true; + _storedSpeed = _speed; + } + var t = _loop ? _time : Mathf.Clamp(_time, 0, duration - 1e-4f); + var bgdec = !resync && Application.isPlaying; + if (resync && _stream != null) _stream.Restart(t, _speed / 60); + if (_decoder != null && _updater != null) + { + if (TextureUpdater.AsyncSupport) + { + if (bgdec) _decoder.UpdateAsync(t); else _decoder.UpdateSync(t); + _updater.RequestAsyncUpdate(); + } +#if !HAP_NO_DELAY + else if (bgdec) + { + _updater.UpdateNow(); + _decoder.UpdateAsync(t); + } +#endif + else + { + _decoder.UpdateSync(t); + _updater.UpdateNow(); + } + } + if (Application.isPlaying && !_externalTime) + _time += Time.deltaTime * _speed; + _storedTime = _time; + + // 렌더 텍스처만 업데이트 + if (this != null && enabled) + { + try + { + if (_targetTexture != null) + UpdateTargetTexture(); + } + catch (System.NullReferenceException ex) + { + Debug.LogWarning($"HapPlayer: Null reference in external object updates - {ex.Message}"); + } + catch (System.Exception ex) + { + Debug.LogWarning($"HapPlayer: Unexpected error in external object updates - {ex.Message}"); + } + } + } + + #endregion + } +} diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/HapPlayer.cs.meta b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/HapPlayer.cs.meta new file mode 100644 index 000000000..f07f95d72 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/HapPlayer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b8ea76979ef31fb42882178890076b16 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal.meta b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal.meta new file mode 100644 index 000000000..f53010d22 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9826f2ed5102c594db39cb240eb1a004 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/Decoder.cs b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/Decoder.cs new file mode 100644 index 000000000..ada891213 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/Decoder.cs @@ -0,0 +1,146 @@ +using System; +using System.Runtime.InteropServices; +using System.Threading; + +namespace Klak.Hap +{ + internal sealed class Decoder : IDisposable + { + #region Initialization/finalization + + public Decoder(StreamReader stream, int width, int height, int videoType) + { + _stream = stream; + + // Plugin initialization + _plugin = KlakHap_CreateDecoder(width, height, videoType); + _id = ++_instantiationCount; + KlakHap_AssignDecoder(_id, _plugin); + + // By default, start from the first frame. + _time = 0; + + // Decoder thread startup + _resume.req = new AutoResetEvent(true); + _resume.ack = new AutoResetEvent(false); + _thread = new Thread(DecoderThread); + _thread.Start(); + } + + public void Dispose() + { + if (_thread != null) + { + _terminate = true; + _resume.req.Set(); + _thread.Join(); + _thread = null; + } + + if (_plugin != IntPtr.Zero) + { + KlakHap_AssignDecoder(_id, IntPtr.Zero); + KlakHap_DestroyDecoder(_plugin); + _plugin = IntPtr.Zero; + } + } + + #endregion + + #region Public members + + public uint CallbackID { get { return _id; } } + + public int BufferSize { get { + return KlakHap_GetDecoderBufferSize(_plugin); + } } + + public void UpdateSync(float time) + { + _time = time; + var buffer = _stream.Advance(_time); + if (buffer != null) + KlakHap_DecodeFrame(_plugin, buffer.PluginPointer); + } + + public void UpdateAsync(float time) + { + _time = time; + _resume.req.Set(); + _resume.ack.WaitOne(); + } + + public IntPtr LockBuffer() + { + return KlakHap_LockDecoderBuffer(_plugin); + } + + public void UnlockBuffer() + { + KlakHap_UnlockDecoderBuffer(_plugin); + } + + #endregion + + #region Private members + + static uint _instantiationCount; + + IntPtr _plugin; + uint _id; + + Thread _thread; + (AutoResetEvent req, AutoResetEvent ack) _resume; + bool _terminate; + + StreamReader _stream; + float _time; + + #endregion + + #region Thread function + + void DecoderThread() + { + while (true) + { + _resume.req.WaitOne(); + _resume.ack.Set(); + + if (_terminate) break; + + var buffer = _stream.Advance(_time); + if (buffer == null) continue; + + KlakHap_DecodeFrame(_plugin, buffer.PluginPointer); + } + } + + #endregion + + #region Native plugin entry points + + [DllImport("KlakHap")] + internal static extern IntPtr KlakHap_CreateDecoder(int width, int height, int typeID); + + [DllImport("KlakHap")] + internal static extern void KlakHap_DestroyDecoder(IntPtr decoder); + + [DllImport("KlakHap")] + internal static extern void KlakHap_AssignDecoder(uint id, IntPtr decoder); + + [DllImport("KlakHap")] + internal static extern void KlakHap_DecodeFrame(IntPtr decoder, IntPtr input); + + [DllImport("KlakHap")] + internal static extern IntPtr KlakHap_LockDecoderBuffer(IntPtr decoder); + + [DllImport("KlakHap")] + internal static extern void KlakHap_UnlockDecoderBuffer(IntPtr decoder); + + [DllImport("KlakHap")] + internal static extern int KlakHap_GetDecoderBufferSize(IntPtr decoder); + + #endregion + } +} diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/Decoder.cs.meta b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/Decoder.cs.meta new file mode 100644 index 000000000..8c323a8ec --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/Decoder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fb63cbce06802f644820b09291d8dfb0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/Demuxer.cs b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/Demuxer.cs new file mode 100644 index 000000000..575917f7b --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/Demuxer.cs @@ -0,0 +1,103 @@ +using System; +using System.Runtime.InteropServices; + +namespace Klak.Hap +{ + internal sealed class Demuxer : IDisposable + { + #region Public properties + + public bool IsValid { get { return _plugin != IntPtr.Zero; } } + public int Width { get { return _width; } } + public int Height { get { return _height; } } + public int VideoType { get { return _videoType; } } + public double Duration { get { return _duration; } } + public int FrameCount { get { return _frameCount; } } + + #endregion + + #region Initialization/finalization + + public Demuxer(string filePath) + { + _plugin = KlakHap_OpenDemuxer(filePath); + + if (KlakHap_DemuxerIsValid(_plugin) == 0) + { + // Instantiation failed; Close and stop. + KlakHap_CloseDemuxer(_plugin); + _plugin = IntPtr.Zero; + return; + } + + // Video properties + _width = KlakHap_GetVideoWidth(_plugin); + _height = KlakHap_GetVideoHeight(_plugin); + _videoType = KlakHap_AnalyzeVideoType(_plugin); + _duration = KlakHap_GetDuration(_plugin); + _frameCount = KlakHap_CountFrames(_plugin); + } + + public void Dispose() + { + if (_plugin != IntPtr.Zero) + { + KlakHap_CloseDemuxer(_plugin); + _plugin = IntPtr.Zero; + } + } + + #endregion + + #region Public methods + + public void ReadFrame(ReadBuffer buffer, int index, float time) + { + KlakHap_ReadFrame(_plugin, index, buffer.PluginPointer); + buffer.Index = index; + buffer.Time = time; + } + + #endregion + + #region Private members + + IntPtr _plugin; + int _width, _height, _videoType; + double _duration; + int _frameCount; + + #endregion + + #region Native plugin entry points + + [DllImport("KlakHap")] + internal static extern IntPtr KlakHap_OpenDemuxer(string filepath); + + [DllImport("KlakHap")] + internal static extern void KlakHap_CloseDemuxer(IntPtr demuxer); + + [DllImport("KlakHap")] + internal static extern int KlakHap_DemuxerIsValid(IntPtr demuxer); + + [DllImport("KlakHap")] + internal static extern int KlakHap_CountFrames(IntPtr demuxer); + + [DllImport("KlakHap")] + internal static extern double KlakHap_GetDuration(IntPtr demuxer); + + [DllImport("KlakHap")] + internal static extern int KlakHap_GetVideoWidth(IntPtr demuxer); + + [DllImport("KlakHap")] + internal static extern int KlakHap_GetVideoHeight(IntPtr demuxer); + + [DllImport("KlakHap")] + internal static extern int KlakHap_AnalyzeVideoType(IntPtr demuxer); + + [DllImport("KlakHap")] + internal static extern void KlakHap_ReadFrame(IntPtr demuxer, int frameNumber, IntPtr buffer); + + #endregion + } +} diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/Demuxer.cs.meta b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/Demuxer.cs.meta new file mode 100644 index 000000000..c16ac2ceb --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/Demuxer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 01e2f3e55fcbb10448e3b4976da8097d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/ReadBuffer.cs b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/ReadBuffer.cs new file mode 100644 index 000000000..3a5b74bfe --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/ReadBuffer.cs @@ -0,0 +1,48 @@ +using System; +using System.Runtime.InteropServices; + +namespace Klak.Hap +{ + internal sealed class ReadBuffer : IDisposable + { + #region Initialization/finalization + + public IntPtr PluginPointer { get { return _plugin; } } + public int Index { get; set; } + public float Time { get; set; } + + #endregion + + #region Initialization/finalization + + public ReadBuffer() + { + _plugin = KlakHap_CreateReadBuffer(); + Index = Int32.MaxValue; + Time = Single.MaxValue; + } + + public void Dispose() + { + KlakHap_DestroyReadBuffer(_plugin); + } + + #endregion + + #region Private members + + IntPtr _plugin; + + #endregion + + #region Native plugin entry points + + [DllImport("KlakHap")] + internal static extern IntPtr KlakHap_CreateReadBuffer(); + + [DllImport("KlakHap")] + internal static extern void KlakHap_DestroyReadBuffer(IntPtr buffer); + + #endregion + } +} diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/ReadBuffer.cs.meta b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/ReadBuffer.cs.meta new file mode 100644 index 000000000..78161f0c7 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/ReadBuffer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4489c695e7711e44bbe985cac12755c0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/StreamReader.cs b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/StreamReader.cs new file mode 100644 index 000000000..ca4fd3751 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/StreamReader.cs @@ -0,0 +1,266 @@ +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using System.Threading; + +namespace Klak.Hap +{ + internal sealed class StreamReader : IDisposable + { + #region Public methods + + public StreamReader(Demuxer demuxer, float time, float delta) + { + _demuxer = demuxer; + + _leadQueue = new Queue(); + _freeBuffers = new List(); + + // Initial buffer entry allocation + _freeBuffers.Add(new ReadBuffer()); + _freeBuffers.Add(new ReadBuffer()); + _freeBuffers.Add(new ReadBuffer()); + _freeBuffers.Add(new ReadBuffer()); + + // Initial playback settings + _restart = (time, SafeDelta(delta)); + + // Reader thread startup + _updateEvent = new AutoResetEvent(true); + _readEvent = new AutoResetEvent(false); + _thread = new Thread(ReaderThread); + _thread.Start(); + } + + public void Dispose() + { + if (_thread != null) + { + _terminate = true; + _updateEvent.Set(); + _thread.Join(); + _thread = null; + } + + if (_updateEvent != null) + { + _updateEvent.Dispose(); + _updateEvent = null; + } + + if (_readEvent != null) + { + _readEvent.Dispose(); + _readEvent = null; + } + + if (_current != null) + { + _current.Dispose(); + _current = null; + } + + if (_leadQueue != null) + { + foreach (var rb in _leadQueue) rb.Dispose(); + _leadQueue.Clear(); + _leadQueue = null; + } + + if (_freeBuffers != null) + { + foreach (var rb in _freeBuffers) rb.Dispose(); + _freeBuffers.Clear(); + _freeBuffers = null; + } + } + + public void Restart(float time, float delta) + { + // Restart request + lock (_restartLock) _restart = (time, SafeDelta(delta)); + + // Wait for reset/read on the reader thread. + _readEvent.Reset(); + while (_restart != null) + { + _updateEvent.Set(); + _readEvent.WaitOne(); + } + } + + public ReadBuffer Advance(float time) + { + // Add an epsilon-ish value to avoid rounding error. + time += 1e-6f; + + var changed = false; + + // There is no slow path in this function, so we prefer holding + // the queue lock for the entire function block rather than + // acquiring/releasing it for each operation. + lock (_queueLock) + { + // Scan the lead queue. + while (_leadQueue.Count > 0) + { + var peek = _leadQueue.Peek(); + + if (_current != null) + { + if (_current.Time <= peek.Time) + { + // Forward playback case: + // Break if it hasn't reached the next frame. + if (time < peek.Time) break; + } + else + { + // Reverse playback case: + // Break if it's still on the current frame. + if (_current.Time < time) break; + } + + // Free the current frame before replacing it. + _freeBuffers.Add(_current); + } + + _current = _leadQueue.Dequeue(); + changed = true; + } + } + + // Poke the reader thread. + _updateEvent.Set(); + + // Only returns a buffer object when the frame was changed. + return changed ? _current : null; + } + + #endregion + + #region Private members + + // Assigned demuxer + Demuxer _demuxer; + + // Thread and synchronization objects + Thread _thread; + AutoResetEvent _updateEvent; + AutoResetEvent _readEvent; + bool _terminate; + + // Read buffer objects + ReadBuffer _current; + Queue _leadQueue; + List _freeBuffers; + readonly object _queueLock = new object(); + + // Restart request + (float, float)? _restart; + readonly object _restartLock = new object(); + + // Used to avoid too small delta time values. + float SafeDelta(float delta) + { + var min = (float)(_demuxer.Duration / _demuxer.FrameCount); + return Math.Max(Math.Abs(delta), min) * (delta < 0 ? -1 : 1); + } + + #endregion + + #region Thread function + + void ReaderThread() + { + // Initial time settings from the restart request tuple + var (time, delta) = _restart.Value; + _restart = null; + + // Stream attributes + var totalTime = _demuxer.Duration; + var totalFrames = _demuxer.FrameCount; + + while (true) + { + // Synchronization with the parent thread + _updateEvent.WaitOne(); + if (_terminate) break; + + // Check if there is a restart request. + lock (_restartLock) if (_restart != null) + { + // Flush out the current contents of the lead queue. + lock (_queueLock) while (_leadQueue.Count > 0) + _freeBuffers.Add(_leadQueue.Dequeue()); + + // Apply the restart request. + (time, delta) = _restart.Value; + _restart = null; + } + + // Time -> Frame count + // Rounding strategy: We don't prefer Math.Round because it can + // show a frame before the playhead reaches it (especially when + // using slow-mo). On the other hand, Math.Floor causes frame + // skipping due to rounding errors. To avoid these problems, + // we use the "adding a very-very small fractional frame" + // approach. 1/1000 might be safe and enough for all the cases. + var frameCount = (int)(time * totalFrames / totalTime + 1e-3f); + + // Frame count -> Frame snapped time + var snappedTime = (float)(frameCount * totalTime / totalFrames); + + // Frame count -> Wrapped frame number + var frameNumber = frameCount % totalFrames; + if (frameNumber < 0) frameNumber += totalFrames; + + lock (_queueLock) + { + // Do nothing if there is no free buffer; It indicates that + // the lead queue is fully filled. + if (_freeBuffers.Count == 0) continue; + + ReadBuffer buffer = null; + + // Look for a free buffer that has the same frame number. + foreach (var temp in _freeBuffers) + { + if (temp.Index == frameNumber) + { + buffer = temp; + break; + } + } + + if (buffer != null) + { + // Reuse the found buffer; Although we can use it + // without reading frame data, the time field should + // be updated to handle wrapping-around hits. + _freeBuffers.Remove(buffer); + buffer.Time = snappedTime; + } + else + { + // Allocate a buffer from the free buffer list. + buffer = _freeBuffers[_freeBuffers.Count - 1]; + _freeBuffers.RemoveAt(_freeBuffers.Count - 1); + + // Frame data read + _demuxer.ReadFrame(buffer, frameNumber, snappedTime); + } + + // Push the buffer to the lead queue. + _leadQueue.Enqueue(buffer); + } + + _readEvent.Set(); + + time += delta; + } + } + + #endregion + } +} diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/StreamReader.cs.meta b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/StreamReader.cs.meta new file mode 100644 index 000000000..bfd898d6f --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/StreamReader.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a5b51807ae8c7e749b98a930666f136b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/TextureUpdater.cs b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/TextureUpdater.cs new file mode 100644 index 000000000..54163f082 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/TextureUpdater.cs @@ -0,0 +1,77 @@ +using System; +using System.Runtime.InteropServices; +using UnityEngine; +using UnityEngine.Rendering; + +namespace Klak.Hap +{ + internal sealed class TextureUpdater : IDisposable + { + #region Public properties + + public static bool AsyncSupport { get { + return SystemInfo.graphicsDeviceType == GraphicsDeviceType.Direct3D11; + } } + + #endregion + + #region Public methods + + public TextureUpdater(Texture2D texture, Decoder decoder) + { + _texture = texture; + _decoder = decoder; + + if (AsyncSupport) + { + _command = new CommandBuffer(); + _command.name = "Klak HAP"; + _command.IssuePluginCustomTextureUpdateV2( + KlakHap_GetTextureUpdateCallback(), + texture, decoder.CallbackID + ); + } + } + + public void Dispose() + { + if (_command != null) + { + _command.Dispose(); + _command = null; + } + } + + public void UpdateNow() + { + _texture.LoadRawTextureData( + _decoder.LockBuffer(), + _decoder.BufferSize + ); + _texture.Apply(); + _decoder.UnlockBuffer(); + } + + public void RequestAsyncUpdate() + { + if (_command != null) Graphics.ExecuteCommandBuffer(_command); + } + + #endregion + + #region Private fields + + Texture2D _texture; + Decoder _decoder; + CommandBuffer _command; + + #endregion + + #region Native plugin entry points + + [DllImport("KlakHap")] + internal static extern IntPtr KlakHap_GetTextureUpdateCallback(); + + #endregion + } +} diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/TextureUpdater.cs.meta b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/TextureUpdater.cs.meta new file mode 100644 index 000000000..e180145a0 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/TextureUpdater.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 430fee5c2bdcf0c4492d6b8d742439f8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/Utility.cs b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/Utility.cs new file mode 100644 index 000000000..90a9491f3 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/Utility.cs @@ -0,0 +1,48 @@ +using UnityEngine; + +namespace Klak.Hap +{ + internal static class Utility + { + public static void Destroy(Object o) + { + if (o == null) return; + if (Application.isPlaying) + Object.Destroy(o); + else + Object.DestroyImmediate(o); + } + + public static CodecType DetermineCodecType(int videoType) + { + switch (videoType & 0xf) + { + case 0xb: return CodecType.Hap; + case 0xe: return CodecType.HapAlpha; + case 0xf: return CodecType.HapQ; + } + return CodecType.Unsupported; + } + + public static TextureFormat DetermineTextureFormat(int videoType) + { + switch (videoType & 0xf) + { + case 0xb: return TextureFormat.DXT1; + case 0xe: return TextureFormat.DXT5; + case 0xf: return TextureFormat.DXT5; + case 0xc: return TextureFormat.BC7; + case 0x1: return TextureFormat.BC4; + } + return TextureFormat.DXT1; + } + + public static Shader DetermineBlitShader(int videoType) + { + if ((videoType & 0xf) == 0xf) + return Shader.Find("Klak/HAP Q"); + else + return Shader.Find("Klak/HAP"); + } + } +} diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/Utility.cs.meta b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/Utility.cs.meta new file mode 100644 index 000000000..4bb645004 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Internal/Utility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f6abcc4e09417604ca245a0c5a5a1f0c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Klak.Hap.asmdef b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Klak.Hap.asmdef new file mode 100644 index 000000000..e6b36b4da --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Klak.Hap.asmdef @@ -0,0 +1,21 @@ +{ + "name": "Klak.Hap", + "references": [ + "GUID:f06555f75b070af458a003d92f9efb00" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [ + { + "name": "com.unity.timeline", + "expression": "1.0.0", + "define": "KLAKHAP_HAS_TIMELINE" + } + ], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Klak.Hap.asmdef.meta b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Klak.Hap.asmdef.meta new file mode 100644 index 000000000..d1f21cf0e --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/Runtime/Klak.Hap.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d30a992d73d108f4eaaafff3ed9490e3 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/package.json b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/package.json new file mode 100644 index 000000000..8de3014b1 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/package.json @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0dda45a68fc632cfb5dcaab2c2ece70c8c7d1c8c7c05bb43f9838f5a9dc79dac +size 401 diff --git a/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/package.json.meta b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/package.json.meta new file mode 100644 index 000000000..984214dfb --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.hap@9a47acf6295e/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 52bab5075038b8c46ac3f7bb51b068b2 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout.meta b/Assets/External/Hap Player/jp.keijiro.klak.spout.meta new file mode 100644 index 000000000..e62c985fa --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 49e2cc8b12f20664080fc8178c8a8098 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor.meta b/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor.meta new file mode 100644 index 000000000..27c398ba9 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b8d6350aa7a54634d93678cf9e338599 +folderAsset: yes +timeCreated: 1492007252 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/Klak.Spout.Editor.asmdef b/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/Klak.Spout.Editor.asmdef new file mode 100644 index 000000000..be54742fe --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/Klak.Spout.Editor.asmdef @@ -0,0 +1,17 @@ +{ + "name": "Klak.Spout.Editor", + "references": [ + "Klak.Spout.Runtime" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/Klak.Spout.Editor.asmdef.meta b/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/Klak.Spout.Editor.asmdef.meta new file mode 100644 index 000000000..883b1e22e --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/Klak.Spout.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 21435214e6169c649985b5540a63188a +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/MaterialPropertySelector.cs b/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/MaterialPropertySelector.cs new file mode 100644 index 000000000..9fc741552 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/MaterialPropertySelector.cs @@ -0,0 +1,85 @@ +using UnityEngine; +using UnityEditor; +using System.Linq; + +namespace Klak.Spout.Editor { + +static class MaterialPropertySelector +{ + #region Public method + + // Material property dropdown list + public static void DropdownList + (SerializedProperty rendererProperty, + SerializedProperty materialProperty) + { + var shader = GetShaderFromRenderer(rendererProperty); + + // Abandon the current value if there is no shader assignment. + if (shader == null) + { + materialProperty.stringValue = ""; + return; + } + + var names = CachePropertyNames(shader); + + // Abandon the current value if there is no option. + if (names.Length == 0) + { + materialProperty.stringValue = ""; + return; + } + + // Dropdown GUI + var index = System.Array.IndexOf(names, materialProperty.stringValue); + var newIndex = EditorGUILayout.Popup("Property", index, names); + if (index != newIndex) materialProperty.stringValue = names[newIndex]; + } + + #endregion + + #region Utility function + + // Shader retrieval function + static Shader GetShaderFromRenderer(SerializedProperty property) + { + var renderer = property.objectReferenceValue as Renderer; + if (renderer == null) return null; + + var material = renderer.sharedMaterial; + if (material == null) return null; + + return material.shader; + } + + #endregion + + #region Property name cache + + static Shader _cachedShader; + static string[] _cachedPropertyNames; + + static bool IsPropertyTexture(Shader shader, int index) + => ShaderUtil.GetPropertyType(shader, index) == + ShaderUtil.ShaderPropertyType.TexEnv; + + static string[] CachePropertyNames(Shader shader) + { + if (shader == _cachedShader) return _cachedPropertyNames; + + var names = + Enumerable.Range(0, ShaderUtil.GetPropertyCount(shader)) + .Where(i => IsPropertyTexture(shader, i)) + .Select(i => ShaderUtil.GetPropertyName(shader, i)); + + _cachedShader = shader; + _cachedPropertyNames = names.ToArray(); + + return _cachedPropertyNames; + } + + #endregion +} + +} // namespace Klak.Spout.Editor diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/MaterialPropertySelector.cs.meta b/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/MaterialPropertySelector.cs.meta new file mode 100644 index 000000000..1ad4d39c9 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/MaterialPropertySelector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 26d68abfa1fecd14a800e4473714aef8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/SpoutReceiverEditor.cs b/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/SpoutReceiverEditor.cs new file mode 100644 index 000000000..3a9aa23e7 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/SpoutReceiverEditor.cs @@ -0,0 +1,115 @@ +using UnityEngine; +using UnityEditor; + +namespace Klak.Spout.Editor { + +[CanEditMultipleObjects] +[CustomEditor(typeof(SpoutReceiver))] +sealed class SpoutReceiverEditor : UnityEditor.Editor +{ + SerializedProperty _sourceName; + SerializedProperty _targetTexture; + SerializedProperty _targetRenderer; + SerializedProperty _targetMaterialProperty; + + static class Labels + { + public static Label Property = "Property"; + public static Label Select = "Select"; + } + + // Create and show the source name dropdown. + void ShowSourceNameDropdown(Rect rect) + { + var menu = new GenericMenu(); + var sources = SpoutManager.GetSourceNames(); + + if (sources.Length > 0) + { + foreach (var name in sources) + menu.AddItem(new GUIContent(name), false, OnSelectSource, name); + } + else + { + menu.AddItem(new GUIContent("No source available"), false, null); + } + + menu.DropDown(rect); + } + + // Source name selection callback + void OnSelectSource(object nameObject) + { + var name = (string)nameObject; + serializedObject.Update(); + _sourceName.stringValue = name; + serializedObject.ApplyModifiedProperties(); + RequestRestart(); + } + + // Receiver restart request + void RequestRestart() + { + // Dirty trick: We only can restart receivers by modifying the + // sourceName property, so we modify it by an invalid name, then + // revert it. + foreach (SpoutReceiver recv in targets) + { + recv.sourceName = ""; + recv.sourceName = _sourceName.stringValue; + } + } + + void OnEnable() + { + var finder = new PropertyFinder(serializedObject); + _sourceName = finder["_sourceName"]; + _targetTexture = finder["_targetTexture"]; + _targetRenderer = finder["_targetRenderer"]; + _targetMaterialProperty = finder["_targetMaterialProperty"]; + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + EditorGUILayout.BeginHorizontal(); + + // Source name text field + EditorGUI.BeginChangeCheck(); + EditorGUILayout.DelayedTextField(_sourceName); + var restart = EditorGUI.EndChangeCheck(); + + // Source name dropdown + var rect = EditorGUILayout.GetControlRect(false, GUILayout.Width(60)); + if (EditorGUI.DropdownButton(rect, Labels.Select, FocusType.Keyboard)) + ShowSourceNameDropdown(rect); + + EditorGUILayout.EndHorizontal(); + + // Target texture/renderer + EditorGUILayout.PropertyField(_targetTexture); + EditorGUILayout.PropertyField(_targetRenderer); + + EditorGUI.indentLevel++; + + if (_targetRenderer.hasMultipleDifferentValues) + { + // Multiple renderers selected: Show a simple text field. + EditorGUILayout.PropertyField(_targetMaterialProperty, Labels.Property); + } + else if (_targetRenderer.objectReferenceValue != null) + { + // Single renderer: Show the material property selection dropdown. + MaterialPropertySelector.DropdownList(_targetRenderer, _targetMaterialProperty); + } + + EditorGUI.indentLevel--; + + serializedObject.ApplyModifiedProperties(); + + if (restart) RequestRestart(); + } +} + +} // namespace Klak.Spout.Editor diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/SpoutReceiverEditor.cs.meta b/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/SpoutReceiverEditor.cs.meta new file mode 100644 index 000000000..f7ae8d256 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/SpoutReceiverEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e66c46a000456b34e95a2661f5d5391b +timeCreated: 1492008499 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/SpoutResources.asset b/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/SpoutResources.asset new file mode 100644 index 000000000..fcfcd1251 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/SpoutResources.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 12527eb854f97c84cac3b04dc699db09, type: 3} + m_Name: SpoutResources + m_EditorClassIdentifier: + blitShader: {fileID: 4800000, guid: eb56c59e60b76874692c486f3bdd860d, type: 3} diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/SpoutResources.asset.meta b/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/SpoutResources.asset.meta new file mode 100644 index 000000000..6093c4fc5 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/SpoutResources.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f449ebbe2051c2e4d993eaa773a410de +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/SpoutSenderEditor.cs b/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/SpoutSenderEditor.cs new file mode 100644 index 000000000..a7a7520e1 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/SpoutSenderEditor.cs @@ -0,0 +1,73 @@ +using UnityEngine; +using UnityEditor; + +namespace Klak.Spout.Editor { + +[CanEditMultipleObjects] +[CustomEditor(typeof(SpoutSender))] +sealed class SpoutSenderEditor : UnityEditor.Editor +{ + SerializedProperty _spoutName; + SerializedProperty _keepAlpha; + SerializedProperty _captureMethod; + SerializedProperty _sourceCamera; + SerializedProperty _sourceTexture; + + static class Labels + { + public static Label SpoutName = "Spout Name"; + } + + // Sender restart request + void RequestRestart() + { + // Dirty trick: We only can restart senders by modifying the + // spoutName property, so we modify it by an invalid name, then + // revert it. + foreach (SpoutSender send in targets) + { + send.spoutName = ""; + send.spoutName = _spoutName.stringValue; + } + } + + void OnEnable() + { + var finder = new PropertyFinder(serializedObject); + _spoutName = finder["_spoutName"]; + _keepAlpha = finder["_keepAlpha"]; + _captureMethod = finder["_captureMethod"]; + _sourceCamera = finder["_sourceCamera"]; + _sourceTexture = finder["_sourceTexture"]; + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + EditorGUI.BeginChangeCheck(); + EditorGUILayout.DelayedTextField(_spoutName, Labels.SpoutName); + var restart = EditorGUI.EndChangeCheck(); + + EditorGUILayout.PropertyField(_keepAlpha); + EditorGUILayout.PropertyField(_captureMethod); + + EditorGUI.indentLevel++; + + if (_captureMethod.hasMultipleDifferentValues || + _captureMethod.enumValueIndex == (int)CaptureMethod.Camera) + EditorGUILayout.PropertyField(_sourceCamera); + + if (_captureMethod.hasMultipleDifferentValues || + _captureMethod.enumValueIndex == (int)CaptureMethod.Texture) + EditorGUILayout.PropertyField(_sourceTexture); + + EditorGUI.indentLevel--; + + serializedObject.ApplyModifiedProperties(); + + if (restart) RequestRestart(); + } +} + +} // namespace Klak.Spout.Editor diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/SpoutSenderEditor.cs.meta b/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/SpoutSenderEditor.cs.meta new file mode 100644 index 000000000..3aa12108e --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/SpoutSenderEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b452d1bad3a57344d9b54f2cea6f252c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/Utility.cs b/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/Utility.cs new file mode 100644 index 000000000..a5f8f2a45 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/Utility.cs @@ -0,0 +1,30 @@ +using UnityEngine; +using UnityEditor; + +namespace Klak.Spout.Editor { + +// Simple string label with GUIContent +struct Label +{ + GUIContent _guiContent; + + public static implicit operator GUIContent(Label label) + => label._guiContent; + + public static implicit operator Label(string text) + => new Label { _guiContent = new GUIContent(text) }; +} + +// Utilities for finding serialized properties +struct PropertyFinder +{ + SerializedObject _so; + + public PropertyFinder(SerializedObject so) + => _so = so; + + public SerializedProperty this[string name] + => _so.FindProperty(name); +} + +} // namespace Klak.Spout.Editor diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/Utility.cs.meta b/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/Utility.cs.meta new file mode 100644 index 000000000..c63f0d44f --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Editor/Utility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b0cafe26b1cd89b4ca76bb015cfd16d4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/LICENSE b/Assets/External/Hap Player/jp.keijiro.klak.spout/LICENSE new file mode 100644 index 000000000..68a49daad --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/LICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/LICENSE.meta b/Assets/External/Hap Player/jp.keijiro.klak.spout/LICENSE.meta new file mode 100644 index 000000000..d4481d1a6 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/LICENSE.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b6f63dbd21960c44aaa8fe4a6d55ad3e +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Plugin.meta b/Assets/External/Hap Player/jp.keijiro.klak.spout/Plugin.meta new file mode 100644 index 000000000..cfcde0f6d --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Plugin.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 52a684d8086688f419f6ae65f667fdd3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Plugin/KlakSpout.dll b/Assets/External/Hap Player/jp.keijiro.klak.spout/Plugin/KlakSpout.dll new file mode 100644 index 000000000..8f309573a --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Plugin/KlakSpout.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eaeeae323556e3003d17ac831ee0591339fddf6a8adc947f6bc48062c7eb2368 +size 966656 diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Plugin/KlakSpout.dll.meta b/Assets/External/Hap Player/jp.keijiro.klak.spout/Plugin/KlakSpout.dll.meta new file mode 100644 index 000000000..df7d935a2 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Plugin/KlakSpout.dll.meta @@ -0,0 +1,63 @@ +fileFormatVersion: 2 +guid: dc935766d7c9fd44181cb4b58ef3627e +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Editor: 0 + Exclude Linux64: 0 + Exclude OSXUniversal: 0 + Exclude Win: 1 + Exclude Win64: 0 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: x86_64 + DefaultValueInitialized: true + OS: Windows + - first: + Standalone: Linux64 + second: + enabled: 1 + settings: + CPU: None + - first: + Standalone: OSXUniversal + second: + enabled: 1 + settings: + CPU: None + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win64 + second: + enabled: 1 + settings: + CPU: x86_64 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/README.md b/Assets/External/Hap Player/jp.keijiro.klak.spout/README.md new file mode 100644 index 000000000..57e71c23e --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/README.md @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd4e93a7983e1fe77e5f749a1dfcb34535ddacbf19111f96ea22094a96c9c46e +size 3790 diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/README.md.meta b/Assets/External/Hap Player/jp.keijiro.klak.spout/README.md.meta new file mode 100644 index 000000000..5dc8675ca --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bfad8b30f2b4f23449e5fa78280668ec +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime.meta b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime.meta new file mode 100644 index 000000000..6a8a92431 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2644ca45e639e424183c45d850424f0d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal.meta b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal.meta new file mode 100644 index 000000000..73fcda7fd --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 82c81c4751c9a7145a4d491944d132ab +folderAsset: yes +timeCreated: 1491924284 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Blit.shader b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Blit.shader new file mode 100644 index 000000000..fa2789c99 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Blit.shader @@ -0,0 +1,99 @@ +Shader "Hidden/Klak/Spout/Blit" +{ + Properties + { + _MainTex("", 2D) = "white" {} + } + + CGINCLUDE + + #include "UnityCG.cginc" + + sampler2D _MainTex; + + // Note: The effect of the v-flip option is reversed here. + // We have to do v-flip actually on no-v-flip passes. + + void Vertex(float4 position : POSITION, + float2 texCoord : TEXCOORD0, + out float4 outPosition : SV_Position, + out float2 outTexCoord : TEXCOORD0) + { + outPosition = UnityObjectToClipPos(position); + outTexCoord = float2(texCoord.x, 1 - texCoord.y); + } + + void VertexVFlip(float4 position : POSITION, + float2 texCoord : TEXCOORD0, + out float4 outPosition : SV_Position, + out float2 outTexCoord : TEXCOORD0) + { + outPosition = UnityObjectToClipPos(position); + outTexCoord = texCoord; + } + + float4 BlitSimple(float4 position : SV_Position, + float2 texCoord : TEXCOORD0) : SV_Target + { + return tex2D(_MainTex, texCoord); + } + + float4 BlitClearAlpha(float4 position : SV_Position, + float2 texCoord : TEXCOORD0) : SV_Target + { + return float4(tex2D(_MainTex, texCoord).rgb, 1); + } + + float4 BlitFromSrgb(float4 position : SV_Position, + float2 texCoord : TEXCOORD0) : SV_Target + { + float4 c = tex2D(_MainTex, texCoord); + #ifndef UNITY_COLORSPACE_GAMMA + c.rgb = GammaToLinearSpace(c.rgb); + #endif + return c; + } + + ENDCG + + SubShader + { + Cull Off ZWrite Off ZTest Always + Pass + { + CGPROGRAM + #pragma vertex Vertex + #pragma fragment BlitSimple + ENDCG + } + Pass + { + CGPROGRAM + #pragma vertex Vertex + #pragma fragment BlitClearAlpha + ENDCG + } + Pass + { + CGPROGRAM + #pragma vertex VertexVFlip + #pragma fragment BlitSimple + ENDCG + } + Pass + { + CGPROGRAM + #pragma vertex VertexVFlip + #pragma fragment BlitClearAlpha + ENDCG + } + Pass + { + CGPROGRAM + #pragma vertex Vertex + #pragma fragment BlitFromSrgb + #pragma multi_compile _ UNITY_COLORSPACE_GAMMA + ENDCG + } + } +} diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Blit.shader.meta b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Blit.shader.meta new file mode 100644 index 000000000..2a7d5081b --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Blit.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: eb56c59e60b76874692c486f3bdd860d +timeCreated: 1491925542 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Event.cs b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Event.cs new file mode 100644 index 000000000..0a8bc8eec --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Event.cs @@ -0,0 +1,65 @@ +using UnityEngine; +using UnityEngine.Rendering; +using System.Runtime.InteropServices; +using System; + +namespace Klak.Spout { + +// Render event IDs +// Should match with KlakSpout::EventID (Event.h) +enum EventID +{ + UpdateSender, + UpdateReceiver, + CloseSender, + CloseReceiver +} + +// Render event attachment data structure +// Should match with KlakSpout::EventData (Event.h) +[StructLayout(LayoutKind.Sequential)] +struct EventData +{ + public IntPtr instancePointer; + public IntPtr texturePointer; + + public EventData(IntPtr instance, IntPtr texture) + { + instancePointer = instance; + texturePointer = texture; + } + + public EventData(IntPtr instance) + { + instancePointer = instance; + texturePointer = IntPtr.Zero; + } +} + +class EventKicker : IDisposable +{ + public EventKicker(EventData data) + => _dataMem = GCHandle.Alloc(data, GCHandleType.Pinned); + + public void Dispose() + => MemoryPool.FreeOnEndOfFrame(_dataMem); + + public void IssuePluginEvent(EventID eventID) + { + if (_cmdBuffer == null) + _cmdBuffer = new CommandBuffer(); + else + _cmdBuffer.Clear(); + + _cmdBuffer.IssuePluginEventAndData + (Plugin.GetRenderEventCallback(), + (int)eventID, _dataMem.AddrOfPinnedObject()); + + Graphics.ExecuteCommandBuffer(_cmdBuffer); + } + + static CommandBuffer _cmdBuffer; + GCHandle _dataMem; +} + +} // namespace Klak.Spout diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Event.cs.meta b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Event.cs.meta new file mode 100644 index 000000000..dd49f85f6 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Event.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 711afc65662fee5429d958cdc98ea404 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/MemoryPool.cs b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/MemoryPool.cs new file mode 100644 index 000000000..e2ffe99b5 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/MemoryPool.cs @@ -0,0 +1,70 @@ +using UnityEngine.LowLevel; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; + +namespace Klak.Spout { + +// +// "Memory pool" class without actual memory pool functionality +// At the moment, it only provides the delayed destruction method. +// +static class MemoryPool +{ + #region Public method + + public static void FreeOnEndOfFrame(GCHandle gch) + => _toBeFreed.Push(gch); + + #endregion + + #region Delayed destruction + + static Stack _toBeFreed = new Stack(); + + static void OnEndOfFrame() + { + while (_toBeFreed.Count > 0) _toBeFreed.Pop().Free(); + } + + #endregion + + #region PlayerLoopSystem implementation + + static MemoryPool() + { + InsertPlayerLoopSystem(); + + #if UNITY_EDITOR + // We use not only PlayerLoopSystem but also the + // EditorApplication.update callback because the PlayerLoop events are + // not invoked in the edit mode. + UnityEditor.EditorApplication.update += OnEndOfFrame; + #endif + } + + static void InsertPlayerLoopSystem() + { + var customSystem = new PlayerLoopSystem() + { type = typeof(MemoryPool), updateDelegate = OnEndOfFrame }; + + var playerLoop = PlayerLoop.GetCurrentPlayerLoop(); + + for (var i = 0; i < playerLoop.subSystemList.Length; i++) + { + ref var phase = ref playerLoop.subSystemList[i]; + if (phase.type == typeof(UnityEngine.PlayerLoop.PostLateUpdate)) + { + phase.subSystemList = phase.subSystemList + .Concat(new [] { customSystem }).ToArray(); + break; + } + } + + PlayerLoop.SetPlayerLoop(playerLoop); + } + + #endregion +} + +} // namespace Klak.Spout diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/MemoryPool.cs.meta b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/MemoryPool.cs.meta new file mode 100644 index 000000000..f52e3330f --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/MemoryPool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3d6cd0890fa1bb44c9cc572948deacd4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Plugin.cs b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Plugin.cs new file mode 100644 index 000000000..5fc382d3b --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Plugin.cs @@ -0,0 +1,61 @@ +using System.Runtime.InteropServices; +using IntPtr = System.IntPtr; + +namespace Klak.Spout { + +static class Plugin +{ + // Receiver interop data structure + // Should match with KlakSpout::Receiver::InteropData (Receiver.h) + [StructLayout(LayoutKind.Sequential)] + public struct ReceiverData + { + public uint width, height; + public IntPtr texturePointer; + } + +#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN + + [DllImport("KlakSpout")] + public static extern IntPtr GetRenderEventCallback(); + + [DllImport("KlakSpout")] + public static extern IntPtr CreateSender(string name, int width, int height); + + [DllImport("KlakSpout")] + public static extern IntPtr CreateReceiver(string name); + + [DllImport("KlakSpout")] + public static extern ReceiverData GetReceiverData(IntPtr receiver); + + [DllImport("KlakSpout")] + public static extern void GetSenderNames + ([Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] + out IntPtr[] names, out int count); + +#else + + public static IntPtr GetRenderEventCallback() + => IntPtr.Zero; + + public static IntPtr CreateSender(string name, int width, int height) + => IntPtr.Zero; + + public static IntPtr CreateReceiver(string name) + => IntPtr.Zero; + + public static ReceiverData GetReceiverData(IntPtr receiver) + => new ReceiverData(); + + public static void GetSenderNames + ([Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] + out IntPtr[] names, out int count) + { + names = null; + count = 0; + } + +#endif +} + +} // namespace Klak.Spout diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Plugin.cs.meta b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Plugin.cs.meta new file mode 100644 index 000000000..5d6f518f1 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Plugin.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a6bde715fc227c74abc7562678c323de +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Receiver.cs b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Receiver.cs new file mode 100644 index 000000000..069161a77 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Receiver.cs @@ -0,0 +1,99 @@ +using UnityEngine; +using System.Runtime.InteropServices; +using IntPtr = System.IntPtr; + +namespace Klak.Spout { + +// +// Wrapper class for receiver instances on the native plugin side +// +sealed class Receiver : System.IDisposable +{ + #region Public property + + public Texture2D Texture => _texture; + + #endregion + + #region Private objects + + IntPtr _plugin; + EventKicker _event; + Texture2D _texture; + + #endregion + + #region Object lifecycle + + public Receiver(string sourceName) + { + if (string.IsNullOrEmpty(sourceName)) return; + + // Plugin object allocation + _plugin = Plugin.CreateReceiver(sourceName); + if (_plugin == IntPtr.Zero) return; + + // Event kicker (heap block for interop communication) + _event = new EventKicker(new EventData(_plugin)); + + // Initial update event + _event.IssuePluginEvent(EventID.UpdateReceiver); + } + + public void Dispose() + { + if (_plugin != IntPtr.Zero) + { + // Isssue the closer event to destroy the plugin object from the + // render thread. + _event.IssuePluginEvent(EventID.CloseReceiver); + + // Event kicker (interop memory) deallocation: + // The close event above will refer to the block from the render + // thread, so we actually can't free the memory here. To avoid this + // problem, EventKicker uses MemoryPool to delay the memory + // deallocation by the end of the frame. + _event.Dispose(); + + _plugin = IntPtr.Zero; + } + + Utility.Destroy(_texture); + _texture = null; + } + + #endregion + + #region Frame update method + + public void Update() + { + if (_plugin == IntPtr.Zero) return; + + var data = Plugin.GetReceiverData(_plugin); + + // Texture refresh: + // If we are referring to an old texture pointer, destroy it first. + if (_texture != null && + _texture.GetNativeTexturePtr() != data.texturePointer) + { + Utility.Destroy(_texture); + _texture = null; + } + + // Lazy initialization: + // We try creating a receiver texture every frame until getting a + // correct one. + if (_texture == null && data.texturePointer != IntPtr.Zero) + _texture = Texture2D.CreateExternalTexture + ((int)data.width, (int)data.height, TextureFormat.BGRA32, + false, true, data.texturePointer); + + // Update event for the render thread + _event.IssuePluginEvent(EventID.UpdateReceiver); + } + + #endregion +} + +} // namespace Klak.Spout diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Receiver.cs.meta b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Receiver.cs.meta new file mode 100644 index 000000000..09cb039aa --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Receiver.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8219c164418947e43be8c668062162cc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Sender.cs b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Sender.cs new file mode 100644 index 000000000..bf95cf513 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Sender.cs @@ -0,0 +1,64 @@ +using UnityEngine; +using System.Runtime.InteropServices; +using IntPtr = System.IntPtr; + +namespace Klak.Spout { + +// +// Wrapper class for sender instances on the native plugin side +// +sealed class Sender : System.IDisposable +{ + #region Private objects + + IntPtr _plugin; + EventKicker _event; + + #endregion + + #region Object lifecycle + + public Sender(string target, Texture texture) + { + // Plugin object allocation + _plugin = Plugin.CreateSender(target, texture.width, texture.height); + if (_plugin == IntPtr.Zero) return; + + // Event kicker (heap block for interop communication) + _event = new EventKicker + (new EventData(_plugin, texture.GetNativeTexturePtr())); + + // Initial update event + _event.IssuePluginEvent(EventID.UpdateSender); + } + + public void Dispose() + { + if (_plugin != IntPtr.Zero) + { + // Isssue the closer event to destroy the plugin object from the + // render thread. + _event.IssuePluginEvent(EventID.CloseSender); + + // Event kicker (interop memory) deallocation: + // The close event above will refer to the block from the render + // thread, so we actually can't free the memory here. To avoid this + // problem, EventKicker uses MemoryPool to delay the memory + // deallocation by the end of the frame. + _event.Dispose(); + + _plugin = IntPtr.Zero; + } + } + + #endregion + + #region Frame update method + + public void Update() + => _event?.IssuePluginEvent(EventID.UpdateSender); + + #endregion +} + +} // namespace Klak.Spout diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Sender.cs.meta b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Sender.cs.meta new file mode 100644 index 000000000..4039a98a8 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Sender.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ab35b32382688a747a0fa6b0b1d2b6e6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Utility.cs b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Utility.cs new file mode 100644 index 000000000..c86a08fcd --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Utility.cs @@ -0,0 +1,65 @@ +using UnityEngine; +using UnityEngine.Rendering; +using RTID = UnityEngine.Rendering.RenderTargetIdentifier; + +namespace Klak.Spout { + +static class RendererOverride +{ + static MaterialPropertyBlock _block; + + public static void SetTexture + (Renderer renderer, string property, Texture texture) + { + if (_block == null) _block = new MaterialPropertyBlock(); + renderer.GetPropertyBlock(_block); + _block.SetTexture(property, texture); + renderer.SetPropertyBlock(_block); + } +} + +static class Blitter +{ + public static void Blit + (SpoutResources resrc, Texture src, RenderTexture dst, bool alpha) + => Graphics.Blit(src, dst, GetMaterial(resrc), alpha ? 0 : 1); + + public static void BlitVFlip + (SpoutResources resrc, Texture src, RenderTexture dst, bool alpha) + => Graphics.Blit(src, dst, GetMaterial(resrc), alpha ? 2 : 3); + + public static void Blit + (SpoutResources resrc, CommandBuffer cb, RTID src, RTID dst, bool alpha) + => cb.Blit(src, dst, GetMaterial(resrc), alpha ? 0 : 1); + + public static void BlitFromSrgb + (SpoutResources resrc, Texture src, RenderTexture dst) + => Graphics.Blit(src, dst, GetMaterial(resrc), 4); + + static Material _material; + + static Material GetMaterial(SpoutResources resrc) + { + if (_material == null) + { + _material = new Material(resrc.blitShader); + _material.hideFlags = HideFlags.DontSave; + } + return _material; + } +} + +static class Utility +{ + public static void Destroy(Object obj) + { + if (obj == null) return; + + if (Application.isPlaying) + Object.Destroy(obj); + else + Object.DestroyImmediate(obj); + } +} + +} // namespace Klak.Spout diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Utility.cs.meta b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Utility.cs.meta new file mode 100644 index 000000000..dd294da7d --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Internal/Utility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2cceadc7283581c4aa2eafb2fb43d58a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Klak.Spout.Runtime.asmdef b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Klak.Spout.Runtime.asmdef new file mode 100644 index 000000000..3c0fbe007 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Klak.Spout.Runtime.asmdef @@ -0,0 +1,22 @@ +{ + "name": "Klak.Spout.Runtime", + "rootNamespace": "", + "references": [ + "GUID:df380645f10b7bc4b97d4f5eb6303d95" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [ + { + "name": "com.unity.render-pipelines.core", + "expression": "0.0.0", + "define": "KLAK_SPOUT_HAS_SRP" + } + ], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Klak.Spout.Runtime.asmdef.meta b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Klak.Spout.Runtime.asmdef.meta new file mode 100644 index 000000000..969e4dc97 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/Klak.Spout.Runtime.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7cdfac5ef1f961d4ebfe51361a2020bd +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutManager.cs b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutManager.cs new file mode 100644 index 000000000..b7f979b94 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutManager.cs @@ -0,0 +1,33 @@ +using System.Runtime.InteropServices; +using IntPtr = System.IntPtr; + +namespace Klak.Spout { + +public static class SpoutManager +{ + // + // GetSourceNames - Enumerates names of all available Spout sources + // + // This method invokes GC memory allocations every time, so it's + // recommended to cache the results for frequent use. + // + public static string[] GetSourceNames() + { + // Retrieve an array of string pointers from the plugin. + IntPtr[] pointers; + int count; + Plugin.GetSenderNames(out pointers, out count); + + // Convert them into managed strings. + var names = new string[count]; + for (var i = 0; i < count; i++) + { + names[i] = Marshal.PtrToStringAnsi(pointers[i]); + Marshal.FreeCoTaskMem(pointers[i]); + } + + return names; + } +} + +} // namespace Klak.Spout diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutManager.cs.meta b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutManager.cs.meta new file mode 100644 index 000000000..7035b2209 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fad61147ab755e74aaa5b14138432a5a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutReceiver.cs b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutReceiver.cs new file mode 100644 index 000000000..8e08fd8c9 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutReceiver.cs @@ -0,0 +1,101 @@ +using UnityEngine; + +namespace Klak.Spout { + +// +// Spout receiver class (main implementation) +// +[ExecuteInEditMode] +[AddComponentMenu("Klak/Spout/Spout Receiver")] +public sealed partial class SpoutReceiver : MonoBehaviour +{ + #region Receiver plugin object + + Receiver _receiver; + + void ReleaseReceiver() + { + _receiver?.Dispose(); + _receiver = null; + } + + #endregion + + #region Buffer texture object + + RenderTexture _buffer; + + RenderTexture PrepareBuffer() + { + // Receive-to-Texture mode: + // Destroy the internal buffer and return the target texture. + if (_targetTexture != null) + { + if (_buffer != null) + { + Utility.Destroy(_buffer); + _buffer = null; + } + return _targetTexture; + } + + var src = _receiver.Texture; + + // If the buffer exists but has wrong dimensions, destroy it first. + if (_buffer != null && + (_buffer.width != src.width || _buffer.height != src.height)) + { + Utility.Destroy(_buffer); + _buffer = null; + } + + // Create a buffer if it hasn't been allocated yet. + if (_buffer == null) + { + _buffer = new RenderTexture(src.width, src.height, 0); + _buffer.hideFlags = HideFlags.DontSave; + _buffer.Create(); + } + + return _buffer; + } + + #endregion + + #region MonoBehaviour implementation + + void OnDisable() + => ReleaseReceiver(); + + void OnDestroy() + { + Utility.Destroy(_buffer); + _buffer = null; + } + + void Update() + { + // Receiver lazy initialization + if (_receiver == null) + _receiver = new Receiver(_sourceName); + + // Receiver plugin-side update + _receiver.Update(); + + // Do nothing further if no texture is ready yet. + if (_receiver.Texture == null) return; + + // Received texture buffering + var buffer = PrepareBuffer(); + Blitter.BlitFromSrgb(_resources, _receiver.Texture, buffer); + + // Renderer override + if (_targetRenderer != null) + RendererOverride.SetTexture + (_targetRenderer, _targetMaterialProperty, buffer); + } + + #endregion +} + +} // namespace Klak.Spout diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutReceiver.cs.meta b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutReceiver.cs.meta new file mode 100644 index 000000000..47c564084 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutReceiver.cs.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 62f7dec0b00674947bc631624c21970a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - _targetTexture: {instanceID: 0} + - _targetRenderer: {instanceID: 0} + - _resources: {fileID: 11400000, guid: f449ebbe2051c2e4d993eaa773a410de, type: 2} + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutReceiver_Properties.cs b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutReceiver_Properties.cs new file mode 100644 index 000000000..fc3dcc1f1 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutReceiver_Properties.cs @@ -0,0 +1,67 @@ +using UnityEngine; + +namespace Klak.Spout { + +// +// Spout receiver class (properties) +// +partial class SpoutReceiver +{ + #region Spout source + + [SerializeField] string _sourceName = null; + + public string sourceName + { get => _sourceName; + set => ChangeSourceName(value); } + + void ChangeSourceName(string name) + { + // Receiver refresh on source changes + if (_sourceName == name) return; + _sourceName = name; + ReleaseReceiver(); + } + + #endregion + + #region Destination settings + + [SerializeField] RenderTexture _targetTexture = null; + + public RenderTexture targetTexture + { get => _targetTexture; + set => _targetTexture = value; } + + [SerializeField] Renderer _targetRenderer = null; + + public Renderer targetRenderer + { get => _targetRenderer; + set => _targetRenderer = value; } + + [SerializeField] string _targetMaterialProperty = null; + + public string targetMaterialProperty + { get => _targetMaterialProperty; + set => _targetMaterialProperty = value; } + + #endregion + + #region Runtime property + + public RenderTexture receivedTexture + => _buffer != null ? _buffer : _targetTexture; + + #endregion + + #region Resource asset reference + + [SerializeField, HideInInspector] SpoutResources _resources = null; + + public void SetResources(SpoutResources resources) + => _resources = resources; + + #endregion +} + +} // namespace Klak.Spout diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutReceiver_Properties.cs.meta b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutReceiver_Properties.cs.meta new file mode 100644 index 000000000..851fddc83 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutReceiver_Properties.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 127d037496fc9b34da364f6785a8b896 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutResources.cs b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutResources.cs new file mode 100644 index 000000000..cec209721 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutResources.cs @@ -0,0 +1,17 @@ +using UnityEngine; + +namespace Klak.Spout { + +// +// Spout "Resources" class +// This is used to provide a reference to the shader asset. +// + +//[CreateAssetMenu(fileName = "SpoutResources", +// menuName = "ScriptableObjects/Klak/Spout/Spout Resources")] +public sealed class SpoutResources : ScriptableObject +{ + public Shader blitShader; +} + +} // namespace Klak.Spout diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutResources.cs.meta b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutResources.cs.meta new file mode 100644 index 000000000..c8ef7d17c --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutResources.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 12527eb854f97c84cac3b04dc699db09 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - blitShader: {fileID: 4800000, guid: eb56c59e60b76874692c486f3bdd860d, type: 3} + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutSender.cs b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutSender.cs new file mode 100644 index 000000000..8f4cf14cb --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutSender.cs @@ -0,0 +1,133 @@ +using UnityEngine; +using UnityEngine.Rendering; + +namespace Klak.Spout { + +// +// Spout sender class (main implementation) +// +[ExecuteInEditMode] +[AddComponentMenu("Klak/Spout/Spout Sender")] +public sealed partial class SpoutSender : MonoBehaviour +{ + #region Sender plugin object + + Sender _sender; + + void ReleaseSender() + { + _sender?.Dispose(); + _sender = null; + } + + #endregion + + #region Buffer texture object + + RenderTexture _buffer; + + void PrepareBuffer(int width, int height) + { + // If the buffer exists but has wrong dimensions, destroy it first. + if (_buffer != null && + (_buffer.width != width || _buffer.height != height)) + { + ReleaseSender(); + Utility.Destroy(_buffer); + _buffer = null; + } + + // Create a buffer if it hasn't been allocated yet. + if (_buffer == null && width > 0 && height > 0) + { + _buffer = new RenderTexture(width, height, 0); + _buffer.hideFlags = HideFlags.DontSave; + _buffer.Create(); + } + } + + #endregion + + #region Camera capture (SRP) + + Camera _attachedCamera; + + void OnCameraCapture(RenderTargetIdentifier source, CommandBuffer cb) + { + if (_attachedCamera == null) return; + Blitter.Blit(_resources, cb, source, _buffer, _keepAlpha); + } + + void PrepareCameraCapture(Camera target) + { + // If it has been attached to another camera, detach it first. + if (_attachedCamera != null && _attachedCamera != target) + { + #if KLAK_SPOUT_HAS_SRP + CameraCaptureBridge + .RemoveCaptureAction(_attachedCamera, OnCameraCapture); + #endif + _attachedCamera = null; + } + + // Attach to the target if it hasn't been attached yet. + if (_attachedCamera == null && target != null) + { + #if KLAK_SPOUT_HAS_SRP + CameraCaptureBridge + .AddCaptureAction(target, OnCameraCapture); + #endif + _attachedCamera = target; + } + } + + #endregion + + #region MonoBehaviour implementation + + void OnDisable() + { + ReleaseSender(); + PrepareBuffer(0, 0); + PrepareCameraCapture(null); + } + + void Update() + { + // GameView capture mode + if (_captureMethod == CaptureMethod.GameView) + { + PrepareBuffer(Screen.width, Screen.height); + var temp = RenderTexture.GetTemporary(Screen.width, Screen.height, 0); + ScreenCapture.CaptureScreenshotIntoRenderTexture(temp); + Blitter.BlitVFlip(_resources, temp, _buffer, _keepAlpha); + RenderTexture.ReleaseTemporary(temp); + } + + // Texture capture mode + if (_captureMethod == CaptureMethod.Texture) + { + if (_sourceTexture == null) return; + PrepareBuffer(_sourceTexture.width, _sourceTexture.height); + Blitter.Blit(_resources, _sourceTexture, _buffer, _keepAlpha); + } + + // Camera capture mode + if (_captureMethod == CaptureMethod.Camera) + { + PrepareCameraCapture(_sourceCamera); + if (_sourceCamera == null) return; + PrepareBuffer(_sourceCamera.pixelWidth, _sourceCamera.pixelHeight); + } + + // Sender lazy initialization + if (_sender == null) _sender = new Sender(_spoutName, _buffer); + + // Sender plugin-side update + _sender.Update(); + } + + #endregion +} + +} // namespace Klak.Spout diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutSender.cs.meta b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutSender.cs.meta new file mode 100644 index 000000000..9d2aede9e --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutSender.cs.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 45099d624c1e6c14e9514f4e5ea1ed9c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - _sourceCamera: {instanceID: 0} + - _sourceTexture: {instanceID: 0} + - _resources: {fileID: 11400000, guid: f449ebbe2051c2e4d993eaa773a410de, type: 2} + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutSender_Properties.cs b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutSender_Properties.cs new file mode 100644 index 000000000..89eb039a8 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutSender_Properties.cs @@ -0,0 +1,73 @@ +using UnityEngine; + +namespace Klak.Spout { + +// Sender capture methods +public enum CaptureMethod { GameView, Camera, Texture } + +// +// Spout sender class (properties) +// +partial class SpoutSender +{ + #region Spout source + + [SerializeField] string _spoutName = "Spout Sender"; + + public string spoutName + { get => _spoutName; + set => ChangeSpoutName(value); } + + void ChangeSpoutName(string name) + { + // Sender refresh on renaming + if (_spoutName == name) return; + _spoutName = name; + ReleaseSender(); + } + + #endregion + + #region Format option + + [SerializeField] bool _keepAlpha = false; + + public bool keepAlpha + { get => _keepAlpha; + set => _keepAlpha = value; } + + #endregion + + #region Capture target + + [SerializeField] CaptureMethod _captureMethod = CaptureMethod.GameView; + + public CaptureMethod captureMethod + { get => _captureMethod; + set => _captureMethod = value; } + + [SerializeField] Camera _sourceCamera = null; + + public Camera sourceCamera + { get => _sourceCamera; + set => _sourceCamera = value; } + + [SerializeField] Texture _sourceTexture = null; + + public Texture sourceTexture + { get => _sourceTexture; + set => _sourceTexture = value; } + + #endregion + + #region Resource asset reference + + [SerializeField, HideInInspector] SpoutResources _resources = null; + + public void SetResources(SpoutResources resources) + => _resources = resources; + + #endregion +} + +} // namespace Klak.Spout diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutSender_Properties.cs.meta b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutSender_Properties.cs.meta new file mode 100644 index 000000000..b8baad2fc --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/Runtime/SpoutSender_Properties.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: abd4b9ae3ca6fa14298417851dced4cc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/package.json b/Assets/External/Hap Player/jp.keijiro.klak.spout/package.json new file mode 100644 index 000000000..16fc535ac --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/package.json @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e72d7d79975c50e7fc88b349bb1b8c9933a7c192143a1ca398091022ab2af248 +size 480 diff --git a/Assets/External/Hap Player/jp.keijiro.klak.spout/package.json.meta b/Assets/External/Hap Player/jp.keijiro.klak.spout/package.json.meta new file mode 100644 index 000000000..fb81b5dd5 --- /dev/null +++ b/Assets/External/Hap Player/jp.keijiro.klak.spout/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b14f67c145626ca41bdf7720bad9fc52 +PackageManifestImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/DR_01_Copy.mat b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/DR_01_Copy.mat index 623562485..4246b471e 100644 --- a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/DR_01_Copy.mat +++ b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/DR_01_Copy.mat @@ -1363,7 +1363,7 @@ Material: - _ShadowStrength: 1 - _ShadowStrengthMaskLOD: 0 - _ShiftBackfaceUV: 0 - - _SkinFaceShadowColorPreset: 4 + - _SkinFaceShadowColorPreset: 9 - _SkinMaskMapAsIDMap: 0 - _SkinMaskMapExtractFromID: 255 - _SkinMaskMapInvertColor: 0 @@ -1645,7 +1645,7 @@ Material: - _FaceShadowGradientMapUVCenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMapUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMaskMapChannel: {r: 0, g: 1, b: 0, a: 0} - - _FaceShadowTintColor: {r: 1, g: 0.925, b: 0.925, a: 1} + - _FaceShadowTintColor: {r: 1, g: 0.96732026, b: 0.9607843, a: 1} - _FaceShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _FaceUpDirection: {r: 0, g: 1, b: 0, a: 1} - _GlitterAtras: {r: 1, g: 1, b: 0, a: 0} @@ -1740,7 +1740,7 @@ Material: - _ShadowBorderColor: {r: 0, g: 0.1500437, b: 1, a: 1} - _ShadowColor: {r: 0.64705884, g: 0.7039881, b: 0.7921569, a: 1} - _SkinMaskMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _SkinShadowTintColor: {r: 1, g: 0.9, b: 0.9, a: 1} + - _SkinShadowTintColor: {r: 1, g: 0.9575164, b: 0.9490196, a: 1} - _SkinShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _SmoothnessMapChannelMask: {r: 0, g: 0, b: 0, a: 1} - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/DR_02_Copy.mat b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/DR_02_Copy.mat index 9c38673f0..52484e26e 100644 --- a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/DR_02_Copy.mat +++ b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/DR_02_Copy.mat @@ -1362,7 +1362,7 @@ Material: - _ShadowStrength: 1 - _ShadowStrengthMaskLOD: 0 - _ShiftBackfaceUV: 0 - - _SkinFaceShadowColorPreset: 4 + - _SkinFaceShadowColorPreset: 9 - _SkinMaskMapAsIDMap: 0 - _SkinMaskMapExtractFromID: 255 - _SkinMaskMapInvertColor: 0 @@ -1644,7 +1644,7 @@ Material: - _FaceShadowGradientMapUVCenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMapUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMaskMapChannel: {r: 0, g: 1, b: 0, a: 0} - - _FaceShadowTintColor: {r: 1, g: 0.925, b: 0.925, a: 1} + - _FaceShadowTintColor: {r: 1, g: 0.96732026, b: 0.9607843, a: 1} - _FaceShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _FaceUpDirection: {r: 0, g: 1, b: 0, a: 1} - _GlitterAtras: {r: 1, g: 1, b: 0, a: 0} @@ -1739,7 +1739,7 @@ Material: - _ShadowBorderColor: {r: 0, g: 0.15004367, b: 1, a: 1} - _ShadowColor: {r: 0.64705884, g: 0.7039881, b: 0.7921569, a: 1} - _SkinMaskMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _SkinShadowTintColor: {r: 1, g: 0.9, b: 0.9, a: 1} + - _SkinShadowTintColor: {r: 1, g: 0.9575164, b: 0.9490196, a: 1} - _SkinShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _SmoothnessMapChannelMask: {r: 0, g: 0, b: 0, a: 1} - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/EFF 1_Copy.mat b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/EFF 1_Copy.mat index a034e9f9b..ed2429d48 100644 --- a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/EFF 1_Copy.mat +++ b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/EFF 1_Copy.mat @@ -1409,7 +1409,7 @@ Material: - _ShadowStrength: 1 - _ShadowStrengthMaskLOD: 0 - _ShiftBackfaceUV: 0 - - _SkinFaceShadowColorPreset: 4 + - _SkinFaceShadowColorPreset: 9 - _SkinMaskMapAsIDMap: 0 - _SkinMaskMapExtractFromID: 255 - _SkinMaskMapInvertColor: 0 @@ -1694,7 +1694,7 @@ Material: - _FaceShadowGradientMapUVCenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMapUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMaskMapChannel: {r: 0, g: 1, b: 0, a: 0} - - _FaceShadowTintColor: {r: 1, g: 0.925, b: 0.925, a: 1} + - _FaceShadowTintColor: {r: 1, g: 0.96732026, b: 0.9607843, a: 1} - _FaceShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _FaceUpDirection: {r: 0, g: 1, b: 0, a: 1} - _GlitterAtras: {r: 1, g: 1, b: 0, a: 0} @@ -1790,7 +1790,7 @@ Material: - _ShadowBorderColor: {r: 1, g: 0.09999997, b: 0, a: 1} - _ShadowColor: {r: 0.82, g: 0.76, b: 0.85, a: 1} - _SkinMaskMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _SkinShadowTintColor: {r: 1, g: 0.9, b: 0.9, a: 1} + - _SkinShadowTintColor: {r: 1, g: 0.9575164, b: 0.9490196, a: 1} - _SkinShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _SmoothnessMapChannelMask: {r: 0, g: 0, b: 0, a: 1} - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Emo_Alpha 1_Copy.mat b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Emo_Alpha 1_Copy.mat index 677fdb3f4..407a4fa00 100644 --- a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Emo_Alpha 1_Copy.mat +++ b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Emo_Alpha 1_Copy.mat @@ -1409,7 +1409,7 @@ Material: - _ShadowStrength: 1 - _ShadowStrengthMaskLOD: 0 - _ShiftBackfaceUV: 0 - - _SkinFaceShadowColorPreset: 4 + - _SkinFaceShadowColorPreset: 9 - _SkinMaskMapAsIDMap: 0 - _SkinMaskMapExtractFromID: 255 - _SkinMaskMapInvertColor: 0 @@ -1694,7 +1694,7 @@ Material: - _FaceShadowGradientMapUVCenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMapUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMaskMapChannel: {r: 0, g: 1, b: 0, a: 0} - - _FaceShadowTintColor: {r: 1, g: 0.925, b: 0.925, a: 1} + - _FaceShadowTintColor: {r: 1, g: 0.96732026, b: 0.9607843, a: 1} - _FaceShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _FaceUpDirection: {r: 0, g: 1, b: 0, a: 1} - _GlitterAtras: {r: 1, g: 1, b: 0, a: 0} @@ -1790,7 +1790,7 @@ Material: - _ShadowBorderColor: {r: 1, g: 0.09999997, b: 0, a: 1} - _ShadowColor: {r: 0.82, g: 0.76, b: 0.85, a: 1} - _SkinMaskMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _SkinShadowTintColor: {r: 1, g: 0.9, b: 0.9, a: 1} + - _SkinShadowTintColor: {r: 1, g: 0.9575164, b: 0.9490196, a: 1} - _SkinShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _SmoothnessMapChannelMask: {r: 0, g: 0, b: 0, a: 1} - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Eye 1_Copy.mat b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Eye 1_Copy.mat index a687aa753..5cc326bae 100644 --- a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Eye 1_Copy.mat +++ b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Eye 1_Copy.mat @@ -1436,7 +1436,7 @@ Material: - _ShadowStrength: 1 - _ShadowStrengthMaskLOD: 0 - _ShiftBackfaceUV: 0 - - _SkinFaceShadowColorPreset: 4 + - _SkinFaceShadowColorPreset: 9 - _SkinMaskMapAsIDMap: 0 - _SkinMaskMapExtractFromID: 255 - _SkinMaskMapInvertColor: 0 @@ -1721,7 +1721,7 @@ Material: - _FaceShadowGradientMapUVCenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMapUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMaskMapChannel: {r: 0, g: 1, b: 0, a: 0} - - _FaceShadowTintColor: {r: 1, g: 0.925, b: 0.925, a: 1} + - _FaceShadowTintColor: {r: 1, g: 0.96732026, b: 0.9607843, a: 1} - _FaceShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _FaceUpDirection: {r: 0, g: 1, b: 0, a: 1} - _GlitterAtras: {r: 1, g: 1, b: 0, a: 0} @@ -1818,7 +1818,7 @@ Material: - _ShadowBorderColor: {r: 1, g: 0.09999997, b: 0, a: 1} - _ShadowColor: {r: 0.82, g: 0.76, b: 0.85, a: 1} - _SkinMaskMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _SkinShadowTintColor: {r: 1, g: 0.9, b: 0.9, a: 1} + - _SkinShadowTintColor: {r: 1, g: 0.9575164, b: 0.9490196, a: 1} - _SkinShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _SmoothnessMapChannelMask: {r: 0, g: 0, b: 0, a: 1} - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Eye_Pink 1_Copy.mat b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Eye_Pink 1_Copy.mat index b670c703b..00ad43ef1 100644 --- a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Eye_Pink 1_Copy.mat +++ b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Eye_Pink 1_Copy.mat @@ -1408,7 +1408,7 @@ Material: - _ShadowStrength: 1 - _ShadowStrengthMaskLOD: 0 - _ShiftBackfaceUV: 0 - - _SkinFaceShadowColorPreset: 4 + - _SkinFaceShadowColorPreset: 9 - _SkinMaskMapAsIDMap: 0 - _SkinMaskMapExtractFromID: 255 - _SkinMaskMapInvertColor: 0 @@ -1693,7 +1693,7 @@ Material: - _FaceShadowGradientMapUVCenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMapUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMaskMapChannel: {r: 0, g: 1, b: 0, a: 0} - - _FaceShadowTintColor: {r: 1, g: 0.925, b: 0.925, a: 1} + - _FaceShadowTintColor: {r: 1, g: 0.96732026, b: 0.9607843, a: 1} - _FaceShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _FaceUpDirection: {r: 0, g: 1, b: 0, a: 1} - _GlitterAtras: {r: 1, g: 1, b: 0, a: 0} @@ -1789,7 +1789,7 @@ Material: - _ShadowBorderColor: {r: 1, g: 0.09999997, b: 0, a: 1} - _ShadowColor: {r: 0.82, g: 0.76, b: 0.85, a: 1} - _SkinMaskMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _SkinShadowTintColor: {r: 1, g: 0.9, b: 0.9, a: 1} + - _SkinShadowTintColor: {r: 1, g: 0.9575164, b: 0.9490196, a: 1} - _SkinShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _SmoothnessMapChannelMask: {r: 0, g: 0, b: 0, a: 1} - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Face 1_Copy.mat b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Face 1_Copy.mat index ab8367563..d6776827b 100644 --- a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Face 1_Copy.mat +++ b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Face 1_Copy.mat @@ -1408,7 +1408,7 @@ Material: - _ShadowStrength: 1 - _ShadowStrengthMaskLOD: 0 - _ShiftBackfaceUV: 0 - - _SkinFaceShadowColorPreset: 4 + - _SkinFaceShadowColorPreset: 9 - _SkinMaskMapAsIDMap: 0 - _SkinMaskMapExtractFromID: 255 - _SkinMaskMapInvertColor: 0 @@ -1693,7 +1693,7 @@ Material: - _FaceShadowGradientMapUVCenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMapUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMaskMapChannel: {r: 0, g: 1, b: 0, a: 0} - - _FaceShadowTintColor: {r: 1, g: 0.925, b: 0.925, a: 1} + - _FaceShadowTintColor: {r: 1, g: 0.96732026, b: 0.9607843, a: 1} - _FaceShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _FaceUpDirection: {r: 0, g: 1, b: 0, a: 1} - _GlitterAtras: {r: 1, g: 1, b: 0, a: 0} @@ -1789,7 +1789,7 @@ Material: - _ShadowBorderColor: {r: 0.90588236, g: 0, b: 0.19173898, a: 1} - _ShadowColor: {r: 1, g: 1, b: 1, a: 1} - _SkinMaskMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _SkinShadowTintColor: {r: 1, g: 0.9, b: 0.9, a: 1} + - _SkinShadowTintColor: {r: 1, g: 0.9575164, b: 0.9490196, a: 1} - _SkinShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _SmoothnessMapChannelMask: {r: 0, g: 0, b: 0, a: 1} - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Face_Alpha 1_Copy.mat b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Face_Alpha 1_Copy.mat index 0387dc457..393f20c96 100644 --- a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Face_Alpha 1_Copy.mat +++ b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Face_Alpha 1_Copy.mat @@ -1436,7 +1436,7 @@ Material: - _ShadowStrength: 1 - _ShadowStrengthMaskLOD: 0 - _ShiftBackfaceUV: 0 - - _SkinFaceShadowColorPreset: 4 + - _SkinFaceShadowColorPreset: 9 - _SkinMaskMapAsIDMap: 0 - _SkinMaskMapExtractFromID: 255 - _SkinMaskMapInvertColor: 0 @@ -1721,7 +1721,7 @@ Material: - _FaceShadowGradientMapUVCenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMapUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMaskMapChannel: {r: 0, g: 1, b: 0, a: 0} - - _FaceShadowTintColor: {r: 1, g: 0.925, b: 0.925, a: 1} + - _FaceShadowTintColor: {r: 1, g: 0.96732026, b: 0.9607843, a: 1} - _FaceShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _FaceUpDirection: {r: 0, g: 1, b: 0, a: 1} - _GlitterAtras: {r: 1, g: 1, b: 0, a: 0} @@ -1818,7 +1818,7 @@ Material: - _ShadowBorderColor: {r: 1, g: 0.09999997, b: 0, a: 1} - _ShadowColor: {r: 0.82, g: 0.76, b: 0.85, a: 1} - _SkinMaskMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _SkinShadowTintColor: {r: 1, g: 0.9, b: 0.9, a: 1} + - _SkinShadowTintColor: {r: 1, g: 0.9575164, b: 0.9490196, a: 1} - _SkinShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _SmoothnessMapChannelMask: {r: 0, g: 0, b: 0, a: 1} - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/HighLight 1_Copy.mat b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/HighLight 1_Copy.mat index 873cfd8ec..c5e338fb3 100644 --- a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/HighLight 1_Copy.mat +++ b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/HighLight 1_Copy.mat @@ -1412,7 +1412,7 @@ Material: - _ShadowStrength: 1 - _ShadowStrengthMaskLOD: 0 - _ShiftBackfaceUV: 0 - - _SkinFaceShadowColorPreset: 4 + - _SkinFaceShadowColorPreset: 9 - _SkinMaskMapAsIDMap: 0 - _SkinMaskMapExtractFromID: 255 - _SkinMaskMapInvertColor: 0 @@ -1697,7 +1697,7 @@ Material: - _FaceShadowGradientMapUVCenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMapUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMaskMapChannel: {r: 0, g: 1, b: 0, a: 0} - - _FaceShadowTintColor: {r: 1, g: 0.925, b: 0.925, a: 1} + - _FaceShadowTintColor: {r: 1, g: 0.96732026, b: 0.9607843, a: 1} - _FaceShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _FaceUpDirection: {r: 0, g: 1, b: 0, a: 1} - _GlitterAtras: {r: 1, g: 1, b: 0, a: 0} @@ -1794,7 +1794,7 @@ Material: - _ShadowBorderColor: {r: 1, g: 0.09999997, b: 0, a: 1} - _ShadowColor: {r: 0.82, g: 0.76, b: 0.85, a: 1} - _SkinMaskMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _SkinShadowTintColor: {r: 1, g: 0.9, b: 0.9, a: 1} + - _SkinShadowTintColor: {r: 1, g: 0.9575164, b: 0.9490196, a: 1} - _SkinShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _SmoothnessMapChannelMask: {r: 0, g: 0, b: 0, a: 1} - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Longhair 1_Copy.mat b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Longhair 1_Copy.mat index 01ab05e72..a805b6535 100644 --- a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Longhair 1_Copy.mat +++ b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Longhair 1_Copy.mat @@ -920,7 +920,7 @@ Material: - _EnableNiloToonSelfShadowMappingNormalBias: 0 - _EnablePerMaterialDissolve: 0 - _EnableRendering: 1 - - _EnableShadowColor: 1 + - _EnableShadowColor: 0 - _EnableUVEditGroup: 0 - _EnvironmentReflectionApplyAddBlending: 0 - _EnvironmentReflectionApplyReplaceBlending: 1 @@ -1388,7 +1388,7 @@ Material: - _ShadowStrength: 1 - _ShadowStrengthMaskLOD: 0 - _ShiftBackfaceUV: 0 - - _SkinFaceShadowColorPreset: 4 + - _SkinFaceShadowColorPreset: 9 - _SkinMaskMapAsIDMap: 0 - _SkinMaskMapExtractFromID: 255 - _SkinMaskMapInvertColor: 0 @@ -1667,7 +1667,7 @@ Material: - _FaceShadowGradientMapUVCenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMapUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMaskMapChannel: {r: 0, g: 1, b: 0, a: 0} - - _FaceShadowTintColor: {r: 1, g: 0.925, b: 0.925, a: 1} + - _FaceShadowTintColor: {r: 1, g: 0.96732026, b: 0.9607843, a: 1} - _FaceShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _FaceUpDirection: {r: 0, g: 1, b: 0, a: 1} - _GlitterAtras: {r: 1, g: 1, b: 0, a: 0} @@ -1763,7 +1763,7 @@ Material: - _ShadowBorderColor: {r: 0, g: 0.8107641, b: 1, a: 1} - _ShadowColor: {r: 0.7704254, g: 0.7835559, b: 0.8207547, a: 1} - _SkinMaskMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _SkinShadowTintColor: {r: 1, g: 0.9, b: 0.9, a: 1} + - _SkinShadowTintColor: {r: 1, g: 0.9575164, b: 0.9490196, a: 1} - _SkinShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _SmoothnessMapChannelMask: {r: 0, g: 0, b: 0, a: 1} - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Longhair_Copy.mat b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Longhair_Copy.mat index b13894190..3c73e6160 100644 --- a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Longhair_Copy.mat +++ b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Longhair_Copy.mat @@ -920,7 +920,7 @@ Material: - _EnableNiloToonSelfShadowMappingNormalBias: 0 - _EnablePerMaterialDissolve: 0 - _EnableRendering: 1 - - _EnableShadowColor: 1 + - _EnableShadowColor: 0 - _EnableUVEditGroup: 0 - _EnvironmentReflectionApplyAddBlending: 0 - _EnvironmentReflectionApplyReplaceBlending: 1 @@ -1388,7 +1388,7 @@ Material: - _ShadowStrength: 1 - _ShadowStrengthMaskLOD: 0 - _ShiftBackfaceUV: 0 - - _SkinFaceShadowColorPreset: 4 + - _SkinFaceShadowColorPreset: 9 - _SkinMaskMapAsIDMap: 0 - _SkinMaskMapExtractFromID: 255 - _SkinMaskMapInvertColor: 0 @@ -1667,7 +1667,7 @@ Material: - _FaceShadowGradientMapUVCenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMapUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMaskMapChannel: {r: 0, g: 1, b: 0, a: 0} - - _FaceShadowTintColor: {r: 1, g: 0.925, b: 0.925, a: 1} + - _FaceShadowTintColor: {r: 1, g: 0.96732026, b: 0.9607843, a: 1} - _FaceShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _FaceUpDirection: {r: 0, g: 1, b: 0, a: 1} - _GlitterAtras: {r: 1, g: 1, b: 0, a: 0} @@ -1763,7 +1763,7 @@ Material: - _ShadowBorderColor: {r: 0, g: 0.8107641, b: 1, a: 1} - _ShadowColor: {r: 0.7704254, g: 0.7835559, b: 0.8207547, a: 1} - _SkinMaskMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _SkinShadowTintColor: {r: 1, g: 0.9, b: 0.9, a: 1} + - _SkinShadowTintColor: {r: 1, g: 0.9575164, b: 0.9490196, a: 1} - _SkinShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _SmoothnessMapChannelMask: {r: 0, g: 0, b: 0, a: 1} - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Manuka_body_Copy.mat b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Manuka_body_Copy.mat index d26dcd380..0ad41284e 100644 --- a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Manuka_body_Copy.mat +++ b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Manuka_body_Copy.mat @@ -1406,7 +1406,7 @@ Material: - _ShadowStrength: 1 - _ShadowStrengthMaskLOD: 0 - _ShiftBackfaceUV: 0 - - _SkinFaceShadowColorPreset: 4 + - _SkinFaceShadowColorPreset: 9 - _SkinMaskMapAsIDMap: 0 - _SkinMaskMapExtractFromID: 255 - _SkinMaskMapInvertColor: 0 @@ -1691,7 +1691,7 @@ Material: - _FaceShadowGradientMapUVCenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMapUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMaskMapChannel: {r: 0, g: 1, b: 0, a: 0} - - _FaceShadowTintColor: {r: 1, g: 0.925, b: 0.925, a: 1} + - _FaceShadowTintColor: {r: 1, g: 0.96732026, b: 0.9607843, a: 1} - _FaceShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _FaceUpDirection: {r: 0, g: 1, b: 0, a: 1} - _GlitterAtras: {r: 1, g: 1, b: 0, a: 0} @@ -1787,7 +1787,7 @@ Material: - _ShadowBorderColor: {r: 0.90588236, g: 0, b: 0.19173898, a: 1} - _ShadowColor: {r: 1, g: 0.9019608, b: 0.9094719, a: 1} - _SkinMaskMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _SkinShadowTintColor: {r: 1, g: 0.9, b: 0.9, a: 1} + - _SkinShadowTintColor: {r: 1, g: 0.9575164, b: 0.9490196, a: 1} - _SkinShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _SmoothnessMapChannelMask: {r: 0, g: 0, b: 0, a: 1} - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/OTR_Copy.mat b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/OTR_Copy.mat index 9a8b539fb..6d11931fc 100644 --- a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/OTR_Copy.mat +++ b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/OTR_Copy.mat @@ -1362,7 +1362,7 @@ Material: - _ShadowStrength: 1 - _ShadowStrengthMaskLOD: 0 - _ShiftBackfaceUV: 0 - - _SkinFaceShadowColorPreset: 4 + - _SkinFaceShadowColorPreset: 9 - _SkinMaskMapAsIDMap: 0 - _SkinMaskMapExtractFromID: 255 - _SkinMaskMapInvertColor: 0 @@ -1644,7 +1644,7 @@ Material: - _FaceShadowGradientMapUVCenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMapUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMaskMapChannel: {r: 0, g: 1, b: 0, a: 0} - - _FaceShadowTintColor: {r: 1, g: 0.925, b: 0.925, a: 1} + - _FaceShadowTintColor: {r: 1, g: 0.96732026, b: 0.9607843, a: 1} - _FaceShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _FaceUpDirection: {r: 0, g: 1, b: 0, a: 1} - _GlitterAtras: {r: 1, g: 1, b: 0, a: 0} @@ -1739,7 +1739,7 @@ Material: - _ShadowBorderColor: {r: 0, g: 0.15004373, b: 1, a: 1} - _ShadowColor: {r: 0.64705884, g: 0.7039881, b: 0.7921569, a: 1} - _SkinMaskMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _SkinShadowTintColor: {r: 1, g: 0.9, b: 0.9, a: 1} + - _SkinShadowTintColor: {r: 1, g: 0.9575164, b: 0.9490196, a: 1} - _SkinShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _SmoothnessMapChannelMask: {r: 0, g: 0, b: 0, a: 1} - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Ribbon_Copy.mat b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Ribbon_Copy.mat index a7df8129c..197d271ec 100644 --- a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Ribbon_Copy.mat +++ b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Ribbon_Copy.mat @@ -1388,7 +1388,7 @@ Material: - _ShadowStrength: 1 - _ShadowStrengthMaskLOD: 0 - _ShiftBackfaceUV: 0 - - _SkinFaceShadowColorPreset: 4 + - _SkinFaceShadowColorPreset: 9 - _SkinMaskMapAsIDMap: 0 - _SkinMaskMapExtractFromID: 255 - _SkinMaskMapInvertColor: 0 @@ -1667,7 +1667,7 @@ Material: - _FaceShadowGradientMapUVCenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMapUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMaskMapChannel: {r: 0, g: 1, b: 0, a: 0} - - _FaceShadowTintColor: {r: 1, g: 0.925, b: 0.925, a: 1} + - _FaceShadowTintColor: {r: 1, g: 0.96732026, b: 0.9607843, a: 1} - _FaceShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _FaceUpDirection: {r: 0, g: 1, b: 0, a: 1} - _GlitterAtras: {r: 1, g: 1, b: 0, a: 0} @@ -1763,7 +1763,7 @@ Material: - _ShadowBorderColor: {r: 0.59131366, g: 0.65028936, b: 0.8301887, a: 1} - _ShadowColor: {r: 0.7704254, g: 0.7835559, b: 0.8207547, a: 1} - _SkinMaskMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _SkinShadowTintColor: {r: 1, g: 0.9, b: 0.9, a: 1} + - _SkinShadowTintColor: {r: 1, g: 0.9575164, b: 0.9490196, a: 1} - _SkinShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _SmoothnessMapChannelMask: {r: 0, g: 0, b: 0, a: 1} - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Star_Out_Copy.mat b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Star_Out_Copy.mat index 0458488d7..cb9502d3a 100644 --- a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Star_Out_Copy.mat +++ b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Star_Out_Copy.mat @@ -1384,7 +1384,7 @@ Material: - _ShadowStrength: 1 - _ShadowStrengthMaskLOD: 0 - _ShiftBackfaceUV: 0 - - _SkinFaceShadowColorPreset: 4 + - _SkinFaceShadowColorPreset: 9 - _SkinMaskMapAsIDMap: 0 - _SkinMaskMapExtractFromID: 255 - _SkinMaskMapInvertColor: 0 @@ -1668,7 +1668,7 @@ Material: - _FaceShadowGradientMapUVCenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMapUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMaskMapChannel: {r: 0, g: 1, b: 0, a: 0} - - _FaceShadowTintColor: {r: 1, g: 0.925, b: 0.925, a: 1} + - _FaceShadowTintColor: {r: 1, g: 0.96732026, b: 0.9607843, a: 1} - _FaceShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _FaceUpDirection: {r: 0, g: 1, b: 0, a: 1} - _GlitterAtras: {r: 1, g: 1, b: 0, a: 0} @@ -1763,7 +1763,7 @@ Material: - _ShadowBorderColor: {r: 1, g: 0.09999997, b: 0, a: 1} - _ShadowColor: {r: 0.82, g: 0.76, b: 0.85, a: 1} - _SkinMaskMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _SkinShadowTintColor: {r: 1, g: 0.9, b: 0.9, a: 1} + - _SkinShadowTintColor: {r: 1, g: 0.9575164, b: 0.9490196, a: 1} - _SkinShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _SmoothnessMapChannelMask: {r: 0, g: 0, b: 0, a: 1} - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} diff --git a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Star_White_Copy.mat b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Star_White_Copy.mat index f66fee7a7..dd9d5e9e9 100644 --- a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Star_White_Copy.mat +++ b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Star_White_Copy.mat @@ -1384,7 +1384,7 @@ Material: - _ShadowStrength: 1 - _ShadowStrengthMaskLOD: 0 - _ShiftBackfaceUV: 0 - - _SkinFaceShadowColorPreset: 4 + - _SkinFaceShadowColorPreset: 9 - _SkinMaskMapAsIDMap: 0 - _SkinMaskMapExtractFromID: 255 - _SkinMaskMapInvertColor: 0 @@ -1668,7 +1668,7 @@ Material: - _FaceShadowGradientMapUVCenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMapUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMaskMapChannel: {r: 0, g: 1, b: 0, a: 0} - - _FaceShadowTintColor: {r: 1, g: 0.925, b: 0.925, a: 1} + - _FaceShadowTintColor: {r: 1, g: 0.96732026, b: 0.9607843, a: 1} - _FaceShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _FaceUpDirection: {r: 0, g: 1, b: 0, a: 1} - _GlitterAtras: {r: 1, g: 1, b: 0, a: 0} @@ -1763,7 +1763,7 @@ Material: - _ShadowBorderColor: {r: 1, g: 0.09999997, b: 0, a: 1} - _ShadowColor: {r: 0.82, g: 0.76, b: 0.85, a: 1} - _SkinMaskMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _SkinShadowTintColor: {r: 1, g: 0.9, b: 0.9, a: 1} + - _SkinShadowTintColor: {r: 1, g: 0.9575164, b: 0.9490196, a: 1} - _SkinShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _SmoothnessMapChannelMask: {r: 0, g: 0, b: 0, a: 1} - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} diff --git a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/TW.006_Copy.mat b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/TW.006_Copy.mat index 981791b30..a3725c4b2 100644 --- a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/TW.006_Copy.mat +++ b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/TW.006_Copy.mat @@ -635,7 +635,7 @@ Material: - _EnableNiloToonSelfShadowMappingNormalBias: 0 - _EnablePerMaterialDissolve: 0 - _EnableRendering: 1 - - _EnableShadowColor: 1 + - _EnableShadowColor: 0 - _EnableUVEditGroup: 0 - _EnvironmentReflectionApplyAddBlending: 0 - _EnvironmentReflectionApplyReplaceBlending: 1 @@ -882,7 +882,7 @@ Material: - _ShadingGradeMapRemapMinMaxSlider: 1 - _ShadingGradeMapRemapStart: 0 - _ShadingGradeMapStrength: 1 - - _SkinFaceShadowColorPreset: 4 + - _SkinFaceShadowColorPreset: 9 - _SkinMaskMapAsIDMap: 0 - _SkinMaskMapExtractFromID: 255 - _SkinMaskMapInvertColor: 0 @@ -1076,7 +1076,7 @@ Material: - _FaceShadowGradientMapUVCenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMapUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMaskMapChannel: {r: 0, g: 1, b: 0, a: 0} - - _FaceShadowTintColor: {r: 1, g: 0.925, b: 0.925, a: 1} + - _FaceShadowTintColor: {r: 1, g: 0.96732026, b: 0.9607843, a: 1} - _FaceShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _FaceUpDirection: {r: 0, g: 1, b: 0, a: 1} - _HairStrandSpecularMainColor: {r: 1, g: 1, b: 1, a: 1} @@ -1128,7 +1128,7 @@ Material: - _SelfShadowTintColor: {r: 1, g: 1, b: 1, a: 1} - _ShadingGradeMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - _SkinMaskMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _SkinShadowTintColor: {r: 1, g: 0.9, b: 0.9, a: 1} + - _SkinShadowTintColor: {r: 1, g: 0.9575164, b: 0.9490196, a: 1} - _SkinShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _SmoothnessMapChannelMask: {r: 0, g: 0, b: 0, a: 1} - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} diff --git a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Twintail_Copy.mat b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Twintail_Copy.mat index c41594ebb..6532e9676 100644 --- a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Twintail_Copy.mat +++ b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/Twintail_Copy.mat @@ -1388,7 +1388,7 @@ Material: - _ShadowStrength: 1 - _ShadowStrengthMaskLOD: 0 - _ShiftBackfaceUV: 0 - - _SkinFaceShadowColorPreset: 4 + - _SkinFaceShadowColorPreset: 9 - _SkinMaskMapAsIDMap: 0 - _SkinMaskMapExtractFromID: 255 - _SkinMaskMapInvertColor: 0 @@ -1667,7 +1667,7 @@ Material: - _FaceShadowGradientMapUVCenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMapUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMaskMapChannel: {r: 0, g: 1, b: 0, a: 0} - - _FaceShadowTintColor: {r: 1, g: 0.925, b: 0.925, a: 1} + - _FaceShadowTintColor: {r: 1, g: 0.96732026, b: 0.9607843, a: 1} - _FaceShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _FaceUpDirection: {r: 0, g: 1, b: 0, a: 1} - _GlitterAtras: {r: 1, g: 1, b: 0, a: 0} @@ -1763,7 +1763,7 @@ Material: - _ShadowBorderColor: {r: 0, g: 0.8107641, b: 1, a: 1} - _ShadowColor: {r: 0.7704254, g: 0.7835559, b: 0.8207547, a: 1} - _SkinMaskMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _SkinShadowTintColor: {r: 1, g: 0.9, b: 0.9, a: 1} + - _SkinShadowTintColor: {r: 1, g: 0.9575164, b: 0.9490196, a: 1} - _SkinShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _SmoothnessMapChannelMask: {r: 0, g: 0, b: 0, a: 1} - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/cap_Copy.mat b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/cap_Copy.mat index b2691c5fb..3bf846a47 100644 --- a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/cap_Copy.mat +++ b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/cap_Copy.mat @@ -1362,7 +1362,7 @@ Material: - _ShadowStrength: 1 - _ShadowStrengthMaskLOD: 0 - _ShiftBackfaceUV: 0 - - _SkinFaceShadowColorPreset: 4 + - _SkinFaceShadowColorPreset: 9 - _SkinMaskMapAsIDMap: 0 - _SkinMaskMapExtractFromID: 255 - _SkinMaskMapInvertColor: 0 @@ -1644,7 +1644,7 @@ Material: - _FaceShadowGradientMapUVCenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMapUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMaskMapChannel: {r: 0, g: 1, b: 0, a: 0} - - _FaceShadowTintColor: {r: 1, g: 0.925, b: 0.925, a: 1} + - _FaceShadowTintColor: {r: 1, g: 0.96732026, b: 0.9607843, a: 1} - _FaceShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _FaceUpDirection: {r: 0, g: 1, b: 0, a: 1} - _GlitterAtras: {r: 1, g: 1, b: 0, a: 0} @@ -1739,7 +1739,7 @@ Material: - _ShadowBorderColor: {r: 0, g: 0.1500437, b: 1, a: 1} - _ShadowColor: {r: 0.64705884, g: 0.7039881, b: 0.7921569, a: 1} - _SkinMaskMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _SkinShadowTintColor: {r: 1, g: 0.9, b: 0.9, a: 1} + - _SkinShadowTintColor: {r: 1, g: 0.9575164, b: 0.9490196, a: 1} - _SkinShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _SmoothnessMapChannelMask: {r: 0, g: 0, b: 0, a: 1} - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/gun_Copy.mat b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/gun_Copy.mat index a1a31c8dd..4e2a695ea 100644 --- a/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/gun_Copy.mat +++ b/Assets/Resources/Character/@000-050/@021_양도끼/Avatar/양도끼_250826_기본/Materials/gun_Copy.mat @@ -1361,7 +1361,7 @@ Material: - _ShadowStrength: 1 - _ShadowStrengthMaskLOD: 0 - _ShiftBackfaceUV: 0 - - _SkinFaceShadowColorPreset: 4 + - _SkinFaceShadowColorPreset: 9 - _SkinMaskMapAsIDMap: 0 - _SkinMaskMapExtractFromID: 255 - _SkinMaskMapInvertColor: 0 @@ -1643,7 +1643,7 @@ Material: - _FaceShadowGradientMapUVCenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMapUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - _FaceShadowGradientMaskMapChannel: {r: 0, g: 1, b: 0, a: 0} - - _FaceShadowTintColor: {r: 1, g: 0.925, b: 0.925, a: 1} + - _FaceShadowTintColor: {r: 1, g: 0.96732026, b: 0.9607843, a: 1} - _FaceShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _FaceUpDirection: {r: 0, g: 1, b: 0, a: 1} - _GlitterAtras: {r: 1, g: 1, b: 0, a: 0} @@ -1738,7 +1738,7 @@ Material: - _ShadowBorderColor: {r: 0, g: 0.14819956, b: 1, a: 1} - _ShadowColor: {r: 0.64705884, g: 0.7039881, b: 0.7921569, a: 1} - _SkinMaskMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _SkinShadowTintColor: {r: 1, g: 0.9, b: 0.9, a: 1} + - _SkinShadowTintColor: {r: 1, g: 0.9575164, b: 0.9490196, a: 1} - _SkinShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - _SmoothnessMapChannelMask: {r: 0, g: 0, b: 0, a: 1} - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Resources/Character/@000-050/@021_양도끼/Project/양도끼_250901_엣호엣호/Ani_양도끼_엣호엣호_02.fbx b/Assets/Resources/Character/@000-050/@021_양도끼/Project/양도끼_250901_엣호엣호/Ani_양도끼_엣호엣호_02.fbx index e38989946..2595424e5 100644 --- a/Assets/Resources/Character/@000-050/@021_양도끼/Project/양도끼_250901_엣호엣호/Ani_양도끼_엣호엣호_02.fbx +++ b/Assets/Resources/Character/@000-050/@021_양도끼/Project/양도끼_250901_엣호엣호/Ani_양도끼_엣호엣호_02.fbx @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4dfae8a64ccb962128fa3302c85ffa896a93799ebc1100ace99297d1f41c3a15 -size 2645152 +oid sha256:8f9381ef996e2c2f7e906df77fcbfe9d9be3d07c499b2eb6de41a29d3b357677 +size 2646928 diff --git a/Assets/Resources/Character/@000-050/@021_양도끼/Project/양도끼_250901_엣호엣호/Facial_양도끼_엣호엣호_01.anim b/Assets/Resources/Character/@000-050/@021_양도끼/Project/양도끼_250901_엣호엣호/Facial_양도끼_엣호엣호_01.anim index f132566db..653c2c1c3 100644 --- a/Assets/Resources/Character/@000-050/@021_양도끼/Project/양도끼_250901_엣호엣호/Facial_양도끼_엣호엣호_01.anim +++ b/Assets/Resources/Character/@000-050/@021_양도끼/Project/양도끼_250901_엣호엣호/Facial_양도끼_엣호엣호_01.anim @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1b1efb8fefe507ccfe1c3c69a47703da5d828e73ad71a2ad22e2e783b512c59e -size 45083074 +oid sha256:c592280d19564f19b83b5516f79f17371dcf33d38d4c43f926bf1dd42aba4aa4 +size 75151315 diff --git a/Assets/Resources/Character/@000-050/@021_양도끼/Project/양도끼_250901_엣호엣호/양도끼_250901_엣호엣호_시가지A.unity b/Assets/Resources/Character/@000-050/@021_양도끼/Project/양도끼_250901_엣호엣호/양도끼_250901_엣호엣호_시가지A.unity index 919fd75a7..58d28a9b6 100644 --- a/Assets/Resources/Character/@000-050/@021_양도끼/Project/양도끼_250901_엣호엣호/양도끼_250901_엣호엣호_시가지A.unity +++ b/Assets/Resources/Character/@000-050/@021_양도끼/Project/양도끼_250901_엣호엣호/양도끼_250901_엣호엣호_시가지A.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7c33836c96f860297eb57bf4db040085b8aca06ce59201363aa7b4e95bc6bbe3 -size 5292255 +oid sha256:ede36838c14e7029514384f17a346585614750890bccf140740396a26a85a496 +size 5362279 diff --git a/Assets/Resources/Character/@000-050/@021_양도끼/Project/양도끼_250901_엣호엣호/양도끼_250901_엣호엣호_시가지A_Timeline.playable b/Assets/Resources/Character/@000-050/@021_양도끼/Project/양도끼_250901_엣호엣호/양도끼_250901_엣호엣호_시가지A_Timeline.playable index 80b315c08..d209a73e7 100644 --- a/Assets/Resources/Character/@000-050/@021_양도끼/Project/양도끼_250901_엣호엣호/양도끼_250901_엣호엣호_시가지A_Timeline.playable +++ b/Assets/Resources/Character/@000-050/@021_양도끼/Project/양도끼_250901_엣호엣호/양도끼_250901_엣호엣호_시가지A_Timeline.playable @@ -112,6 +112,111 @@ MonoBehaviour: VirtualCamera: exposedName: 294e46879cf097d49abd344520f418d5 defaultValue: {fileID: 0} +--- !u!114 &-5602899583543224816 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f1e95aa6d658d694785bfde37c857fff, type: 3} + m_Name: RecorderClip + m_EditorClassIdentifier: + settings: {fileID: -752726211662354170} +--- !u!114 &-1033778628911517395 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0e6cf5671577b7344ba25c25b4346ce4, type: 3} + m_Name: Recorder Track + m_EditorClassIdentifier: + m_Version: 3 + m_AnimClip: {fileID: 0} + m_Locked: 0 + m_Muted: 1 + m_CustomPlayableFullTypename: + m_Curves: {fileID: 0} + m_Parent: {fileID: 11400000} + m_Children: [] + m_Clips: + - m_Version: 1 + m_Start: 1.4 + m_ClipIn: 0 + m_Asset: {fileID: -5602899583543224816} + m_Duration: 14.404081632653057 + m_TimeScale: 1 + m_ParentTrack: {fileID: -1033778628911517395} + m_EaseInDuration: 0 + m_EaseOutDuration: 0 + m_BlendInDuration: 0 + m_BlendOutDuration: 0 + m_MixInCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_MixOutCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_BlendInCurveMode: 0 + m_BlendOutCurveMode: 0 + m_ExposedParameterNames: [] + m_AnimationCurves: {fileID: 0} + m_Recordable: 0 + m_PostExtrapolationMode: 0 + m_PreExtrapolationMode: 0 + m_PostExtrapolationTime: 0 + m_PreExtrapolationTime: 0 + m_DisplayName: RecorderClip + m_Markers: + m_Objects: [] --- !u!114 &-1003404326661872746 MonoBehaviour: m_ObjectHideFlags: 1 @@ -153,6 +258,143 @@ MonoBehaviour: m_OpenClipOffsetRotation: {x: 0, y: 0, z: 0, w: 1} m_Rotation: {x: 0, y: 0, z: 0, w: 1} m_ApplyOffsets: 0 +--- !u!114 &-752726211662354170 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6fde0a8ac3e6b482c95fa602e65ab045, type: 3} + m_Name: RecorderClip + m_EditorClassIdentifier: + enabled: 1 + take: 10 + captureEveryNthFrame: 1 + fileNameGenerator: + m_Path: + m_Root: 0 + m_Leaf: Recordings + m_ForceAssetFolder: 0 + m_AbsolutePath: + m_FileName: _ + encoderSettings: + rid: 4400402860587876354 + captureAlpha: 0 + captureAudio: 1 + m_ImageInputSelector: + m_Selected: gameViewInputSettings + gameViewInputSettings: + m_OutputResolution: + m_CustomWidth: 1024 + m_CustomHeight: 1024 + imageHeight: 0 + maxSupportedHeight: 2160 + m_AspectRatio: + m_CustomAspectX: 1 + m_CustomAspectY: 1 + m_ImageAspect: 1 + flipFinalOutput: 0 + cameraInputSettings: + m_OutputResolution: + m_CustomWidth: 1024 + m_CustomHeight: 1024 + imageHeight: 0 + maxSupportedHeight: 4320 + m_AspectRatio: + m_CustomAspectX: 1 + m_CustomAspectY: 1 + m_ImageAspect: 1 + source: 2 + cameraTag: + flipFinalOutput: 0 + captureUI: 0 + camera360InputSettings: + source: 2 + cameraTag: + flipFinalOutput: 0 + renderStereo: 1 + stereoSeparation: 0.065 + mapSize: 1024 + m_OutputWidth: 1024 + m_OutputHeight: 2048 + renderTextureInputSettings: + renderTexture: {fileID: 0} + flipFinalOutput: 0 + renderTextureSamplerSettings: + source: 1 + m_RenderWidth: 1280 + m_RenderHeight: 720 + m_OutputWidth: 1280 + m_OutputHeight: 720 + outputAspectRatio: + m_CustomAspectX: 1 + m_CustomAspectY: 1 + m_ImageAspect: 1 + superSampling: 1 + superKernelPower: 16 + superKernelScale: 1 + cameraTag: + colorSpace: 0 + flipFinalOutput: 0 + m_AudioInputSettings: + preserveAudio: 1 + _accumulationSettings: + rid: 4400402860587876353 + outputFormat: 0 + encodingQuality: 2 + containerFormatSelected: 0 + encoderSelected: 0 + encoderPresetSelected: 0 + encoderPresetSelectedName: + encoderPresetSelectedOptions: + encoderPresetSelectedSuffixes: + encoderColorDefinitionSelected: 0 + encoderCustomOptions: + m_MovieRecorderVersion: 1 + references: + version: 2 + RefIds: + - rid: 4400402860587876353 + type: {class: AccumulationSettings, ns: , asm: Unity.Recorder.Editor} + data: + captureAccumulation: 0 + samples: 1 + shutterInterval: 1 + shutterProfileType: 0 + shutterProfileCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + shutterFullyOpen: 0.25 + shutterBeginsClosing: 0.75 + useSubPixelJitter: 1 + - rid: 4400402860587876354 + type: {class: ProResEncoderSettings, ns: UnityEditor.Recorder.Encoder, asm: Unity.Recorder.Editor} + data: + outputFormat: 2 --- !u!114 &-217797228359136326 MonoBehaviour: m_ObjectHideFlags: 1 @@ -264,9 +506,10 @@ MonoBehaviour: - {fileID: -7238135200716157421} - {fileID: -217797228359136326} - {fileID: -1003404326661872746} + - {fileID: -1033778628911517395} m_FixedDuration: 0 m_EditorSettings: - m_Framerate: 30 + m_Framerate: 60 m_ScenePreview: 1 m_DurationMode: 0 m_MarkerTrack: {fileID: 0} @@ -311,7 +554,7 @@ AnimationClip: m_Curve: - serializedVersion: 3 time: 0 - value: {x: -0.000002322817, y: -0.00000003400231, z: 0.000005992978} + value: {x: -2.516284, y: -1.707519, z: 0.2842011} inSlope: {x: 0, y: 0, z: 0} outSlope: {x: 0, y: 0, z: 0} tangentMode: 0 @@ -320,7 +563,7 @@ AnimationClip: outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} - serializedVersion: 3 time: 3.4666667 - value: {x: -0.000002322817, y: -0.00000003400231, z: 0.000005992978} + value: {x: -2.516284, y: -1.707519, z: 0.2842011} inSlope: {x: 0, y: 0, z: 0} outSlope: {x: 0, y: 0, z: 0} tangentMode: 0 @@ -328,55 +571,73 @@ AnimationClip: inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} - serializedVersion: 3 - time: 4.733333 - value: {x: -0.000002322817, y: -0.00000003400231, z: 0.000005992978} - inSlope: {x: 0.00009026325, y: -0.09507299, z: 0.01592824} - outSlope: {x: 0.00009026325, y: -0.09507299, z: 0.01592824} + time: 4.633333 + value: {x: -2.831897, y: -1.910338, z: 0.3177553} + inSlope: {x: -0.30768752, y: -0.19775365, z: 0.032712534} + outSlope: {x: -0.30768752, y: -0.19775365, z: 0.032712534} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 5.2 + value: {x: -3.049609, y: -2.050292, z: 0.3409028} + inSlope: {x: -0.32050952, y: -0.205975, z: 0.03407067} + outSlope: {x: -0.32050952, y: -0.205975, z: 0.03407067} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 6.266667 + value: {x: -3.355396, y: -2.246764, z: 0.3734041} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} tangentMode: 0 weightedMode: 0 inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} - serializedVersion: 3 time: 7.1 - value: {x: 0.0004249233, y: -0.4500122, z: 0.07539967} - inSlope: {x: 0.0010762156, y: -0.38195696, z: 0.06397934} - outSlope: {x: 0.0010762156, y: -0.38195696, z: 0.06397934} + value: {x: -3.355396, y: -2.246764, z: 0.3734041} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} tangentMode: 0 weightedMode: 0 inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} - serializedVersion: 3 time: 9.266666 - value: {x: 0.004697384, y: -1.693176, z: 0.2836211} - inSlope: {x: -0.02088622, y: 0.002389133, z: -0.00040483847} - outSlope: {x: -0.02088622, y: 0.002389133, z: -0.00040483847} + value: {x: -3.247424, y: -0.8776853, z: 0.1460175} + inSlope: {x: 0, y: 0.15804422, z: -0.026456835} + outSlope: {x: 0, y: 0.15804422, z: -0.026456835} tangentMode: 0 weightedMode: 0 inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} - serializedVersion: 3 time: 12 - value: {x: -0.1148705, y: -0.1118162, z: 0.01872857} - inSlope: {x: -0.051318865, y: -0.20351377, z: 0.034028944} - outSlope: {x: -0.051318865, y: -0.20351377, z: 0.034028944} + value: {x: -3.780872, y: -0.6840811, z: 0.1136079} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} tangentMode: 0 weightedMode: 0 inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} - serializedVersion: 3 time: 13.833333 - value: {x: -0.2228417, y: -1.918701, z: 0.3211731} - inSlope: {x: 0.08468074, y: -0.75094557, z: 0.12581818} - outSlope: {x: 0.08468074, y: -0.75094557, z: 0.12581818} + value: {x: -3.247424, y: -0.8776853, z: 0.1460175} + inSlope: {x: 0, y: -0.23002483, z: 0.038506463} + outSlope: {x: 0, y: -0.23002483, z: 0.038506463} tangentMode: 0 weightedMode: 0 inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} - serializedVersion: 3 time: 15.366667 - value: {x: 0.1271492, y: -2.710388, z: 0.4540619} - inSlope: {x: 0.22825487, y: -0.51631737, z: 0.08666658} - outSlope: {x: 0.22825487, y: -0.51631737, z: 0.08666658} + value: {x: -4.605091, y: -3.513367, z: 0.5823732} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} tangentMode: 0 weightedMode: 0 inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} @@ -391,7 +652,7 @@ AnimationClip: m_Curve: - serializedVersion: 3 time: 0 - value: {x: -0.066825986, y: 0.0000008940697, z: 0.000004887581} + value: {x: -0.06683353, y: 0.000002026558, z: 0.0000059604645} inSlope: {x: 0, y: 0, z: 0} outSlope: {x: 0, y: 0, z: 0} tangentMode: 0 @@ -400,63 +661,81 @@ AnimationClip: outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} - serializedVersion: 3 time: 3.4666667 - value: {x: -0.066825986, y: 0.0000008940697, z: 0.000004887581} - inSlope: {x: 0.026951829, y: 0.0000027057376, z: 0.000013034597} - outSlope: {x: 0.026951829, y: 0.0000027057376, z: 0.000013034597} + value: {x: -0.0038113445, y: -0.00010430813, z: -0.0007401705} + inSlope: {x: 0.034717016, y: 0, z: 0} + outSlope: {x: 0.034717016, y: 0, z: 0} tangentMode: 0 weightedMode: 0 inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} - serializedVersion: 3 - time: 4.733333 - value: {x: 0.0014519691, y: 0.000007748604, z: 0.000037908554} - inSlope: {x: 0.026953755, y: 0.000002642775, z: 0.000015124957} - outSlope: {x: 0.026953755, y: 0.000002642775, z: 0.000015124957} + time: 4.633333 + value: {x: 0.09402196, y: 0.0054243207, z: 0.17691767} + inSlope: {x: 0.050713837, y: 0.005287116, z: 0.17258827} + outSlope: {x: 0.050713837, y: 0.005287116, z: 0.17258827} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 5.2 + value: {x: 0.115997955, y: 0.009060025, z: 0.2984128} + inSlope: {x: 0, y: 0.0049656252, z: 0.17653494} + outSlope: {x: 0, y: 0.0049656252, z: 0.17653494} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 6.266667 + value: {x: 0.046488598, y: 0.013534844, z: 0.46525812} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} tangentMode: 0 weightedMode: 0 inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} - serializedVersion: 3 time: 7.1 - value: {x: 0.0014610887, y: 0.0000074505806, z: 0.000047802925} - inSlope: {x: 0.0000016859459, y: -0.00000035181594, z: 0.00000035724008} - outSlope: {x: 0.0000016859459, y: -0.00000035181594, z: 0.00000035724008} + value: {x: 0.046488598, y: 0.013534844, z: 0.46525812} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} tangentMode: 0 weightedMode: 0 inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} - serializedVersion: 3 time: 9.266666 - value: {x: 0.0014600456, y: 0.000006198883, z: 0.00004029274} - inSlope: {x: -0.0000022196577, y: 0.00000006005192, z: -0.0000007518239} - outSlope: {x: -0.0000022196577, y: 0.00000006005192, z: -0.0000007518239} + value: {x: 0.0017146021, y: 0.013336897, z: 0.46408093} + inSlope: {x: 0, y: -0.00016158941, z: -0.00096097286} + outSlope: {x: 0, y: -0.00016158941, z: -0.00096097286} tangentMode: 0 weightedMode: 0 inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} - serializedVersion: 3 time: 12 - value: {x: 0.0014492273, y: 0.000008106232, z: 0.000045657158} - inSlope: {x: -0.0000037792784, y: -0.00000009000178, z: -0.0000039929837} - outSlope: {x: -0.0000037792784, y: -0.00000009000178, z: -0.0000039929837} + value: {x: 0.036933467, y: 0.009250045, z: 0.17659771} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} tangentMode: 0 weightedMode: 0 inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} - serializedVersion: 3 time: 13.833333 - value: {x: 0.0014426261, y: 0.0000064969063, z: 0.000027418137} - inSlope: {x: -0.004182476, y: -0.00019431591, z: 0.08838296} - outSlope: {x: -0.004182476, y: -0.00019431591, z: 0.08838296} + value: {x: 0.0017146021, y: 0.013336897, z: 0.46408093} + inSlope: {x: -0.014762351, y: 0.004855666, z: 0.3350204} + outSlope: {x: -0.014762351, y: 0.004855666, z: 0.3350204} tangentMode: 0 weightedMode: 0 inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} - serializedVersion: 3 time: 15.366667 - value: {x: -0.011378117, y: -0.0005880594, z: 0.27108383} - inSlope: {x: -0.008361352, y: -0.00038775403, z: 0.17677587} - outSlope: {x: -0.008361352, y: -0.00038775403, z: 0.17677587} + value: {x: -0.012766451, y: 0.13401282, z: 1.3044997} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} tangentMode: 0 weightedMode: 0 inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} @@ -466,7 +745,73 @@ AnimationClip: m_RotationOrder: 4 path: m_ScaleCurves: [] - m_FloatCurves: [] + m_FloatCurves: + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 4.633333 + value: 41.400986 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 6.266667 + value: 41.400986 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 7.1 + value: 41.400986 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 9.266666 + value: 41.400986 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 13.833333 + value: 41.400986 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 15.366667 + value: 34.809307 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Lens.FieldOfView + path: + classID: 114 + script: {fileID: 11500000, guid: f9dfa5b682dcd46bda6128250e975f58, type: 3} + flags: 0 m_PPtrCurves: [] m_SampleRate: 30 m_WrapMode: 0 @@ -493,6 +838,15 @@ AnimationClip: isPPtrCurve: 0 isIntCurve: 0 isSerializeReferenceCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 3482800909 + script: {fileID: 11500000, guid: f9dfa5b682dcd46bda6128250e975f58, type: 3} + typeID: 114 + customType: 0 + isPPtrCurve: 0 + isIntCurve: 0 + isSerializeReferenceCurve: 0 pptrCurveMapping: [] m_AnimationClipSettings: serializedVersion: 2 @@ -521,73 +875,91 @@ AnimationClip: m_Curve: - serializedVersion: 3 time: 0 - value: -0.000002322817 + value: -2.516284 inSlope: 0 outSlope: 0 - tangentMode: 34 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 3.4666667 - value: -0.000002322817 + value: -2.516284 inSlope: 0 outSlope: 0 - tangentMode: 34 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 - time: 4.733333 - value: -0.000002322817 - inSlope: 0.00009026325 - outSlope: 0.00009026325 - tangentMode: 34 + time: 4.633333 + value: -2.831897 + inSlope: -0.30768752 + outSlope: -0.30768752 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 5.2 + value: -3.049609 + inSlope: -0.32050952 + outSlope: -0.32050952 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 6.266667 + value: -3.355396 + inSlope: 0 + outSlope: 0 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 7.1 - value: 0.0004249233 - inSlope: 0.0010762156 - outSlope: 0.0010762156 - tangentMode: 34 + value: -3.355396 + inSlope: 0 + outSlope: 0 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 9.266666 - value: 0.004697384 - inSlope: -0.02088622 - outSlope: -0.02088622 - tangentMode: 34 + value: -3.247424 + inSlope: 0 + outSlope: 0 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 12 - value: -0.1148705 - inSlope: -0.051318865 - outSlope: -0.051318865 - tangentMode: 34 + value: -3.780872 + inSlope: 0 + outSlope: 0 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 13.833333 - value: -0.2228417 - inSlope: 0.08468074 - outSlope: 0.08468074 - tangentMode: 34 + value: -3.247424 + inSlope: 0 + outSlope: 0 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 15.366667 - value: 0.1271492 - inSlope: 0.22825487 - outSlope: 0.22825487 - tangentMode: 34 + value: -4.605091 + inSlope: 0 + outSlope: 0 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 @@ -605,73 +977,91 @@ AnimationClip: m_Curve: - serializedVersion: 3 time: 0 - value: -0.00000003400231 + value: -1.707519 inSlope: 0 outSlope: 0 - tangentMode: 34 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 3.4666667 - value: -0.00000003400231 + value: -1.707519 inSlope: 0 outSlope: 0 - tangentMode: 34 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 - time: 4.733333 - value: -0.00000003400231 - inSlope: -0.09507299 - outSlope: -0.09507299 - tangentMode: 34 + time: 4.633333 + value: -1.910338 + inSlope: -0.19775365 + outSlope: -0.19775365 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 5.2 + value: -2.050292 + inSlope: -0.205975 + outSlope: -0.205975 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 6.266667 + value: -2.246764 + inSlope: 0 + outSlope: 0 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 7.1 - value: -0.4500122 - inSlope: -0.38195696 - outSlope: -0.38195696 - tangentMode: 34 + value: -2.246764 + inSlope: 0 + outSlope: 0 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 9.266666 - value: -1.693176 - inSlope: 0.002389133 - outSlope: 0.002389133 - tangentMode: 34 + value: -0.8776853 + inSlope: 0.15804422 + outSlope: 0.15804422 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 12 - value: -0.1118162 - inSlope: -0.20351377 - outSlope: -0.20351377 - tangentMode: 34 + value: -0.6840811 + inSlope: 0 + outSlope: 0 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 13.833333 - value: -1.918701 - inSlope: -0.75094557 - outSlope: -0.75094557 - tangentMode: 34 + value: -0.8776853 + inSlope: -0.23002483 + outSlope: -0.23002483 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 15.366667 - value: -2.710388 - inSlope: -0.51631737 - outSlope: -0.51631737 - tangentMode: 34 + value: -3.513367 + inSlope: 0 + outSlope: 0 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 @@ -689,73 +1079,91 @@ AnimationClip: m_Curve: - serializedVersion: 3 time: 0 - value: 0.000005992978 + value: 0.2842011 inSlope: 0 outSlope: 0 - tangentMode: 34 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 3.4666667 - value: 0.000005992978 + value: 0.2842011 inSlope: 0 outSlope: 0 - tangentMode: 34 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 - time: 4.733333 - value: 0.000005992978 - inSlope: 0.01592824 - outSlope: 0.01592824 - tangentMode: 34 + time: 4.633333 + value: 0.3177553 + inSlope: 0.032712534 + outSlope: 0.032712534 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 5.2 + value: 0.3409028 + inSlope: 0.03407067 + outSlope: 0.03407067 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 6.266667 + value: 0.3734041 + inSlope: 0 + outSlope: 0 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 7.1 - value: 0.07539967 - inSlope: 0.06397934 - outSlope: 0.06397934 - tangentMode: 34 + value: 0.3734041 + inSlope: 0 + outSlope: 0 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 9.266666 - value: 0.2836211 - inSlope: -0.00040483847 - outSlope: -0.00040483847 - tangentMode: 34 + value: 0.1460175 + inSlope: -0.026456835 + outSlope: -0.026456835 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 12 - value: 0.01872857 - inSlope: 0.034028944 - outSlope: 0.034028944 - tangentMode: 34 + value: 0.1136079 + inSlope: 0 + outSlope: 0 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 13.833333 - value: 0.3211731 - inSlope: 0.12581818 - outSlope: 0.12581818 - tangentMode: 34 + value: 0.1460175 + inSlope: 0.038506463 + outSlope: 0.038506463 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 15.366667 - value: 0.4540619 - inSlope: 0.08666658 - outSlope: 0.08666658 - tangentMode: 34 + value: 0.5823732 + inSlope: 0 + outSlope: 0 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 @@ -773,73 +1181,91 @@ AnimationClip: m_Curve: - serializedVersion: 3 time: 0 - value: -0.066825986 + value: -0.06683353 inSlope: 0 outSlope: 0 - tangentMode: 34 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 3.4666667 - value: -0.066825986 - inSlope: 0.026951829 - outSlope: 0.026951829 - tangentMode: 34 + value: -0.0038113445 + inSlope: 0.034717016 + outSlope: 0.034717016 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 - time: 4.733333 - value: 0.0014519691 - inSlope: 0.026953755 - outSlope: 0.026953755 - tangentMode: 34 + time: 4.633333 + value: 0.09402196 + inSlope: 0.050713837 + outSlope: 0.050713837 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 5.2 + value: 0.115997955 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 6.266667 + value: 0.046488598 + inSlope: 0 + outSlope: 0 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 7.1 - value: 0.0014610887 - inSlope: 0.0000016859459 - outSlope: 0.0000016859459 - tangentMode: 34 + value: 0.046488598 + inSlope: 0 + outSlope: 0 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 9.266666 - value: 0.0014600456 - inSlope: -0.0000022196577 - outSlope: -0.0000022196577 - tangentMode: 34 + value: 0.0017146021 + inSlope: 0 + outSlope: 0 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 12 - value: 0.0014492273 - inSlope: -0.0000037792784 - outSlope: -0.0000037792784 - tangentMode: 34 + value: 0.036933467 + inSlope: 0 + outSlope: 0 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 13.833333 - value: 0.0014426261 - inSlope: -0.004182476 - outSlope: -0.004182476 - tangentMode: 34 + value: 0.0017146021 + inSlope: -0.014762351 + outSlope: -0.014762351 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 15.366667 - value: -0.011378117 - inSlope: -0.008361352 - outSlope: -0.008361352 - tangentMode: 34 + value: -0.012766451 + inSlope: 0 + outSlope: 0 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 @@ -857,73 +1283,91 @@ AnimationClip: m_Curve: - serializedVersion: 3 time: 0 - value: 0.0000008940697 + value: 0.000002026558 inSlope: 0 outSlope: 0 - tangentMode: 34 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 3.4666667 - value: 0.0000008940697 - inSlope: 0.0000027057376 - outSlope: 0.0000027057376 - tangentMode: 34 + value: -0.00010430813 + inSlope: 0 + outSlope: 0 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 - time: 4.733333 - value: 0.000007748604 - inSlope: 0.000002642775 - outSlope: 0.000002642775 - tangentMode: 34 + time: 4.633333 + value: 0.0054243207 + inSlope: 0.005287116 + outSlope: 0.005287116 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 5.2 + value: 0.009060025 + inSlope: 0.0049656252 + outSlope: 0.0049656252 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 6.266667 + value: 0.013534844 + inSlope: 0 + outSlope: 0 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 7.1 - value: 0.0000074505806 - inSlope: -0.00000035181594 - outSlope: -0.00000035181594 - tangentMode: 34 + value: 0.013534844 + inSlope: 0 + outSlope: 0 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 9.266666 - value: 0.000006198883 - inSlope: 0.00000006005192 - outSlope: 0.00000006005192 - tangentMode: 34 + value: 0.013336897 + inSlope: -0.00016158941 + outSlope: -0.00016158941 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 12 - value: 0.000008106232 - inSlope: -0.00000009000178 - outSlope: -0.00000009000178 - tangentMode: 34 + value: 0.009250045 + inSlope: 0 + outSlope: 0 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 13.833333 - value: 0.0000064969063 - inSlope: -0.00019431591 - outSlope: -0.00019431591 - tangentMode: 34 + value: 0.013336897 + inSlope: 0.004855666 + outSlope: 0.004855666 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 15.366667 - value: -0.0005880594 - inSlope: -0.00038775403 - outSlope: -0.00038775403 - tangentMode: 34 + value: 0.13401282 + inSlope: 0 + outSlope: 0 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 @@ -941,73 +1385,91 @@ AnimationClip: m_Curve: - serializedVersion: 3 time: 0 - value: 0.000004887581 + value: 0.0000059604645 inSlope: 0 outSlope: 0 - tangentMode: 34 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 3.4666667 - value: 0.000004887581 - inSlope: 0.000013034597 - outSlope: 0.000013034597 - tangentMode: 34 + value: -0.0007401705 + inSlope: 0 + outSlope: 0 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 - time: 4.733333 - value: 0.000037908554 - inSlope: 0.000015124957 - outSlope: 0.000015124957 - tangentMode: 34 + time: 4.633333 + value: 0.17691767 + inSlope: 0.17258827 + outSlope: 0.17258827 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 5.2 + value: 0.2984128 + inSlope: 0.17653494 + outSlope: 0.17653494 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 6.266667 + value: 0.46525812 + inSlope: 0 + outSlope: 0 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 7.1 - value: 0.000047802925 - inSlope: 0.00000035724008 - outSlope: 0.00000035724008 - tangentMode: 34 + value: 0.46525812 + inSlope: 0 + outSlope: 0 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 9.266666 - value: 0.00004029274 - inSlope: -0.0000007518239 - outSlope: -0.0000007518239 - tangentMode: 34 + value: 0.46408093 + inSlope: -0.00096097286 + outSlope: -0.00096097286 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 12 - value: 0.000045657158 - inSlope: -0.0000039929837 - outSlope: -0.0000039929837 - tangentMode: 34 + value: 0.17659771 + inSlope: 0 + outSlope: 0 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 13.833333 - value: 0.000027418137 - inSlope: 0.08838296 - outSlope: 0.08838296 - tangentMode: 34 + value: 0.46408093 + inSlope: 0.3350204 + outSlope: 0.3350204 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 - serializedVersion: 3 time: 15.366667 - value: 0.27108383 - inSlope: 0.17677587 - outSlope: 0.17677587 - tangentMode: 34 + value: 1.3044997 + inSlope: 0 + outSlope: 0 + tangentMode: 136 weightedMode: 0 inWeight: 0.33333334 outWeight: 0.33333334 @@ -1019,6 +1481,72 @@ AnimationClip: classID: 4 script: {fileID: 0} flags: 0 + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 4.633333 + value: 41.400986 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 6.266667 + value: 41.400986 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 7.1 + value: 41.400986 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 9.266666 + value: 41.400986 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 13.833333 + value: 41.400986 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 15.366667 + value: 34.809307 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: Lens.FieldOfView + path: + classID: 114 + script: {fileID: 11500000, guid: f9dfa5b682dcd46bda6128250e975f58, type: 3} + flags: 0 m_EulerEditorCurves: - serializedVersion: 2 curve: diff --git a/Assets/Resources/Character/@000-050/@021_양도끼/Project/양도끼_250901_엣호엣호/양도끼_250901_엣호엣호_시가지A_Volume.asset b/Assets/Resources/Character/@000-050/@021_양도끼/Project/양도끼_250901_엣호엣호/양도끼_250901_엣호엣호_시가지A_Volume.asset index dfab3048e..9cf3614aa 100644 --- a/Assets/Resources/Character/@000-050/@021_양도끼/Project/양도끼_250901_엣호엣호/양도끼_250901_엣호엣호_시가지A_Volume.asset +++ b/Assets/Resources/Character/@000-050/@021_양도끼/Project/양도끼_250901_엣호엣호/양도끼_250901_엣호엣호_시가지A_Volume.asset @@ -230,7 +230,7 @@ MonoBehaviour: m_Value: 1 ApplyToCharacter: m_OverrideState: 1 - m_Value: 0.7 + m_Value: 0 ApplyToNonCharacter: m_OverrideState: 1 m_Value: 1 @@ -1763,8 +1763,8 @@ MonoBehaviour: m_OverrideState: 0 m_Value: 0 bottomDarkenEffectDrawHeight: - m_OverrideState: 0 - m_Value: 0.3 + m_OverrideState: 1 + m_Value: 0 bottomDarkenEffectIntensity: m_OverrideState: 0 m_Value: 0.25