From 80a7fe701b4961f65ddf5446784893aab732c950 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 24 Jan 2023 23:31:00 +0800 Subject: [PATCH] Added debug draw for animation system --- Assets/Models/BoneIKTest4.gltf | 533 ++++++++++++++++++ Assets/Models/BoneIKTest4.shmodel | Bin 0 -> 29138 bytes Assets/Models/BoneIKTest4.shmodel.shmeta | 7 + Assets/Models/racoon.shmodel | Bin 681640 -> 681640 bytes .../src/Animation/SHAnimatorComponent.cpp | 14 +- .../src/Animation/SHAnimatorComponent.h | 2 +- SHADE_Engine/src/Animation/SHRig.cpp | 2 +- 7 files changed, 552 insertions(+), 6 deletions(-) create mode 100644 Assets/Models/BoneIKTest4.gltf create mode 100644 Assets/Models/BoneIKTest4.shmodel create mode 100644 Assets/Models/BoneIKTest4.shmodel.shmeta diff --git a/Assets/Models/BoneIKTest4.gltf b/Assets/Models/BoneIKTest4.gltf new file mode 100644 index 00000000..776e5c7f --- /dev/null +++ b/Assets/Models/BoneIKTest4.gltf @@ -0,0 +1,533 @@ +{ + "asset" : { + "generator" : "Khronos glTF Blender I/O v3.3.27", + "version" : "2.0" + }, + "scene" : 0, + "scenes" : [ + { + "name" : "Scene", + "nodes" : [ + 5 + ] + } + ], + "nodes" : [ + { + "name" : "Toe", + "rotation" : [ + 0.3402905762195587, + 2.2418998923967592e-07, + 1.3251393227164954e-07, + 0.9403203725814819 + ], + "translation" : [ + 4.526706700452854e-15, + 1.4782648086547852, + 2.9802322387695312e-08 + ] + }, + { + "children" : [ + 0 + ], + "name" : "Feet", + "rotation" : [ + 0.5031473636627197, + 2.7469864605222938e-08, + 5.997971896931631e-08, + 0.8642006516456604 + ], + "translation" : [ + -1.3515230601335304e-14, + 2.8003838062286377, + 8.940696716308594e-08 + ] + }, + { + "children" : [ + 1 + ], + "name" : "Knee", + "rotation" : [ + -0.18873976171016693, + 1.170667758287891e-07, + 5.999392094224731e-09, + 0.9820272326469421 + ], + "translation" : [ + 2.0332639651815532e-14, + 3.3708431720733643, + 5.960464477539063e-08 + ] + }, + { + "children" : [ + 2 + ], + "name" : "Thigh", + "rotation" : [ + 7.534745805060084e-08, + 0.06310665607452393, + 0.9980068206787109, + 4.764464822670789e-09 + ], + "scale" : [ + 1, + 1.000000238418579, + 1 + ], + "translation" : [ + 0, + 7.316200256347656, + -0.27762365341186523 + ] + }, + { + "mesh" : 0, + "name" : "Cube", + "skin" : 0 + }, + { + "children" : [ + 4, + 3 + ], + "name" : "Armature" + } + ], + "animations" : [ + { + "channels" : [ + { + "sampler" : 0, + "target" : { + "node" : 3, + "path" : "translation" + } + }, + { + "sampler" : 1, + "target" : { + "node" : 3, + "path" : "rotation" + } + }, + { + "sampler" : 2, + "target" : { + "node" : 3, + "path" : "scale" + } + }, + { + "sampler" : 3, + "target" : { + "node" : 2, + "path" : "translation" + } + }, + { + "sampler" : 4, + "target" : { + "node" : 2, + "path" : "rotation" + } + }, + { + "sampler" : 5, + "target" : { + "node" : 2, + "path" : "scale" + } + }, + { + "sampler" : 6, + "target" : { + "node" : 1, + "path" : "translation" + } + }, + { + "sampler" : 7, + "target" : { + "node" : 1, + "path" : "rotation" + } + }, + { + "sampler" : 8, + "target" : { + "node" : 1, + "path" : "scale" + } + }, + { + "sampler" : 9, + "target" : { + "node" : 0, + "path" : "translation" + } + }, + { + "sampler" : 10, + "target" : { + "node" : 0, + "path" : "rotation" + } + }, + { + "sampler" : 11, + "target" : { + "node" : 0, + "path" : "scale" + } + } + ], + "name" : "ArmatureAction", + "samplers" : [ + { + "input" : 7, + "interpolation" : "LINEAR", + "output" : 8 + }, + { + "input" : 7, + "interpolation" : "LINEAR", + "output" : 9 + }, + { + "input" : 7, + "interpolation" : "LINEAR", + "output" : 10 + }, + { + "input" : 7, + "interpolation" : "LINEAR", + "output" : 11 + }, + { + "input" : 7, + "interpolation" : "LINEAR", + "output" : 12 + }, + { + "input" : 7, + "interpolation" : "LINEAR", + "output" : 13 + }, + { + "input" : 7, + "interpolation" : "LINEAR", + "output" : 14 + }, + { + "input" : 7, + "interpolation" : "LINEAR", + "output" : 15 + }, + { + "input" : 7, + "interpolation" : "LINEAR", + "output" : 16 + }, + { + "input" : 7, + "interpolation" : "LINEAR", + "output" : 17 + }, + { + "input" : 7, + "interpolation" : "LINEAR", + "output" : 18 + }, + { + "input" : 7, + "interpolation" : "LINEAR", + "output" : 19 + } + ] + } + ], + "meshes" : [ + { + "name" : "Cube.001", + "primitives" : [ + { + "attributes" : { + "POSITION" : 0, + "NORMAL" : 1, + "TEXCOORD_0" : 2, + "JOINTS_0" : 3, + "WEIGHTS_0" : 4 + }, + "indices" : 5 + } + ] + } + ], + "skins" : [ + { + "inverseBindMatrices" : 6, + "joints" : [ + 3, + 2, + 1, + 0 + ], + "name" : "Armature" + } + ], + "accessors" : [ + { + "bufferView" : 0, + "componentType" : 5126, + "count" : 243, + "max" : [ + 0.5055701732635498, + 7.3792195320129395, + 1.4862254858016968 + ], + "min" : [ + -0.5055701732635498, + -8.90140370302106e-07, + -0.999980628490448 + ], + "type" : "VEC3" + }, + { + "bufferView" : 1, + "componentType" : 5126, + "count" : 243, + "type" : "VEC3" + }, + { + "bufferView" : 2, + "componentType" : 5126, + "count" : 243, + "type" : "VEC2" + }, + { + "bufferView" : 3, + "componentType" : 5121, + "count" : 243, + "type" : "VEC4" + }, + { + "bufferView" : 4, + "componentType" : 5126, + "count" : 243, + "type" : "VEC4" + }, + { + "bufferView" : 5, + "componentType" : 5123, + "count" : 252, + "type" : "SCALAR" + }, + { + "bufferView" : 6, + "componentType" : 5126, + "count" : 4, + "type" : "MAT4" + }, + { + "bufferView" : 7, + "componentType" : 5126, + "count" : 60, + "max" : [ + 2 + ], + "min" : [ + 0.03333333333333333 + ], + "type" : "SCALAR" + }, + { + "bufferView" : 8, + "componentType" : 5126, + "count" : 60, + "type" : "VEC3" + }, + { + "bufferView" : 9, + "componentType" : 5126, + "count" : 60, + "type" : "VEC4" + }, + { + "bufferView" : 10, + "componentType" : 5126, + "count" : 60, + "type" : "VEC3" + }, + { + "bufferView" : 11, + "componentType" : 5126, + "count" : 60, + "type" : "VEC3" + }, + { + "bufferView" : 12, + "componentType" : 5126, + "count" : 60, + "type" : "VEC4" + }, + { + "bufferView" : 13, + "componentType" : 5126, + "count" : 60, + "type" : "VEC3" + }, + { + "bufferView" : 14, + "componentType" : 5126, + "count" : 60, + "type" : "VEC3" + }, + { + "bufferView" : 15, + "componentType" : 5126, + "count" : 60, + "type" : "VEC4" + }, + { + "bufferView" : 16, + "componentType" : 5126, + "count" : 60, + "type" : "VEC3" + }, + { + "bufferView" : 17, + "componentType" : 5126, + "count" : 60, + "type" : "VEC3" + }, + { + "bufferView" : 18, + "componentType" : 5126, + "count" : 60, + "type" : "VEC4" + }, + { + "bufferView" : 19, + "componentType" : 5126, + "count" : 60, + "type" : "VEC3" + } + ], + "bufferViews" : [ + { + "buffer" : 0, + "byteLength" : 2916, + "byteOffset" : 0, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 2916, + "byteOffset" : 2916, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 1944, + "byteOffset" : 5832, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 972, + "byteOffset" : 7776, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 3888, + "byteOffset" : 8748, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 504, + "byteOffset" : 12636, + "target" : 34963 + }, + { + "buffer" : 0, + "byteLength" : 256, + "byteOffset" : 13140 + }, + { + "buffer" : 0, + "byteLength" : 240, + "byteOffset" : 13396 + }, + { + "buffer" : 0, + "byteLength" : 720, + "byteOffset" : 13636 + }, + { + "buffer" : 0, + "byteLength" : 960, + "byteOffset" : 14356 + }, + { + "buffer" : 0, + "byteLength" : 720, + "byteOffset" : 15316 + }, + { + "buffer" : 0, + "byteLength" : 720, + "byteOffset" : 16036 + }, + { + "buffer" : 0, + "byteLength" : 960, + "byteOffset" : 16756 + }, + { + "buffer" : 0, + "byteLength" : 720, + "byteOffset" : 17716 + }, + { + "buffer" : 0, + "byteLength" : 720, + "byteOffset" : 18436 + }, + { + "buffer" : 0, + "byteLength" : 960, + "byteOffset" : 19156 + }, + { + "buffer" : 0, + "byteLength" : 720, + "byteOffset" : 20116 + }, + { + "buffer" : 0, + "byteLength" : 720, + "byteOffset" : 20836 + }, + { + "buffer" : 0, + "byteLength" : 960, + "byteOffset" : 21556 + }, + { + "buffer" : 0, + "byteLength" : 720, + "byteOffset" : 22516 + } + ], + "buffers" : [ + { + "byteLength" : 23236, + "uri" : "data:application/octet-stream;base64,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AACAvwAAAAAAAACAAAAAADKrzjwl638/AAAAAKwPAD5+/X0/AAAAAK0PAD5+/X0/AACAv7e8zrBxjSy0AACAvwAAAAAOxDszAACAv+c9WjQGr9KzhOvOM95M8L1QO34/4JjPsnaqzjwk638/AAAAADKrzjwl638/AACAvwL6UbTt+tEzAACAvwAAAADKdLKxAACAvwAAAAAAAACAAAAAAK0PAL5+/X2/AAAAADSszrwk63+/AAAAAJyrzrwk63+/AACAvwAAAACEt9kzAACAvwAAAAAOxDszAACAv+c9WjQGr9KzAAAAAANN8D1PO36/AAAAAEUiXD7AA3q/AAAAAEoiXD7AA3q/AACAvwL6UbTt+tEzAACAv7e8zrBxjSy0AACAv+c9WjQGr9KzAAAAAJyrzrwk63+/AAAAANhM8D1PO36/AAAAAANN8D1PO36/AAAAAK0PAL5+/X2/AAAAAKoPAL5+/X2/AAAAADSszrwk63+/AACAP8bI0rSVjayzAACAP8G8zjDV+tEzAACAP8tm5zKy3aYzAAAAANhM8D1PO36/AAAAAANN8D1PO36/AAAAAEoiXD7AA3q/AACAPwAAAAAsj+azAACAPwAAAAABJtczAACAPxmuUjTODESzAAAAADSszrwk63+/AAAAAJyrzrwk63+/AAAAANhM8D1PO36/AACAP8bI0rSVjayzAACAP9L58TEZr9KzAACAPxmuUjTODESz4JjPsnaqzjwk638/AAAAADKrzjwl638/AAAAAK0PAD5+/X0/AACAPwAAAADKdLKxAACAP8G8zjDV+tEzAACAP8tm5zKy3aYzdJqEsk4iXL6/A3o/AAAAAE0iXL7AA3o/AAAAAIVM8L1RO34/AACAPwAAAAABJtczAACAP9L58TEZr9KzAACAPxmuUjTODESzAAAAAIVM8L1RO34/hOvOM95M8L1QO34/4JjPsnaqzjwk638/AACAP8bI0rSVjayzAACAP8G8zjDV+tEzAACAP9L58TEZr9KzAACAvwAAAAAAAACAAACAvwAAAACEt9kzAACAvwAAAADrhT2zDtJaszYiXD7AA3q/AAAAAFYiXD6/A3q/AAAAAEUiXD7AA3q/AACAvwAAAAAAAACAAACAvwAAAADrhT2zAACAvwAAAAAA6YQzVhwFs0UiXL7AA3o/dJqEsk4iXL6/A3o/AAAAAE0iXL7AA3o/VhwFs0UiXL7AA3o/1F6AM0EiXL7AA3o/AAAAAE0iXL7AA3o/AACAPwAAAAAsj+azAACAPwAAAAABJtczAACAPwAAAAAqmJgyDtJaszYiXD7AA3q/AAAAAEUiXD7AA3q/AAAAAEoiXD7AA3q/AACAPwAAAAAsj+azAACAPwAAAAAAAACAAACAPwAAAAAqmJgy1F6AM0EiXL7AA3o/oUL3sTAiXL7BA3o/AAAAADEiXL7AA3o/AACAPwAAAAC5+ccyAACAPwAAAAAAAACAAACAPwAAAAAqmJgyAACAvwAAAAAd1SWzAACAvwAAAAD66IQzAACAvwAAAAAA6YQzVhwFs0UiXL7AA3o/1F6AM0EiXL7AA3o/oUL3sTAiXL7BA3o/AACAvwAAAAAd1SWzAACAvwAAAADrhT2zAACAvwAAAAAA6YQzAAAAAFYiXD6/A3q/AAAAAFYiXD6/A3q/DtJaszYiXD7AA3q/AAAAAFYiXD6/A3q/AAAAAFYiXD6/A3q/AACAPwAAAAAAAACAAACAPwAAAAC5+ccyAACAPwAAAAAAAACAAADAPgAAgD8AAMA+AACAPwAAwD4AAIA/AAAAPgAAgD4AAAA+AACAPgAAAD4AAIA+AAAgPwAAgD8AACA/AACAPwAAID8AAIA/AABgPwAAgD4AAGA/AACAPgAAYD8AAIA+AADAPgAAQD8AAAA+AAAAPwAAAD4AAAA/AADAPgAAQD8AAMA+AABAPwAAID8AAEA/AAAgPwAAQD8AACA/AABAPwAAID8AAEA/AAAgPwAAQD8AACA/AABAPwAAwD4AAIA+AADAPgAAgD4AAMA+AACAPgAAwD4AAIA+AADAPgAAgD4AACA/AACAPgAAID8AAIA+AAAgPwAAgD4AACA/AACAPgAAID8AAIA+AADAPgAAAD8AAMA+AAAAPwAAwD4AAAA/AADAPgAAAD8AACA/AAAAPwAAID8AAAA/AAAgPwAAAD8AACA/AAAAPwAAID8AAAA/AADAPgAAYD8AAMA+AABgPwAAwD4AAGA/AAAAPgAAwD4AAAA+AADAPgAAAD4AAMA+AAAgPwAAYD8AACA/AABgPwAAID8AAGA/AAAgPwAAYD8AAGA/AADAPgAAYD8AAMA+AABgPwAAwD4AAMA+AADAPgAAwD4AAMA+AADAPgAAwD4AAMA+AADAPgAAwD4AAMA+AADAPgAAwD4AACA/AADAPgAAID8AAMA+AAAgPwAAwD4AACA/AADAPgAAID8AAMA+AAAgPwAAwD4AACA/AADAPgAAwD4AAIA/AADAPgAAgD8AAAA+AACAPgAAwD4AAAAAAAAgPwAAgD8AACA/AAAAAAAAID8AAAAAAABgPwAAgD4AAGA/AACAPgAAID8AAIA+AAAgPwAAgD4AACA/AACAPgAAID8AAIA+AADAPgAAgD4AAMA+AACAPgAAwD4AAIA+AADAPgAAgD4AAMA+AACAPgAAwD4AAKA+AADAPgAAoD4AAMA+AACgPgAAwD4AAKA+AADAPgAAoD4AACA/AABwPwAAID8AAHA/AAAgPwAAcD8AAGA/AACgPgAAYD8AAKA+AAAgPwAAoD4AACA/AACgPgAAID8AAKA+AAAgPwAAoD4AACA/AACgPgAAID8AAKA+AADAPgAAcD8AAMA+AABwPwAAwD4AAHA/AAAAPgAAoD4AAAA+AACgPgAAAD4AAKA+AAAgPwAAYD8AACA/AABgPwAAYD8AAMA+AABgPwAAwD4AACA/AABAPwAAID8AAEA/AAAgPwAAQD8AAGA/AAAAPwAAID8AAAA/AAAgPwAAAD8AACA/AAAAPwAAID8AAAA/AAAgPwAAwD4AACA/AADAPgAAID8AAMA+AAAgPwAAwD4AACA/AABgPwAAID8AAGA/AAAgPwAAYD8AAGA/AADAPgAAYD8AAMA+AABgPwAAwD4AACA/AABgPwAAID8AAGA/AAAgPwAAYD8AAGA/AADAPgAAYD8AAMA+AABgPwAAwD4AACA/iQNfPwAAID+JA18/AAAgP4kDXz8AAGA/AADAPgAAYD8AAMA+AABgPwAAwD4AACA/AABAPwAAID8AAEA/AAAgPwAAQD8BACA/AABAPwEAID8AAEA/AQAgPwAAQD8AACA/AABAPwAAID8AAEA/AAAgPwAAQD8AACA/AABAPwAAID8AAEA/AAAgPwAAQD8AACA/AABAPwAAID8AAEA/AAAgPwAAQD8AACA/AABAPwAAID8AAEA/AAAgPwAAQD8AACA/AAAAPwAAID8AAAA/AAAgPwAAAD8AACA/AAAAPwAAID8AAAA/AAAgPwAAAD8AACA/AAAAPwAAID8AAAA/AAAgPwAAAD8AACA/AAAAPwAAID8AAAA/AAAgPwAAAD8AACA/AAAAPwAAID8AAAA/AAAgPwAAAD8AACA/AAAAPwAAID8AAAA/AAAgPwAAAD8AACA/AADAPgAAID8AAMA+AAAgPwAAwD4AACA/AADAPgAAID8AAMA+AAAgPwAAwD4AACA/AADAPgAAID8AAMA+AAAgPwAAwD4AACA/AADAPgAAID8AAMA+AAAgPwAAwD4AACA/ePzAPgAAID94/MA+AAAgP3j8wD4AACA/ePzAPgAAID94/MA+AAAgP3j8wD4BACA/AABAPwEAID8AAEA/AQAgPwAAQD8BACA/AABAPwEAID8AAEA/AQAgPwAAQD8AACA/AABgPwAAID8AAGA/AAAgPwAAYD8AAGA/AADAPgAAYD8AAMA+AABgPwAAwD4AACA/AADAPgAAID8AAMA+AAAgPwAAwD4AACA/AADAPgAAID8AAMA+AAAgPwAAwD4BACA//v//PgEAID/+//8+AQAgP/7//z4BACA//v//PgEAID/+//8+AQAgP/7//z4AACA/AADAPgAAID8AAMA+AAAgPwAAwD4AACA/AADAPgAAID8AAMA+AAAgPwAAwD4AACA/AABgPwAAID8AAGA/AAAgPwAAYD8AAGA/AADAPgAAYD8AAMA+AABgPwAAwD4AACA/AABAPwAAID8AAEA/AAAgPwAAQD8AACA/AABAPwAAID8AAEA/AAAgPwAAAD8AACA/AAAAPwAAID8AAAA/AAAgPwAAAD8AACA/AAAAPwAAID8AAAA/AwIAAAMCAAADAgAAAwIAAAMCAAADAgAAAwIAAAMCAAADAgAAAwIAAAMCAAADAgAAAgEAAAIBAAACAQAAAgEAAAIBAAACAQAAAgEAAAIBAAACAQAAAgEAAAIBAAADAgAAAwIAAAMCAAADAgAAAwIAAAMCAAADAgAAAwIAAAMCAAADAgAAAgEAAAIBAAACAQAAAgEAAAIBAAACAQAAAgEAAAIBAAACAQAAAgMBAAIDAQACAwEAAgMBAAIDAQACAwEAAgEAAAIBAAACAQAAAgEAAAIBAAACAQAAAgEAAAIDAQACAwEAAgMBAAIDAQACAwEAAgMBAAIBAAACAQAAAgEAAAIBAAACAQAAAgEAAAIBAAADAgAAAwIAAAMCAAADAgAAAwIAAAMCAAADAgAAAwIAAAMCAAADAgAAAwIAAAMCAAADAgAA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ZmZmP+/ubj93d3c/AACAP0REhD+JiIg/zcyMPxERkT9VVZU/mpmZP97dnT8iIqI/ZmamP6uqqj/v7q4/MzOzP3d3tz+8u7s/AADAP0RExD+JiMg/zczMPxER0T9VVdU/mpnZP97d3T8iIuI/ZmbmP6uq6j/v7u4/MzPzP3d39z+8u/s/AAAAQGJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvmJk5idQHupAriSOvlPXw7IV8GU9qZh/P1U6hDKgSMayjYeTPb9Vfz8miJwyFELNssvQ1z0dk34/EFvQMvOh17LjExE+8Gp9P7BLBTNyx+OyyrMzPvUGfD8opyEz4xbwsomUUT6ylHo/Fo07M9sw+7KXkGk+d0B5PwjnUTPJ/QGzoux6PvMxeD+lymMzAMkEs7Wtgj5yhXc/c4FwM/qiBbPkYYQ+eUt3PzJddzMASgSz7fyCPvx6dz+GS3gzY60As2J1fj5a+Hc/SrRzM1gB9rLB5XQ+MpJ4P/sdazM/s+eydL1sPoQQeT/XHWEzLFvYskxyaT49Qnk/qvlYM+x11bJCLHg+Ml54P9AZVTPqNO2yWRqRPhCBdT+c8lIzSXsPs1v1sT77CXA/JAJRM8zcM7N5pds+Ej9nP5MvTTPGll6zeFEEPxYnWz/JIkUzpHeDs2W8GD/6cU0/o+g2M7pVkrMZJCg/WQpBP/2xITORB5qzM7UxP3lFOD9QOAYzpteasykXNj8d8TM/L8jLMmQflrPLXzY/fqczP3aMhDIsZ42zF38zP4+HNj+AS+UxGRmCM3oxLr/imDu/X4ocMeVuazP2Rye/O8lBvyCLPDLMM1UzZk4gvyiYR7/Gcp0yx7pOMxXhHL+PTEq/B1jFMjoWWTNmTiC/KJhHv6j4qDKGsG8z9kcnvzvJQb9cZFMyTXeEM3oxLr/imDu/MmB3McsIkLMWfzM/kIc2P3/8tzHvA5mzy182P36nMz/MZ3IyP/adsykXNj8d8TM/31vAMkhNnbMztTE/eUU4PxFtADO2pZWzGCQoP1sKQT84wxszIbCGs2W8GD/6cU0/4sswM2afZLN6UQQ/FSdbP/7cPjOWYjmzeqXbPg8/Zz+92EYz9YYUs1v1sT77CXA/Q7hKM5CW9rJPGpE+EYF1P0/JTDNkdN6yQix4PjJeeD/gFE8zLFvYskxyaT49Qnk/qvlYMzMX57IrVmw+phZ5P9ulYDMz6fSywqZzPsmleD/WEWozRBsAs3GafD6yFng/hItyM2L6A7MrKoI+xpZ3P1LcdzPd2QWzWj6EPjpQdz9um3gzSr4FswfBgz7yYHc/QCl0M3HRA7MoVYA+9NN3P8yRajPnVwCzp6VzPtqleD9KIlwzUUn3smSyYD7Ewnk/63xJMy0/7LI8M0g+Sw97P9lGMzPhjeCyMNgqPnJpfD91RhozNmXVsv+4CT6QrH0/MeX+MiUbzLJ58c090bN+P1zIyDLX+MWyqsKPPVdefz80tZkyU9fDshXwZT2pmH8/VTqEMgAAgD8EAIA/rwGAPwAAgD8DAIA/rwGAPwAAgD8EAIA/rwGAPwAAgD8FAIA/rwGAPwAAgD8FAIA/rwGAPwAAgD8EAIA/sAGAPwAAgD8EAIA/rwGAPwAAgD8EAIA/rwGAPwAAgD8EAIA/rwGAPwAAgD8EAIA/rwGAPwAAgD8EAIA/rwGAPwAAgD8EAIA/rwGAPwAAgD8EAIA/sAGAPwAAgD8EAIA/rwGAPwAAgD8EAIA/rwGAPwAAgD8EAIA/rwGAPwAAgD8EAIA/rwGAPwAAgD8EAIA/rwGAPwAAgD8FAIA/sAGAPwAAgD8EAIA/rwGAPwAAgD8EAIA/rwGAPwAAgD8EAIA/rwGAPwAAgD8FAIA/sAGAPwAAgD8FAIA/sAGAPwAAgD8GAIA/sQGAPwAAgD8EAIA/rwGAPwAAgD8DAIA/rgGAPwAAgD8EAIA/sAGAPwAAgD8EAIA/sAGAPwAAgD8FAIA/sAGAPwAAgD8EAIA/sAGAPwAAgD8EAIA/sAGAPwAAgD8DAIA/rgGAPwAAgD8EAIA/rgGAPwAAgD8GAIA/sQGAPwAAgD8FAIA/sAGAPwAAgD8FAIA/sAGAPwAAgD8EAIA/rwGAPwAAgD8EAIA/rwGAPwAAgD8EAIA/rwGAPwAAgD8EAIA/sAGAPwAAgD8EAIA/sAGAPwAAgD8EAIA/rwGAPwAAgD8EAIA/rwGAPwAAgD8EAIA/rwGAPwAAgD8EAIA/rwGAPwAAgD8FAIA/rwGAPwAAgD8EAIA/rwGAPwAAgD8EAIA/rwGAPwAAgD8EAIA/rwGAPwAAgD8EAIA/rwGAPwAAgD8EAIA/rwGAPwAAgD8EAIA/rwGAPwAAgD8FAIA/sAGAPwAAgD8EAIA/rwGAPwAAgD8EAIA/rwGAPwAAgD8EAIA/rwGAPwAAgD8EAIA/rwGAPwAAgD8EAIA/rwGAPwAAgD8EAIA/rwGAP1qApynmu1dATDSeM9jpHCnpu1dAzrFZNFpjnSnou1dAQBMHMeJUyynlu1dAiEB4NI23Cirlu1dAa8kcNMlZwCnmu1dARQwDNKScPynnu1dAFboDtEb/lSnqu1dAIkttNKkKnynpu1dA4HkMM+St8yjpu1dAYDMkM1yRjyjpu1dAVpgxNBrOLSnnu1dAYRs5tLDJwCnqu1dAe16RNHiLRyjlu1dA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AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8AAIA///9/PwAAgD8BAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA//v9/PwAAgD8AAIA///9/PwAAgD8BAIA/AACAPwAAgD8CAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAP+QADirHN70/974HNBccCyrHN70/EbrtM6lL5inIN70/qOG5MysGJirIN70/rp1HNDH2HCnHN70/Dd3fMx9OMyrIN70/KFArNH4l0ibJN70/Y98aNDKyJ6nGN70/IDx7MuKyQCrFN70/Usjms0VD7SnFN70/hDFMNFH+XynHN70/j9WGNLv6HynHN70/ya6LtBqVYyrHN70/dceENDVADirFN70/bosxNS0nFCrEN70/vENutOIfsyrGN70/stTZNPjZKynHN70/nfEaNBnKWSrHN70/11oCNC8OLirJN70/vhHns0QBeKnJN70/M4GlNNmsLarKN70/E5w7NG1HHyvFN70/SzwjNFnbIyrHN70/3Do9tIb9yCrHN70/kRA3tKJjCCrLN70/Xx5hNXEI0SrHN70/B6pHs5ZXairHN70/5i9mtF8cCCvCN70/+B1ENO09nyrHN70/JbZkNO1ZeqrIN70/cUWktBctnynGN70/zS/2tL04kCrCN70/+B1ENCyv1CnHN70/5i9mtHh8bqrHN70/LlCbNETHkCnLN70/Xx5hNcOeFCvHN70/khA3tKFAkCnJN70/MtTjMwhaHirFN70/xJEktCZTEirKN70/Epw7NPcpFyrHN70/JhWqM+QJFirMN70/niGXNBW5hCrHN70/5YcgtAZfpyrKN70/TR7pNDtPjynHN70/Gr2psi0nFCrEN70/vENutPPjKCrIN70/2YKutD2wbCrHN70/fAI1tB4CTirFN70/PrrjtPe55SrGN70/lssSNFXHaSjIN70/6emRM74KD6rIN70/B0X0M6D/VyrHN70/ldWGNKMYFSrIN70/xf7/MvQZDyrHN70/B56BM3uNUCrHN70/uaQ3NAZs8CnGN70/WkYnNLnK7SnIN70/U5UhNLGj9SnHN70/IZdKNKfMtynJN70/aNIlM+QADirHN70/974HNJE6rj7duHA0JkkONNa4cD+ROq4+4LhwNChJDjTWuHA/kTquPuC4cDQnSQ401rhwP5E6rj7euHA0J0kONNa4cD+ROq4+4LhwNChJDjTWuHA/kTquPuG4cDQlSQ401rhwP5E6rj7guHA0J0kONNa4cD+ROq4+4bhwNCdJDjTWuHA/kTquPt64cDQnSQ401rhwP5E6rj7duHA0J0kONNa4cD+SOq4+4LhwNCdJDjTVuHA/kTquPt24cDQoSQ401rhwP5E6rj7euHA0J0kONNa4cD+ROq4+3bhwNChJDjTWuHA/kTquPuG4cDQoSQ401rhwP5E6rj7duHA0J0kONNa4cD+ROq4+3rhwNChJDjTWuHA/kTquPty4cDQnSQ401rhwP5E6rj7cuHA0JkkONNa4cD+ROq4+3rhwNCdJDjTWuHA/kTquPt64cDQoSQ401rhwP5E6rj7huHA0LEkONNa4cD+ROq4+3bhwNCdJDjTWuHA/kTquPtu4cDQoSQ401rhwP5E6rj7guHA0KEkONNa4cD+ROq4+4bhwNClJDjTWuHA/kTquPuG4cDQoSQ401rhwP5E6rj7guHA0J0kONNa4cD+ROq4+4bhwNCVJDjTWuHA/kjquPuG4cDQmSQ401rhwP5E6rj7duHA0J0kONNa4cD+ROq4+3bhwNChJDjTWuHA/kTquPt64cDQnSQ401rhwP5E6rj7duHA0KEkONNa4cD+ROq4+4bhwNChJDjTWuHA/kTquPt64cDQnSQ401rhwP5I6rj7cuHA0KUkONNa4cD+ROq4+4LhwNCdJDjTWuHA/kTquPty4cDQpSQ401rhwP5E6rj7huHA0J0kONNa4cD+ROq4+3rhwNCdJDjTWuHA/kjquPuG4cDQpSQ401bhwP5E6rj7cuHA0J0kONNa4cD+ROq4+3LhwNCdJDjTWuHA/kTquPuG4cDQoSQ401rhwP5E6rj7cuHA0J0kONNa4cD+ROq4+4bhwNClJDjTWuHA/kjquPuC4cDQoSQ401bhwP5E6rj7buHA0J0kONNa4cD+ROq4+3bhwNCZJDjTWuHA/kjquPtu4cDQmSQ401bhwP5E6rj7auHA0JkkONNa4cD+ROq4+4rhwNCdJDjTWuHA/kjquPty4cDQpSQ401rhwP5E6rj7cuHA0KEkONNa4cD+ROq4+4LhwNCdJDjTWuHA/kTquPt24cDQoSQ401rhwP5E6rj7euHA0JkkONNa4cD+SOq4+3rhwNCdJDjTVuHA/kTquPt24cDQmSQ401rhwPwAAgD8BAIA/AACAPwAAgD8AAIA///9/PwAAgD8CAIA/AACAPwAAgD8CAIA/AACAPwAAgD8BAIA//v9/PwAAgD8BAIA///9/PwAAgD8BAIA///9/PwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA///9/PwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8AAIA//v9/PwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AQCAPwAAgD8BAIA/AACAPwAAgD8BAIA//f9/PwAAgD8BAIA///9/PwAAgD8BAIA///9/PwAAgD8BAIA///9/PwAAgD8BAIA/AACAPwAAgD8CAIA/AACAPwAAgD8BAIA///9/PwAAgD8CAIA///9/PwAAgD8BAIA//v9/PwAAgD8BAIA///9/PwAAgD8CAIA/AACAPwAAgD8AAIA//v9/PwAAgD8BAIA//v9/PwAAgD8CAIA///9/PwAAgD8CAIA/AQCAPwAAgD8CAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA///9/PwAAgD8BAIA//v9/PwAAgD8BAIA///9/PwAAgD8BAIA///9/PwAAgD8BAIA/AACAPwAAgD8AAIA///9/PwAAgD8BAIA/AACAPwAAgD8AAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8CAIA/AACAPwAAgD8BAIA/AACAPwAAgD8CAIA/AACAPwAAgD8CAIA/AACAPwAAgD8CAIA/AACAPwAAgD8BAIA/AACAPwAAgD8CAIA/AQCAPwAAgD8CAIA/AACAPwAAgD8BAIA///9/PwAAgD8BAIA//v9/PwAAgD8BAIA/AACAPwAAgD8CAIA/AACAPwAAgD8BAIA/AACAPw==" + } + ] +} diff --git a/Assets/Models/BoneIKTest4.shmodel b/Assets/Models/BoneIKTest4.shmodel new file mode 100644 index 0000000000000000000000000000000000000000..9443ea3d6e1268b24a05dfe256d13465b5bdfa65 GIT binary patch literal 29138 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 bQCUSDIpCuvWc8a@_|}!6Y`l!Ug4h26wCcl_ literal 0 HcmV?d00001 diff --git a/Assets/Models/BoneIKTest4.shmodel.shmeta b/Assets/Models/BoneIKTest4.shmodel.shmeta new file mode 100644 index 00000000..e1603435 --- /dev/null +++ b/Assets/Models/BoneIKTest4.shmodel.shmeta @@ -0,0 +1,7 @@ +Name: BoneIKTest4 +ID: 81814706 +Type: 4 +Sub Assets: +Name: Cube +ID: 137599708 +Type: 8 diff --git a/Assets/Models/racoon.shmodel b/Assets/Models/racoon.shmodel index 3fa9d9bd9e5f0adff8ab6f8cbb8a6fade7883247..816f6057de53868a6b64da641068c4486cf08da7 100644 GIT binary patch delta 4494 zcmZwKdx#rV6vy$iwzb=pA|eqHkswm+AXt$gBC^rCAd83;??pspMMO*y5eXI%XSCK` z*JsuEe#H7(?^Ud>>sqVs_@u6`@A3UuUw;_z525+TKg4q3gFE@Su&L^ZGauEu3oM6sf z2@|;n=A!FiI=A{Q&f}Nl=6=l0yW3zU+YZzD0rSy=Fk>EtNfPe>>g0l%%)vxnfVpTE zrV|q;$?lHz@(=Mlw}3*My#v!(4fD}QFk?Q2N%CdE;&5YK5(NxqvL9d~zrcL-2TWHJ zOp?D~&ix$&ZPteAQiQqa-~X|pG5zxkg-Kmq0n=sNwQl}-3boZJlw=LeG!BA!w-zSp z!7!5@QnWaXd+X35s_6y-v!%mfJ~{#>)gxiL`M_MQJQl{k7*}#M3T@*UnC|m1Nson@ zEQ0ygaXstgAL7?tuZQ{Y1v8}+U@kflCe;c|cTAYCojhQ%-Z(jB0QJU=Q(?N@!X!Nn zX0wej-x`DIRz0>?$G;H2DUGAhM`yvLdNxe=d6=thf=P1jKFjkDQQL;yhavx9dPu+| zJs)PW3t+BwAxzJgL5oLi>Eb~g_0c6Tsa^`x!wKeVn_-e%4l|7_)Z$|Nda|KV(yL%L ztHXTjYM7piFjKmAzlHom)GoSiKXy&Z2~3Yvn5oHO8@~~z{ogjAOxy(XwMm$* zPr>vkhxzGgm}%S+tl0la^HvmU9{@9Rx5Fg81LhX*glP}aXPSSAUzYFc!|sr@?uOa+ zJuq!RV1DF2m@VB8leqiccQU{s>GvADB!$mRr95d+XiRnkY2&$6=D} zfVt@>V7BojOqx&iTc`iima8B0A+dAMz$Bf4`Nd~p+OEN5*~5G*ehz5b&%?CWgSnBN zFjIOFCgqo4+9!6bmw%Xqw(>Fxr8)=m>W z-y>jV?pv6o-}S7Me~8~Ne&55eALV<1zJ$PJ`A3**{RA`ZpJDm}GhmxE>XBauP?uuq YH<*-vhw0l7Y;wcw@cf3^HCtx?1EA<&SO5S3 delta 4486 zcmb`FJ4{qT6o&t+uA(#+R5T=7D1|0ksD+ZyP*H3{VJNi`BPghV3cGVq7ZntIfDcsg zL5LQTYz#pYZHNU4fk<_liJJIGlmrWH)Wo~Xvb%Th%$?cCO(u8dzvq14oa|1_RZq-S zPevWb=@Cv$IEl5!U2EO7&RrpQt#{XkDdChwMkD{+XN*2Gj)kHq(KAjT7|m9^h?Vj+ zeP^^-0j+qGG{iWb;Mw_&(3dpGI8nd_b^cizVYG(&!qdw~mmJssKK0JJN+RBzI=_no ziJx*{VSJ@Nl_#>qcAjF4Hva{6{#3jEHABQW=?CgNlwUG_rhdk$qJe3Pq+Z5p6EEXW zH|jQv6lb)XfVysf{*B%+A|0gzF3~ijGe2J7{GaFv<4k@)|D2iRE4^Tx_3#4ynNH2_ zFFj+N^8huKx;V%GlNuOZ#Q?pc-xOwa2k>(I-fqRIoEqIfO#o2Q6BI>2b&P1~fFY`7 z2y32s{z|H6kTo!9*yOh=YG?GU^2~lCu!33{=U0Koa&LjkUrk+%3k3qb_~dCPbuccf zc`CmG;f=P^Ax2CM^i~>AEB<}d%;+r%FljtMM;MoEc$V|;rV7So8=!IGWWiplVq9@~ zmVP6(o+=rA`Cm}$ucZ*9KYyU^rga3yRUc35*KyK$Bb76*`GD!~cAG4JnD#IRiUnr0 z4YZ3fXy9e}Go6}U6YXbQHvl!gsJdM7|sUjDm8hozgI|!+eH9#JpF5tu{} z6Y~=HN(RJ;n3Wi@D1J%Yw*>}HoBTK=mL(pfcou#m@wxaT@vyK9D*dD4i^OPQ zK-F!ZijNXwN}kfMVtBGw;)lc|CD2o6KGdz0ycNR|j|&G5FC5%d8LNqxP1VFVHpTw~ Dc5wQ* diff --git a/SHADE_Engine/src/Animation/SHAnimatorComponent.cpp b/SHADE_Engine/src/Animation/SHAnimatorComponent.cpp index bd6228bd..7a397a4c 100644 --- a/SHADE_Engine/src/Animation/SHAnimatorComponent.cpp +++ b/SHADE_Engine/src/Animation/SHAnimatorComponent.cpp @@ -23,6 +23,7 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/SHVkUtil.h" #include "Graphics/MiddleEnd/Interface/SHGraphicsSystem.h" #include "ECS_Base/Managers/SHSystemManager.h" +#include "Tools/SHDebugDraw.h" namespace SHADE { @@ -113,7 +114,7 @@ namespace SHADE return; // Update time on the playback - currPlaybackTime += dt; + currPlaybackTime += dt * 0.01f; if (currPlaybackTime > currClip->GetTotalTime()) { currPlaybackTime = currPlaybackTime - currClip->GetTotalTime(); @@ -139,7 +140,7 @@ namespace SHADE updatePoseWithClip(CLOSEST_FRAME_IDX, poseTime, rig->GetRootNode(), SHMatrix::Identity); } - void SHAnimatorComponent::updatePoseWithClip(int closestFrameIndex, float poseTime, Handle node, const SHMatrix& parentMatrix) + void SHAnimatorComponent::updatePoseWithClip(int closestFrameIndex, float poseTime, Handle node, const SHMatrix& parentMatrix, std::optional worldPos) { // Check if there is a channel for this node const std::string& BONE_NAME = rig->GetName(node); @@ -160,15 +161,20 @@ namespace SHADE // Apply transformations to this node const int BONE_MTX_IDX = rig->GetNodeIndex(node); + std::optional position; if (BONE_MTX_IDX >= 0) { - boneMatrices[BONE_MTX_IDX] = node->OffsetMatrix * transformMatrix * rig->GetGlobalInverseMatrix(); + boneMatrices[BONE_MTX_IDX] = node->OffsetMatrix * transformMatrix; + position = SHVec3(boneMatrices[BONE_MTX_IDX]._41, boneMatrices[BONE_MTX_IDX]._42, boneMatrices[BONE_MTX_IDX]._43); + SHDebugDraw::Cube(position.value(), SHQuaternion{}, SHVec3(0.01f, 0.01f, 0.01f), SHColour::ORANGE); + if (worldPos.has_value()) + SHDebugDraw::Line(position.value(), worldPos.value(), SHColour::ORANGE); } // Apply pose to children for (auto& child : node->Children) { - updatePoseWithClip(closestFrameIndex, poseTime, child, transformMatrix); + updatePoseWithClip(closestFrameIndex, poseTime, child, transformMatrix, position); } } } diff --git a/SHADE_Engine/src/Animation/SHAnimatorComponent.h b/SHADE_Engine/src/Animation/SHAnimatorComponent.h index b47106f8..95123e8d 100644 --- a/SHADE_Engine/src/Animation/SHAnimatorComponent.h +++ b/SHADE_Engine/src/Animation/SHAnimatorComponent.h @@ -141,7 +141,7 @@ namespace SHADE /* Helper Functions */ /*---------------------------------------------------------------------------------*/ void updatePoseWithClip(float poseTime); - void updatePoseWithClip(int closestFrameIndex, float poseTime, Handle node, const SHMatrix& parentMatrix); + void updatePoseWithClip(int closestFrameIndex, float poseTime, Handle node, const SHMatrix& parentMatrix, std::optional worldPos = {}); template T getInterpolatedValue(const std::vector>& keyframes, int closestFrameIndex, float poseTime); diff --git a/SHADE_Engine/src/Animation/SHRig.cpp b/SHADE_Engine/src/Animation/SHRig.cpp index 306c9a00..87ae3bff 100644 --- a/SHADE_Engine/src/Animation/SHRig.cpp +++ b/SHADE_Engine/src/Animation/SHRig.cpp @@ -36,7 +36,7 @@ namespace SHADE rootNode = recurseCreateNode(asset, asset.root); if (rootNode) { - globalInverseMatrix = rootNode->OffsetMatrix; + globalInverseMatrix = SHMatrix::Inverse(rootNode->TransformMatrix); } }