From 7ecb8b11ada0db7d81a5dcf933f1d10f169e67d2 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Fri, 13 Jan 2023 21:26:05 +0800 Subject: [PATCH] Added support for rendering bone-less models using the animated shader --- Assets/Shaders/Anim_VS.glsl | 2 +- Assets/Shaders/Anim_VS.shshaderb | Bin 5597 -> 4341 bytes .../src/Animation/SHAnimatorComponent.cpp | 2 +- .../MiddleEnd/Interface/SHMeshLibrary.cpp | 2 ++ .../src/Resource/SHResourceManager.hpp | 4 +++- 5 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Assets/Shaders/Anim_VS.glsl b/Assets/Shaders/Anim_VS.glsl index d12cb34b..c9aa64aa 100644 --- a/Assets/Shaders/Anim_VS.glsl +++ b/Assets/Shaders/Anim_VS.glsl @@ -71,5 +71,5 @@ void main() boneMatrix += BoneMatrices.data[aBoneIndices[3]] * aBoneWeights[3]; // clip space for rendering - gl_Position = cameraData.vpMat * worldTransform * vec4 (aVertexPos, 1.0f); + gl_Position = cameraData.vpMat * worldTransform * boneMatrix * vec4 (aVertexPos, 1.0f); } \ No newline at end of file diff --git a/Assets/Shaders/Anim_VS.shshaderb b/Assets/Shaders/Anim_VS.shshaderb index 1560e232d160b78f166e493bb94fb1f6114fd935..c10bdc5a8ad53cb47aeb2f3d9b375b1e1728ae88 100644 GIT binary patch delta 1248 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 diff --git a/SHADE_Engine/src/Animation/SHAnimatorComponent.cpp b/SHADE_Engine/src/Animation/SHAnimatorComponent.cpp index 50ce1975..5eff2c45 100644 --- a/SHADE_Engine/src/Animation/SHAnimatorComponent.cpp +++ b/SHADE_Engine/src/Animation/SHAnimatorComponent.cpp @@ -86,7 +86,7 @@ namespace SHADE currClip = newClip; secsPerTick = 1.0f / currClip->GetTicksPerSecond(); - if (!rig) + if (rig) { updatePoseWithClip(0.0f); } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.cpp index df21343e..b0ca7f14 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.cpp @@ -185,7 +185,9 @@ namespace SHADE } else { + const auto OG_SIZE = vertBoneWeightStorage.size(); vertBoneWeightStorage.resize(vertBoneWeightStorage.size() + addJob.VertexCount); + std::fill_n(vertBoneWeightStorage.begin() + OG_SIZE, addJob.VertexCount, SHVec4(1.0f, 0.0f, 0.0f, 0.0f)); } indexStorage.insert ( diff --git a/SHADE_Engine/src/Resource/SHResourceManager.hpp b/SHADE_Engine/src/Resource/SHResourceManager.hpp index 5aff2529..ea6b4ad9 100644 --- a/SHADE_Engine/src/Resource/SHResourceManager.hpp +++ b/SHADE_Engine/src/Resource/SHResourceManager.hpp @@ -211,7 +211,9 @@ namespace SHADE assetData.VertexTangents.data(), assetData.VertexNormals.data(), assetData.Indices.size(), - assetData.Indices.data() + assetData.Indices.data(), + assetData.VertexBoneIndices.empty() ? nullptr : assetData.VertexBoneIndices.data(), + assetData.VertexBoneWeights.empty() ? nullptr : assetData.VertexBoneWeights.data() ); } // Textures