From d4dc038e2e77ad8b0fddcfa323ee872cc2eb1d0b Mon Sep 17 00:00:00 2001 From: Ray Date: Tue, 24 Feb 2026 01:18:57 +0100 Subject: [PATCH] WARNING: BREAKING: REDESIGNED: **Animation System** #4606 REVIEWED: Reorganized structures for a clearer distinction between "skeleton", "skin" and "skinning" data ADDED: New structures: `ModelSkeleton`, `ModelAnimPose` (alias `Transform*`) ADDED: Runtime data `currentPose` and `boneMatrices` to `Model` structure ADDED: Support animation frames-blending, for timing control ADDED: Support animations blending, between two animations REVIEWED: All models animation loading functions ADDED: `UpdateModelAnimationEx()` for two animations blending REMOVED: `UpdateModelAnimationBones*()`, simplified API REVIEWED: Shader attributes/uniforms names for animations, for consistency REVIEWED: Multiple tweaks on animations loading for consistency between formats ADDED: example: `models_animation_timing` ADDED: example: `models_animation_blending` REVIEWED: example: `models_animation_gpu_skinning` REVIEWED: example: `models_animation_blend_custom` REVIEWED: All animated models loading examples --- examples/examples_list.txt | 2 +- .../models/models_animation_blend_custom.c | 278 +++--- .../models/models_animation_blend_custom.png | Bin 23976 -> 83827 bytes examples/models/models_animation_blending.c | 207 +++- examples/models/models_animation_blending.png | Bin 26143 -> 28003 bytes .../models/models_animation_gpu_skinning.c | 1 - .../models/models_animation_gpu_skinning.png | Bin 49846 -> 66853 bytes ...on_timming.c => models_animation_timing.c} | 65 +- examples/models/models_animation_timing.png | Bin 0 -> 23489 bytes examples/models/models_animation_timming.png | Bin 22154 -> 0 bytes examples/models/models_loading.c | 21 +- examples/models/models_loading_gltf.c | 37 +- examples/models/models_loading_gltf.png | Bin 26632 -> 22136 bytes examples/models/models_loading_iqm.c | 46 +- examples/models/models_loading_iqm.png | Bin 67020 -> 59771 bytes examples/models/models_loading_m3d.c | 132 +-- examples/models/models_loading_m3d.png | Bin 25881 -> 22930 bytes examples/models/models_loading_vox.c | 7 +- examples/models/models_loading_vox.png | Bin 23252 -> 37121 bytes ...cxproj => models_animation_timing.vcxproj} | 4 +- projects/VS2022/raylib.sln | 2 +- src/config.h | 35 +- src/raylib.h | 59 +- src/rcore.c | 8 +- src/rlgl.h | 60 +- src/rmodels.c | 895 ++++++++++-------- 26 files changed, 1052 insertions(+), 807 deletions(-) rename examples/models/{models_animation_timming.c => models_animation_timing.c} (57%) create mode 100644 examples/models/models_animation_timing.png delete mode 100644 examples/models/models_animation_timming.png rename projects/VS2022/examples/{models_animation_timming.vcxproj => models_animation_timing.vcxproj} (99%) diff --git a/examples/examples_list.txt b/examples/examples_list.txt index 042c1aed3..dc3312893 100644 --- a/examples/examples_list.txt +++ b/examples/examples_list.txt @@ -173,7 +173,7 @@ models;models_decals;★★★★;5.6-dev;5.6-dev;2025;2025;"JP Mortiboys";@them models;models_directional_billboard;★★☆☆;5.6-dev;5.6;2025;2025;"Robin";@RobinsAviary models;models_animation_blend_custom;★★★★;5.5;5.5;2026;2026;"dmitrii-brand";@dmitrii-brand models;models_animation_blending;☆☆☆☆;5.5;5.6-dev;2024;2024;"Kirandeep";@Kirandeep-Singh-Khehra -models;models_animation_timming;★★☆☆;5.6;5.6;2026;2026;"Ramon Santamaria";@raysan5 +models;models_animation_timing;★★☆☆;5.6;5.6;2026;2026;"Ramon Santamaria";@raysan5 shaders;shaders_ascii_rendering;★★☆☆;5.5;5.6;2025;2025;"Maicon Santana";@maiconpintoabreu shaders;shaders_basic_lighting;★★★★;3.0;4.2;2019;2025;"Chris Camacho";@chriscamacho shaders;shaders_model_shader;★★☆☆;1.3;3.7;2014;2025;"Ramon Santamaria";@raysan5 diff --git a/examples/models/models_animation_blend_custom.c b/examples/models/models_animation_blend_custom.c index 76dba6a69..f846a125b 100644 --- a/examples/models/models_animation_blend_custom.c +++ b/examples/models/models_animation_blend_custom.c @@ -6,7 +6,7 @@ * * Example originally created with raylib 5.5, last time updated with raylib 5.5 * -* This example demonstrates per-bone animation blending, allowing smooth transitions +* DETAILS: Example demonstrates per-bone animation blending, allowing smooth transitions * between two animations by interpolating bone transforms. This is useful for: * - Blending movement animations (walk/run) with action animations (jump/attack) * - Creating smooth animation transitions @@ -27,8 +27,10 @@ #include "raymath.h" -#include // Required for: memcpy() -#include // Required for: NULL +#include "rlgl.h" // Requried for: rlUpdateVertexBuffer() (CPU-skinning) + +#include // Required for: memcpy() +#include // Required for: NULL #if defined(PLATFORM_DESKTOP) #define GLSL_VERSION 330 @@ -40,8 +42,8 @@ // Module Functions Declaration //------------------------------------------------------------------------------------ static bool IsUpperBodyBone(const char *boneName); -static void BlendModelAnimationsBones(Model *model, ModelAnimation *anim1, int frame1, - ModelAnimation *anim2, int frame2, float blendFactor, bool upperBodyBlend); +static void UpdateModelAnimationBones(Model *model, ModelAnimation *anim1, int frame1, + ModelAnimation *anim2, int frame2, float blend, bool upperBodyBlend); //------------------------------------------------------------------------------------ // Program main entry point @@ -57,51 +59,40 @@ int main(void) // Define the camera to look into our 3d world Camera camera = { 0 }; - camera.position = (Vector3){ 5.0f, 5.0f, 5.0f }; // Camera position - camera.target = (Vector3){ 0.0f, 2.0f, 0.0f }; // Camera looking at point + camera.position = (Vector3){ 4.0f, 4.0f, 4.0f }; // Camera position + camera.target = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera looking at point camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target) camera.fovy = 45.0f; // Camera field-of-view Y camera.projection = CAMERA_PERSPECTIVE; // Camera projection type // Load gltf model - Model characterModel = LoadModel("resources/models/gltf/greenman.glb"); + Model model = LoadModel("resources/models/gltf/greenman.glb"); + Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model position // Load skinning shader + // WARNING: GPU skinning must be enabled in raylib with a compilation flag, + // if not enabled, CPU skinning will be used instead Shader skinningShader = LoadShader(TextFormat("resources/shaders/glsl%i/skinning.vs", GLSL_VERSION), TextFormat("resources/shaders/glsl%i/skinning.fs", GLSL_VERSION)); - - characterModel.materials[1].shader = skinningShader; + model.materials[1].shader = skinningShader; // Load gltf model animations - int animsCount = 0; - ModelAnimation *modelAnimations = LoadModelAnimations("resources/models/gltf/greenman.glb", &animsCount); + int animCount = 0; + ModelAnimation *anims = LoadModelAnimations("resources/models/gltf/greenman.glb", &animCount); - // Log all available animations for debugging - TraceLog(LOG_INFO, "Found %d animations:", animsCount); - for (int i = 0; i < animsCount; i++) - { - TraceLog(LOG_INFO, " Animation %d: %s (%d frames)", i, modelAnimations[i].name, modelAnimations[i].keyframeCount); - } - - // Use specific indices: walk/move = 2, attack = 3 - unsigned int animIndex1 = 2; // Walk/Move animation (index 2) - unsigned int animIndex2 = 3; // Attack animation (index 3) + // Use specific animation indices: 2-walk/move, 3-attack + unsigned int animIndex0 = 2; // Walk/Move animation (index 2) + unsigned int animIndex1 = 3; // Attack animation (index 3) + unsigned int animCurrentFrame0 = 0; unsigned int animCurrentFrame1 = 0; - unsigned int animCurrentFrame2 = 0; // Validate indices - if (animIndex1 >= animsCount) animIndex1 = 0; - if (animIndex2 >= animsCount) animIndex2 = (animsCount > 1) ? 1 : 0; - - TraceLog(LOG_INFO, "Using Walk (index %d): %s", animIndex1, modelAnimations[animIndex1].name); - TraceLog(LOG_INFO, "Using Attack (index %d): %s", animIndex2, modelAnimations[animIndex2].name); + if (animIndex0 >= animCount) animIndex0 = 0; + if (animIndex1 >= animCount) animIndex1 = (animCount > 1) ? 1 : 0; - Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model position - bool upperBodyBlend = true; // Toggle: true = upper/lower body blending, false = uniform blending (50/50) + bool upperBodyBlend = true; // Toggle: true = upper/lower body blending, false = uniform blending (50/50) - DisableCursor(); // Limit cursor to relative movement inside the window - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -109,24 +100,28 @@ int main(void) { // Update //---------------------------------------------------------------------------------- - UpdateCamera(&camera, CAMERA_THIRD_PERSON); + UpdateCamera(&camera, CAMERA_ORBITAL); // Toggle upper/lower body blending mode (SPACE key) if (IsKeyPressed(KEY_SPACE)) upperBodyBlend = !upperBodyBlend; // Update animation frames - ModelAnimation anim1 = modelAnimations[animIndex1]; - ModelAnimation anim2 = modelAnimations[animIndex2]; + ModelAnimation anim0 = anims[animIndex0]; + ModelAnimation anim1 = anims[animIndex1]; + animCurrentFrame0 = (animCurrentFrame0 + 1)%anim0.keyframeCount; animCurrentFrame1 = (animCurrentFrame1 + 1)%anim1.keyframeCount; - animCurrentFrame2 = (animCurrentFrame2 + 1)%anim2.keyframeCount; // Blend the two animations - characterModel.transform = MatrixTranslate(position.x, position.y, position.z); // When upperBodyBlend is ON: upper body = attack (1.0), lower body = walk (0.0) // When upperBodyBlend is OFF: uniform blend at 0.5 (50% walk, 50% attack) - float blendFactor = upperBodyBlend ? 1.0f : 0.5f; - BlendModelAnimationsBones(&characterModel, &anim1, animCurrentFrame1, &anim2, animCurrentFrame2, blendFactor, upperBodyBlend); + float blendFactor = (upperBodyBlend? 1.0f : 0.5f); + UpdateModelAnimationBones(&model, &anim0, animCurrentFrame0, + &anim1, animCurrentFrame1, blendFactor, upperBodyBlend); + + // raylib provided animation blending function + //UpdateModelAnimationEx(model, anim0, (float)animCurrentFrame0, + // anim1, (float)animCurrentFrame1, blendFactor); //---------------------------------------------------------------------------------- // Draw @@ -137,19 +132,18 @@ int main(void) BeginMode3D(camera); - // Draw character mesh, pose calculation is done in shader (GPU skinning) - DrawMesh(characterModel.meshes[0], characterModel.materials[1], characterModel.transform); + DrawModel(model, position, 1.0f, WHITE); DrawGrid(10, 1.0f); EndMode3D(); // Draw UI - DrawText("BONE BLENDING EXAMPLE", 10, 10, 20, DARKGRAY); - DrawText(TextFormat("Walk (Animation 2): %s", anim1.name), 10, 35, 10, GRAY); - DrawText(TextFormat("Attack (Animation 3): %s", anim2.name), 10, 50, 10, GRAY); - DrawText(TextFormat("Mode: %s", upperBodyBlend ? "Upper/Lower Body Blending" : "Uniform Blending"), 10, 65, 10, GRAY); - DrawText("SPACE - Toggle blending mode", 10, GetScreenHeight() - 20, 10, DARKGRAY); + DrawText(TextFormat("ANIM 0: %s", anim0.name), 10, 10, 20, GRAY); + DrawText(TextFormat("ANIM 1: %s", anim1.name), 10, 40, 20, GRAY); + DrawText(TextFormat("[SPACE] Toggle blending mode: %s", + upperBodyBlend? "Upper/Lower Body Blending" : "Uniform Blending"), + 10, GetScreenHeight() - 30, 20, DARKGRAY); EndDrawing(); //---------------------------------------------------------------------------------- @@ -157,8 +151,8 @@ int main(void) // De-Initialization //-------------------------------------------------------------------------------------- - UnloadModelAnimations(modelAnimations, animsCount); // Unload model animation - UnloadModel(characterModel); // Unload model and meshes/material + UnloadModelAnimations(anims, animCount); // Unload model animation + UnloadModel(model); // Unload model and meshes/material UnloadShader(skinningShader); // Unload GPU skinning shader CloseWindow(); // Close window and OpenGL context @@ -199,74 +193,138 @@ static bool IsUpperBodyBone(const char *boneName) } // Blend two animations per-bone with selective upper/lower body blending -static void BlendModelAnimationsBones(Model *model, ModelAnimation *anim1, int frame1, - ModelAnimation *anim2, int frame2, float blendFactor, bool upperBodyBlend) +static void UpdateModelAnimationBones(Model *model, ModelAnimation *anim0, int frame0, + ModelAnimation *anim1, int frame1, float blend, bool upperBodyBlend) { // Validate inputs - if (anim1->boneCount == 0 || anim1->keyframePoses == NULL || - anim2->boneCount == 0 || anim2->keyframePoses == NULL || - model->skeleton.boneCount == 0 || model->skeleton.bindPose == NULL) + if ((anim0->boneCount != 0) && (anim0->keyframePoses != NULL) && + (anim1->boneCount != 0) && (anim1->keyframePoses != NULL) && + (model->skeleton.boneCount != 0) && (model->skeleton.bindPose != NULL)) { - return; - } - - // Clamp blend factor to [0, 1] - blendFactor = fminf(1.0f, fmaxf(0.0f, blendFactor)); - - // Ensure frame indices are valid - if (frame1 >= anim1->keyframeCount) frame1 = anim1->keyframeCount - 1; - if (frame2 >= anim2->keyframeCount) frame2 = anim2->keyframeCount - 1; - if (frame1 < 0) frame1 = 0; - if (frame2 < 0) frame2 = 0; - - // Get bone count (use minimum of all to be safe) - int boneCount = model->skeleton.boneCount; - if (anim1->boneCount < boneCount) boneCount = anim1->boneCount; - if (anim2->boneCount < boneCount) boneCount = anim2->boneCount; - - // Blend each bone - for (int boneId = 0; boneId < boneCount; boneId++) - { - // Determine blend factor for this bone - float boneBlendFactor = blendFactor; + // Clamp blend factor to [0, 1] + blend = fminf(1.0f, fmaxf(0.0f, blend)); - // If upper body blending is enabled, use different blend factors for upper vs lower body - if (upperBodyBlend) + // Ensure frame indices are valid + if (frame0 >= anim0->keyframeCount) frame0 = anim0->keyframeCount - 1; + if (frame1 >= anim1->keyframeCount) frame1 = anim1->keyframeCount - 1; + if (frame0 < 0) frame0 = 0; + if (frame1 < 0) frame1 = 0; + + // Get bone count (use minimum of all to be safe) + int boneCount = model->skeleton.boneCount; + if (anim0->boneCount < boneCount) boneCount = anim0->boneCount; + if (anim1->boneCount < boneCount) boneCount = anim1->boneCount; + + // Blend each bone + for (int boneIndex = 0; boneIndex < boneCount; boneIndex++) { - const char *boneName = model->skeleton.bones[boneId].name; - bool isUpperBody = IsUpperBodyBone(boneName); + // Determine blend factor for this bone + float boneBlendFactor = blend; - // Upper body: use anim2 (attack), Lower body: use anim1 (walk) - // blendFactor = 0.0 means full anim1 (walk), 1.0 means full anim2 (attack) - if (isUpperBody) boneBlendFactor = blendFactor; // Upper body: blend towards anim2 (attack) - else boneBlendFactor = 1.0f - blendFactor; // Lower body: blend towards anim1 (walk) - invert the blend + // If upper body blending is enabled, use different blend factors for upper vs lower body + if (upperBodyBlend) + { + const char *boneName = model->skeleton.bones[boneIndex].name; + bool isUpperBody = IsUpperBodyBone(boneName); + + // Upper body: use anim1 (attack), Lower body: use anim0 (walk) + // blend = 0.0 means full anim0 (walk), 1.0 means full anim1 (attack) + if (isUpperBody) boneBlendFactor = blend; // Upper body: blend towards anim1 (attack) + else boneBlendFactor = 1.0f - blend; // Lower body: blend towards anim0 (walk) - invert the blend + } + + // Get transforms from both animations + Transform *bindTransform = &model->skeleton.bindPose[boneIndex]; + Transform *animTransform0 = &anim0->keyframePoses[frame0][boneIndex]; + Transform *animTransform1 = &anim1->keyframePoses[frame1][boneIndex]; + + // Blend the transforms + Transform blended = { 0 }; + blended.translation = Vector3Lerp(animTransform0->translation, animTransform1->translation, boneBlendFactor); + blended.rotation = QuaternionSlerp(animTransform0->rotation, animTransform1->rotation, boneBlendFactor); + blended.scale = Vector3Lerp(animTransform0->scale, animTransform1->scale, boneBlendFactor); + + // Convert bind pose to matrix + Matrix bindMatrix = MatrixMultiply(MatrixMultiply( + MatrixScale(bindTransform->scale.x, bindTransform->scale.y, bindTransform->scale.z), + QuaternionToMatrix(bindTransform->rotation)), + MatrixTranslate(bindTransform->translation.x, bindTransform->translation.y, bindTransform->translation.z)); + + // Convert blended transform to matrix + Matrix blendedMatrix = MatrixMultiply(MatrixMultiply( + MatrixScale(blended.scale.x, blended.scale.y, blended.scale.z), + QuaternionToMatrix(blended.rotation)), + MatrixTranslate(blended.translation.x, blended.translation.y, blended.translation.z)); + + // Calculate final bone matrix (similar to UpdateModelAnimationBones) + model->boneMatrices[boneIndex] = MatrixMultiply(MatrixInvert(bindMatrix), blendedMatrix); + } + + // CPU skinning, updates CPU buffers and uploads them to GPU (if available) + // NOTE: Fallback in case GPU skinning is not supported or enabled + for (int m = 0; m < model->meshCount; m++) + { + Mesh mesh = model->meshes[m]; + Vector3 animVertex = { 0 }; + Vector3 animNormal = { 0 }; + const int vertexValuesCount = mesh.vertexCount*3; + + int boneIndex = 0; + int boneCounter = 0; + float boneWeight = 0.0f; + bool bufferUpdateRequired = false; // Flag to check when anim vertex information is updated + + // Skip if missing bone data or missing anim buffers initialization + if ((mesh.boneWeights == NULL) || (mesh.boneIndices == NULL) || + (mesh.animVertices == NULL) || (mesh.animNormals == NULL)) continue; + + for (int vCounter = 0; vCounter < vertexValuesCount; vCounter += 3) + { + mesh.animVertices[vCounter] = 0; + mesh.animVertices[vCounter + 1] = 0; + mesh.animVertices[vCounter + 2] = 0; + if (mesh.animNormals != NULL) + { + mesh.animNormals[vCounter] = 0; + mesh.animNormals[vCounter + 1] = 0; + mesh.animNormals[vCounter + 2] = 0; + } + + // Iterates over 4 bones per vertex + for (int j = 0; j < 4; j++, boneCounter++) + { + boneWeight = mesh.boneWeights[boneCounter]; + boneIndex = mesh.boneIndices[boneCounter]; + + // Early stop when no transformation will be applied + if (boneWeight == 0.0f) continue; + animVertex = (Vector3){ mesh.vertices[vCounter], mesh.vertices[vCounter + 1], mesh.vertices[vCounter + 2] }; + animVertex = Vector3Transform(animVertex, model->boneMatrices[boneIndex]); + mesh.animVertices[vCounter] += animVertex.x*boneWeight; + mesh.animVertices[vCounter + 1] += animVertex.y*boneWeight; + mesh.animVertices[vCounter + 2] += animVertex.z*boneWeight; + bufferUpdateRequired = true; + + // Normals processing + // NOTE: We use meshes.baseNormals (default normal) to calculate meshes.normals (animated normals) + if ((mesh.normals != NULL) && (mesh.animNormals != NULL )) + { + animNormal = (Vector3){ mesh.normals[vCounter], mesh.normals[vCounter + 1], mesh.normals[vCounter + 2] }; + animNormal = Vector3Transform(animNormal, MatrixTranspose(MatrixInvert(model->boneMatrices[boneIndex]))); + mesh.animNormals[vCounter] += animNormal.x*boneWeight; + mesh.animNormals[vCounter + 1] += animNormal.y*boneWeight; + mesh.animNormals[vCounter + 2] += animNormal.z*boneWeight; + } + } + } + + if (bufferUpdateRequired) + { + // Update GPU vertex buffers with updated data (position + normals) + rlUpdateVertexBuffer(mesh.vboId[SHADER_LOC_VERTEX_POSITION], mesh.animVertices, mesh.vertexCount*3*sizeof(float), 0); + if (mesh.normals != NULL) rlUpdateVertexBuffer(mesh.vboId[SHADER_LOC_VERTEX_NORMAL], mesh.animNormals, mesh.vertexCount*3*sizeof(float), 0); + } } - - // Get transforms from both animations - Transform *bindTransform = &model->skeleton.bindPose[boneId]; - Transform *anim1Transform = &anim1->keyframePoses[frame1][boneId]; - Transform *anim2Transform = &anim2->keyframePoses[frame2][boneId]; - - // Blend the transforms - Transform blended = { 0 }; - blended.translation = Vector3Lerp(anim1Transform->translation, anim2Transform->translation, boneBlendFactor); - blended.rotation = QuaternionSlerp(anim1Transform->rotation, anim2Transform->rotation, boneBlendFactor); - blended.scale = Vector3Lerp(anim1Transform->scale, anim2Transform->scale, boneBlendFactor); - - // Convert bind pose to matrix - Matrix bindMatrix = MatrixMultiply(MatrixMultiply( - MatrixScale(bindTransform->scale.x, bindTransform->scale.y, bindTransform->scale.z), - QuaternionToMatrix(bindTransform->rotation)), - MatrixTranslate(bindTransform->translation.x, bindTransform->translation.y, bindTransform->translation.z)); - - // Convert blended transform to matrix - Matrix blendedMatrix = MatrixMultiply(MatrixMultiply( - MatrixScale(blended.scale.x, blended.scale.y, blended.scale.z), - QuaternionToMatrix(blended.rotation)), - MatrixTranslate(blended.translation.x, blended.translation.y, blended.translation.z)); - - // Calculate final bone matrix (similar to UpdateModelAnimationBones) - model->boneMatrices[boneId] = MatrixMultiply(MatrixInvert(bindMatrix), blendedMatrix); } } diff --git a/examples/models/models_animation_blend_custom.png b/examples/models/models_animation_blend_custom.png index 0f6dbca87898af2cbf5bb535fab3ba46c6ca85fe..95ea1dad2abe0d5e93ef30d769abe9030ae3bfdd 100644 GIT binary patch literal 83827 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%0AL{!*chZs4X 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 ZOg|xFr7C(LgMop8!PC{xWt~$(696j%6@dT% literal 23976 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 diff --git a/examples/models/models_animation_blending.c b/examples/models/models_animation_blending.c index 39623cd28..a5d3d4b1d 100644 --- a/examples/models/models_animation_blending.c +++ b/examples/models/models_animation_blending.c @@ -21,7 +21,8 @@ #include "raylib.h" -#define clamp(x,a,b) ((x < a)? a : (x > b)? b : x) +#define RAYGUI_IMPLEMENTATION +#include "raygui.h" // Required for: UI controls #if defined(PLATFORM_DESKTOP) #define GLSL_VERSION 330 @@ -43,31 +44,58 @@ int main(void) // Define the camera to look into our 3d world Camera camera = { 0 }; - camera.position = (Vector3){ 8.0f, 8.0f, 8.0f }; // Camera position + camera.position = (Vector3){ 6.0f, 6.0f, 6.0f }; // Camera position camera.target = (Vector3){ 0.0f, 2.0f, 0.0f }; // Camera looking at point camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target) camera.fovy = 45.0f; // Camera field-of-view Y camera.projection = CAMERA_PERSPECTIVE; // Camera projection type // Load model - Model characterModel = LoadModel("resources/models/gltf/robot.glb"); // Load character model - + Model model = LoadModel("resources/models/gltf/robot.glb"); // Load character model + Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model world position + // Load skinning shader + // WARNING: It requires SUPPORT_GPU_SKINNING enabled on raylib (disabled by default) Shader skinningShader = LoadShader(TextFormat("resources/shaders/glsl%i/skinning.vs", GLSL_VERSION), TextFormat("resources/shaders/glsl%i/skinning.fs", GLSL_VERSION)); // Assign skinning shader to all materials shaders - for (int i = 0; i < characterModel.materialCount; i++) characterModel.materials[i].shader = skinningShader; + //for (int i = 0; i < model.materialCount; i++) model.materials[i].shader = skinningShader; // Load model animations - int animsCount = 0; - ModelAnimation *modelAnimations = LoadModelAnimations("resources/models/gltf/robot.glb", &animsCount); + int animCount = 0; + ModelAnimation *anims = LoadModelAnimations("resources/models/gltf/robot.glb", &animCount); - // Define animation variables - unsigned int animIndex0 = 0; - unsigned int animIndex1 = 0; - float animCurrentFrame = 0; - float blendFactor = 0.5f; + // Animation playing variables + // NOTE: Two animations are played with a smooth transition between them + int currentAnimPlaying = 0; // Current animation playing (0 o 1) + int nextAnimToPlay = 1; // Next animation to play (to transition) + bool animTransition = false; // Flag to register anim transition state + + int animIndex0 = 10; // Current animation playing (walking) + float animCurrentFrame0 = 0.0f; // Current animation frame (supporting interpolated frames) + float animFrameSpeed0 = 0.5f; // Current animation play speed + int animIndex1 = 6; // Next animation to play (running) + float animCurrentFrame1 = 0.0f; // Next animation frame (supporting interpolated frames) + float animFrameSpeed1 = 0.5f; // Next animation play speed + + float animBlendFactor = 0.0f; // Blend factor from anim0[frame0] --> anim1[frame1], [0.0f..1.0f] + // NOTE: 0.0f results in full anim0[] and 1.0f in full anim1[] + + float animBlendTime = 2.0f; // Time to blend from one playing animation to another (in seconds) + float animBlendTimeCounter = 0.0f; // Time counter (delta time) + + bool animPause = false; // Pause animation + + // UI required variables + char *animNames[64] = { 0 }; // Pointers to animation names for dropdown box + for (int i = 0; i < animCount; i++) animNames[i] = anims[i].name; + + bool dropdownEditMode0 = false; + bool dropdownEditMode1 = false; + float animFrameProgress0 = 0.0f; + float animFrameProgress1 = 0.0f; + float animBlendProgress = 0.0f; SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- @@ -79,23 +107,100 @@ int main(void) //---------------------------------------------------------------------------------- UpdateCamera(&camera, CAMERA_ORBITAL); - // Select current animation - if (IsKeyPressed(KEY_T)) animIndex0 = (animIndex0 + 1)%animsCount; - else if (IsKeyPressed(KEY_G)) animIndex0 = (animIndex0 + animsCount - 1)%animsCount; - if (IsKeyPressed(KEY_Y)) animIndex1 = (animIndex1 + 1)%animsCount; - else if (IsKeyPressed(KEY_H)) animIndex1 = (animIndex1 + animsCount - 1)%animsCount; - - // Select blend factor - if (IsKeyPressed(KEY_U)) blendFactor = clamp(blendFactor - 0.1, 0.0f, 1.0f); - else if (IsKeyPressed(KEY_J)) blendFactor = clamp(blendFactor + 0.1, 0.0f, 1.0f); + if (IsKeyPressed(KEY_P)) animPause = !animPause; - // Update animation - animCurrentFrame += 0.2f; + if (!animPause) + { + // Start transition from anim0[] to anim1[] + if (IsKeyPressed(KEY_SPACE) && !animTransition) + { + if (currentAnimPlaying == 0) + { + // Transition anim0 --> anim1 + nextAnimToPlay = 1; + animCurrentFrame1 = 0.0f; + } + else + { + // Transition anim1 --> anim0 + nextAnimToPlay = 0; + animCurrentFrame0 = 0.0f; + } - // Update bones - // Note: Same animation frame index is used below. By default it loops both animations - UpdateModelAnimationEx(characterModel, modelAnimations[animIndex0], animCurrentFrame, - modelAnimations[animIndex1], animCurrentFrame, blendFactor); + // Set animation transition + animTransition = true; + animBlendTimeCounter = 0.0f; + animBlendFactor = 0.0f; + } + + if (animTransition) + { + // Playing anim0 and anim1 at the same time + animCurrentFrame0 += animFrameSpeed0; + if (animCurrentFrame0 >= anims[animIndex0].keyframeCount) animCurrentFrame0 = 0.0f; + animCurrentFrame1 += animFrameSpeed1; + if (animCurrentFrame1 >= anims[animIndex1].keyframeCount) animCurrentFrame1 = 0.0f; + + // Increment blend factor over time to transition from anim0 --> anim1 over time + // NOTE: Time blending could be other than linear, using some easing + animBlendFactor = animBlendTimeCounter/animBlendTime; + animBlendTimeCounter += GetFrameTime(); + animBlendProgress = animBlendFactor; + + // Update model with animations blending + if (nextAnimToPlay == 1) + { + // Blend anim0 --> anim1 + UpdateModelAnimationEx(model, anims[animIndex0], animCurrentFrame0, + anims[animIndex1], animCurrentFrame1, animBlendFactor); + } + else + { + // Blend anim1 --> anim0 + UpdateModelAnimationEx(model, anims[animIndex1], animCurrentFrame1, + anims[animIndex0], animCurrentFrame0, animBlendFactor); + } + + // Check if transition completed + if (animBlendFactor > 1.0f) + { + // Reset frame states + if (currentAnimPlaying == 0) animCurrentFrame0 = 0.0f; + else if (currentAnimPlaying == 1) animCurrentFrame1 = 0.0f; + currentAnimPlaying = nextAnimToPlay; // Update current animation playing + + animBlendFactor = 0.0f; // Reset blend factor + animTransition = false; // Exit transition mode + animBlendTimeCounter = 0.0f; + } + } + else + { + // Play only one anim, the current one + if (currentAnimPlaying == 0) + { + // Playing anim0 at defined speed + animCurrentFrame0 += animFrameSpeed0; + if (animCurrentFrame0 >= anims[animIndex0].keyframeCount) animCurrentFrame0 = 0.0f; + UpdateModelAnimation(model, anims[animIndex0], animCurrentFrame0); + //UpdateModelAnimationEx(model, anims[animIndex0], animCurrentFrame0, + // anims[animIndex1], animCurrentFrame1, 0.0f); + } + else if (currentAnimPlaying == 1) + { + // Playing anim1 at defined speed + animCurrentFrame1 += animFrameSpeed1; + if (animCurrentFrame1 >= anims[animIndex1].keyframeCount) animCurrentFrame1 = 0.0f; + UpdateModelAnimation(model, anims[animIndex1], animCurrentFrame1); + //UpdateModelAnimationEx(model, anims[animIndex0], animCurrentFrame0, + // anims[animIndex1], animCurrentFrame1, 1.0f); + } + } + } + + // Update progress bars values with current frame for each animation + float animFrameProgress0 = animCurrentFrame0; + float animFrameProgress1 = animCurrentFrame1; //---------------------------------------------------------------------------------- // Draw @@ -106,16 +211,47 @@ int main(void) BeginMode3D(camera); - DrawModel(characterModel, (Vector3){0.0f, 0.0f, 0.0f}, 1.0f, WHITE); + DrawModel(model, position, 1.0f, WHITE); // Draw animated model + DrawGrid(10, 1.0f); EndMode3D(); - DrawText("Use the U/J to adjust blend factor", 10, 10, 20, GRAY); - DrawText("Use the T/G to switch first animation", 10, 30, 20, GRAY); - DrawText("Use the Y/H to switch second animation", 10, 50, 20, GRAY); - DrawText(TextFormat("Animations: %s, %s", modelAnimations[animIndex0].name, modelAnimations[animIndex1].name), 10, 70, 20, BLACK); - DrawText(TextFormat("Blend Factor: %f", blendFactor), 10, 86, 20, BLACK); + if (animTransition) DrawText("ANIM TRANSITION BLENDING!", 170, 50, 30, BLUE); + + // Draw UI elements + //--------------------------------------------------------------------------------------------- + // Draw animation selectors for blending transition + // NOTE: Transition does not start until requested + GuiSetStyle(DROPDOWNBOX, DROPDOWN_ITEMS_SPACING, 1); + if (GuiDropdownBox((Rectangle){ 10, 10, 160, 24 }, TextJoin(animNames, animCount, ";"), + &animIndex0, dropdownEditMode0)) dropdownEditMode0 = !dropdownEditMode0; + + // Blending process progress bar + if (nextAnimToPlay == 1) GuiSetStyle(PROGRESSBAR, PROGRESS_SIDE, 0); // Left-->Right + else GuiSetStyle(PROGRESSBAR, PROGRESS_SIDE, 1); // Right-->Left + GuiProgressBar((Rectangle){ 180, 14, 440, 16 }, NULL, NULL, &animBlendProgress, 0.0f, 1.0f); + GuiSetStyle(PROGRESSBAR, PROGRESS_SIDE, 0); // Reset to Left-->Right + + if (GuiDropdownBox((Rectangle){ GetScreenWidth() - 170, 10, 160, 24 }, TextJoin(animNames, animCount, ";"), + &animIndex1, dropdownEditMode1)) dropdownEditMode1 = !dropdownEditMode1; + + // Draw playing timeline with keyframes for anim0[] + GuiProgressBar((Rectangle){ 60, GetScreenHeight() - 60, GetScreenWidth() - 180, 20 }, "ANIM 0", + TextFormat("FRAME: %.2f / %i", animFrameProgress0, anims[animIndex0].keyframeCount), + &animFrameProgress0, 0.0f, (float)anims[animIndex0].keyframeCount); + for (int i = 0; i < anims[animIndex0].keyframeCount; i++) + DrawRectangle(60 + ((float)(GetScreenWidth() - 180)/(float)anims[animIndex0].keyframeCount)*(float)i, + GetScreenHeight() - 60, 1, 20, BLUE); + + // Draw playing timeline with keyframes for anim1[] + GuiProgressBar((Rectangle){ 60, GetScreenHeight() - 30, GetScreenWidth() - 180, 20 }, "ANIM 1", + TextFormat("FRAME: %.2f / %i", animFrameProgress1, anims[animIndex1].keyframeCount), + &animFrameProgress1, 0.0f, (float)anims[animIndex1].keyframeCount); + for (int i = 0; i < anims[animIndex1].keyframeCount; i++) + DrawRectangle(60 + ((float)(GetScreenWidth() - 180)/(float)anims[animIndex1].keyframeCount)*(float)i, + GetScreenHeight() - 30, 1, 20, BLUE); + //--------------------------------------------------------------------------------------------- EndDrawing(); //---------------------------------------------------------------------------------- @@ -123,9 +259,8 @@ int main(void) // De-Initialization //-------------------------------------------------------------------------------------- - UnloadModelAnimations(modelAnimations, animsCount); // Unload model animation - UnloadModel(characterModel); // Unload model and meshes/material - + UnloadModelAnimations(anims, animCount); // Unload model animation + UnloadModel(model); // Unload model and meshes/material UnloadShader(skinningShader); // Unload GPU skinning shader CloseWindow(); // Close window and OpenGL context diff --git a/examples/models/models_animation_blending.png b/examples/models/models_animation_blending.png index 0d70c1a88436a01b3689693035840c34133cd936..d1ca4a51bc254686bea1b9e979d2760422071fed 100644 GIT binary patch literal 28003 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 literal 26143 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 diff --git a/examples/models/models_animation_timming.c b/examples/models/models_animation_timing.c similarity index 57% rename from examples/models/models_animation_timming.c rename to examples/models/models_animation_timing.c index 8069537ce..d845e3a9c 100644 --- a/examples/models/models_animation_timming.c +++ b/examples/models/models_animation_timing.c @@ -1,6 +1,6 @@ /******************************************************************************************* * -* raylib [models] example - animation timming +* raylib [models] example - animation timing * * Example complexity rating: [★★☆☆] 2/4 * @@ -16,7 +16,7 @@ #include "raylib.h" #define RAYGUI_IMPLEMENTATION -#include "raygui.h" // Required for: UI controls +#include "raygui.h" // Required for: UI controls //------------------------------------------------------------------------------------ // Program main entry point @@ -28,7 +28,7 @@ int main(void) const int screenWidth = 800; const int screenHeight = 450; - InitWindow(screenWidth, screenHeight, "raylib [models] example - animation timming"); + InitWindow(screenWidth, screenHeight, "raylib [models] example - animation timing"); // Define the camera to look into our 3d world Camera camera = { 0 }; @@ -43,13 +43,21 @@ int main(void) Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model world position // Load model animations - int animsCount = 0; - ModelAnimation *modelAnimations = LoadModelAnimations("resources/models/gltf/robot.glb", &animsCount); + int animCount = 0; + ModelAnimation *anims = LoadModelAnimations("resources/models/gltf/robot.glb", &animCount); // Animation playing variables - unsigned int animIndex = 0; // Current animation playing + int animIndex = 10; // Current animation playing float animCurrentFrame = 0.0f; // Current animation frame (supporting interpolated frames) - float animFrameSpeed = 0.1f; // Animation play speed + float animFrameSpeed = 0.5f; // Animation play speed + bool animPause = false; // Pause animation + + // UI required variables + char *animNames[64] = { 0 }; + for (int i = 0; i < animCount; i++) animNames[i] = anims[i].name; + + bool dropdownEditMode = false; + float animFrameProgress = 0.0f; SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- @@ -61,17 +69,20 @@ int main(void) //---------------------------------------------------------------------------------- UpdateCamera(&camera, CAMERA_ORBITAL); - // Select current animation - if (IsMouseButtonPressed(MOUSE_BUTTON_RIGHT)) animIndex = (animIndex + 1)%animsCount; - else if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) animIndex = (animIndex + animsCount - 1)%animsCount; + if (IsKeyPressed(KEY_P)) animPause = !animPause; - // Select animation playing speed - if (IsKeyPressed(KEY_RIGHT)) animFrameSpeed += 0.1f; - else if (IsKeyPressed(KEY_LEFT)) animFrameSpeed -= 0.1f; + if (!animPause && (animIndex < animCount)) + { + // Update model animation + animCurrentFrame += animFrameSpeed; + if (animCurrentFrame >= anims[animIndex].keyframeCount) animCurrentFrame = 0.0f; + UpdateModelAnimation(model, anims[animIndex], animCurrentFrame); + } - // Update model animation - animCurrentFrame += animFrameSpeed; - UpdateModelAnimation(model, modelAnimations[animIndex], animCurrentFrame); + // NOTE: Animation and playing speed selected through UI + + // Update progressbar value with current frame + animFrameProgress = animCurrentFrame; //---------------------------------------------------------------------------------- // Draw @@ -88,13 +99,22 @@ int main(void) EndMode3D(); - // Draw UI - //GuiDropdownBox((Rectangle){ 10, 20, 240, 30 }, "text", &animIndex, editMode); + // Draw UI, select anim and playing speed + GuiSetStyle(DROPDOWNBOX, DROPDOWN_ITEMS_SPACING, 1); + if (GuiDropdownBox((Rectangle){ 10, 10, 140, 24 }, TextJoin(animNames, animCount, ";"), + &animIndex, dropdownEditMode)) dropdownEditMode = !dropdownEditMode; - DrawText(TextFormat("FRAME SPEED: x%.1f", animFrameSpeed), 10, 40, 20, RED); + GuiSlider((Rectangle){ 260, 10, 500, 24 }, "FRAME SPEED: ", TextFormat("x%.1f", animFrameSpeed), + &animFrameSpeed, 0.1f, 2.0f); - DrawText("Use the LEFT/RIGHT mouse buttons to switch animation", 10, 10, 20, GRAY); - DrawText(TextFormat("Animation: %s", modelAnimations[animIndex].name), 10, GetScreenHeight() - 20, 10, DARKGRAY); + // Draw playing timeline with keyframes + GuiLabel((Rectangle){ 10, GetScreenHeight() - 64, GetScreenWidth() - 20, 24 }, + TextFormat("CURRENT FRAME: %.2f / %i", animFrameProgress, anims[animIndex].keyframeCount)); + GuiProgressBar((Rectangle){ 10, GetScreenHeight() - 40, GetScreenWidth() - 20, 24 }, NULL, NULL, + &animFrameProgress, 0.0f, (float)anims[animIndex].keyframeCount); + for (int i = 0; i < anims[animIndex].keyframeCount; i++) + DrawRectangle(10 + ((float)(GetScreenWidth() - 20)/(float)anims[animIndex].keyframeCount)*(float)i, + GetScreenHeight() - 40, 1, 24, BLUE); EndDrawing(); //---------------------------------------------------------------------------------- @@ -102,6 +122,7 @@ int main(void) // De-Initialization //-------------------------------------------------------------------------------------- + UnloadModelAnimations(anims, animCount); // Unload model animation UnloadModel(model); // Unload model and meshes/material CloseWindow(); // Close window and OpenGL context @@ -110,5 +131,3 @@ int main(void) return 0; } - - diff --git a/examples/models/models_animation_timing.png b/examples/models/models_animation_timing.png new file mode 100644 index 0000000000000000000000000000000000000000..4448fec67af1efcdda7c26d444ae2cea3aff867c GIT binary patch literal 23489 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 OVDNPHb6Mw<&;$TtVr|j@ diff --git a/examples/models/models_loading.c b/examples/models/models_loading.c index 650b3126f..0672da047 100644 --- a/examples/models/models_loading.c +++ b/examples/models/models_loading.c @@ -7,11 +7,11 @@ * NOTE: raylib supports multiple models file formats: * * - OBJ > Text file format. Must include vertex position-texcoords-normals information, -* if files references some .mtl materials file, it will be loaded (or try to) -* - GLTF > Text/binary file format. Includes lot of information and it could -* also reference external files, raylib will try loading mesh and materials data +* if .obj references some .mtl materials file, it will be tried to be loaded +* - GLTF/GLB > Text/binary file formats. Includes lot of information and it could +* also reference external files, mesh and materials data will be tried to be loaded * - IQM > Binary file format. Includes mesh vertex data but also animation data, -* raylib can load .iqm animations +* meshes and animation data can be loaded * - VOX > Binary file format. MagikaVoxel mesh format: * https://github.com/ephtracy/voxel-model/blob/master/MagicaVoxel-file-format-vox.txt * - M3D > Binary file format. Model 3D format: @@ -43,10 +43,10 @@ int main(void) // Define the camera to look into our 3d world Camera camera = { 0 }; camera.position = (Vector3){ 50.0f, 50.0f, 50.0f }; // Camera position - camera.target = (Vector3){ 0.0f, 10.0f, 0.0f }; // Camera looking at point + camera.target = (Vector3){ 0.0f, 12.0f, 0.0f }; // Camera looking at point camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target) camera.fovy = 45.0f; // Camera field-of-view Y - camera.projection = CAMERA_PERSPECTIVE; // Camera mode type + camera.projection = CAMERA_PERSPECTIVE; // Camera mode type Model model = LoadModel("resources/models/obj/castle.obj"); // Load model Texture2D texture = LoadTexture("resources/models/obj/castle_diffuse.png"); // Load model texture @@ -61,8 +61,6 @@ int main(void) bool selected = false; // Selected object flag - DisableCursor(); // Limit cursor to relative movement inside the window - SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- @@ -71,7 +69,7 @@ int main(void) { // Update //---------------------------------------------------------------------------------- - UpdateCamera(&camera, CAMERA_FIRST_PERSON); + UpdateCamera(&camera, CAMERA_ORBITAL); // Load new models/textures on drag&drop if (IsFileDropped()) @@ -93,7 +91,10 @@ int main(void) bounds = GetMeshBoundingBox(model.meshes[0]); - // TODO: Move camera position from target enough distance to visualize model properly + // Move camera position from target enough distance to visualize model properly + camera.position.x = bounds.max.x + 10.0f; + camera.position.y = bounds.max.y + 10.0f; + camera.position.z = bounds.max.z + 10.0f; } else if (IsFileExtension(droppedFiles.paths[0], ".png")) // Texture file formats supported { diff --git a/examples/models/models_loading_gltf.c b/examples/models/models_loading_gltf.c index 7729da13f..f21207ba1 100644 --- a/examples/models/models_loading_gltf.c +++ b/examples/models/models_loading_gltf.c @@ -42,15 +42,17 @@ int main(void) camera.fovy = 45.0f; // Camera field-of-view Y camera.projection = CAMERA_PERSPECTIVE; // Camera projection type - // Load gltf model + // Load model Model model = LoadModel("resources/models/gltf/robot.glb"); - Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model position + Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model world position - // Load gltf model animations - int animsCount = 0; - unsigned int animIndex = 0; - unsigned int animCurrentFrame = 0; - ModelAnimation *modelAnimations = LoadModelAnimations("resources/models/gltf/robot.glb", &animsCount); + // Load model animations + int animCount = 0; + ModelAnimation *anims = LoadModelAnimations("resources/models/gltf/robot.glb", &animCount); + + // Animation playing variables + unsigned int animIndex = 0; // Current animation playing + unsigned int animCurrentFrame = 0; // Current animation frame SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- @@ -63,13 +65,12 @@ int main(void) UpdateCamera(&camera, CAMERA_ORBITAL); // Select current animation - if (IsMouseButtonPressed(MOUSE_BUTTON_RIGHT)) animIndex = (animIndex + 1)%animsCount; - else if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) animIndex = (animIndex + animsCount - 1)%animsCount; + if (IsKeyPressed(KEY_RIGHT)) animIndex = (animIndex + 1)%animCount; + else if (IsKeyPressed(KEY_LEFT)) animIndex = (animIndex + animCount - 1)%animCount; // Update model animation - ModelAnimation anim = modelAnimations[animIndex]; - animCurrentFrame = (animCurrentFrame + 1)%anim.frameCount; - UpdateModelAnimation(model, anim, animCurrentFrame); + animCurrentFrame = (animCurrentFrame + 1)%anims[animIndex].keyframeCount; + UpdateModelAnimation(model, anims[animIndex], (float)animCurrentFrame); //---------------------------------------------------------------------------------- // Draw @@ -79,12 +80,15 @@ int main(void) ClearBackground(RAYWHITE); BeginMode3D(camera); - DrawModel(model, position, 1.0f, WHITE); // Draw animated model + + DrawModel(model, position, 1.0f, WHITE); + DrawGrid(10, 1.0f); + EndMode3D(); - DrawText("Use the LEFT/RIGHT mouse buttons to switch animation", 10, 10, 20, GRAY); - DrawText(TextFormat("Animation: %s", anim.name), 10, GetScreenHeight() - 20, 10, DARKGRAY); + DrawText(TextFormat("Current animation: %s", anims[animIndex].name), 10, 40, 20, MAROON); + DrawText("Use the LEFT/RIGHT keys to switch animation", 10, 10, 20, GRAY); EndDrawing(); //---------------------------------------------------------------------------------- @@ -92,7 +96,8 @@ int main(void) // De-Initialization //-------------------------------------------------------------------------------------- - UnloadModel(model); // Unload model and meshes/material + UnloadModelAnimations(anims, animCount); // Unload model animations data + UnloadModel(model); // Unload model CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/models/models_loading_gltf.png b/examples/models/models_loading_gltf.png index ce2a85284077b0cce9fbfb8b63f326ca48013be8..9aa3e23501db07da0c1f0f630574d9fdd1420b39 100644 GIT binary patch literal 22136 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 rTqpDw%TBv!0-j9bP0l+XkKPo}-Y literal 26632 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 a5JO+uU$>t&F_sJr3=E#GelF{r5}E+$j;0_0 diff --git a/examples/models/models_loading_iqm.c b/examples/models/models_loading_iqm.c index 97d97ad40..0eab898a4 100644 --- a/examples/models/models_loading_iqm.c +++ b/examples/models/models_loading_iqm.c @@ -8,17 +8,15 @@ * * Example contributed by Culacant (@culacant) and reviewed by Ramon Santamaria (@raysan5) * +* NOTES: To export an IQM model from blender, make sure it is not posed, the vertices need +* to be in the same position as they would be in edit mode and the scale of the models is +* set to 0; scaling can be set from the export menu +* * Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, * BSD-like license that allows static linking with closed source software * * Copyright (c) 2019-2025 Culacant (@culacant) and Ramon Santamaria (@raysan5) * -******************************************************************************************** -* -* NOTE: To export a model from blender, make sure it is not posed, the vertices need to be -* in the same position as they would be in edit mode and the scale of your models is -* set to 0. Scaling can be done from the export menu -* ********************************************************************************************/ #include "raylib.h" @@ -38,7 +36,7 @@ int main(void) // Define the camera to look into our 3d world Camera camera = { 0 }; camera.position = (Vector3){ 10.0f, 10.0f, 10.0f }; // Camera position - camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; // Camera looking at point + camera.target = (Vector3){ 0.0f, 4.0f, 0.0f }; // Camera looking at point camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target) camera.fovy = 45.0f; // Camera field-of-view Y camera.projection = CAMERA_PERSPECTIVE; // Camera mode type @@ -46,15 +44,16 @@ int main(void) Model model = LoadModel("resources/models/iqm/guy.iqm"); // Load the animated model mesh and basic data Texture2D texture = LoadTexture("resources/models/iqm/guytex.png"); // Load model texture and set material SetMaterialTexture(&model.materials[0], MATERIAL_MAP_DIFFUSE, texture); // Set model material map texture - - Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model position + Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model position // Load animation data - int animsCount = 0; - ModelAnimation *anims = LoadModelAnimations("resources/models/iqm/guyanim.iqm", &animsCount); - float animFrameCounter = 0; + int animCount = 0; + ModelAnimation *anims = LoadModelAnimations("resources/models/iqm/guyanim.iqm", &animCount); + + // Animation playing variables + unsigned int animIndex = 0; // Current animation playing + float animCurrentFrame = 0.0f; // Current animation frame (supporting interpolated frames) - DisableCursor(); // Catch cursor SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- @@ -66,9 +65,9 @@ int main(void) UpdateCamera(&camera, CAMERA_ORBITAL); // Play animation when spacebar is held down - animFrameCounter += 1.0f; - UpdateModelAnimation(model, anims[0], animFrameCounter); - if (animFrameCounter >= anims[0].keyframeCount) animFrameCounter = 0; + animCurrentFrame += 1.0f; + UpdateModelAnimation(model, anims[0], animCurrentFrame); + if (animCurrentFrame >= anims[0].keyframeCount) animCurrentFrame = 0; //---------------------------------------------------------------------------------- // Draw @@ -81,16 +80,11 @@ int main(void) DrawModelEx(model, position, (Vector3){ 1.0f, 0.0f, 0.0f }, -90.0f, (Vector3){ 1.0f, 1.0f, 1.0f }, WHITE); - for (int i = 0; i < model.skeleton.boneCount; i++) - { - //DrawCube(anims[0].keyframePoses[animFrameCounter][i].translation, 0.2f, 0.2f, 0.2f, RED); - } - - DrawGrid(10, 1.0f); // Draw a grid + DrawGrid(10, 1.0f); EndMode3D(); - DrawText("PRESS SPACE to PLAY MODEL ANIMATION", 10, 10, 20, MAROON); + DrawText(TextFormat("Current animation: %s", anims[animIndex].name), 10, 10, 20, MAROON); DrawText("(c) Guy IQM 3D model by @culacant", screenWidth - 200, screenHeight - 20, 10, GRAY); EndDrawing(); @@ -99,9 +93,9 @@ int main(void) // De-Initialization //-------------------------------------------------------------------------------------- - UnloadTexture(texture); // Unload texture - UnloadModelAnimations(anims, animsCount); // Unload model animations data - UnloadModel(model); // Unload model + UnloadTexture(texture); // Unload texture + UnloadModelAnimations(anims, animCount); // Unload model animations data + UnloadModel(model); // Unload model CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/models/models_loading_iqm.png b/examples/models/models_loading_iqm.png index 57e39dd3e1a40cb357bd8fcc0f4ad69bb695da21..560cb3580ae3d2542d05386adbe03177461e1c28 100644 GIT binary patch literal 59771 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 anims[animId].frameCount) animFrameCounter = 0; - - UpdateModelAnimation(model, anims[animId], animFrameCounter); - animPlaying = true; - } - - // Select animation by pressing C - if (IsKeyPressed(KEY_C)) - { - animFrameCounter = 0; - animId++; - - if (animId >= (int)animsCount) animId = 0; - UpdateModelAnimation(model, anims[animId], 0); - animPlaying = true; - } - } - - // Toggle skeleton drawing - if (IsKeyPressed(KEY_B)) drawSkeleton ^= 1; - - // Toggle mesh drawing - if (IsKeyPressed(KEY_M)) drawMesh ^= 1; + // Update model animation + animCurrentFrame += 1.0f; + if (animCurrentFrame >= anims[animIndex].keyframeCount) animCurrentFrame = 0.0f; + UpdateModelAnimation(model, anims[animIndex], animCurrentFrame); //---------------------------------------------------------------------------------- // Draw @@ -109,52 +84,19 @@ int main(void) BeginMode3D(camera); // Draw 3d model with texture - if (drawMesh) DrawModel(model, position, 1.0f, WHITE); - - // Draw the animated skeleton - if (drawSkeleton) + if (!IsKeyDown(KEY_SPACE)) DrawModel(model, position, 1.0f, WHITE); + else { - // Loop to (boneCount - 1) because the last one is a special "no bone" bone, - // needed to workaround buggy models - // without a -1, we would always draw a cube at the origin - for (int i = 0; i < model.boneCount - 1; i++) - { - // By default the model is loaded in bind-pose by LoadModel() - // But if UpdateModelAnimation() has been called at least once - // then the model is already in animation pose, so we need the animated skeleton - if (!animPlaying || !animsCount) - { - // Display the bind-pose skeleton - DrawCube(model.bindPose[i].translation, 0.04f, 0.04f, 0.04f, RED); - - if (model.bones[i].parent >= 0) - { - DrawLine3D(model.bindPose[i].translation, - model.bindPose[model.bones[i].parent].translation, RED); - } - } - else - { - // Display the frame-pose skeleton - DrawCube(anims[animId].framePoses[animFrameCounter][i].translation, 0.05f, 0.05f, 0.05f, RED); - - if (anims[animId].bones[i].parent >= 0) - { - DrawLine3D(anims[animId].framePoses[animFrameCounter][i].translation, - anims[animId].framePoses[animFrameCounter][anims[animId].bones[i].parent].translation, RED); - } - } - } + // Draw the animated skeleton + DrawModelSkeleton(model.skeleton, anims[animIndex].keyframePoses[(int)animCurrentFrame], 1.0f, RED); } - DrawGrid(10, 1.0f); // Draw a grid + DrawGrid(10, 1.0f); EndMode3D(); - DrawText("PRESS SPACE to PLAY MODEL ANIMATION", 10, GetScreenHeight() - 80, 10, MAROON); - DrawText("PRESS N to STEP ONE ANIMATION FRAME", 10, GetScreenHeight() - 60, 10, DARKGRAY); - DrawText("PRESS C to CYCLE THROUGH ANIMATIONS", 10, GetScreenHeight() - 40, 10, DARKGRAY); - DrawText("PRESS M to toggle MESH, B to toggle SKELETON DRAWING", 10, GetScreenHeight() - 20, 10, DARKGRAY); + DrawText(TextFormat("Current animation: %s", anims[animIndex].name), 10, 10, 20, LIGHTGRAY); + DrawText("Press SPACE to draw skeleton", 10, 40, 20, MAROON); DrawText("(c) CesiumMan model by KhronosGroup", GetScreenWidth() - 210, GetScreenHeight() - 20, 10, GRAY); EndDrawing(); @@ -163,14 +105,28 @@ int main(void) // De-Initialization //-------------------------------------------------------------------------------------- - - // Unload model animations data - UnloadModelAnimations(anims, animsCount); - - UnloadModel(model); // Unload model + UnloadModelAnimations(anims, animCount); // Unload model animations data + UnloadModel(model); // Unload model CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- return 0; } + +// Draw model skeleton +static void DrawModelSkeleton(ModelSkeleton skeleton, ModelAnimPose pose, float scale, Color color) +{ + // Loop to (boneCount - 1) because the last one is a special "no bone" bone, + // needed to workaround buggy models without a -1, a cube is always drawn at the origin + for (int i = 0; i < skeleton.boneCount - 1; i++) + { + // Display the frame-pose skeleton + DrawCube(pose[i].translation, scale*0.05f, scale*0.05f, scale*0.05f, color); + + if (skeleton.bones[i].parent >= 0) + { + DrawLine3D(pose[i].translation, pose[skeleton.bones[i].parent].translation, color); + } + } +} \ No newline at end of file diff --git a/examples/models/models_loading_m3d.png b/examples/models/models_loading_m3d.png index 9220419ad1c9124b887dc019f0ecdf776eac1f31..101831c60eddfc7b8042660bc502e9dc7c4dfb32 100644 GIT binary patch literal 22930 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 s0uK8mdKI;Vst0KvE&&j0`b literal 25881 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 literal 23252 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 TU?)EV0|SGntDnm{r-UW|Q>WJ0 diff --git a/projects/VS2022/examples/models_animation_timming.vcxproj b/projects/VS2022/examples/models_animation_timing.vcxproj similarity index 99% rename from projects/VS2022/examples/models_animation_timming.vcxproj rename to projects/VS2022/examples/models_animation_timing.vcxproj index a18123bbc..9a1034925 100644 --- a/projects/VS2022/examples/models_animation_timming.vcxproj +++ b/projects/VS2022/examples/models_animation_timing.vcxproj @@ -55,7 +55,7 @@ Win32Proj models_animation_timming 10.0 - models_animation_timming + models_animation_timing @@ -553,7 +553,7 @@ - + diff --git a/projects/VS2022/raylib.sln b/projects/VS2022/raylib.sln index 51268e037..02fe4b197 100644 --- a/projects/VS2022/raylib.sln +++ b/projects/VS2022/raylib.sln @@ -435,7 +435,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "models_animation_blending", EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "core_window_web", "examples\core_window_web.vcxproj", "{4E7157E0-6CDB-47AE-A19A-FEC3876FA8A3}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "models_animation_timming", "examples\models_animation_timming.vcxproj", "{89D5A0E9-683C-465C-BF85-A880865175C8}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "models_animation_timing", "examples\models_animation_timing.vcxproj", "{89D5A0E9-683C-465C-BF85-A880865175C8}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/src/config.h b/src/config.h index 3beaeeceb..5fb4f5545 100644 --- a/src/config.h +++ b/src/config.h @@ -131,13 +131,13 @@ // Module: rlgl - Configuration values //------------------------------------------------------------------------------------ #if !defined(EXTERNAL_CONFIG_FLAGS) +//#define SUPPORT_GPU_SKINNING 1 // GPU skinning, comment if your GPU does not support more than 8 VBOs + // Enable OpenGL Debug Context (only available on OpenGL 4.3) -//#define RLGL_ENABLE_OPENGL_DEBUG_CONTEXT 1 +//#define RLGL_ENABLE_OPENGL_DEBUG_CONTEXT 1 // OpenGL debug context requested // Show OpenGL extensions and capabilities detailed logs on init -//#define RLGL_SHOW_GL_DETAILS_INFO 1 - -#define RL_SUPPORT_MESH_GPU_SKINNING 1 // GPU skinning, comment if your GPU does not support more than 8 VBOs +//#define RLGL_SHOW_GL_DETAILS_INFO 1 // Show OpenGL detailed info on initialization (limits and extensions) #endif //#define RL_DEFAULT_BATCH_BUFFER_ELEMENTS 4096 // Default internal render batch elements limits @@ -149,8 +149,8 @@ #define RL_MAX_SHADER_LOCATIONS 32 // Maximum number of shader locations supported -#define RL_CULL_DISTANCE_NEAR 0.05 // Default projection matrix near cull distance -#define RL_CULL_DISTANCE_FAR 4000.0 // Default projection matrix far cull distance +#define RL_CULL_DISTANCE_NEAR 0.05 // Default projection matrix near cull distance +#define RL_CULL_DISTANCE_FAR 4000.0 // Default projection matrix far cull distance // Default shader vertex attribute locations #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_POSITION 0 @@ -160,27 +160,31 @@ #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_TANGENT 4 #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD2 5 #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_INDICES 6 -#if defined(RL_SUPPORT_MESH_GPU_SKINNING) - #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEIDS 7 +#if defined(SUPPORT_GPU_SKINNING) + #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEINDICES 7 #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEWEIGHTS 8 #endif -#define RL_DEFAULT_SHADER_ATTRIB_LOCATION_INSTANCE_TX 9 +#define RL_DEFAULT_SHADER_ATTRIB_LOCATION_INSTANCETRANSFORMS 9 -// Default shader vertex attribute names to set location points -// NOTE: When a new shader is loaded, the following locations are tried to be set for convenience +// Default shader vertex attribute/uniform names to set location points +// NOTE: When a new shader is loaded, locations are tried to be set for convenience, +// if the following names are found in the shader, if not, it's up to the user to set locations #define RL_DEFAULT_SHADER_ATTRIB_NAME_POSITION "vertexPosition" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_POSITION #define RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD "vertexTexCoord" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD #define RL_DEFAULT_SHADER_ATTRIB_NAME_NORMAL "vertexNormal" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_NORMAL #define RL_DEFAULT_SHADER_ATTRIB_NAME_COLOR "vertexColor" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_COLOR #define RL_DEFAULT_SHADER_ATTRIB_NAME_TANGENT "vertexTangent" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_TANGENT #define RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2 "vertexTexCoord2" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD2 +#define RL_DEFAULT_SHADER_ATTRIB_NAME_BONEINDICES "vertexBoneIndices" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEINDICES +#define RL_DEFAULT_SHADER_ATTRIB_NAME_BONEWEIGHTS "vertexBoneWeights" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEWEIGHTS #define RL_DEFAULT_SHADER_UNIFORM_NAME_MVP "mvp" // model-view-projection matrix #define RL_DEFAULT_SHADER_UNIFORM_NAME_VIEW "matView" // view matrix #define RL_DEFAULT_SHADER_UNIFORM_NAME_PROJECTION "matProjection" // projection matrix #define RL_DEFAULT_SHADER_UNIFORM_NAME_MODEL "matModel" // model matrix #define RL_DEFAULT_SHADER_UNIFORM_NAME_NORMAL "matNormal" // normal matrix (transpose(inverse(matModelView)) -#define RL_DEFAULT_SHADER_UNIFORM_NAME_COLOR "colDiffuse" // color diffuse (base tint color, multiplied by texture color) +#define RL_DEFAULT_SHADER_UNIFORM_NAME_COLOR "colDiffuse" // color diffuse (tint color, multiplied by texture color) +#define RL_DEFAULT_SHADER_UNIFORM_NAME_BONEMATRICES "boneMatrices" // bone matrices #define RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE0 "texture0" // texture0 (texture slot active 0) #define RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE1 "texture1" // texture1 (texture slot active 1) #define RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE2 "texture2" // texture2 (texture slot active 2) @@ -278,10 +282,11 @@ //------------------------------------------------------------------------------------ #define MAX_MATERIAL_MAPS 12 // Maximum number of shader maps supported -#ifdef RL_SUPPORT_MESH_GPU_SKINNING -#define MAX_MESH_VERTEX_BUFFERS 9 // Maximum vertex buffers (VBO) per mesh +#ifdef SUPPORT_GPU_SKINNING + // NOTE: Two additional vertex buffers required to store bone indices and bone weights + #define MAX_MESH_VERTEX_BUFFERS 9 // Maximum vertex buffers (VBO) per mesh #else -#define MAX_MESH_VERTEX_BUFFERS 7 // Maximum vertex buffers (VBO) per mesh + #define MAX_MESH_VERTEX_BUFFERS 7 // Maximum vertex buffers (VBO) per mesh #endif //------------------------------------------------------------------------------------ diff --git a/src/raylib.h b/src/raylib.h index 06138ceca..bd64bbe6f 100644 --- a/src/raylib.h +++ b/src/raylib.h @@ -353,13 +353,15 @@ typedef struct Mesh { unsigned char *colors; // Vertex colors (RGBA - 4 components per vertex) (shader-location = 3) unsigned short *indices; // Vertex indices (in case vertex data comes indexed) - // Animation vertex data + // Skin data for animation + int boneCount; // Number of bones (MAX: 256 bones) + unsigned char *boneIndices; // Vertex bone indices, up to 4 bones influence by vertex (skinning) (shader-location = 6) + float *boneWeights; // Vertex bone weight, up to 4 bones influence by vertex (skinning) (shader-location = 7) + + // Runtime animation vertex data (CPU skinning) + // NOTE: In case of GPU skinning, not used, pointers are NULL float *animVertices; // Animated vertex positions (after bones transformations) float *animNormals; // Animated normals (after bones transformations) - unsigned char *boneIds; // Vertex bone ids, max 255 bone ids, up to 4 bones influence by vertex (skinning) (shader-location = 6) - float *boneWeights; // Vertex bone weight, up to 4 bones influence by vertex (skinning) (shader-location = 7) - Matrix *boneMatrices; // Bones animated transformation matrices - int boneCount; // Number of bones // OpenGL identifiers unsigned int vaoId; // OpenGL Vertex Array Object id @@ -393,12 +395,22 @@ typedef struct Transform { Vector3 scale; // Scale } Transform; +// Anim pose, an array of Transform[] +typedef Transform *ModelAnimPose; + // Bone, skeletal animation bone typedef struct BoneInfo { char name[32]; // Bone name int parent; // Bone parent } BoneInfo; +// Skeleton, animation bones hierarchy +typedef struct ModelSkeleton { + int boneCount; // Number of bones + BoneInfo *bones; // Bones information (skeleton) + ModelAnimPose bindPose; // Bones base transformation (Transform[]) +} ModelSkeleton; + // Model, meshes, materials and animation data typedef struct Model { Matrix transform; // Local transform matrix @@ -410,18 +422,20 @@ typedef struct Model { int *meshMaterial; // Mesh material number // Animation data - int boneCount; // Number of bones - BoneInfo *bones; // Bones information (skeleton) - Transform *bindPose; // Bones base transformation (pose) + ModelSkeleton skeleton; // Skeleton for animation + + // Runtime animation data (CPU/GPU skinning) + ModelAnimPose currentPose; // Current animation pose (Transform[]) + Matrix *boneMatrices; // Bones animated transformation matrices } Model; -// ModelAnimation +// ModelAnimation, contains a full animation sequence typedef struct ModelAnimation { char name[32]; // Animation name - int boneCount; // Number of bones - int frameCount; // Number of animation frames - BoneInfo *bones; // Bones information (skeleton) - Transform **framePoses; // Poses array by frame + + int boneCount; // Number of bones (per pose) + int keyframeCount; // Number of animation key frames + ModelAnimPose *keyframePoses; // Animation sequence keyframe poses [keyframe][pose] } ModelAnimation; // Ray, ray for raycasting @@ -768,6 +782,8 @@ typedef enum { #define MATERIAL_MAP_SPECULAR MATERIAL_MAP_METALNESS // Shader location index +// NOTE: Some locations are tried to be set automatically on shader loading, +// but only if default attributes/uniforms names are found, check config.h for names typedef enum { SHADER_LOC_VERTEX_POSITION = 0, // Shader location: vertex attribute: position SHADER_LOC_VERTEX_TEXCOORD01, // Shader location: vertex attribute: texcoord01 @@ -790,15 +806,15 @@ typedef enum { SHADER_LOC_MAP_ROUGHNESS, // Shader location: sampler2d texture: roughness SHADER_LOC_MAP_OCCLUSION, // Shader location: sampler2d texture: occlusion SHADER_LOC_MAP_EMISSION, // Shader location: sampler2d texture: emission - SHADER_LOC_MAP_HEIGHT, // Shader location: sampler2d texture: height + SHADER_LOC_MAP_HEIGHT, // Shader location: sampler2d texture: heightmap SHADER_LOC_MAP_CUBEMAP, // Shader location: samplerCube texture: cubemap SHADER_LOC_MAP_IRRADIANCE, // Shader location: samplerCube texture: irradiance SHADER_LOC_MAP_PREFILTER, // Shader location: samplerCube texture: prefilter SHADER_LOC_MAP_BRDF, // Shader location: sampler2d texture: brdf - SHADER_LOC_VERTEX_BONEIDS, // Shader location: vertex attribute: boneIds - SHADER_LOC_VERTEX_BONEWEIGHTS, // Shader location: vertex attribute: boneWeights - SHADER_LOC_BONE_MATRICES, // Shader location: array of matrices uniform: boneMatrices - SHADER_LOC_VERTEX_INSTANCE_TX // Shader location: vertex attribute: instanceTransform + SHADER_LOC_VERTEX_BONEIDS, // Shader location: vertex attribute: bone indices + SHADER_LOC_VERTEX_BONEWEIGHTS, // Shader location: vertex attribute: bone weights + SHADER_LOC_MATRIX_BONETRANSFORMS, // Shader location: matrix attribute: bone transforms (animation) + SHADER_LOC_VERTEX_INSTANCETRANSFORMS // Shader location: vertex attribute: instance transforms } ShaderLocationIndex; #define SHADER_LOC_MAP_DIFFUSE SHADER_LOC_MAP_ALBEDO @@ -1619,11 +1635,8 @@ RLAPI void SetModelMeshMaterial(Model *model, int meshId, int materialId); // Model animations loading/unloading functions RLAPI ModelAnimation *LoadModelAnimations(const char *fileName, int *animCount); // Load model animations from file -RLAPI void UpdateModelAnimation(Model model, ModelAnimation anim, int frame); // Update model animation pose (CPU) -RLAPI void UpdateModelAnimationBones(Model model, ModelAnimation anim, int frame); // Update model animation mesh bone matrices (GPU skinning) -RLAPI void UpdateModelAnimationBonesLerp(Model model, ModelAnimation animA, int frameA, ModelAnimation animB, int frameB, float value); // Update model animation mesh bone matrices with interpolation between two poses(GPU skinning) -RLAPI void UpdateModelVertsToCurrentBones(Model model); // Update model vertices according to mesh bone matrices (CPU) -RLAPI void UnloadModelAnimation(ModelAnimation anim); // Unload animation data +RLAPI void UpdateModelAnimation(Model model, ModelAnimation anim, float frame); // Update model animation pose (vertex buffers and bone matrices) +RLAPI void UpdateModelAnimationEx(Model model, ModelAnimation animA, float frameA, ModelAnimation animB, float frameB, float blend); // Update model animation pose, blending two animations RLAPI void UnloadModelAnimations(ModelAnimation *animations, int animCount); // Unload animation array data RLAPI bool IsModelAnimationValid(Model model, ModelAnimation anim); // Check model animation skeleton match diff --git a/src/rcore.c b/src/rcore.c index c29fb1e19..f1481890b 100644 --- a/src/rcore.c +++ b/src/rcore.c @@ -1286,7 +1286,7 @@ Shader LoadShaderFromMemory(const char *vsCode, const char *fsCode) // - vertex color location = 3 // - vertex tangent location = 4 // - vertex texcoord2 location = 5 - // - vertex boneIds location = 6 + // - vertex boneIndices location = 6 // - vertex boneWeights location = 7 // NOTE: If any location is not found, loc point becomes -1 @@ -1303,9 +1303,9 @@ Shader LoadShaderFromMemory(const char *vsCode, const char *fsCode) shader.locs[SHADER_LOC_VERTEX_NORMAL] = rlGetLocationAttrib(shader.id, RL_DEFAULT_SHADER_ATTRIB_NAME_NORMAL); shader.locs[SHADER_LOC_VERTEX_TANGENT] = rlGetLocationAttrib(shader.id, RL_DEFAULT_SHADER_ATTRIB_NAME_TANGENT); shader.locs[SHADER_LOC_VERTEX_COLOR] = rlGetLocationAttrib(shader.id, RL_DEFAULT_SHADER_ATTRIB_NAME_COLOR); - shader.locs[SHADER_LOC_VERTEX_BONEIDS] = rlGetLocationAttrib(shader.id, RL_DEFAULT_SHADER_ATTRIB_NAME_BONEIDS); + shader.locs[SHADER_LOC_VERTEX_BONEIDS] = rlGetLocationAttrib(shader.id, RL_DEFAULT_SHADER_ATTRIB_NAME_BONEINDICES); shader.locs[SHADER_LOC_VERTEX_BONEWEIGHTS] = rlGetLocationAttrib(shader.id, RL_DEFAULT_SHADER_ATTRIB_NAME_BONEWEIGHTS); - shader.locs[SHADER_LOC_VERTEX_INSTANCE_TX] = rlGetLocationAttrib(shader.id, RL_DEFAULT_SHADER_ATTRIB_NAME_INSTANCE_TX); + shader.locs[SHADER_LOC_VERTEX_INSTANCETRANSFORMS] = rlGetLocationAttrib(shader.id, RL_DEFAULT_SHADER_ATTRIB_NAME_INSTANCETRANSFORMS); // Get handles to GLSL uniform locations (vertex shader) shader.locs[SHADER_LOC_MATRIX_MVP] = rlGetLocationUniform(shader.id, RL_DEFAULT_SHADER_UNIFORM_NAME_MVP); @@ -1313,7 +1313,7 @@ Shader LoadShaderFromMemory(const char *vsCode, const char *fsCode) shader.locs[SHADER_LOC_MATRIX_PROJECTION] = rlGetLocationUniform(shader.id, RL_DEFAULT_SHADER_UNIFORM_NAME_PROJECTION); shader.locs[SHADER_LOC_MATRIX_MODEL] = rlGetLocationUniform(shader.id, RL_DEFAULT_SHADER_UNIFORM_NAME_MODEL); shader.locs[SHADER_LOC_MATRIX_NORMAL] = rlGetLocationUniform(shader.id, RL_DEFAULT_SHADER_UNIFORM_NAME_NORMAL); - shader.locs[SHADER_LOC_BONE_MATRICES] = rlGetLocationUniform(shader.id, RL_DEFAULT_SHADER_UNIFORM_NAME_BONE_MATRICES); + shader.locs[SHADER_LOC_MATRIX_BONETRANSFORMS] = rlGetLocationUniform(shader.id, RL_DEFAULT_SHADER_UNIFORM_NAME_BONEMATRICES); // Get handles to GLSL uniform locations (fragment shader) shader.locs[SHADER_LOC_COLOR_DIFFUSE] = rlGetLocationUniform(shader.id, RL_DEFAULT_SHADER_UNIFORM_NAME_COLOR); diff --git a/src/rlgl.h b/src/rlgl.h index 0cde3e6eb..67817a3c9 100644 --- a/src/rlgl.h +++ b/src/rlgl.h @@ -65,7 +65,7 @@ * #define RL_DEFAULT_SHADER_ATTRIB_NAME_COLOR "vertexColor" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_COLOR * #define RL_DEFAULT_SHADER_ATTRIB_NAME_TANGENT "vertexTangent" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_TANGENT * #define RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2 "vertexTexCoord2" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD2 -* #define RL_DEFAULT_SHADER_ATTRIB_NAME_BONEIDS "vertexBoneIds" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEIDS +* #define RL_DEFAULT_SHADER_ATTRIB_NAME_BONEINDICES "vertexBoneIndices" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEINDICES * #define RL_DEFAULT_SHADER_ATTRIB_NAME_BONEWEIGHTS "vertexBoneWeights" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEWEIGHTS * #define RL_DEFAULT_SHADER_UNIFORM_NAME_MVP "mvp" // model-view-projection matrix * #define RL_DEFAULT_SHADER_UNIFORM_NAME_VIEW "matView" // view matrix @@ -73,7 +73,7 @@ * #define RL_DEFAULT_SHADER_UNIFORM_NAME_MODEL "matModel" // model matrix * #define RL_DEFAULT_SHADER_UNIFORM_NAME_NORMAL "matNormal" // normal matrix (transpose(inverse(matModelView))) * #define RL_DEFAULT_SHADER_UNIFORM_NAME_COLOR "colDiffuse" // color diffuse (base tint color, multiplied by texture color) -* #define RL_DEFAULT_SHADER_UNIFORM_NAME_BONE_MATRICES "boneMatrices" // bone matrices +* #define RL_DEFAULT_SHADER_UNIFORM_NAME_BONEMATRICES "boneMatrices" // bone matrices * #define RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE0 "texture0" // texture0 (texture slot active 0) * #define RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE1 "texture1" // texture1 (texture slot active 1) * #define RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE2 "texture2" // texture2 (texture slot active 2) @@ -345,16 +345,16 @@ #ifndef RL_DEFAULT_SHADER_ATTRIB_LOCATION_INDICES #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_INDICES 6 #endif -#ifdef RL_SUPPORT_MESH_GPU_SKINNING -#ifndef RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEIDS - #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEIDS 7 +#ifdef SUPPORT_GPU_SKINNING + #ifndef RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEINDICES + #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEINDICES 7 + #endif + #ifndef RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEWEIGHTS + #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEWEIGHTS 8 + #endif #endif -#ifndef RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEWEIGHTS - #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEWEIGHTS 8 -#endif -#endif -#ifndef RL_DEFAULT_SHADER_ATTRIB_LOCATION_INSTANCE_TX - #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_INSTANCE_TX 9 +#ifndef RL_DEFAULT_SHADER_ATTRIB_LOCATION_INSTANCETRANSFORMS + #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_INSTANCETRANSFORMS 9 #endif //---------------------------------------------------------------------------------- @@ -992,31 +992,34 @@ RLAPI void rlLoadDrawQuad(void); // Load and draw a quad // Default shader vertex attribute names to set location points #ifndef RL_DEFAULT_SHADER_ATTRIB_NAME_POSITION - #define RL_DEFAULT_SHADER_ATTRIB_NAME_POSITION "vertexPosition" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_NAME_POSITION + #define RL_DEFAULT_SHADER_ATTRIB_NAME_POSITION "vertexPosition" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_POSITION #endif #ifndef RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD - #define RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD "vertexTexCoord" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD + #define RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD "vertexTexCoord" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD #endif #ifndef RL_DEFAULT_SHADER_ATTRIB_NAME_NORMAL - #define RL_DEFAULT_SHADER_ATTRIB_NAME_NORMAL "vertexNormal" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_NAME_NORMAL + #define RL_DEFAULT_SHADER_ATTRIB_NAME_NORMAL "vertexNormal" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_NORMAL #endif #ifndef RL_DEFAULT_SHADER_ATTRIB_NAME_COLOR - #define RL_DEFAULT_SHADER_ATTRIB_NAME_COLOR "vertexColor" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_NAME_COLOR + #define RL_DEFAULT_SHADER_ATTRIB_NAME_COLOR "vertexColor" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_COLOR #endif #ifndef RL_DEFAULT_SHADER_ATTRIB_NAME_TANGENT - #define RL_DEFAULT_SHADER_ATTRIB_NAME_TANGENT "vertexTangent" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_NAME_TANGENT + #define RL_DEFAULT_SHADER_ATTRIB_NAME_TANGENT "vertexTangent" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_TANGENT #endif #ifndef RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2 - #define RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2 "vertexTexCoord2" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2 + #define RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2 "vertexTexCoord2" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD2 #endif -#ifndef RL_DEFAULT_SHADER_ATTRIB_NAME_BONEIDS - #define RL_DEFAULT_SHADER_ATTRIB_NAME_BONEIDS "vertexBoneIds" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_NAME_BONEIDS +#ifndef RL_DEFAULT_SHADER_ATTRIB_NAME_BONEINDICES + #define RL_DEFAULT_SHADER_ATTRIB_NAME_BONEINDICES "vertexBoneIndices" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEINDICES #endif #ifndef RL_DEFAULT_SHADER_ATTRIB_NAME_BONEWEIGHTS - #define RL_DEFAULT_SHADER_ATTRIB_NAME_BONEWEIGHTS "vertexBoneWeights" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_NAME_BONEWEIGHTS + #define RL_DEFAULT_SHADER_ATTRIB_NAME_BONEWEIGHTS "vertexBoneWeights" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEWEIGHTS #endif -#ifndef RL_DEFAULT_SHADER_ATTRIB_NAME_INSTANCE_TX - #define RL_DEFAULT_SHADER_ATTRIB_NAME_INSTANCE_TX "instanceTransform" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_NAME_INSTANCE_TX +#ifndef RL_DEFAULT_SHADER_UNIFORM_NAME_BONEMATRICES + #define RL_DEFAULT_SHADER_UNIFORM_NAME_BONEMATRICES "boneMatrices" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEMATRICES +#endif +#ifndef RL_DEFAULT_SHADER_ATTRIB_NAME_INSTANCETRANSFORMS + #define RL_DEFAULT_SHADER_ATTRIB_NAME_INSTANCETRANSFORMS "instanceTransform" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_INSTANCETRANSFORMS #endif #ifndef RL_DEFAULT_SHADER_UNIFORM_NAME_MVP @@ -1037,9 +1040,6 @@ RLAPI void rlLoadDrawQuad(void); // Load and draw a quad #ifndef RL_DEFAULT_SHADER_UNIFORM_NAME_COLOR #define RL_DEFAULT_SHADER_UNIFORM_NAME_COLOR "colDiffuse" // color diffuse (base tint color, multiplied by texture color) #endif -#ifndef RL_DEFAULT_SHADER_UNIFORM_NAME_BONE_MATRICES - #define RL_DEFAULT_SHADER_UNIFORM_NAME_BONE_MATRICES "boneMatrices" // bone matrices -#endif #ifndef RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE0 #define RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE0 "texture0" // texture0 (texture slot active 0) #endif @@ -1049,6 +1049,9 @@ RLAPI void rlLoadDrawQuad(void); // Load and draw a quad #ifndef RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE2 #define RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE2 "texture2" // texture2 (texture slot active 2) #endif +#ifndef RL_DEFAULT_SHADER_UNIFORM_NAME_BONEMATRICES + #define RL_DEFAULT_SHADER_UNIFORM_NAME_BONEMATRICES "boneMatrices" // bone matrices (required for GPU skinning) +#endif //---------------------------------------------------------------------------------- // Module Types and Structures Definition @@ -4339,10 +4342,9 @@ unsigned int rlLoadShaderProgram(unsigned int vShaderId, unsigned int fShaderId) glBindAttribLocation(programId, RL_DEFAULT_SHADER_ATTRIB_LOCATION_COLOR, RL_DEFAULT_SHADER_ATTRIB_NAME_COLOR); glBindAttribLocation(programId, RL_DEFAULT_SHADER_ATTRIB_LOCATION_TANGENT, RL_DEFAULT_SHADER_ATTRIB_NAME_TANGENT); glBindAttribLocation(programId, RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD2, RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2); - glBindAttribLocation(programId, RL_DEFAULT_SHADER_ATTRIB_LOCATION_INSTANCE_TX, RL_DEFAULT_SHADER_ATTRIB_NAME_INSTANCE_TX); - -#ifdef RL_SUPPORT_MESH_GPU_SKINNING - glBindAttribLocation(programId, RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEIDS, RL_DEFAULT_SHADER_ATTRIB_NAME_BONEIDS); + glBindAttribLocation(programId, RL_DEFAULT_SHADER_ATTRIB_LOCATION_INSTANCETRANSFORMS, RL_DEFAULT_SHADER_ATTRIB_NAME_INSTANCETRANSFORMS); +#ifdef SUPPORT_GPU_SKINNING + glBindAttribLocation(programId, RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEINDICES, RL_DEFAULT_SHADER_ATTRIB_NAME_BONEINDICES); glBindAttribLocation(programId, RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEWEIGHTS, RL_DEFAULT_SHADER_ATTRIB_NAME_BONEWEIGHTS); #endif diff --git a/src/rmodels.c b/src/rmodels.c index b90b6a53f..1649fb8f3 100644 --- a/src/rmodels.c +++ b/src/rmodels.c @@ -167,6 +167,9 @@ static ModelAnimation *LoadModelAnimationsM3D(const char *fileName, int *animCou static void ProcessMaterialsOBJ(Material *rayMaterials, tinyobj_material_t *materials, int materialCount); // Process obj materials #endif +// Update model vertex data (positions and normals) +static void UpdateModelAnimationVertexBuffers(Model model); + //---------------------------------------------------------------------------------- // Module Functions Definition //---------------------------------------------------------------------------------- @@ -1182,7 +1185,7 @@ bool IsModelValid(Model model) if ((model.meshes[i].tangents != NULL) && (model.meshes[i].vboId[4] == 0)) { result = false; break; } // Vertex tangents buffer not uploaded to GPU if ((model.meshes[i].texcoords2 != NULL) && (model.meshes[i].vboId[5] == 0)) { result = false; break; } // Vertex texcoords2 buffer not uploaded to GPU if ((model.meshes[i].indices != NULL) && (model.meshes[i].vboId[6] == 0)) { result = false; break; } // Vertex indices buffer not uploaded to GPU - if ((model.meshes[i].boneIds != NULL) && (model.meshes[i].vboId[7] == 0)) { result = false; break; } // Vertex boneIds buffer not uploaded to GPU + if ((model.meshes[i].boneIndices != NULL) && (model.meshes[i].vboId[7] == 0)) { result = false; break; } // Vertex boneIndices buffer not uploaded to GPU if ((model.meshes[i].boneWeights != NULL) && (model.meshes[i].vboId[8] == 0)) { result = false; break; } // Vertex boneWeights buffer not uploaded to GPU // NOTE: Some OpenGL versions do not support VAO, so we don't check it @@ -1212,8 +1215,8 @@ void UnloadModel(Model model) RL_FREE(model.meshMaterial); // Unload animation data - RL_FREE(model.bones); - RL_FREE(model.bindPose); + RL_FREE(model.skeleton.bones); + RL_FREE(model.skeleton.bindPose); TRACELOG(LOG_INFO, "MODEL: Unloaded model (and meshes) from RAM and VRAM"); } @@ -1273,9 +1276,8 @@ void UploadMesh(Mesh *mesh, bool dynamic) mesh->vboId[RL_DEFAULT_SHADER_ATTRIB_LOCATION_TANGENT] = 0; // Vertex buffer: tangents mesh->vboId[RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD2] = 0; // Vertex buffer: texcoords2 mesh->vboId[RL_DEFAULT_SHADER_ATTRIB_LOCATION_INDICES] = 0; // Vertex buffer: indices - -#ifdef RL_SUPPORT_MESH_GPU_SKINNING - mesh->vboId[RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEIDS] = 0; // Vertex buffer: boneIds +#ifdef SUPPORT_GPU_SKINNING + mesh->vboId[RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEINDICES] = 0; // Vertex buffer: boneIndices mesh->vboId[RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEWEIGHTS] = 0; // Vertex buffer: boneWeights #endif @@ -1375,21 +1377,21 @@ void UploadMesh(Mesh *mesh, bool dynamic) rlDisableVertexAttribute(RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD2); } -#ifdef RL_SUPPORT_MESH_GPU_SKINNING - if (mesh->boneIds != NULL) +#ifdef SUPPORT_GPU_SKINNING + if (mesh->boneIndices != NULL) { - // Enable vertex attribute: boneIds (shader-location = 7) - mesh->vboId[RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEIDS] = rlLoadVertexBuffer(mesh->boneIds, mesh->vertexCount*4*sizeof(unsigned char), dynamic); - rlSetVertexAttribute(RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEIDS, 4, RL_UNSIGNED_BYTE, 0, 0, 0); - rlEnableVertexAttribute(RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEIDS); + // Enable vertex attribute: boneIndices (shader-location = 7) + mesh->vboId[RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEINDICES] = rlLoadVertexBuffer(mesh->boneIndices, mesh->vertexCount*4*sizeof(unsigned char), dynamic); + rlSetVertexAttribute(RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEINDICES, 4, RL_UNSIGNED_BYTE, 0, 0, 0); + rlEnableVertexAttribute(RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEINDICES); } else { - // Default vertex attribute: boneIds + // Default vertex attribute: boneIndices // WARNING: Default value provided to shader if location available float value[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; - rlSetVertexAttributeDefault(RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEIDS, value, SHADER_ATTRIB_VEC4, 4); - rlDisableVertexAttribute(RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEIDS); + rlSetVertexAttributeDefault(RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEINDICES, value, SHADER_ATTRIB_VEC4, 4); + rlDisableVertexAttribute(RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEINDICES); } if (mesh->boneWeights != NULL) @@ -1436,17 +1438,17 @@ void DrawMesh(Mesh mesh, Material material, Matrix transform) #define GL_COLOR_ARRAY 0x8076 #define GL_TEXTURE_COORD_ARRAY 0x8078 - if (mesh.texcoords && material.maps[MATERIAL_MAP_DIFFUSE].texture.id > 0) rlEnableTexture(material.maps[MATERIAL_MAP_DIFFUSE].texture.id); + if ((mesh.texcoords != NULL) && (material.maps[MATERIAL_MAP_DIFFUSE].texture.id > 0)) rlEnableTexture(material.maps[MATERIAL_MAP_DIFFUSE].texture.id); - if (mesh.animVertices) rlEnableStatePointer(GL_VERTEX_ARRAY, mesh.animVertices); + if (mesh.animVertices != NULL) rlEnableStatePointer(GL_VERTEX_ARRAY, mesh.animVertices); else rlEnableStatePointer(GL_VERTEX_ARRAY, mesh.vertices); if (mesh.texcoords) rlEnableStatePointer(GL_TEXTURE_COORD_ARRAY, mesh.texcoords); - if (mesh.animNormals) rlEnableStatePointer(GL_NORMAL_ARRAY, mesh.animNormals); - else if (mesh.normals) rlEnableStatePointer(GL_NORMAL_ARRAY, mesh.normals); + if (mesh.animNormals != NULL) rlEnableStatePointer(GL_NORMAL_ARRAY, mesh.animNormals); + else if (mesh.normals != NULL) rlEnableStatePointer(GL_NORMAL_ARRAY, mesh.normals); - if (mesh.colors) rlEnableStatePointer(GL_COLOR_ARRAY, mesh.colors); + if (mesh.colors != NULL) rlEnableStatePointer(GL_COLOR_ARRAY, mesh.colors); rlPushMatrix(); rlMultMatrixf(MatrixToFloat(transform)); @@ -1528,14 +1530,6 @@ void DrawMesh(Mesh mesh, Material material, Matrix transform) // Upload model normal matrix (if locations available) if (material.shader.locs[SHADER_LOC_MATRIX_NORMAL] != -1) rlSetUniformMatrix(material.shader.locs[SHADER_LOC_MATRIX_NORMAL], MatrixTranspose(MatrixInvert(matModel))); - -#ifdef RL_SUPPORT_MESH_GPU_SKINNING - // Upload Bone Transforms - if ((material.shader.locs[SHADER_LOC_BONE_MATRICES] != -1) && mesh.boneMatrices) - { - rlSetUniformMatrices(material.shader.locs[SHADER_LOC_BONE_MATRICES], mesh.boneMatrices, mesh.boneCount); - } -#endif //----------------------------------------------------- // Bind active texture maps (if available) @@ -1615,11 +1609,11 @@ void DrawMesh(Mesh mesh, Material material, Matrix transform) rlEnableVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_TEXCOORD02]); } -#ifdef RL_SUPPORT_MESH_GPU_SKINNING +#ifdef SUPPORT_GPU_SKINNING // Bind mesh VBO data: vertex bone ids (shader-location = 6, if available) if (material.shader.locs[SHADER_LOC_VERTEX_BONEIDS] != -1) { - rlEnableVertexBuffer(mesh.vboId[RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEIDS]); + rlEnableVertexBuffer(mesh.vboId[RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEINDICES]); rlSetVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_BONEIDS], 4, RL_UNSIGNED_BYTE, 0, 0, 0); rlEnableVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_BONEIDS]); } @@ -1743,7 +1737,7 @@ void DrawMeshInstanced(Mesh mesh, Material material, const Matrix *transforms, i if (material.shader.locs[SHADER_LOC_MATRIX_PROJECTION] != -1) rlSetUniformMatrix(material.shader.locs[SHADER_LOC_MATRIX_PROJECTION], matProjection); // Create instances buffer - instanceTransforms = (float16 *)RL_MALLOC(instances*sizeof(float16)); + instanceTransforms = (float16 *)RL_CALLOC(instances, sizeof(float16)); // Fill buffer with instances transformations as float16 arrays for (int i = 0; i < instances; i++) instanceTransforms[i] = MatrixToFloatV(transforms[i]); @@ -1757,14 +1751,14 @@ void DrawMeshInstanced(Mesh mesh, Material material, const Matrix *transforms, i // no faster, since all the transform matrices are transferred anyway instancesVboId = rlLoadVertexBuffer(instanceTransforms, instances*sizeof(float16), false); - // Instances transformation matrices are sent to shader attribute location: SHADER_LOC_VERTEX_INSTANCE_TX - if (material.shader.locs[SHADER_LOC_VERTEX_INSTANCE_TX] != -1) + // Instances transformation matrices are sent to shader attribute location: SHADER_LOC_VERTEX_INSTANCETRANSFORMS + if (material.shader.locs[SHADER_LOC_VERTEX_INSTANCETRANSFORMS] != -1) { for (unsigned int i = 0; i < 4; i++) { - rlEnableVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_INSTANCE_TX] + i); - rlSetVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_INSTANCE_TX] + i, 4, RL_FLOAT, 0, sizeof(Matrix), i*sizeof(Vector4)); - rlSetVertexAttributeDivisor(material.shader.locs[SHADER_LOC_VERTEX_INSTANCE_TX] + i, 1); + rlEnableVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_INSTANCETRANSFORMS] + i); + rlSetVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_INSTANCETRANSFORMS] + i, 4, RL_FLOAT, 0, sizeof(Matrix), i*sizeof(Vector4)); + rlSetVertexAttributeDivisor(material.shader.locs[SHADER_LOC_VERTEX_INSTANCETRANSFORMS] + i, 1); } } @@ -1777,15 +1771,6 @@ void DrawMeshInstanced(Mesh mesh, Material material, const Matrix *transforms, i // Upload model normal matrix (if locations available) if (material.shader.locs[SHADER_LOC_MATRIX_NORMAL] != -1) rlSetUniformMatrix(material.shader.locs[SHADER_LOC_MATRIX_NORMAL], MatrixTranspose(MatrixInvert(matModel))); - -#ifdef RL_SUPPORT_MESH_GPU_SKINNING - // Upload Bone Transforms - if ((material.shader.locs[SHADER_LOC_BONE_MATRICES] != -1) && mesh.boneMatrices) - { - rlSetUniformMatrices(material.shader.locs[SHADER_LOC_BONE_MATRICES], mesh.boneMatrices, mesh.boneCount); - } -#endif - //----------------------------------------------------- // Bind active texture maps (if available) @@ -1863,11 +1848,11 @@ void DrawMeshInstanced(Mesh mesh, Material material, const Matrix *transforms, i rlEnableVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_TEXCOORD02]); } -#ifdef RL_SUPPORT_MESH_GPU_SKINNING +#ifdef SUPPORT_GPU_SKINNING // Bind mesh VBO data: vertex bone ids (shader-location = 6, if available) if (material.shader.locs[SHADER_LOC_VERTEX_BONEIDS] != -1) { - rlEnableVertexBuffer(mesh.vboId[RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEIDS]); + rlEnableVertexBuffer(mesh.vboId[RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEINDICES]); rlSetVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_BONEIDS], 4, RL_UNSIGNED_BYTE, 0, 0, 0); rlEnableVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_BONEIDS]); } @@ -1946,6 +1931,7 @@ void UnloadMesh(Mesh mesh) if (mesh.vboId != NULL) for (int i = 0; i < MAX_MESH_VERTEX_BUFFERS; i++) rlUnloadVertexBuffer(mesh.vboId[i]); RL_FREE(mesh.vboId); + // Unload mesh vertex buffers RL_FREE(mesh.vertices); RL_FREE(mesh.texcoords); RL_FREE(mesh.normals); @@ -1954,11 +1940,13 @@ void UnloadMesh(Mesh mesh) RL_FREE(mesh.texcoords2); RL_FREE(mesh.indices); + // Unload mesh skin animation data + RL_FREE(mesh.boneWeights); + RL_FREE(mesh.boneIndices); + + // Unload mesh runtime CPU skinning data RL_FREE(mesh.animVertices); RL_FREE(mesh.animNormals); - RL_FREE(mesh.boneWeights); - RL_FREE(mesh.boneIds); - RL_FREE(mesh.boneMatrices); } // Export mesh data to file @@ -2189,7 +2177,7 @@ Material *LoadMaterials(const char *fileName, int *materialCount) int result = tinyobj_parse_mtl_file(&mats, &count, fileName); if (result != TINYOBJ_SUCCESS) TRACELOG(LOG_WARNING, "MATERIAL: [%s] Failed to parse materials file", fileName); - materials = (Material *)RL_MALLOC(count*sizeof(Material)); + materials = (Material *)RL_CALLOC(count, sizeof(Material)); ProcessMaterialsOBJ(materials, mats, count); tinyobj_materials_free(mats, count); @@ -2228,10 +2216,11 @@ bool IsMaterialValid(Material material) { bool result = false; - if ((material.maps != NULL) && // Validate material contain some map + if ((material.maps != NULL) && // Validate material contain some map (material.shader.id > 0)) result = true; // Validate material shader is valid - // TODO: Check if available maps contain loaded textures + // NOTE: Checking if available maps contain loaded textures does not determine if + // a material is valid, there can be maps without a texture assigned, only properties return result; } @@ -2287,146 +2276,205 @@ ModelAnimation *LoadModelAnimations(const char *fileName, int *animCount) return animations; } -// Update model animated bones transform matrices for a given frame -// NOTE: Updated data is not uploaded to GPU but kept at model.meshes[i].boneMatrices[boneId], -// to be uploaded to shader at drawing, in case GPU skinning is enabled -void UpdateModelAnimationBones(Model model, ModelAnimation anim, int frame) +// Update model animation data (vertex buffers / bone matrices) for a specific pose +// NOTE 1: Request frame could be fractional, using a lerp interpolation between two frames +// NOTE 2: Updated vertex animation data is uploaded to GPU in case of CPU skinning, +// for GPU skinning, bone matrices are uploaded to shader on DrawModelEx() +void UpdateModelAnimation(Model model, ModelAnimation anim, float frame) { - if ((anim.frameCount > 0) && (anim.bones != NULL) && (anim.framePoses != NULL)) + if (model.boneMatrices == NULL) return; + + //UpdateModelAnimationEx(model, anim, frame, anim, frame, 0.0f); + + // Update model animated bones transform matrices for a given frame + if ((anim.keyframeCount > 0) && (model.skeleton.bones != NULL) && (anim.keyframePoses != NULL)) { - if (frame >= anim.frameCount) frame = frame%anim.frameCount; + // Get frame and blending from frame factor required + int currentFrame = (int)frame; + int nextFrame = currentFrame + 1; + float blend = frame - currentFrame; + blend = Clamp(blend, 0.0f, 1.0f); + if (currentFrame >= anim.keyframeCount) currentFrame = currentFrame%anim.keyframeCount; + if (nextFrame >= anim.keyframeCount) nextFrame = nextFrame%anim.keyframeCount; - // Get first mesh which have bones - int firstMeshWithBones = -1; + Matrix bindPoseMatrix = { 0 }; + Matrix currentPoseMatrix = { 0 }; - for (int i = 0; i < model.meshCount; i++) + // Update all bones and bone matrices of model + for (int boneIndex = 0; boneIndex < model.skeleton.boneCount; boneIndex++) { - if (model.meshes[i].boneMatrices) - { - if (firstMeshWithBones == -1) - { - firstMeshWithBones = i; - break; - } - } + // Compute interpolated pose between current and next frame + // NOTE: Storing animation frame data in model.currentPose + model.currentPose[boneIndex].translation = Vector3Lerp( + anim.keyframePoses[currentFrame][boneIndex].translation, + anim.keyframePoses[nextFrame][boneIndex].translation, blend); + model.currentPose[boneIndex].rotation = QuaternionSlerp( + anim.keyframePoses[currentFrame][boneIndex].rotation, + anim.keyframePoses[nextFrame][boneIndex].rotation, blend); + model.currentPose[boneIndex].scale = Vector3Lerp( + anim.keyframePoses[currentFrame][boneIndex].scale, + anim.keyframePoses[nextFrame][boneIndex].scale, blend); + + // Compute runtime bone matrix from model current pose + //----------------------------------------------------------------------------------- + Transform *bindPoseTransform = &model.skeleton.bindPose[boneIndex]; + bindPoseMatrix = MatrixMultiply( + MatrixMultiply(MatrixScale(bindPoseTransform->scale.x, bindPoseTransform->scale.y, bindPoseTransform->scale.z), + QuaternionToMatrix(bindPoseTransform->rotation)), + MatrixTranslate(bindPoseTransform->translation.x, bindPoseTransform->translation.y, bindPoseTransform->translation.z)); + + Transform *currentPoseTransform = &model.currentPose[boneIndex]; + currentPoseMatrix = MatrixMultiply( + MatrixMultiply(MatrixScale(currentPoseTransform->scale.x, currentPoseTransform->scale.y, currentPoseTransform->scale.z), + QuaternionToMatrix(currentPoseTransform->rotation)), + MatrixTranslate(currentPoseTransform->translation.x, currentPoseTransform->translation.y, currentPoseTransform->translation.z)); + + model.boneMatrices[boneIndex] = MatrixMultiply(MatrixInvert(bindPoseMatrix), currentPoseMatrix); + //----------------------------------------------------------------------------------- } - if (firstMeshWithBones != -1) - { - // Update all bones and boneMatrices of first mesh with bones - for (int boneId = 0; boneId < anim.boneCount; boneId++) - { - Transform *bindTransform = &model.bindPose[boneId]; - Matrix bindMatrix = MatrixMultiply(MatrixMultiply( - MatrixScale(bindTransform->scale.x, bindTransform->scale.y, bindTransform->scale.z), - QuaternionToMatrix(bindTransform->rotation)), - MatrixTranslate(bindTransform->translation.x, bindTransform->translation.y, bindTransform->translation.z)); - - Transform *targetTransform = &anim.framePoses[frame][boneId]; - Matrix targetMatrix = MatrixMultiply(MatrixMultiply( - MatrixScale(targetTransform->scale.x, targetTransform->scale.y, targetTransform->scale.z), - QuaternionToMatrix(targetTransform->rotation)), - MatrixTranslate(targetTransform->translation.x, targetTransform->translation.y, targetTransform->translation.z)); - - model.meshes[firstMeshWithBones].boneMatrices[boneId] = MatrixMultiply(MatrixInvert(bindMatrix), targetMatrix); - } - - // Update remaining meshes with bones - // NOTE: Using deep copy because shallow copy results in double free with 'UnloadModel()' - for (int i = firstMeshWithBones + 1; i < model.meshCount; i++) - { - if (model.meshes[i].boneMatrices) - { - memcpy(model.meshes[i].boneMatrices, - model.meshes[firstMeshWithBones].boneMatrices, - model.meshes[i].boneCount*sizeof(model.meshes[i].boneMatrices[0])); - } - } - } + // CPU skinning, updates CPU buffers and uploads them to GPU + // NOTE: On GPU skinning not supported, use CPU skinning + UpdateModelAnimationVertexBuffers(model); } } -// Update model animated bones transform matrices by interpolating between two different given frames of different ModelAnimation(could be same too) -// NOTE: Updated data is not uploaded to GPU but kept at model.meshes[i].boneMatrices[boneId], -// to be uploaded to shader at drawing, in case GPU skinning is enabled -void UpdateModelAnimationBonesLerp(Model model, ModelAnimation animA, int frameA, ModelAnimation animB, int frameB, float value) +// Update model animation data (vertex buffers / bone matrices) for a specific pose, +// defined by two different animations at specific frames blended together +// NOTE 1: Request frames could be fractional, using a lerp interpolation between two frames +// NOTE 2: Updated vertex animation data is uploaded to GPU in case of CPU skinning, +// for GPU skinning, bone matrices are uploaded to shader on DrawModelEx() +void UpdateModelAnimationEx(Model model, ModelAnimation animA, float frameA, ModelAnimation animB, float frameB, float blend) { - if ((animA.frameCount > 0) && (animA.bones != NULL) && (animA.framePoses != NULL) && - (animB.frameCount > 0) && (animB.bones != NULL) && (animB.framePoses != NULL) && - (value >= 0.0f) && (value <= 1.0f)) + if (model.boneMatrices == NULL) return; + + if ((animA.keyframeCount > 0) && (animA.keyframePoses != NULL) && + (animB.keyframeCount > 0) && (animB.keyframePoses != NULL) && + (blend >= 0.0f) && (blend <= 1.0f)) { - frameA = frameA % animA.frameCount; - frameB = frameB % animB.frameCount; + // Inter-frame interpolation values for first animation + int currentFrameA = (int)frameA%animA.keyframeCount; + int nextFrameA = currentFrameA + 1; + float blendA = frameA - currentFrameA; + blendA = Clamp(blendA, 0.0f, 1.0f); + if (currentFrameA >= animA.keyframeCount) currentFrameA = currentFrameA%animA.keyframeCount; + if (nextFrameA >= animA.keyframeCount) nextFrameA = nextFrameA%animA.keyframeCount; - for (int i = 0; i < model.meshCount; i++) + // Inter-frame interpolation values for second animation + int currentFrameB = (int)frameB%animB.keyframeCount; + int nextFrameB = currentFrameB + 1; + float blendB = frameB - currentFrameB; + blendB = Clamp(blendB, 0.0f, 1.0f); + if (currentFrameB >= animB.keyframeCount) currentFrameB = currentFrameB%animB.keyframeCount; + if (nextFrameB >= animB.keyframeCount) nextFrameB = nextFrameB%animB.keyframeCount; + + Matrix bindPoseMatrix = { 0 }; + Matrix currentPoseMatrix = { 0 }; + + for (int boneIndex = 0; boneIndex < model.skeleton.boneCount; boneIndex++) { - if (model.meshes[i].boneMatrices) - { - assert(model.meshes[i].boneCount == animA.boneCount); - assert(model.meshes[i].boneCount == animB.boneCount); + // Get frame-interpolation for first animation + Vector3 frameATranslation = Vector3Lerp( + animA.keyframePoses[currentFrameA][boneIndex].translation, + animA.keyframePoses[nextFrameA][boneIndex].translation, blendA); + Quaternion frameARotation = QuaternionSlerp( + animA.keyframePoses[currentFrameA][boneIndex].rotation, + animA.keyframePoses[nextFrameA][boneIndex].rotation, blendA); + Vector3 frameAScale = Vector3Lerp( + animA.keyframePoses[currentFrameA][boneIndex].scale, + animA.keyframePoses[nextFrameA][boneIndex].scale, blendA); - for (int boneId = 0; boneId < model.meshes[i].boneCount; boneId++) - { - Vector3 inTranslation = model.bindPose[boneId].translation; - Quaternion inRotation = model.bindPose[boneId].rotation; - Vector3 inScale = model.bindPose[boneId].scale; + // Get frame-interpolation for second animation + Vector3 frameBTranslation = Vector3Lerp( + animB.keyframePoses[currentFrameB][boneIndex].translation, + animB.keyframePoses[nextFrameB][boneIndex].translation, blendB); + Quaternion frameBRotation = QuaternionSlerp( + animB.keyframePoses[currentFrameB][boneIndex].rotation, + animB.keyframePoses[nextFrameB][boneIndex].rotation, blendB); + Vector3 frameBScale = Vector3Lerp( + animB.keyframePoses[currentFrameB][boneIndex].scale, + animB.keyframePoses[nextFrameB][boneIndex].scale, blendB); + + // Compute interpolated pose between both animations frames + // NOTE: Storing animation frame data in model.currentPose + model.currentPose[boneIndex].translation = Vector3Lerp(frameATranslation, frameBTranslation, blend); + model.currentPose[boneIndex].rotation = QuaternionSlerp(frameARotation, frameBRotation, blend); + model.currentPose[boneIndex].scale = Vector3Lerp(frameAScale, frameBScale, blend); - Vector3 outATranslation = animA.framePoses[frameA][boneId].translation; - Quaternion outARotation = animA.framePoses[frameA][boneId].rotation; - Vector3 outAScale = animA.framePoses[frameA][boneId].scale; + // Compute runtime bone matrix from model current pose + //----------------------------------------------------------------------------------- + Transform *bindPoseTransform = &model.skeleton.bindPose[boneIndex]; + bindPoseMatrix = MatrixMultiply( + MatrixMultiply(MatrixScale(bindPoseTransform->scale.x, bindPoseTransform->scale.y, bindPoseTransform->scale.z), + QuaternionToMatrix(bindPoseTransform->rotation)), + MatrixTranslate(bindPoseTransform->translation.x, bindPoseTransform->translation.y, bindPoseTransform->translation.z)); - Vector3 outBTranslation = animB.framePoses[frameB][boneId].translation; - Quaternion outBRotation = animB.framePoses[frameB][boneId].rotation; - Vector3 outBScale = animB.framePoses[frameB][boneId].scale; + Transform *currentPoseTransform = &model.currentPose[boneIndex]; + currentPoseMatrix = MatrixMultiply( + MatrixMultiply(MatrixScale(currentPoseTransform->scale.x, currentPoseTransform->scale.y, currentPoseTransform->scale.z), + QuaternionToMatrix(currentPoseTransform->rotation)), + MatrixTranslate(currentPoseTransform->translation.x, currentPoseTransform->translation.y, currentPoseTransform->translation.z)); - Vector3 outTranslation = Vector3Lerp(outATranslation, outBTranslation, value); - Quaternion outRotation = QuaternionSlerp(outARotation, outBRotation, value); - Vector3 outScale = Vector3Lerp(outAScale, outBScale, value); + model.boneMatrices[boneIndex] = MatrixMultiply(MatrixInvert(bindPoseMatrix), currentPoseMatrix); + //----------------------------------------------------------------------------------- - Vector3 invTranslation = Vector3RotateByQuaternion(Vector3Negate(inTranslation), QuaternionInvert(inRotation)); - Quaternion invRotation = QuaternionInvert(inRotation); - Vector3 invScale = Vector3Divide((Vector3){ 1.0f, 1.0f, 1.0f }, inScale); + /* + Vector3 outATranslation = animA.keyframePoses[currentFrameA][boneIndex].translation; + Quaternion outARotation = animA.keyframePoses[currentFrameA][boneIndex].rotation; + Vector3 outAScale = animA.keyframePoses[currentFrameA][boneIndex].scale; - Vector3 boneTranslation = Vector3Add( - Vector3RotateByQuaternion(Vector3Multiply(outScale, invTranslation), - outRotation), outTranslation); - Quaternion boneRotation = QuaternionMultiply(outRotation, invRotation); - Vector3 boneScale = Vector3Multiply(outScale, invScale); + Vector3 outBTranslation = animB.keyframePoses[currentFrameB][boneIndex].translation; + Quaternion outBRotation = animB.keyframePoses[currentFrameB][boneIndex].rotation; + Vector3 outBScale = animB.keyframePoses[currentFrameB][boneIndex].scale; - Matrix boneMatrix = MatrixMultiply(MatrixMultiply( - QuaternionToMatrix(boneRotation), - MatrixTranslate(boneTranslation.x, boneTranslation.y, boneTranslation.z)), - MatrixScale(boneScale.x, boneScale.y, boneScale.z)); + // Invert bind pose transformation + Vector3 invBindTranslation = Vector3RotateByQuaternion( + Vector3Negate(model.skeleton.bindPose[boneIndex].translation), + QuaternionInvert(model.skeleton.bindPose[boneIndex].rotation)); + Quaternion invBindRotation = QuaternionInvert(model.skeleton.bindPose[boneIndex].rotation); + Vector3 invBindScale = Vector3Divide((Vector3){ 1.0f, 1.0f, 1.0f }, model.skeleton.bindPose[boneIndex].scale); - model.meshes[i].boneMatrices[boneId] = boneMatrix; - } - } + Vector3 boneTranslation = Vector3Add(Vector3RotateByQuaternion( + Vector3Multiply(model.currentPose[boneIndex].scale, invBindTranslation), + model.currentPose[boneIndex].rotation), + model.currentPose[boneIndex].translation); + Quaternion boneRotation = QuaternionMultiply(model.currentPose[boneIndex].rotation, invBindRotation); + Vector3 boneScale = Vector3Multiply(model.currentPose[boneIndex].scale, invBindScale); + + model.boneMatrices[boneIndex] = MatrixMultiply( + MatrixMultiply(QuaternionToMatrix(boneRotation), + MatrixTranslate(boneTranslation.x, boneTranslation.y, boneTranslation.z)), + MatrixScale(boneScale.x, boneScale.y, boneScale.z)); + */ } + + // CPU skinning, updates CPU buffers and uploads them to GPU (if available) + // NOTE: Fallback in case GPU skinning is not supported or enabled + UpdateModelAnimationVertexBuffers(model); } } -// Update model vertex data (positions and normals) from mesh bone data -// NOTE: Updated data is uploaded to GPU -void UpdateModelVertsToCurrentBones(Model model) +// Update model vertex animation buffers (positions and normals) +// NOTE: Required for CPU skinning, uploads animated vertex buffers to GPU +static void UpdateModelAnimationVertexBuffers(Model model) { - //UpdateModelAnimationBones(model, anim, frame); // TODO: Review - for (int m = 0; m < model.meshCount; m++) { Mesh mesh = model.meshes[m]; Vector3 animVertex = { 0 }; Vector3 animNormal = { 0 }; - const int vValues = mesh.vertexCount*3; + const int vertexValuesCount = mesh.vertexCount*3; - int boneId = 0; + int boneIndex = 0; int boneCounter = 0; float boneWeight = 0.0f; - bool updated = false; // Flag to check when anim vertex information is updated + bool bufferUpdateRequired = false; // Flag to check when anim vertex information is updated - // Skip if missing bone data, causes segfault without on some models - if ((mesh.boneWeights == NULL) || (mesh.boneIds == NULL)) continue; + // Skip if missing bone data or missing anim buffers initialization + if ((mesh.boneWeights == NULL) || (mesh.boneIndices == NULL) || + (mesh.animVertices == NULL) || (mesh.animNormals == NULL)) continue; - for (int vCounter = 0; vCounter < vValues; vCounter += 3) + for (int vCounter = 0; vCounter < vertexValuesCount; vCounter += 3) { mesh.animVertices[vCounter] = 0; mesh.animVertices[vCounter + 1] = 0; @@ -2442,23 +2490,23 @@ void UpdateModelVertsToCurrentBones(Model model) for (int j = 0; j < 4; j++, boneCounter++) { boneWeight = mesh.boneWeights[boneCounter]; - boneId = mesh.boneIds[boneCounter]; + boneIndex = mesh.boneIndices[boneCounter]; // Early stop when no transformation will be applied if (boneWeight == 0.0f) continue; animVertex = (Vector3){ mesh.vertices[vCounter], mesh.vertices[vCounter + 1], mesh.vertices[vCounter + 2] }; - animVertex = Vector3Transform(animVertex, model.meshes[m].boneMatrices[boneId]); + animVertex = Vector3Transform(animVertex, model.boneMatrices[boneIndex]); mesh.animVertices[vCounter] += animVertex.x*boneWeight; - mesh.animVertices[vCounter+1] += animVertex.y*boneWeight; - mesh.animVertices[vCounter+2] += animVertex.z*boneWeight; - updated = true; + mesh.animVertices[vCounter + 1] += animVertex.y*boneWeight; + mesh.animVertices[vCounter + 2] += animVertex.z*boneWeight; + bufferUpdateRequired = true; // Normals processing // NOTE: We use meshes.baseNormals (default normal) to calculate meshes.normals (animated normals) if ((mesh.normals != NULL) && (mesh.animNormals != NULL )) { animNormal = (Vector3){ mesh.normals[vCounter], mesh.normals[vCounter + 1], mesh.normals[vCounter + 2] }; - animNormal = Vector3Transform(animNormal, MatrixTranspose(MatrixInvert(model.meshes[m].boneMatrices[boneId]))); + animNormal = Vector3Transform(animNormal, MatrixTranspose(MatrixInvert(model.boneMatrices[boneIndex]))); mesh.animNormals[vCounter] += animNormal.x*boneWeight; mesh.animNormals[vCounter + 1] += animNormal.y*boneWeight; mesh.animNormals[vCounter + 2] += animNormal.z*boneWeight; @@ -2466,53 +2514,36 @@ void UpdateModelVertsToCurrentBones(Model model) } } - if (updated) + if (bufferUpdateRequired) { - rlUpdateVertexBuffer(mesh.vboId[0], mesh.animVertices, mesh.vertexCount*3*sizeof(float), 0); // Update vertex position - if (mesh.normals != NULL) rlUpdateVertexBuffer(mesh.vboId[2], mesh.animNormals, mesh.vertexCount*3*sizeof(float), 0); // Update vertex normals + // Update GPU vertex buffers with updated data (position + normals) + rlUpdateVertexBuffer(mesh.vboId[SHADER_LOC_VERTEX_POSITION], mesh.animVertices, mesh.vertexCount*3*sizeof(float), 0); + if (mesh.normals != NULL) rlUpdateVertexBuffer(mesh.vboId[SHADER_LOC_VERTEX_NORMAL], mesh.animNormals, mesh.vertexCount*3*sizeof(float), 0); } } } -// at least 2x speed up vs the old method -// Update model animated vertex data (positions and normals) for a given frame -// NOTE: Updated data is uploaded to GPU -void UpdateModelAnimation(Model model, ModelAnimation anim, int frame) -{ - UpdateModelAnimationBones(model,anim,frame); - UpdateModelVertsToCurrentBones(model); -} - // Unload animation array data void UnloadModelAnimations(ModelAnimation *animations, int animCount) { - for (int i = 0; i < animCount; i++) UnloadModelAnimation(animations[i]); + for (int a = 0; a < animCount; a++) + { + for (int i = 0; i < animations[a].keyframeCount; i++) + RL_FREE(animations[a].keyframePoses[i]); + + RL_FREE(animations[a].keyframePoses); + } + RL_FREE(animations); } -// Unload animation data -void UnloadModelAnimation(ModelAnimation anim) -{ - for (int i = 0; i < anim.frameCount; i++) RL_FREE(anim.framePoses[i]); - - RL_FREE(anim.bones); - RL_FREE(anim.framePoses); -} - // Check model animation skeleton match // NOTE: Only number of bones and parent connections are checked bool IsModelAnimationValid(Model model, ModelAnimation anim) { int result = true; - if (model.boneCount != anim.boneCount) result = false; - else - { - for (int i = 0; i < model.boneCount; i++) - { - if (model.bones[i].parent != anim.bones[i].parent) { result = false; break; } - } - } + if (model.skeleton.boneCount != anim.boneCount) result = false; return result; } @@ -3883,17 +3914,31 @@ void DrawModelEx(Model model, Vector3 position, Vector3 rotationAxis, float rota for (int i = 0; i < model.meshCount; i++) { - Color color = model.materials[model.meshMaterial[i]].maps[MATERIAL_MAP_DIFFUSE].color; + Material mat = model.materials[model.meshMaterial[i]]; + Color colDiffuse = mat.maps[MATERIAL_MAP_DIFFUSE].color; - Color colorTint = WHITE; - colorTint.r = (unsigned char)(((int)color.r*(int)tint.r)/255); - colorTint.g = (unsigned char)(((int)color.g*(int)tint.g)/255); - colorTint.b = (unsigned char)(((int)color.b*(int)tint.b)/255); - colorTint.a = (unsigned char)(((int)color.a*(int)tint.a)/255); + // Applying color tint directly to material diffuse map, + // because is comes as an input paramter to the function + Color colTinted = { 0 }; + colTinted.r = (unsigned char)(((int)colDiffuse.r*(int)tint.r)/255); + colTinted.g = (unsigned char)(((int)colDiffuse.g*(int)tint.g)/255); + colTinted.b = (unsigned char)(((int)colDiffuse.b*(int)tint.b)/255); + colTinted.a = (unsigned char)(((int)colDiffuse.a*(int)tint.a)/255); - model.materials[model.meshMaterial[i]].maps[MATERIAL_MAP_DIFFUSE].color = colorTint; - DrawMesh(model.meshes[i], model.materials[model.meshMaterial[i]], model.transform); - model.materials[model.meshMaterial[i]].maps[MATERIAL_MAP_DIFFUSE].color = color; + mat.maps[MATERIAL_MAP_DIFFUSE].color = colTinted; + + // Upload runtime bone transforms matrices, to compute skinning on the shader (GPU-skinning) + // NOTE: Required location must be found and Mesh bones indices and weights must be also uploaded to shader + if ((mat.shader.locs[SHADER_LOC_MATRIX_BONETRANSFORMS] != -1) && (model.boneMatrices != NULL)) + { + rlEnableShader(mat.shader.id); // Enable shader to set bone transform matrices + rlSetUniformMatrices(mat.shader.locs[SHADER_LOC_MATRIX_BONETRANSFORMS], model.boneMatrices, model.skeleton.boneCount); + } + + DrawMesh(model.meshes[i], mat, model.transform); + + // Restore material diffuse map color (before tint applied) + mat.maps[MATERIAL_MAP_DIFFUSE].color = colDiffuse; } } @@ -4344,7 +4389,7 @@ static void BuildPoseFromParentJoints(BoneInfo *bones, int boneCount, Transform { if (bones[i].parent > i) { - TRACELOG(LOG_WARNING, "Assumes bones are toplogically sorted, but bone %d has parent %d. Skipping.", i, bones[i].parent); + TRACELOG(LOG_WARNING, "Skipping bone not topologically sorted: Bone %d has parent %d", i, bones[i].parent); continue; } transforms[i].rotation = QuaternionMultiply(transforms[bones[i].parent].rotation, transforms[i].rotation); @@ -4762,11 +4807,11 @@ static Model LoadIQM(const char *fileName) for (int i = 0; i < model.meshCount; i++) { - //fseek(iqmFile, iqmHeader->ofs_text + imesh[i].name, SEEK_SET); + //fseek(iqmFile, iqmHeader->ofs_text + imesh[a].name, SEEK_SET); //fread(name, sizeof(char), MESH_NAME_LENGTH, iqmFile); memcpy(name, fileDataPtr + iqmHeader->ofs_text + imesh[i].name, MESH_NAME_LENGTH*sizeof(char)); - //fseek(iqmFile, iqmHeader->ofs_text + imesh[i].material, SEEK_SET); + //fseek(iqmFile, iqmHeader->ofs_text + imesh[a].material, SEEK_SET); //fread(material, sizeof(char), MATERIAL_NAME_LENGTH, iqmFile); memcpy(material, fileDataPtr + iqmHeader->ofs_text + imesh[i].material, MATERIAL_NAME_LENGTH*sizeof(char)); @@ -4783,16 +4828,18 @@ static Model LoadIQM(const char *fileName) model.meshes[i].normals = (float *)RL_CALLOC(model.meshes[i].vertexCount*3, sizeof(float)); // Default vertex normals model.meshes[i].texcoords = (float *)RL_CALLOC(model.meshes[i].vertexCount*2, sizeof(float)); // Default vertex texcoords - model.meshes[i].boneIds = (unsigned char *)RL_CALLOC(model.meshes[i].vertexCount*4, sizeof(unsigned char)); // Up-to 4 bones supported! + model.meshes[i].boneIndices = (unsigned char *)RL_CALLOC(model.meshes[i].vertexCount*4, sizeof(unsigned char)); // Up-to 4 bones supported! model.meshes[i].boneWeights = (float *)RL_CALLOC(model.meshes[i].vertexCount*4, sizeof(float)); // Up-to 4 bones supported! model.meshes[i].triangleCount = imesh[i].num_triangles; model.meshes[i].indices = (unsigned short *)RL_CALLOC(model.meshes[i].triangleCount*3, sizeof(unsigned short)); +#if !defined(SUPPORT_GPU_SKINNING) // Animated vertex data, what we actually process for rendering // NOTE: Animated vertex should be re-uploaded to GPU (if not using GPU skinning) model.meshes[i].animVertices = (float *)RL_CALLOC(model.meshes[i].vertexCount*3, sizeof(float)); model.meshes[i].animNormals = (float *)RL_CALLOC(model.meshes[i].vertexCount*3, sizeof(float)); +#endif } // Triangles data processing @@ -4830,7 +4877,7 @@ static Model LoadIQM(const char *fileName) case IQM_POSITION: { vertex = (float *)RL_MALLOC(iqmHeader->num_vertexes*3*sizeof(float)); - //fseek(iqmFile, va[i].offset, SEEK_SET); + //fseek(iqmFile, va[a].offset, SEEK_SET); //fread(vertex, iqmHeader->num_vertexes*3*sizeof(float), 1, iqmFile); memcpy(vertex, fileDataPtr + va[i].offset, iqmHeader->num_vertexes*3*sizeof(float)); @@ -4840,7 +4887,7 @@ static Model LoadIQM(const char *fileName) for (unsigned int i = imesh[m].first_vertex*3; i < (imesh[m].first_vertex + imesh[m].num_vertexes)*3; i++) { model.meshes[m].vertices[vCounter] = vertex[i]; - model.meshes[m].animVertices[vCounter] = vertex[i]; + if (model.meshes[m].animVertices != NULL) model.meshes[m].animVertices[vCounter] = vertex[i]; vCounter++; } } @@ -4848,7 +4895,7 @@ static Model LoadIQM(const char *fileName) case IQM_NORMAL: { normal = (float *)RL_MALLOC(iqmHeader->num_vertexes*3*sizeof(float)); - //fseek(iqmFile, va[i].offset, SEEK_SET); + //fseek(iqmFile, va[a].offset, SEEK_SET); //fread(normal, iqmHeader->num_vertexes*3*sizeof(float), 1, iqmFile); memcpy(normal, fileDataPtr + va[i].offset, iqmHeader->num_vertexes*3*sizeof(float)); @@ -4858,7 +4905,7 @@ static Model LoadIQM(const char *fileName) for (unsigned int i = imesh[m].first_vertex*3; i < (imesh[m].first_vertex + imesh[m].num_vertexes)*3; i++) { model.meshes[m].normals[vCounter] = normal[i]; - model.meshes[m].animNormals[vCounter] = normal[i]; + if (model.meshes[m].animNormals != NULL) model.meshes[m].animNormals[vCounter] = normal[i]; vCounter++; } } @@ -4866,7 +4913,7 @@ static Model LoadIQM(const char *fileName) case IQM_TEXCOORD: { text = (float *)RL_MALLOC(iqmHeader->num_vertexes*2*sizeof(float)); - //fseek(iqmFile, va[i].offset, SEEK_SET); + //fseek(iqmFile, va[a].offset, SEEK_SET); //fread(text, iqmHeader->num_vertexes*2*sizeof(float), 1, iqmFile); memcpy(text, fileDataPtr + va[i].offset, iqmHeader->num_vertexes*2*sizeof(float)); @@ -4883,7 +4930,7 @@ static Model LoadIQM(const char *fileName) case IQM_BLENDINDEXES: { blendi = (char *)RL_MALLOC(iqmHeader->num_vertexes*4*sizeof(char)); - //fseek(iqmFile, va[i].offset, SEEK_SET); + //fseek(iqmFile, va[a].offset, SEEK_SET); //fread(blendi, iqmHeader->num_vertexes*4*sizeof(char), 1, iqmFile); memcpy(blendi, fileDataPtr + va[i].offset, iqmHeader->num_vertexes*4*sizeof(char)); @@ -4892,7 +4939,7 @@ static Model LoadIQM(const char *fileName) int boneCounter = 0; for (unsigned int i = imesh[m].first_vertex*4; i < (imesh[m].first_vertex + imesh[m].num_vertexes)*4; i++) { - model.meshes[m].boneIds[boneCounter] = blendi[i]; + model.meshes[m].boneIndices[boneCounter] = blendi[i]; boneCounter++; } } @@ -4900,7 +4947,7 @@ static Model LoadIQM(const char *fileName) case IQM_BLENDWEIGHTS: { blendw = (unsigned char *)RL_MALLOC(iqmHeader->num_vertexes*4*sizeof(unsigned char)); - //fseek(iqmFile, va[i].offset, SEEK_SET); + //fseek(iqmFile, va[a].offset, SEEK_SET); //fread(blendw, iqmHeader->num_vertexes*4*sizeof(unsigned char), 1, iqmFile); memcpy(blendw, fileDataPtr + va[i].offset, iqmHeader->num_vertexes*4*sizeof(unsigned char)); @@ -4917,7 +4964,7 @@ static Model LoadIQM(const char *fileName) case IQM_COLOR: { color = (unsigned char *)RL_MALLOC(iqmHeader->num_vertexes*4*sizeof(unsigned char)); - //fseek(iqmFile, va[i].offset, SEEK_SET); + //fseek(iqmFile, va[a].offset, SEEK_SET); //fread(blendw, iqmHeader->num_vertexes*4*sizeof(unsigned char), 1, iqmFile); memcpy(color, fileDataPtr + va[i].offset, iqmHeader->num_vertexes*4*sizeof(unsigned char)); @@ -4942,45 +4989,39 @@ static Model LoadIQM(const char *fileName) //fread(ijoint, sizeof(IQMJoint), iqmHeader->num_joints, iqmFile); memcpy(ijoint, fileDataPtr + iqmHeader->ofs_joints, iqmHeader->num_joints*sizeof(IQMJoint)); - model.boneCount = iqmHeader->num_joints; - model.bones = (BoneInfo *)RL_MALLOC(iqmHeader->num_joints*sizeof(BoneInfo)); - model.bindPose = (Transform *)RL_MALLOC(iqmHeader->num_joints*sizeof(Transform)); + model.skeleton.boneCount = iqmHeader->num_joints; + model.skeleton.bones = (BoneInfo *)RL_CALLOC(iqmHeader->num_joints, sizeof(BoneInfo)); + model.skeleton.bindPose = (Transform *)RL_CALLOC(iqmHeader->num_joints, sizeof(Transform)); for (unsigned int i = 0; i < iqmHeader->num_joints; i++) { // Bones - model.bones[i].parent = ijoint[i].parent; - //fseek(iqmFile, iqmHeader->ofs_text + ijoint[i].name, SEEK_SET); - //fread(model.bones[i].name, sizeof(char), BONE_NAME_LENGTH, iqmFile); - memcpy(model.bones[i].name, fileDataPtr + iqmHeader->ofs_text + ijoint[i].name, BONE_NAME_LENGTH*sizeof(char)); + model.skeleton.bones[i].parent = ijoint[i].parent; + //fseek(iqmFile, iqmHeader->ofs_text + ijoint[a].name, SEEK_SET); + //fread(model.bones[a].name, sizeof(char), BONE_NAME_LENGTH, iqmFile); + memcpy(model.skeleton.bones[i].name, fileDataPtr + iqmHeader->ofs_text + ijoint[i].name, BONE_NAME_LENGTH*sizeof(char)); // Bind pose (base pose) - model.bindPose[i].translation.x = ijoint[i].translate[0]; - model.bindPose[i].translation.y = ijoint[i].translate[1]; - model.bindPose[i].translation.z = ijoint[i].translate[2]; + model.skeleton.bindPose[i].translation.x = ijoint[i].translate[0]; + model.skeleton.bindPose[i].translation.y = ijoint[i].translate[1]; + model.skeleton.bindPose[i].translation.z = ijoint[i].translate[2]; - model.bindPose[i].rotation.x = ijoint[i].rotate[0]; - model.bindPose[i].rotation.y = ijoint[i].rotate[1]; - model.bindPose[i].rotation.z = ijoint[i].rotate[2]; - model.bindPose[i].rotation.w = ijoint[i].rotate[3]; + model.skeleton.bindPose[i].rotation.x = ijoint[i].rotate[0]; + model.skeleton.bindPose[i].rotation.y = ijoint[i].rotate[1]; + model.skeleton.bindPose[i].rotation.z = ijoint[i].rotate[2]; + model.skeleton.bindPose[i].rotation.w = ijoint[i].rotate[3]; - model.bindPose[i].scale.x = ijoint[i].scale[0]; - model.bindPose[i].scale.y = ijoint[i].scale[1]; - model.bindPose[i].scale.z = ijoint[i].scale[2]; + model.skeleton.bindPose[i].scale.x = ijoint[i].scale[0]; + model.skeleton.bindPose[i].scale.y = ijoint[i].scale[1]; + model.skeleton.bindPose[i].scale.z = ijoint[i].scale[2]; } - BuildPoseFromParentJoints(model.bones, model.boneCount, model.bindPose); + BuildPoseFromParentJoints(model.skeleton.bones, model.skeleton.boneCount, model.skeleton.bindPose); - for (int i = 0; i < model.meshCount; i++) - { - model.meshes[i].boneCount = model.boneCount; - model.meshes[i].boneMatrices = (Matrix *)RL_CALLOC(model.meshes[i].boneCount, sizeof(Matrix)); - - for (int j = 0; j < model.meshes[i].boneCount; j++) - { - model.meshes[i].boneMatrices[j] = MatrixIdentity(); - } - } + // Initialize runtime animation data: current pose and bone matrices + model.currentPose = (Transform *)RL_CALLOC(model.skeleton.boneCount, sizeof(Transform)); + model.boneMatrices = (Matrix *)RL_CALLOC(model.skeleton.boneCount, sizeof(Matrix)); + for (int j = 0; j < model.skeleton.boneCount; j++) model.boneMatrices[j] = MatrixIdentity(); UnloadFileData(fileData); @@ -5078,37 +5119,42 @@ static ModelAnimation *LoadModelAnimationsIQM(const char *fileName, int *animCou //fread(anim, sizeof(IQMAnim), iqmHeader->num_anims, iqmFile); memcpy(anim, fileDataPtr + iqmHeader->ofs_anims, iqmHeader->num_anims*sizeof(IQMAnim)); - ModelAnimation *animations = (ModelAnimation *)RL_MALLOC(iqmHeader->num_anims*sizeof(ModelAnimation)); + ModelAnimation *animations = (ModelAnimation *)RL_CALLOC(iqmHeader->num_anims, sizeof(ModelAnimation)); // frameposes - unsigned short *framedata = (unsigned short *)RL_MALLOC(iqmHeader->num_frames*iqmHeader->num_framechannels*sizeof(unsigned short)); + unsigned short *framedata = (unsigned short *)RL_CALLOC(iqmHeader->num_frames*iqmHeader->num_framechannels, sizeof(unsigned short)); //fseek(iqmFile, iqmHeader->ofs_frames, SEEK_SET); //fread(framedata, sizeof(unsigned short), iqmHeader->num_frames*iqmHeader->num_framechannels, iqmFile); memcpy(framedata, fileDataPtr + iqmHeader->ofs_frames, iqmHeader->num_frames*iqmHeader->num_framechannels*sizeof(unsigned short)); // joints - IQMJoint *joints = (IQMJoint *)RL_MALLOC(iqmHeader->num_joints*sizeof(IQMJoint)); + IQMJoint *joints = (IQMJoint *)RL_CALLOC(iqmHeader->num_joints, sizeof(IQMJoint)); memcpy(joints, fileDataPtr + iqmHeader->ofs_joints, iqmHeader->num_joints*sizeof(IQMJoint)); for (unsigned int a = 0; a < iqmHeader->num_anims; a++) { - animations[a].frameCount = anim[a].num_frames; animations[a].boneCount = iqmHeader->num_poses; - animations[a].bones = (BoneInfo *)RL_MALLOC(iqmHeader->num_poses*sizeof(BoneInfo)); - animations[a].framePoses = (Transform **)RL_MALLOC(anim[a].num_frames*sizeof(Transform *)); + BoneInfo *bones = (BoneInfo *)RL_CALLOC(iqmHeader->num_poses, sizeof(BoneInfo)); + + animations[a].keyframeCount = anim[a].num_frames; + animations[a].keyframePoses = (Transform **)RL_CALLOC(anim[a].num_frames, sizeof(Transform *)); memcpy(animations[a].name, fileDataPtr + iqmHeader->ofs_text + anim[a].name, 32); - TRACELOG(LOG_INFO, "IQM Anim %s", animations[a].name); - //animations[a].framerate = anim.framerate; // TODO: Use animation framerate data? + // TODO: Use animation framerate data? + //animations[a].framerate = anim.framerate; + + TRACELOG(LOG_INFO, "MODEL: [%s] Loaded animation: %s | Frames: %d | Framerate: %f", fileName, animations[a].name, animations[a].keyframeCount, anim[a].framerate); for (unsigned int j = 0; j < iqmHeader->num_poses; j++) { - // If animations and skeleton are in the same file, copy bone names to anim - if (iqmHeader->num_joints > 0) memcpy(animations[a].bones[j].name, fileDataPtr + iqmHeader->ofs_text + joints[j].name, BONE_NAME_LENGTH*sizeof(char)); - else memcpy(animations[a].bones[j].name, "ANIMJOINTNAME", 13); // Default bone name otherwise - animations[a].bones[j].parent = poses[j].parent; + bones[j].parent = poses[j].parent; + + // NOTE: No need to store bones names, bones only required to generate keyframe poses + //if (iqmHeader->num_joints > 0) memcpy(bones[j].name, fileDataPtr + iqmHeader->ofs_text + joints[j].name, BONE_NAME_LENGTH*sizeof(char)); + //else memcpy(bones[j].name, "ANIMJOINTNAME", 13); // Default bone name otherwise } - for (unsigned int j = 0; j < anim[a].num_frames; j++) animations[a].framePoses[j] = (Transform *)RL_MALLOC(iqmHeader->num_poses*sizeof(Transform)); + for (unsigned int j = 0; j < anim[a].num_frames; j++) + animations[a].keyframePoses[j] = (Transform *)RL_MALLOC(iqmHeader->num_poses*sizeof(Transform)); int dcounter = anim[a].first_frame*iqmHeader->num_framechannels; @@ -5116,87 +5162,87 @@ static ModelAnimation *LoadModelAnimationsIQM(const char *fileName, int *animCou { for (unsigned int i = 0; i < iqmHeader->num_poses; i++) { - animations[a].framePoses[frame][i].translation.x = poses[i].channeloffset[0]; + animations[a].keyframePoses[frame][i].translation.x = poses[i].channeloffset[0]; if (poses[i].mask & 0x01) { - animations[a].framePoses[frame][i].translation.x += framedata[dcounter]*poses[i].channelscale[0]; + animations[a].keyframePoses[frame][i].translation.x += framedata[dcounter]*poses[i].channelscale[0]; dcounter++; } - animations[a].framePoses[frame][i].translation.y = poses[i].channeloffset[1]; + animations[a].keyframePoses[frame][i].translation.y = poses[i].channeloffset[1]; if (poses[i].mask & 0x02) { - animations[a].framePoses[frame][i].translation.y += framedata[dcounter]*poses[i].channelscale[1]; + animations[a].keyframePoses[frame][i].translation.y += framedata[dcounter]*poses[i].channelscale[1]; dcounter++; } - animations[a].framePoses[frame][i].translation.z = poses[i].channeloffset[2]; + animations[a].keyframePoses[frame][i].translation.z = poses[i].channeloffset[2]; if (poses[i].mask & 0x04) { - animations[a].framePoses[frame][i].translation.z += framedata[dcounter]*poses[i].channelscale[2]; + animations[a].keyframePoses[frame][i].translation.z += framedata[dcounter]*poses[i].channelscale[2]; dcounter++; } - animations[a].framePoses[frame][i].rotation.x = poses[i].channeloffset[3]; + animations[a].keyframePoses[frame][i].rotation.x = poses[i].channeloffset[3]; if (poses[i].mask & 0x08) { - animations[a].framePoses[frame][i].rotation.x += framedata[dcounter]*poses[i].channelscale[3]; + animations[a].keyframePoses[frame][i].rotation.x += framedata[dcounter]*poses[i].channelscale[3]; dcounter++; } - animations[a].framePoses[frame][i].rotation.y = poses[i].channeloffset[4]; + animations[a].keyframePoses[frame][i].rotation.y = poses[i].channeloffset[4]; if (poses[i].mask & 0x10) { - animations[a].framePoses[frame][i].rotation.y += framedata[dcounter]*poses[i].channelscale[4]; + animations[a].keyframePoses[frame][i].rotation.y += framedata[dcounter]*poses[i].channelscale[4]; dcounter++; } - animations[a].framePoses[frame][i].rotation.z = poses[i].channeloffset[5]; + animations[a].keyframePoses[frame][i].rotation.z = poses[i].channeloffset[5]; if (poses[i].mask & 0x20) { - animations[a].framePoses[frame][i].rotation.z += framedata[dcounter]*poses[i].channelscale[5]; + animations[a].keyframePoses[frame][i].rotation.z += framedata[dcounter]*poses[i].channelscale[5]; dcounter++; } - animations[a].framePoses[frame][i].rotation.w = poses[i].channeloffset[6]; + animations[a].keyframePoses[frame][i].rotation.w = poses[i].channeloffset[6]; if (poses[i].mask & 0x40) { - animations[a].framePoses[frame][i].rotation.w += framedata[dcounter]*poses[i].channelscale[6]; + animations[a].keyframePoses[frame][i].rotation.w += framedata[dcounter]*poses[i].channelscale[6]; dcounter++; } - animations[a].framePoses[frame][i].scale.x = poses[i].channeloffset[7]; + animations[a].keyframePoses[frame][i].scale.x = poses[i].channeloffset[7]; if (poses[i].mask & 0x80) { - animations[a].framePoses[frame][i].scale.x += framedata[dcounter]*poses[i].channelscale[7]; + animations[a].keyframePoses[frame][i].scale.x += framedata[dcounter]*poses[i].channelscale[7]; dcounter++; } - animations[a].framePoses[frame][i].scale.y = poses[i].channeloffset[8]; + animations[a].keyframePoses[frame][i].scale.y = poses[i].channeloffset[8]; if (poses[i].mask & 0x100) { - animations[a].framePoses[frame][i].scale.y += framedata[dcounter]*poses[i].channelscale[8]; + animations[a].keyframePoses[frame][i].scale.y += framedata[dcounter]*poses[i].channelscale[8]; dcounter++; } - animations[a].framePoses[frame][i].scale.z = poses[i].channeloffset[9]; + animations[a].keyframePoses[frame][i].scale.z = poses[i].channeloffset[9]; if (poses[i].mask & 0x200) { - animations[a].framePoses[frame][i].scale.z += framedata[dcounter]*poses[i].channelscale[9]; + animations[a].keyframePoses[frame][i].scale.z += framedata[dcounter]*poses[i].channelscale[9]; dcounter++; } - animations[a].framePoses[frame][i].rotation = QuaternionNormalize(animations[a].framePoses[frame][i].rotation); + animations[a].keyframePoses[frame][i].rotation = QuaternionNormalize(animations[a].keyframePoses[frame][i].rotation); } } @@ -5205,15 +5251,17 @@ static ModelAnimation *LoadModelAnimationsIQM(const char *fileName, int *animCou { for (int i = 0; i < animations[a].boneCount; i++) { - if (animations[a].bones[i].parent >= 0) + if (bones[i].parent >= 0) { - animations[a].framePoses[frame][i].rotation = QuaternionMultiply(animations[a].framePoses[frame][animations[a].bones[i].parent].rotation, animations[a].framePoses[frame][i].rotation); - animations[a].framePoses[frame][i].translation = Vector3RotateByQuaternion(animations[a].framePoses[frame][i].translation, animations[a].framePoses[frame][animations[a].bones[i].parent].rotation); - animations[a].framePoses[frame][i].translation = Vector3Add(animations[a].framePoses[frame][i].translation, animations[a].framePoses[frame][animations[a].bones[i].parent].translation); - animations[a].framePoses[frame][i].scale = Vector3Multiply(animations[a].framePoses[frame][i].scale, animations[a].framePoses[frame][animations[a].bones[i].parent].scale); + animations[a].keyframePoses[frame][i].rotation = QuaternionMultiply(animations[a].keyframePoses[frame][bones[i].parent].rotation, animations[a].keyframePoses[frame][i].rotation); + animations[a].keyframePoses[frame][i].translation = Vector3RotateByQuaternion(animations[a].keyframePoses[frame][i].translation, animations[a].keyframePoses[frame][bones[i].parent].rotation); + animations[a].keyframePoses[frame][i].translation = Vector3Add(animations[a].keyframePoses[frame][i].translation, animations[a].keyframePoses[frame][bones[i].parent].translation); + animations[a].keyframePoses[frame][i].scale = Vector3Multiply(animations[a].keyframePoses[frame][i].scale, animations[a].keyframePoses[frame][bones[i].parent].scale); } } } + + RL_FREE(bones); } UnloadFileData(fileData); @@ -5375,7 +5423,7 @@ static Model LoadGLTF(const char *fileName) - Supports basic animations - Transforms, including parent-child relations, are applied on the mesh data, but the hierarchy is not kept (as it can't be represented) - - Mesh instances in the glTF file (i.e. same mesh linked from multiple nodes) + - Mesh instances in the glTF file (a.e. same mesh linked from multiple nodes) are turned into separate raylib Meshes RESTRICTIONS: @@ -5604,7 +5652,7 @@ static Model LoadGLTF(const char *fileName) // NOTE: Visit each node in the hierarchy and process any mesh linked from it // - Each primitive within a glTF node becomes a raylib Mesh // - The local-to-world transform of each node is used to transform the points/normals/tangents of the created Mesh(es) - // - Any glTF mesh linked from more than one Node (i.e. instancing) is turned into multiple Mesh's, as each Node will have its own transform applied + // - Any glTF mesh linked from more than one Node (a.e. instancing) is turned into multiple Mesh's, as each Node will have its own transform applied // // WARNING: The code below disregards the scenes defined in the file, all nodes are used //---------------------------------------------------------------------------------------------------- @@ -6092,15 +6140,15 @@ static Model LoadGLTF(const char *fileName) // LIMITATIONS: // - Only supports 1 armature per file, and skips loading it if there are multiple armatures // - Only supports linear interpolation (default method in Blender when checked "Always Sample Animations" when exporting a GLTF file) - // - Only supports translation/rotation/scale animation channel.path, weights not considered (i.e. morph targets) + // - Only supports translation/rotation/scale animation channel.path, weights not considered (a.e. morph targets) //---------------------------------------------------------------------------------------------------- if (data->skins_count > 0) { cgltf_skin skin = data->skins[0]; - model.bones = LoadBoneInfoGLTF(skin, &model.boneCount); - model.bindPose = (Transform *)RL_MALLOC(model.boneCount*sizeof(Transform)); + model.skeleton.bones = LoadBoneInfoGLTF(skin, &model.skeleton.boneCount); + model.skeleton.bindPose = (Transform *)RL_CALLOC(model.skeleton.boneCount, sizeof(Transform)); - for (int i = 0; i < model.boneCount; i++) + for (int i = 0; i < model.skeleton.boneCount; i++) { cgltf_node *node = skin.joints[i]; cgltf_float worldTransform[16]; @@ -6111,7 +6159,11 @@ static Model LoadGLTF(const char *fileName) worldTransform[2], worldTransform[6], worldTransform[10], worldTransform[14], worldTransform[3], worldTransform[7], worldTransform[11], worldTransform[15] }; - MatrixDecompose(worldMatrix, &(model.bindPose[i].translation), &(model.bindPose[i].rotation), &(model.bindPose[i].scale)); + + MatrixDecompose(worldMatrix, + &(model.skeleton.bindPose[i].translation), + &(model.skeleton.bindPose[i].rotation), + &(model.skeleton.bindPose[i].scale)); } if (data->skins_count > 1) TRACELOG(LOG_WARNING, "MODEL: [%s] can only load one skin (armature) per model, but gltf skins_count == %i", fileName, data->skins_count); @@ -6143,7 +6195,7 @@ static Model LoadGLTF(const char *fileName) // NOTE: JOINTS_n can only be vec4 and u8/u16 // SPECS: https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#meshes-overview - // WARNING: raylib only supports model.meshes[].boneIds as u8 (unsigned char), + // WARNING: raylib only supports model.meshes[].boneIndices as u8 (unsigned char), // if data is provided in any other format, it is converted to supported format but // it could imply data loss (a warning message is issued in that case) @@ -6151,16 +6203,16 @@ static Model LoadGLTF(const char *fileName) { if (attribute->component_type == cgltf_component_type_r_8u) { - // Init raylib mesh boneIds to copy glTF attribute data - model.meshes[meshIndex].boneIds = (unsigned char *)RL_CALLOC(model.meshes[meshIndex].vertexCount*4, sizeof(unsigned char)); + // Init raylib mesh boneIndices to copy glTF attribute data + model.meshes[meshIndex].boneIndices = (unsigned char *)RL_CALLOC(model.meshes[meshIndex].vertexCount*4, sizeof(unsigned char)); // Load attribute: vec4, u8 (unsigned char) - LOAD_ATTRIBUTE(attribute, 4, unsigned char, model.meshes[meshIndex].boneIds) + LOAD_ATTRIBUTE(attribute, 4, unsigned char, model.meshes[meshIndex].boneIndices) } else if (attribute->component_type == cgltf_component_type_r_16u) { - // Init raylib mesh boneIds to copy glTF attribute data - model.meshes[meshIndex].boneIds = (unsigned char *)RL_CALLOC(model.meshes[meshIndex].vertexCount*4, sizeof(unsigned char)); + // Init raylib mesh boneIndices to copy glTF attribute data + model.meshes[meshIndex].boneIndices = (unsigned char *)RL_CALLOC(model.meshes[meshIndex].vertexCount*4, sizeof(unsigned char)); // Load data into a temp buffer to be converted to raylib data type unsigned short *temp = (unsigned short *)RL_CALLOC(model.meshes[meshIndex].vertexCount*4, sizeof(unsigned short)); @@ -6177,7 +6229,7 @@ static Model LoadGLTF(const char *fileName) } // Despite the possible overflow, we convert data to unsigned char - model.meshes[meshIndex].boneIds[b] = (unsigned char)temp[b]; + model.meshes[meshIndex].boneIndices[b] = (unsigned char)temp[b]; } RL_FREE(temp); @@ -6243,7 +6295,7 @@ static Model LoadGLTF(const char *fileName) if (data->skins_count > 0 && !hasJoints && node->parent != NULL && node->parent->mesh == NULL) { int parentBoneId = -1; - for (int joint = 0; joint < model.boneCount; joint++) + for (int joint = 0; joint < model.skeleton.boneCount; joint++) { if (data->skins[0].joints[joint] == node->parent) { @@ -6254,38 +6306,34 @@ static Model LoadGLTF(const char *fileName) if (parentBoneId >= 0) { - model.meshes[meshIndex].boneIds = (unsigned char *)RL_CALLOC(model.meshes[meshIndex].vertexCount*4, sizeof(unsigned char)); + model.meshes[meshIndex].boneIndices = (unsigned char *)RL_CALLOC(model.meshes[meshIndex].vertexCount*4, sizeof(unsigned char)); model.meshes[meshIndex].boneWeights = (float *)RL_CALLOC(model.meshes[meshIndex].vertexCount*4, sizeof(float)); for (int vertexIndex = 0; vertexIndex < model.meshes[meshIndex].vertexCount*4; vertexIndex += 4) { - model.meshes[meshIndex].boneIds[vertexIndex] = (unsigned char)parentBoneId; + model.meshes[meshIndex].boneIndices[vertexIndex] = (unsigned char)parentBoneId; model.meshes[meshIndex].boneWeights[vertexIndex] = 1.0f; } } } - // Animated vertex data +#if !defined(SUPPORT_GPU_SKINNING) + // Animated vertex data (CPU skinning) model.meshes[meshIndex].animVertices = (float *)RL_CALLOC(model.meshes[meshIndex].vertexCount*3, sizeof(float)); memcpy(model.meshes[meshIndex].animVertices, model.meshes[meshIndex].vertices, model.meshes[meshIndex].vertexCount*3*sizeof(float)); model.meshes[meshIndex].animNormals = (float *)RL_CALLOC(model.meshes[meshIndex].vertexCount*3, sizeof(float)); - if (model.meshes[meshIndex].normals != NULL) - { - memcpy(model.meshes[meshIndex].animNormals, model.meshes[meshIndex].normals, model.meshes[meshIndex].vertexCount*3*sizeof(float)); - } - - // Bone Transform Matrices - model.meshes[meshIndex].boneCount = model.boneCount; - model.meshes[meshIndex].boneMatrices = (Matrix *)RL_CALLOC(model.meshes[meshIndex].boneCount, sizeof(Matrix)); - - for (int j = 0; j < model.meshes[meshIndex].boneCount; j++) - { - model.meshes[meshIndex].boneMatrices[j] = MatrixIdentity(); - } + if (model.meshes[meshIndex].normals != NULL) memcpy(model.meshes[meshIndex].animNormals, model.meshes[meshIndex].normals, model.meshes[meshIndex].vertexCount*3*sizeof(float)); +#endif + model.meshes[meshIndex].boneCount = model.skeleton.boneCount; meshIndex++; // Move to next mesh } } + + // Initialize runtime animation data: current pose and bone matrices + model.currentPose = (Transform *)RL_CALLOC(model.skeleton.boneCount, sizeof(Transform)); + model.boneMatrices = (Matrix *)RL_CALLOC(model.skeleton.boneCount, sizeof(Matrix)); + for (int j = 0; j < model.skeleton.boneCount; j++) model.boneMatrices[j] = MatrixIdentity(); //---------------------------------------------------------------------------------------------------- // Free all cgltf loaded data @@ -6484,11 +6532,11 @@ static ModelAnimation *LoadModelAnimationsGLTF(const char *fileName, int *animCo }; MatrixDecompose(worldMatrix, &worldTransform.translation, &worldTransform.rotation, &worldTransform.scale); - for (unsigned int i = 0; i < data->animations_count; i++) + for (unsigned int a = 0; a < data->animations_count; a++) { - animations[i].bones = LoadBoneInfoGLTF(skin, &animations[i].boneCount); + BoneInfo *bones = LoadBoneInfoGLTF(skin, &animations[a].boneCount); - cgltf_animation animData = data->animations[i]; + cgltf_animation animData = data->animations[a]; struct Channels { cgltf_animation_channel *translate; @@ -6497,7 +6545,7 @@ static ModelAnimation *LoadModelAnimationsGLTF(const char *fileName, int *animCo cgltf_interpolation_type interpolationType; }; - struct Channels *boneChannels = (struct Channels *)RL_CALLOC(animations[i].boneCount, sizeof(struct Channels)); + struct Channels *boneChannels = (struct Channels *)RL_CALLOC(animations[a].boneCount, sizeof(struct Channels)); float animDuration = 0.0f; for (unsigned int j = 0; j < animData.channels_count; j++) @@ -6514,11 +6562,7 @@ static ModelAnimation *LoadModelAnimationsGLTF(const char *fileName, int *animCo } } - if (boneIndex == -1) - { - // Animation channel for a node not in the armature - continue; - } + if (boneIndex == -1) continue; // Animation channel for a node not in the skeleton boneChannels[boneIndex].interpolationType = animData.channels[j].sampler->interpolation; @@ -6538,34 +6582,34 @@ static ModelAnimation *LoadModelAnimationsGLTF(const char *fileName, int *animCo } else { - TRACELOG(LOG_WARNING, "MODEL: [%s] Unsupported target_path on channel %d's sampler for animation %d. Skipping.", fileName, j, i); + TRACELOG(LOG_WARNING, "MODEL: [%s] Unsupported target_path on channel %d's sampler for animation %d. Skipping.", fileName, j, a); } } else TRACELOG(LOG_WARNING, "MODEL: [%s] Invalid interpolation curve encountered for GLTF animation.", fileName); - float t = 0.0f; - cgltf_bool r = cgltf_accessor_read_float(channel.sampler->input, channel.sampler->input->count - 1, &t, 1); + float time = 0.0f; + cgltf_bool result = cgltf_accessor_read_float(channel.sampler->input, channel.sampler->input->count - 1, &time, 1); - if (!r) + if (!result) { TRACELOG(LOG_WARNING, "MODEL: [%s] Failed to load input time", fileName); continue; } - animDuration = (t > animDuration)? t : animDuration; + animDuration = (time > animDuration)? time : animDuration; } - if (animData.name != NULL) strncpy(animations[i].name, animData.name, sizeof(animations[i].name) - 1); + if (animData.name != NULL) strncpy(animations[a].name, animData.name, sizeof(animations[a].name) - 1); - animations[i].frameCount = (int)(animDuration*GLTF_FRAMERATE) + 1; - animations[i].framePoses = (Transform **)RL_MALLOC(animations[i].frameCount*sizeof(Transform *)); + animations[a].keyframeCount = (int)(animDuration*GLTF_FRAMERATE) + 1; + animations[a].keyframePoses = (Transform **)RL_CALLOC(animations[a].keyframeCount, sizeof(Transform *)); - for (int j = 0; j < animations[i].frameCount; j++) + for (int j = 0; j < animations[a].keyframeCount; j++) { - animations[i].framePoses[j] = (Transform *)RL_MALLOC(animations[i].boneCount*sizeof(Transform)); + animations[a].keyframePoses[j] = (Transform *)RL_CALLOC(animations[a].boneCount, sizeof(Transform)); float time = (float)j / GLTF_FRAMERATE; - for (int k = 0; k < animations[i].boneCount; k++) + for (int k = 0; k < animations[a].boneCount; k++) { Vector3 translation = {skin.joints[k]->translation[0], skin.joints[k]->translation[1], skin.joints[k]->translation[2]}; Quaternion rotation = {skin.joints[k]->rotation[0], skin.joints[k]->rotation[1], skin.joints[k]->rotation[2], skin.joints[k]->rotation[3]}; @@ -6575,7 +6619,7 @@ static ModelAnimation *LoadModelAnimationsGLTF(const char *fileName, int *animCo { if (!GetPoseAtTimeGLTF(boneChannels[k].interpolationType, boneChannels[k].translate->sampler->input, boneChannels[k].translate->sampler->output, time, &translation)) { - TRACELOG(LOG_INFO, "MODEL: [%s] Failed to load translate pose data for bone %s", fileName, animations[i].bones[k].name); + TRACELOG(LOG_INFO, "MODEL: [%s] Failed to load translate pose data for bone %s", fileName, bones[k].name); } } @@ -6583,7 +6627,7 @@ static ModelAnimation *LoadModelAnimationsGLTF(const char *fileName, int *animCo { if (!GetPoseAtTimeGLTF(boneChannels[k].interpolationType, boneChannels[k].rotate->sampler->input, boneChannels[k].rotate->sampler->output, time, &rotation)) { - TRACELOG(LOG_INFO, "MODEL: [%s] Failed to load rotate pose data for bone %s", fileName, animations[i].bones[k].name); + TRACELOG(LOG_INFO, "MODEL: [%s] Failed to load rotate pose data for bone %s", fileName, bones[k].name); } } @@ -6591,40 +6635,43 @@ static ModelAnimation *LoadModelAnimationsGLTF(const char *fileName, int *animCo { if (!GetPoseAtTimeGLTF(boneChannels[k].interpolationType, boneChannels[k].scale->sampler->input, boneChannels[k].scale->sampler->output, time, &scale)) { - TRACELOG(LOG_INFO, "MODEL: [%s] Failed to load scale pose data for bone %s", fileName, animations[i].bones[k].name); + TRACELOG(LOG_INFO, "MODEL: [%s] Failed to load scale pose data for bone %s", fileName, bones[k].name); } } - animations[i].framePoses[j][k] = (Transform){ + animations[a].keyframePoses[j][k] = (Transform){ .translation = translation, .rotation = rotation, .scale = scale }; } - Transform *root = &animations[i].framePoses[j][0]; + Transform *root = &animations[a].keyframePoses[j][0]; root->rotation = QuaternionMultiply(worldTransform.rotation, root->rotation); root->scale = Vector3Multiply(root->scale, worldTransform.scale); root->translation = Vector3Multiply(root->translation, worldTransform.scale); root->translation = Vector3RotateByQuaternion(root->translation, worldTransform.rotation); root->translation = Vector3Add(root->translation, worldTransform.translation); - BuildPoseFromParentJoints(animations[i].bones, animations[i].boneCount, animations[i].framePoses[j]); + BuildPoseFromParentJoints(bones, animations[a].boneCount, animations[a].keyframePoses[j]); } - TRACELOG(LOG_INFO, "MODEL: [%s] Loaded animation: %s (%d frames, %fs)", fileName, (animData.name != NULL)? animData.name : "NULL", animations[i].frameCount, animDuration); + TRACELOG(LOG_INFO, "MODEL: [%s] Loaded animation: %s | Frames: %d | Duration: %fs", fileName, (animData.name != NULL)? animData.name : "NULL", animations[a].keyframeCount, animDuration); RL_FREE(boneChannels); + RL_FREE(bones); } } if (data->skins_count > 1) { - TRACELOG(LOG_WARNING, "MODEL: [%s] expected exactly one skin to load animation data from, but found %i", fileName, data->skins_count); + TRACELOG(LOG_WARNING, "MODEL: [%s] Expected one unique skin to load animation data from, but found %i", fileName, data->skins_count); } cgltf_free(data); } + UnloadFileData(fileData); + return animations; } #endif @@ -6795,13 +6842,13 @@ static Model LoadM3D(const char *fileName) // WARNING: Sorting is not needed, valid M3D model files should already be sorted // Just keeping the sorting function for reference (Check PR #3363 #3385) /* - for (i = 1; i < m3d->numface; i++) + for (a = 1; a < m3d->numface; a++) { - if (m3d->face[i-1].materialid <= m3d->face[i].materialid) continue; + if (m3d->face[a-1].materialid <= m3d->face[a].materialid) continue; - // face[i-1] > face[i]. slide face[i] lower - m3df_t slider = m3d->face[i]; - j = i-1; + // face[a-1] > face[a]. slide face[a] lower + m3df_t slider = m3d->face[a]; + j = a-1; do { // face[j] > slider, face[j+1] is svailable vacant gap @@ -6875,10 +6922,12 @@ static Model LoadM3D(const char *fileName) if (m3d->numbone && m3d->numskin) { - model.meshes[k].boneIds = (unsigned char *)RL_CALLOC(model.meshes[k].vertexCount*4, sizeof(unsigned char)); + model.meshes[k].boneIndices = (unsigned char *)RL_CALLOC(model.meshes[k].vertexCount*4, sizeof(unsigned char)); model.meshes[k].boneWeights = (float *)RL_CALLOC(model.meshes[k].vertexCount*4, sizeof(float)); +#if !defined(SUPPORT_GPU_SKINNING) model.meshes[k].animVertices = (float *)RL_CALLOC(model.meshes[k].vertexCount*3, sizeof(float)); model.meshes[k].animNormals = (float *)RL_CALLOC(model.meshes[k].vertexCount*3, sizeof(float)); +#endif } model.meshMaterial[k] = mi + 1; @@ -6942,7 +6991,7 @@ static Model LoadM3D(const char *fileName) { for (j = 0; j < 4; j++) { - model.meshes[k].boneIds[l*12 + n*4 + j] = m3d->skin[skinid].boneid[j]; + model.meshes[k].boneIndices[l*12 + n*4 + j] = m3d->skin[skinid].boneid[j]; model.meshes[k].boneWeights[l*12 + n*4 + j] = m3d->skin[skinid].weight[j]; } } @@ -6950,7 +6999,7 @@ static Model LoadM3D(const char *fileName) { // raylib does not handle boneless meshes with skeletal animations, so // we put all vertices without a bone into a special "no bone" bone - model.meshes[k].boneIds[l*12 + n*4] = m3d->numbone; + model.meshes[k].boneIndices[l*12 + n*4] = m3d->numbone; model.meshes[k].boneWeights[l*12 + n*4] = 1.0f; } } @@ -7031,47 +7080,47 @@ static Model LoadM3D(const char *fileName) // Load bones if (m3d->numbone) { - model.boneCount = m3d->numbone + 1; - model.bones = (BoneInfo *)RL_CALLOC(model.boneCount, sizeof(BoneInfo)); - model.bindPose = (Transform *)RL_CALLOC(model.boneCount, sizeof(Transform)); + model.skeleton.boneCount = m3d->numbone + 1; + model.skeleton.bones = (BoneInfo *)RL_CALLOC(model.skeleton.boneCount, sizeof(BoneInfo)); + model.skeleton.bindPose = (Transform *)RL_CALLOC(model.skeleton.boneCount, sizeof(Transform)); for (i = 0; i < (int)m3d->numbone; i++) { - model.bones[i].parent = m3d->bone[i].parent; - strncpy(model.bones[i].name, m3d->bone[i].name, sizeof(model.bones[i].name) - 1); - model.bindPose[i].translation.x = m3d->vertex[m3d->bone[i].pos].x*m3d->scale; - model.bindPose[i].translation.y = m3d->vertex[m3d->bone[i].pos].y*m3d->scale; - model.bindPose[i].translation.z = m3d->vertex[m3d->bone[i].pos].z*m3d->scale; - model.bindPose[i].rotation.x = m3d->vertex[m3d->bone[i].ori].x; - model.bindPose[i].rotation.y = m3d->vertex[m3d->bone[i].ori].y; - model.bindPose[i].rotation.z = m3d->vertex[m3d->bone[i].ori].z; - model.bindPose[i].rotation.w = m3d->vertex[m3d->bone[i].ori].w; + model.skeleton.bones[i].parent = m3d->bone[i].parent; + strncpy(model.skeleton.bones[i].name, m3d->bone[i].name, sizeof(model.skeleton.bones[i].name) - 1); + model.skeleton.bindPose[i].translation.x = m3d->vertex[m3d->bone[i].pos].x*m3d->scale; + model.skeleton.bindPose[i].translation.y = m3d->vertex[m3d->bone[i].pos].y*m3d->scale; + model.skeleton.bindPose[i].translation.z = m3d->vertex[m3d->bone[i].pos].z*m3d->scale; + model.skeleton.bindPose[i].rotation.x = m3d->vertex[m3d->bone[i].ori].x; + model.skeleton.bindPose[i].rotation.y = m3d->vertex[m3d->bone[i].ori].y; + model.skeleton.bindPose[i].rotation.z = m3d->vertex[m3d->bone[i].ori].z; + model.skeleton.bindPose[i].rotation.w = m3d->vertex[m3d->bone[i].ori].w; - // TODO: If the orientation quaternion is not normalized, then that's encoding scaling - model.bindPose[i].rotation = QuaternionNormalize(model.bindPose[i].rotation); - model.bindPose[i].scale.x = model.bindPose[i].scale.y = model.bindPose[i].scale.z = 1.0f; + // NOTE: If the orientation quaternion is not normalized, then that's encoding scaling + model.skeleton.bindPose[i].rotation = QuaternionNormalize(model.skeleton.bindPose[i].rotation); + model.skeleton.bindPose[i].scale.x = model.skeleton.bindPose[i].scale.y = model.skeleton.bindPose[i].scale.z = 1.0f; // Child bones are stored in parent bone relative space, convert that into model space - if (model.bones[i].parent >= 0) + if (model.skeleton.bones[i].parent >= 0) { - model.bindPose[i].rotation = QuaternionMultiply(model.bindPose[model.bones[i].parent].rotation, model.bindPose[i].rotation); - model.bindPose[i].translation = Vector3RotateByQuaternion(model.bindPose[i].translation, model.bindPose[model.bones[i].parent].rotation); - model.bindPose[i].translation = Vector3Add(model.bindPose[i].translation, model.bindPose[model.bones[i].parent].translation); - model.bindPose[i].scale = Vector3Multiply(model.bindPose[i].scale, model.bindPose[model.bones[i].parent].scale); + model.skeleton.bindPose[i].rotation = QuaternionMultiply(model.skeleton.bindPose[model.skeleton.bones[i].parent].rotation, model.skeleton.bindPose[i].rotation); + model.skeleton.bindPose[i].translation = Vector3RotateByQuaternion(model.skeleton.bindPose[i].translation, model.skeleton.bindPose[model.skeleton.bones[i].parent].rotation); + model.skeleton.bindPose[i].translation = Vector3Add(model.skeleton.bindPose[i].translation, model.skeleton.bindPose[model.skeleton.bones[i].parent].translation); + model.skeleton.bindPose[i].scale = Vector3Multiply(model.skeleton.bindPose[i].scale, model.skeleton.bindPose[model.skeleton.bones[i].parent].scale); } } // Add a special "no bone" bone - model.bones[i].parent = -1; - memcpy(model.bones[i].name, "NO BONE", 7); - model.bindPose[i].translation.x = 0.0f; - model.bindPose[i].translation.y = 0.0f; - model.bindPose[i].translation.z = 0.0f; - model.bindPose[i].rotation.x = 0.0f; - model.bindPose[i].rotation.y = 0.0f; - model.bindPose[i].rotation.z = 0.0f; - model.bindPose[i].rotation.w = 1.0f; - model.bindPose[i].scale.x = model.bindPose[i].scale.y = model.bindPose[i].scale.z = 1.0f; + model.skeleton.bones[i].parent = -1; + memcpy(model.skeleton.bones[i].name, "NO BONE", 7); + model.skeleton.bindPose[i].translation.x = 0.0f; + model.skeleton.bindPose[i].translation.y = 0.0f; + model.skeleton.bindPose[i].translation.z = 0.0f; + model.skeleton.bindPose[i].rotation.x = 0.0f; + model.skeleton.bindPose[i].rotation.y = 0.0f; + model.skeleton.bindPose[i].rotation.z = 0.0f; + model.skeleton.bindPose[i].rotation.w = 1.0f; + model.skeleton.bindPose[i].scale.x = model.skeleton.bindPose[i].scale.y = model.skeleton.bindPose[i].scale.z = 1.0f; } // Load bone-pose default mesh into animation vertices. These will be updated when UpdateModelAnimation gets @@ -7080,16 +7129,19 @@ static Model LoadM3D(const char *fileName) { for (i = 0; i < model.meshCount; i++) { + model.meshes[i].boneCount = model.skeleton.boneCount; + +#if !defined(SUPPORT_GPU_SKINNING) + // Initialize vertex buffers for CPU skinning memcpy(model.meshes[i].animVertices, model.meshes[i].vertices, model.meshes[i].vertexCount*3*sizeof(float)); memcpy(model.meshes[i].animNormals, model.meshes[i].normals, model.meshes[i].vertexCount*3*sizeof(float)); - - model.meshes[i].boneCount = model.boneCount; - model.meshes[i].boneMatrices = (Matrix *)RL_CALLOC(model.meshes[i].boneCount, sizeof(Matrix)); - for (j = 0; j < model.meshes[i].boneCount; j++) - { - model.meshes[i].boneMatrices[j] = MatrixIdentity(); - } +#endif } + + // Initialize runtime animation data: current pose and bone matrices + model.currentPose = (Transform *)RL_CALLOC(model.skeleton.boneCount, sizeof(Transform)); + model.boneMatrices = (Matrix *)RL_CALLOC(model.skeleton.boneCount, sizeof(Matrix)); + for (int j = 0; j < model.skeleton.boneCount; j++) model.boneMatrices[j] = MatrixIdentity(); } m3d_free(m3d); @@ -7123,8 +7175,7 @@ static ModelAnimation *LoadModelAnimationsM3D(const char *fileName, int *animCou UnloadFileData(fileData); return NULL; } - else TRACELOG(LOG_INFO, "MODEL: [%s] M3D data loaded successfully: %i animations, %i bones, %i skins", fileName, - m3d->numaction, m3d->numbone, m3d->numskin); + else TRACELOG(LOG_INFO, "MODEL: [%s] M3D data loaded successfully: %i animations, %i bones, %i skins", fileName, m3d->numaction, m3d->numbone, m3d->numskin); // No animation or bones, exit out. skins are not required because some people use one animation for N models if (!m3d->numaction || !m3d->numbone) @@ -7139,29 +7190,30 @@ static ModelAnimation *LoadModelAnimationsM3D(const char *fileName, int *animCou for (unsigned int a = 0; a < m3d->numaction; a++) { - animations[a].frameCount = m3d->action[a].durationmsec/M3D_ANIMDELAY; animations[a].boneCount = m3d->numbone + 1; - animations[a].bones = (BoneInfo *)RL_MALLOC((m3d->numbone + 1)*sizeof(BoneInfo)); - animations[a].framePoses = (Transform **)RL_MALLOC(animations[a].frameCount*sizeof(Transform *)); + BoneInfo *bones = (BoneInfo *)RL_CALLOC((m3d->numbone + 1), sizeof(BoneInfo)); + + animations[a].keyframeCount = m3d->action[a].durationmsec/M3D_ANIMDELAY; + animations[a].keyframePoses = (Transform **)RL_CALLOC(animations[a].keyframeCount, sizeof(Transform *)); strncpy(animations[a].name, m3d->action[a].name, sizeof(animations[a].name) - 1); - TRACELOG(LOG_INFO, "MODEL: [%s] animation #%i: %i msec, %i frames", fileName, a, m3d->action[a].durationmsec, animations[a].frameCount); + TRACELOG(LOG_INFO, "MODEL: [%s] Loaded animation: %s | Frames: %d | Duration: %fs", fileName, animations[a].name, animations[a].keyframeCount, m3d->action[a].durationmsec); for (i = 0; i < (int)m3d->numbone; i++) { - animations[a].bones[i].parent = m3d->bone[i].parent; - strncpy(animations[a].bones[i].name, m3d->bone[i].name, sizeof(animations[a].bones[i].name) - 1); + bones[i].parent = m3d->bone[i].parent; + strncpy(bones[i].name, m3d->bone[i].name, sizeof(bones[i].name) - 1); } // A special, never transformed "no bone" bone, used for boneless vertices - animations[a].bones[i].parent = -1; - memcpy(animations[a].bones[i].name, "NO BONE", 7); + bones[i].parent = -1; + memcpy(bones[i].name, "NO BONE", 7); // M3D stores frames at arbitrary intervals with sparse skeletons. We need full skeletons at // regular intervals, so let the M3D SDK do the heavy lifting and calculate interpolated bones - for (i = 0; i < animations[a].frameCount; i++) + for (i = 0; i < animations[a].keyframeCount; i++) { - animations[a].framePoses[i] = (Transform *)RL_MALLOC((m3d->numbone + 1)*sizeof(Transform)); + animations[a].keyframePoses[i] = (Transform *)RL_CALLOC((m3d->numbone + 1), sizeof(Transform)); m3db_t *pose = m3d_pose(m3d, a, i*M3D_ANIMDELAY); @@ -7169,38 +7221,43 @@ static ModelAnimation *LoadModelAnimationsM3D(const char *fileName, int *animCou { for (j = 0; j < (int)m3d->numbone; j++) { - animations[a].framePoses[i][j].translation.x = m3d->vertex[pose[j].pos].x*m3d->scale; - animations[a].framePoses[i][j].translation.y = m3d->vertex[pose[j].pos].y*m3d->scale; - animations[a].framePoses[i][j].translation.z = m3d->vertex[pose[j].pos].z*m3d->scale; - animations[a].framePoses[i][j].rotation.x = m3d->vertex[pose[j].ori].x; - animations[a].framePoses[i][j].rotation.y = m3d->vertex[pose[j].ori].y; - animations[a].framePoses[i][j].rotation.z = m3d->vertex[pose[j].ori].z; - animations[a].framePoses[i][j].rotation.w = m3d->vertex[pose[j].ori].w; - animations[a].framePoses[i][j].rotation = QuaternionNormalize(animations[a].framePoses[i][j].rotation); - animations[a].framePoses[i][j].scale.x = animations[a].framePoses[i][j].scale.y = animations[a].framePoses[i][j].scale.z = 1.0f; + animations[a].keyframePoses[i][j].translation.x = m3d->vertex[pose[j].pos].x*m3d->scale; + animations[a].keyframePoses[i][j].translation.y = m3d->vertex[pose[j].pos].y*m3d->scale; + animations[a].keyframePoses[i][j].translation.z = m3d->vertex[pose[j].pos].z*m3d->scale; + animations[a].keyframePoses[i][j].rotation.x = m3d->vertex[pose[j].ori].x; + animations[a].keyframePoses[i][j].rotation.y = m3d->vertex[pose[j].ori].y; + animations[a].keyframePoses[i][j].rotation.z = m3d->vertex[pose[j].ori].z; + animations[a].keyframePoses[i][j].rotation.w = m3d->vertex[pose[j].ori].w; + animations[a].keyframePoses[i][j].rotation = QuaternionNormalize(animations[a].keyframePoses[i][j].rotation); + animations[a].keyframePoses[i][j].scale.x = animations[a].keyframePoses[i][j].scale.y = animations[a].keyframePoses[i][j].scale.z = 1.0f; // Child bones are stored in parent bone relative space, convert that into model space - if (animations[a].bones[j].parent >= 0) + if (bones[j].parent >= 0) { - animations[a].framePoses[i][j].rotation = QuaternionMultiply(animations[a].framePoses[i][animations[a].bones[j].parent].rotation, animations[a].framePoses[i][j].rotation); - animations[a].framePoses[i][j].translation = Vector3RotateByQuaternion(animations[a].framePoses[i][j].translation, animations[a].framePoses[i][animations[a].bones[j].parent].rotation); - animations[a].framePoses[i][j].translation = Vector3Add(animations[a].framePoses[i][j].translation, animations[a].framePoses[i][animations[a].bones[j].parent].translation); - animations[a].framePoses[i][j].scale = Vector3Multiply(animations[a].framePoses[i][j].scale, animations[a].framePoses[i][animations[a].bones[j].parent].scale); + animations[a].keyframePoses[i][j].rotation = QuaternionMultiply(animations[a].keyframePoses[i][bones[j].parent].rotation, animations[a].keyframePoses[i][j].rotation); + animations[a].keyframePoses[i][j].translation = Vector3RotateByQuaternion(animations[a].keyframePoses[i][j].translation, animations[a].keyframePoses[i][bones[j].parent].rotation); + animations[a].keyframePoses[i][j].translation = Vector3Add(animations[a].keyframePoses[i][j].translation, animations[a].keyframePoses[i][bones[j].parent].translation); + animations[a].keyframePoses[i][j].scale = Vector3Multiply(animations[a].keyframePoses[i][j].scale, animations[a].keyframePoses[i][bones[j].parent].scale); } } // Default transform for the "no bone" bone - animations[a].framePoses[i][j].translation.x = 0.0f; - animations[a].framePoses[i][j].translation.y = 0.0f; - animations[a].framePoses[i][j].translation.z = 0.0f; - animations[a].framePoses[i][j].rotation.x = 0.0f; - animations[a].framePoses[i][j].rotation.y = 0.0f; - animations[a].framePoses[i][j].rotation.z = 0.0f; - animations[a].framePoses[i][j].rotation.w = 1.0f; - animations[a].framePoses[i][j].scale.x = animations[a].framePoses[i][j].scale.y = animations[a].framePoses[i][j].scale.z = 1.0f; + animations[a].keyframePoses[i][j].translation.x = 0.0f; + animations[a].keyframePoses[i][j].translation.y = 0.0f; + animations[a].keyframePoses[i][j].translation.z = 0.0f; + animations[a].keyframePoses[i][j].rotation.x = 0.0f; + animations[a].keyframePoses[i][j].rotation.y = 0.0f; + animations[a].keyframePoses[i][j].rotation.z = 0.0f; + animations[a].keyframePoses[i][j].rotation.w = 1.0f; + animations[a].keyframePoses[i][j].scale.x = 1.0f; + animations[a].keyframePoses[i][j].scale.y = 1.0f; + animations[a].keyframePoses[i][j].scale.z = 1.0f; + RL_FREE(pose); } } + + RL_FREE(bones); } m3d_free(m3d);