WIP: Jiggle demo: our own full-figured Vitruvian woman, hair and a same-pose twin #138
Draft
khyretos
wants to merge 2 commits from
khyretos/claude/jiggle-vitruvian into claude/creator-polish-base
AGit
pull from: khyretos/claude/jiggle-vitruvian
merge into: khyretos:claude/creator-polish-base
khyretos:main
khyretos:renovate-hold-imgui-rnnoise
khyretos:gh-pages
khyretos:windows-results
khyretos:renovate/font-awesome-7.x
khyretos:lint-fix/yaml_prettier
khyretos:renovate/https-code.forgejo.org-forgejo-upload-artifact-5.x
khyretos:renovate/https-code.forgejo.org-forgejo-download-artifact-7.x
khyretos:renovate/https-code.forgejo.org-actions-cache-6.x
khyretos:renovate/xiph-rnnoise-0.x
khyretos:renovate/cmake-mirrors-non-major
khyretos:lint-fix/json_prettier
khyretos:lint-fix/bash_shfmt
khyretos:ci/coverage-ccache
khyretos:ci/speed-ccache-jobs
khyretos:claude/integration
khyretos:claude/creator-vitruvian-wip
khyretos:claude/park-engine-foundations
khyretos:claude/park-parity
khyretos:claude/jiggle-skeleton-base
khyretos:claude/creator-polish-base
khyretos:claude/creator-polish
khyretos:claude/creator-wardrobe
khyretos:claude/creator-anime
khyretos:claude/creator-clothes
khyretos:pre-release
khyretos:release
khyretos:claude/mpm-water
khyretos:lint-fix/markdown_markdownlint
khyretos:claude/lua-nav
khyretos:claude/creator-hair
khyretos:claude/dynamic-navmesh
khyretos:claude/lua-audio
khyretos:claude/save-slots
khyretos:archive/2026-10-24/clothref
khyretos:archive/2026-10-24/f01aref
khyretos:archive/2026-10-24/f02aref
khyretos:archive/2026-10-24/f12ref
khyretos:archive/2026-10-24/g18eref
khyretos:archive/2026-10-24/g19aref
khyretos:archive/2026-10-24/g19b2
khyretos:archive/2026-10-24/g19bref
khyretos:archive/2026-10-24/g19cref
khyretos:archive/2026-10-24/g19dref
khyretos:archive/2026-10-24/reflA
khyretos:archive/2026-10-24/reflB
khyretos:khyretos/rhi-shaders
khyretos:claude/rhi-light-sets
khyretos:claude/rhi-pipeline-state
khyretos:archive/2026-10-24/r1gref
khyretos:archive/2026-10-24/ciref
khyretos:archive/2026-10-24/r1eref
khyretos:archive/2026-10-24/r1dref
khyretos:archive/2026-10-24/r1cref
khyretos:archive/2026-10-24/r1bref
khyretos:archive/2026-10-24/r1aref
khyretos:archive/2026-10-24/f13ref
khyretos:archive/2026-10-24/f11ref
khyretos:archive/2026-10-24/f10dref
khyretos:khyretos/ci-on-prs
khyretos:archive/2026-10-24/f10cref
khyretos:archive/2026-10-24/f10bref
khyretos:claude/bloom
khyretos:archive/2026-10-24/f10ref
khyretos:archive/2026-10-24/f08ref
khyretos:archive/2026-10-24/f07ref
khyretos:archive/2026-10-24/f05bref
khyretos:archive/2026-10-24/f05ref
khyretos:archive/2026-10-24/f03ref
khyretos:archive/2026-10-24/f02cref
khyretos:benchmark-data
khyretos:claude/cloth-passes
khyretos:archive/2026-10-24/f02bref
khyretos:archive/2026-10-24/refl-merge-base
khyretos:archive/2026-10-24/claude-b087-ref
khyretos:archive/2026-10-24/claude-macos-cross
khyretos:archive/2026-10-24/claude-macos-ref
khyretos:archive/2026-10-24/stash-macos-ref
khyretos:archive/2026-10-24/claude-win-probe
khyretos:patches/inbox
khyretos:tennis-feedback-wip
khyretos:archive/2026-10-24/runner-kit-check
No reviewers
Labels
No labels
deps
deps-major
hold
security
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
3 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set.
Reference
khyretos/kk-engine!138
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "khyretos/claude/jiggle-vitruvian"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Replaces the CGTrader and Synty bodies with assets/bodies/vitruvian_voluptuous.glb (CC0, 2 MB, built by tools/vitruvian/build_body.py). Full description in the handoff file jiggle-vitruvian-pr.md.
Title
WIP: Jiggle demo: our own full-figured Vitruvian woman, hair and a same-pose twin
User description
Replaces the CGTrader and Synty bodies with assets/bodies/vitruvian_voluptuous.glb (CC0, 2 MB, built by tools/vitruvian/build_body.py). Full description in the handoff file jiggle-vitruvian-pr.md.
PR Type
Enhancement
Description
Replaces Synty/CGTrader bodies with CC0 Vitruvian woman mesh
Adds auto-rigging for unskinned body and new head-cutting logic
Ships body asset and updates docs to reflect new default model
Diagram Walkthrough
File Walkthrough
2 files
Switch to Vitruvian body, add head-cutting, update twin spacingNew Blender script to build CC0 Vitruvian woman mesh1 files
Add test for shipped Vitruvian body auto-rigging success8 files
License file for Vitruvian woman asset (CC0)Update example to use Vitruvian body instead of CGTraderRegister Vitruvian woman asset in dependencies listUpdate jiggle demo docs to reference Vitruvian bodyUpdate scene requirements to use Vitruvian body by defaultUpdate README to describe Vitruvian woman as default bodyUpdate game description to mention Vitruvian womanUpdate comment describing body type in class header1 files
Copy Vitruvian body and license to runtime outputPR Reviewer Guide 🔍
(Review updated until commit
f443ce0573)📋 Focus areas: 🔴 2 open · ✅ 2 handled. Every push re-checks them; a handled area moves to Resolved findings at the bottom.
Missing Error Handling for Finger Bone Parsing
In the
mixamoBonefunction, when parsing finger names (lines 596-599), the code assumes that if a string starts with "hand" and has a digit at the end, it must be a valid Mixamo finger name. However, it does not validate the middle part of the string against known finger names ("thumb", "index", etc.). If an unknown or malformed finger name is passed, the function returns an empty string without logging a warning or handling the error gracefully. This could lead to silent failures in rigging scenarios where unexpected bone names are encountered.Potential Null Pointer Dereference in Head Detection
In the
findHeadfunction (lines 134-154), if no head mesh is found initially and the fallback logic searches for a single "Skin" material, there is a risk of dereferencing a null pointer ifskinremains null after the loop. Although the code checksif (skin && !skin->vertices.empty()), the subsequent use ofskin->indicesandskin->verticesinside the block is safe only ifskinis not null. However, the logic flow ensuresskinis checked before accessing its members, so this is not a direct bug but a potential source of confusion. A clearer guard clause or explicit null check before entering the block would improve readability and safety.✅ Resolved findings
tests/test_auto_rig.cpp:179-180
Hardcoded Path Assumption in Test
The test
TheShippedBodyRigsOnTheAnimationLibraryassumes the body file exists at a hardcoded path relative toKKE_SOURCE_DIR. If the repository structure changes or the file is moved, this test will fail with a misleading assertion error instead of a clear "file not found" message. It's better to use a more robust way to locate the asset or make the path configurable.games/jiggle_demo/JiggleDemoModule.cpp:454
Missing Error Handling for Body File Loading
In
findBodyFile, if the environment variableKKE_JIGGLE_BODYpoints to a non-existent file, the function returns an empty string. However, insetupBodies, this empty string is passed directly tokke::loadModelwithout checking if it's valid first. This could lead to undefined behavior or a crash depending on howloadModelhandles empty paths. The code should validate thatrealisticis not empty before attempting to load it.PR Code Suggestions ✨
No code suggestions found for the PR.
🧹 Lint report · ❌ 39 problems in 6 checks · 🧹 3 formatting checks to tidy
Nothing here blocks the merge (report only).
MARKDOWN · markdownlint: first lines of the output
CPP · cppcheck: first lines of the output
YAML · yamllint: first lines of the output
BASH · shellcheck: first lines of the output
DOCKERFILE · hadolint: first lines of the output
REPOSITORY · trivy: first lines of the output
🧹 Formatting only (layout, no behaviour; the nightly lint-fix job applies these as a PR): YAML · prettier (57 files checked), BASH · shfmt (11 files checked), JSON · prettier (147 files checked)
✅ Clean: actionlint, git_diff, gitleaks, grype, jsonlint, secretlint, stylelint, trufflehog, xmllint
MegaLinter on soucouyant · full logs in the Actions run · comment
/improvefor AI fix suggestionsView command line instructions
Checkout
From your project repository, check out a new branch and test the changes.Merge
Merge the changes and update on Forgejo.Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.