A powerful Java runtime animation library for creating smooth, high-performance animations and pose blending systems.
- π― High Performance: Optimized for real-time animation with efficient memory management
- π Advanced Blending: Support for blendspace, layered, kinematic interpolation blending
- πͺ Keyframe Animation: Flexible keyframe system with multiple interpolation methods
- ποΈ Modular Design: Clean architecture with extensible components
- β‘ Real-time Ready: Designed for game engines and real-time applications
- Java 8 or higher
- Gradle (for building from source)
<dependency>
<groupId>com.maydaymemory</groupId>
<artifactId>mae</artifactId>
<version>1.1.0</version>
</dependency>implementation 'com.maydaymemory:mae:1.1.0'git clone https://github.com/286799714/MaydayAnimationEngine.git
cd MaydayAnimationEngine
./gradlew publishToMavenLocal// Create a bone transform factory
BoneTransformFactory transformFactory = new ZYXBoneTransformFactory();
// Create a pose builder supplier
Supplier<PoseBuilder> poseBuilderSupplier = LinkedListPoseBuilder::new;
// Create an animation
Animation animation = new BasicAnimation("walk", factory, poseBuilderSupplier);
// Set up translation channel for bone 0
InterpolatableChannel<Vector3fc> translationChannel = new ArrayInterpolatableChannel<>();
translationChannel.addKeyframe(new Vector3fKeyframe(0.0f, new Vector3f(0, 0, 0)));
translationChannel.addKeyframe(new Vector3fKeyframe(1.0f, new Vector3f(1, 0, 0)));
animation.setTranslationChannel(0, translationChannel);
// Evaluate animation at time 0.5s
Pose pose = animation.evaluate(0.5f);// Create a blender
AdditiveBlender blender = new SimpleAdditiveBlender(transformFactory, poseBuilderSupplier);
// Blend two poses
Pose basePose = // ... your base pose
Pose additivePose = // ... your additive pose
Pose result = blender.blend(basePose, additivePose);// Create a 1D blend space
BlendSpace1D blendSpace = new SimpleBlendSpace1D(factory, poseBuilderSupplier);
// Add sample poses
blendSpace.addSampler(0.0f, idlePose);
blendSpace.addSampler(1.0f, walkPose);
blendSpace.addSampler(2.0f, runPose);
// Blend at speed 1.5
Pose blendedPose = blendSpace.blend(1.5f);- Animation: Main interface for animation playback and evaluation
- Pose: Represents a skeletal pose with bone transformations
- Blender: Handles pose blending operations (additive, additional, kinematic, blendspace)
- Controlling: Define animation graphs, nodes, parameter passing, and animation state machines
src/main/java/com/maydaymemory/mae/
βββ basic/ # Animation and pose definition
βββ blend/ # Blending algorithms and blend spaces
βββ control/ # Control flow and node system
βββ util/ # Utility classes and math functions
To be done...
We welcome contributions! Please see our Contributing Guide for details.
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
- Follow Java coding conventions
- Add comprehensive Javadoc comments
- Include unit tests for new features
- Ensure all tests pass before submitting
This project is licensed under the MIT License - see the LICENSE file for details.
- JOML - Java OpenGL Math Library
- FastUtil - Fast and compact type-specific collections
- Robert Penner - Easing functions
- π§ Email: maydaymemory123@gmail.com
- π Report Issues
Made with β€οΈ by MaydayMemory
If this project helps you, please give it a βοΈ