Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
c3a0038
Initial Bust Tracking
Sebane1 Sep 2, 2026
10bf20e
Merge remote-tracking branch 'upstream/server-rewrite' into Left-And-…
Sebane1 Sep 2, 2026
8a9b204
Refinement attempts.
Sebane1 Sep 3, 2026
9e65eb8
Merge branch 'refs/heads/server-rewrite' into Left-And-Right-Bust-Tra…
Sebane1 Sep 3, 2026
3d007bc
Additional tweaks and refactor.
Sebane1 Sep 3, 2026
f2e95d3
Make sure we actually add the bust to proportions.
Sebane1 Sep 3, 2026
075a8ab
Rough bust preview.
Sebane1 Sep 3, 2026
056f53f
Initial bust correction math,
Sebane1 Sep 3, 2026
2c6cc8d
Change function call
Sebane1 Sep 3, 2026
d21a4cc
Adjust bust logic
Sebane1 Sep 7, 2026
be23888
Adjustments to bust physics.
Sebane1 Sep 9, 2026
a638bd2
Merge remote-tracking branch 'upstream/server-rewrite' into Left-And-…
Sebane1 Sep 9, 2026
ea761c4
Fix bust representation in updated preview skeleton.
Sebane1 Sep 9, 2026
f04d117
Add bust assignments.
Sebane1 Sep 9, 2026
63c6d71
Merge remote-tracking branch 'upstream/server-rewrite' into Left-And-…
Sebane1 Sep 9, 2026
391ed14
Adjust test import for bust.
Sebane1 Sep 9, 2026
c02cbc1
Update bust test
Sebane1 Sep 9, 2026
9845828
Merge remote-tracking branch 'upstream/server-rewrite' into Left-And-…
Sebane1 Sep 10, 2026
75b7748
Merge remote-tracking branch 'upstream/server-rewrite' into Left-And-…
Sebane1 Sep 10, 2026
549cf2b
Correct variables and commentary for bust
Sebane1 Sep 10, 2026
bf40d3a
Adjust bust proportion offsets, fix translations.
Sebane1 Sep 10, 2026
eb328a9
Merge remote-tracking branch 'upstream/server-rewrite' into Left-And-…
Sebane1 Sep 10, 2026
3763cb0
Fix merge regression
Sebane1 Sep 10, 2026
b3372da
Merge remote-tracking branch 'upstream/server-rewrite' into Left-And-…
Sebane1 Sep 10, 2026
0bf0d12
Merge remote-tracking branch 'upstream/server-rewrite' into Left-And-…
Sebane1 Sep 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions gui/app/public/i18n/en/translation.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ body_part-NONE = Unassigned
body_part-HEAD = Head
body_part-NECK = Neck
body_part-RIGHT_SHOULDER = Right shoulder
body_part-RIGHT_BUST = Right bust
body_part-RIGHT_UPPER_ARM = Right upper arm
body_part-RIGHT_LOWER_ARM = Right lower arm
body_part-RIGHT_HAND = Right hand
Expand All @@ -76,6 +77,7 @@ body_part-UPPER_WAIST = Upper waist
body_part-LOWER_WAIST = Lower waist
body_part-HIP = Hip
body_part-LEFT_SHOULDER = Left shoulder
body_part-LEFT_BUST = Left bust
body_part-LEFT_UPPER_ARM = Left upper arm
body_part-LEFT_LOWER_ARM = Left lower arm
body_part-LEFT_HAND = Left hand
Expand Down
Binary file added gui/app/public/models/skeleton/breast.bin
Binary file not shown.
104 changes: 104 additions & 0 deletions gui/app/public/models/skeleton/bust.gltf
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
{
"asset":{
"generator":"Khronos glTF Blender I/O v4.5.48",
"version":"2.0"
},
"scene":0,
"scenes":[
{
"name":"Scene",
"nodes":[
0
]
}
],
"nodes":[
{
"mesh":0,
"name":"Sphere"
}
],
"meshes":[
{
"name":"Sphere",
"primitives":[
{
"attributes":{
"POSITION":0,
"NORMAL":1,
"TEXCOORD_0":2
},
"indices":3
}
]
}
],
"accessors":[
{
"bufferView":0,
"componentType":5126,
"count":559,
"max":[
0.9999997019767761,
1,
0.9999993443489075
],
"min":[
-0.9999990463256836,
-1,
-1
],
"type":"VEC3"
},
{
"bufferView":1,
"componentType":5126,
"count":559,
"type":"VEC3"
},
{
"bufferView":2,
"componentType":5126,
"count":559,
"type":"VEC2"
},
{
"bufferView":3,
"componentType":5123,
"count":2880,
"type":"SCALAR"
}
],
"bufferViews":[
{
"buffer":0,
"byteLength":6708,
"byteOffset":0,
"target":34962
},
{
"buffer":0,
"byteLength":6708,
"byteOffset":6708,
"target":34962
},
{
"buffer":0,
"byteLength":4472,
"byteOffset":13416,
"target":34962
},
{
"buffer":0,
"byteLength":5760,
"byteOffset":17888,
"target":34963
}
],
"buffers":[
{
"byteLength":23648,
"uri":"breast.bin"
}
]
}
16 changes: 16 additions & 0 deletions gui/app/src/components/commons/PersonFrontIcon.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { BodyPart } from 'solarxr-protocol';
export const SIDES = [
{
shoulder: BodyPart.LEFT_SHOULDER,
bust: BodyPart.LEFT_BUST,
upperArm: BodyPart.LEFT_UPPER_ARM,
lowerArm: BodyPart.LEFT_LOWER_ARM,
hand: BodyPart.LEFT_HAND,
Expand All @@ -15,6 +16,7 @@ export const SIDES = [
},
{
shoulder: BodyPart.RIGHT_SHOULDER,
bust: BodyPart.RIGHT_BUST,
upperArm: BodyPart.RIGHT_UPPER_ARM,
lowerArm: BodyPart.RIGHT_LOWER_ARM,
hand: BodyPart.RIGHT_HAND,
Expand Down Expand Up @@ -120,6 +122,13 @@ export function PersonFrontIcon({
r={CIRCLE_RADIUS}
id={BodyPart[SIDES[right].shoulder]}
/>
<circle
className="body-part-circle"
cx="99"
cy="105"
r={CIRCLE_RADIUS}
id={BodyPart[SIDES[right].bust]}
/>
<circle
className="body-part-circle"
cx="144"
Expand Down Expand Up @@ -179,6 +188,13 @@ export function PersonFrontIcon({
r={CIRCLE_RADIUS}
id={BodyPart[SIDES[left].shoulder]}
/>
<circle
className="body-part-circle"
cx="65"
cy="105"
r={CIRCLE_RADIUS}
id={BodyPart[SIDES[left].bust]}
/>
<circle
className="body-part-circle"
cx="20"
Expand Down
4 changes: 2 additions & 2 deletions gui/app/src/components/onboarding/BodyPartAssignment.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -42,15 +42,15 @@ type BodySide = (typeof SIDES)[number];

const LEFT_GROUPS = (side: BodySide): BodyPart[][] => [
[BodyPart.HEAD, BodyPart.NECK],
[side.shoulder, side.upperArm],
[side.shoulder], [side.bust], [side.upperArm],
[side.lowerArm, side.hand],
[BodyPart.HIP],
[side.upperLeg, side.lowerLeg, side.foot],
];

const RIGHT_GROUPS = (side: BodySide): BodyPart[][] => [
[BodyPart.UPPER_CHEST, BodyPart.LOWER_CHEST],
[side.shoulder, side.upperArm],
[side.shoulder],[side.bust], [side.upperArm],
[side.lowerArm, side.hand],
[BodyPart.UPPER_WAIST, BodyPart.LOWER_WAIST],
[side.upperLeg, side.lowerLeg, side.foot],
Expand Down
4 changes: 4 additions & 0 deletions gui/app/src/hooks/tracker-picker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,10 @@ export const ALL_ASSIGNABLE_PARTS = [
BodyPart.NECK,
BodyPart.LEFT_SHOULDER,
BodyPart.RIGHT_SHOULDER,

BodyPart.LEFT_BUST,
BodyPart.RIGHT_BUST,

BodyPart.LEFT_HAND,
BodyPart.RIGHT_HAND,
BodyPart.LEFT_FOOT,
Expand Down
14 changes: 13 additions & 1 deletion gui/app/src/utils/skeletonParts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,6 @@ export interface BoneShapeConfig {
rotation?: Quaternion;
scale?: ShapeScale;
}

export interface BonePartConfig {
visible: boolean;
shapes: BoneShapeConfig[];
Expand Down Expand Up @@ -257,6 +256,19 @@ export const SKELETON_PART_PRESETS: Record<BodyPart, BonePartConfig> = {
offset: inBoneLengths({ length: -0.2 }),
})
),
[BodyPart.LEFT_BUST]: part(
model('bust', {
scale: authoredSize({ width: 0.08, depth: 0.08, length: 0.08 }),
offset: inMetres({ width: 0.07, length: -0.12 }),
})
),

[BodyPart.RIGHT_BUST]: part(
model('bust', {
scale: authoredSize({ width: 0.08, depth: 0.08, length: 0.08 }),
offset: inMetres({ width: -0.07, length: -0.12 }),
})
),
[BodyPart.LOWER_CHEST]: part(
model('chest', {
scale: spanBone({
Expand Down
14 changes: 9 additions & 5 deletions server/core/src/main/java/dev/slimevr/resets/bodypart-sets.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,6 @@ object ResetBodyParts {
BodyPart.RIGHT_UPPER_LEG,
)

val FEET = setOf(
BodyPart.LEFT_FOOT,
BodyPart.RIGHT_FOOT,
)

val LEFT_TOES = setOf(
BodyPart.LEFT_BIG_TOE,
BodyPart.LEFT_INDEX_TOE,
Expand All @@ -27,9 +22,18 @@ object ResetBodyParts {
BodyPart.RIGHT_RING_TOE,
BodyPart.RIGHT_LITTLE_TOE,
)
val BUST = setOf(
BodyPart.LEFT_BUST,
BodyPart.RIGHT_BUST
)

val TOES = LEFT_TOES + RIGHT_TOES

val FEET = setOf(
BodyPart.LEFT_FOOT,
BodyPart.RIGHT_FOOT,
)

val LEFT_FINGERS = setOf(
BodyPart.LEFT_THUMB_METACARPAL,
BodyPart.LEFT_THUMB_PROXIMAL,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,19 @@ val BODY_PART_HIERARCHY_MAP: BodyPartMap<Array<BodyPart>> = BodyPartMap(
BodyPart.RIGHT_LITTLE_PROXIMAL to arrayOf(BodyPart.RIGHT_LITTLE_INTERMEDIATE),
BodyPart.RIGHT_LITTLE_INTERMEDIATE to arrayOf(BodyPart.RIGHT_LITTLE_DISTAL),

BodyPart.UPPER_CHEST to arrayOf(BodyPart.LOWER_CHEST),
BodyPart.UPPER_CHEST to arrayOf(
BodyPart.LEFT_BUST,
BodyPart.RIGHT_BUST,
BodyPart.LOWER_CHEST),

BodyPart.LOWER_CHEST to arrayOf(BodyPart.UPPER_WAIST),
BodyPart.UPPER_WAIST to arrayOf(BodyPart.LOWER_WAIST),
BodyPart.LOWER_WAIST to arrayOf(BodyPart.HIP),
BodyPart.HIP to arrayOf(BodyPart.LEFT_UPPER_LEG, BodyPart.RIGHT_UPPER_LEG),


BodyPart.HIP to arrayOf(
BodyPart.LEFT_UPPER_LEG,
BodyPart.RIGHT_UPPER_LEG,
),
BodyPart.LEFT_UPPER_LEG to arrayOf(BodyPart.LEFT_LOWER_LEG),
BodyPart.LEFT_LOWER_LEG to arrayOf(BodyPart.LEFT_FOOT),

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,21 @@ class BoneDirectLinkInputProcessor : SkeletonInputProcessor {

BodyPart.LEFT_HAND to BodyPart.LEFT_LOWER_ARM,
BodyPart.RIGHT_HAND to BodyPart.RIGHT_LOWER_ARM,

BodyPart.LEFT_BIG_TOE to BodyPart.LEFT_FOOT,
BodyPart.LEFT_INDEX_TOE to BodyPart.LEFT_BIG_TOE,
BodyPart.LEFT_MIDDLE_TOE to BodyPart.LEFT_INDEX_TOE,
BodyPart.LEFT_RING_TOE to BodyPart.LEFT_MIDDLE_TOE,
BodyPart.LEFT_LITTLE_TOE to BodyPart.LEFT_RING_TOE,

BodyPart.RIGHT_BIG_TOE to BodyPart.RIGHT_FOOT,
BodyPart.RIGHT_INDEX_TOE to BodyPart.RIGHT_BIG_TOE,
BodyPart.RIGHT_MIDDLE_TOE to BodyPart.RIGHT_INDEX_TOE,
BodyPart.RIGHT_RING_TOE to BodyPart.RIGHT_MIDDLE_TOE,
BodyPart.RIGHT_LITTLE_TOE to BodyPart.RIGHT_RING_TOE,

BodyPart.LEFT_BUST to BodyPart.UPPER_CHEST,
BodyPart.RIGHT_BUST to BodyPart.UPPER_CHEST
)

override fun process(mutableInputSkeleton: InputSkeleton, skeletonHeight: Float) {
Expand Down
Loading
Loading