Offsets refactor + add chest offset (#443)

This commit is contained in:
Erimel
2023-01-08 09:14:40 -05:00
committed by GitHub
parent 773372ef95
commit de995bbc15
25 changed files with 386 additions and 425 deletions

View File

@@ -41,23 +41,23 @@ body_part-LEFT_CONTROLLER = weft wontwolew
skeleton_bone-NONE = none
skeleton_bone-HEAD = hed shyft
skeleton_bone-NECK = nyeck wength
skeleton_bone-TORSO = towso wength
skeleton_bone-CHEST = chwest disyance
skeleton_bone-WAIST = weyst disyance
skeleton_bone-CHEST = chwest wength
skeleton_bone-CHEST_OFFSET = chwest awfset
skeleton_bone-WAIST = weyst wength
skeleton_bone-HIP = hip wength
skeleton_bone-HIP_OFFSET = hyip awfset
skeleton_bone-HIPS_WIDTH = hyips wiwdth
skeleton_bone-LEGS_LENGTH = wegs wength
skeleton_bone-KNEE_HEIGHT = knyee heiyt
skeleton_bone-UPPER_LEG = uppor weg wength
skeleton_bone-LOWER_LEG = lowur weg wength
skeleton_bone-FOOT_LENGTH = pawsies wength
skeleton_bone-FOOT_SHIFT = pawsies shyft
skeleton_bone-SKELETON_OFFSET = skeweton awfset
skeleton_bone-CONTROLLER_DISTANCE_Z = cyontwowla disance z
skeleton_bone-CONTROLLER_DISTANCE_Y = cyontwowla disance y
skeleton_bone-FOREARM_LENGTH = fowewawm disyance
skeleton_bone-SHOULDERS_DISTANCE = shouwdews disyance
skeleton_bone-SHOULDERS_WIDTH = shouwdews wiwdth
skeleton_bone-UPPER_ARM_LENGTH = uppew awm wength
skeleton_bone-ELBOW_OFFSET = ewbow awfsewt
skeleton_bone-UPPER_ARM = uppew awm wength
skeleton_bone-LOWER_ARM = fowewawm disyance
skeleton_bone-CONTROLLER_Y = cyontwowla disance y
skeleton_bone-CONTROLLER_Z = cyontwowla disance z
## Tracker reset buttons
reset-reset_all = weset aww pwopowtions~

View File

@@ -41,23 +41,23 @@ body_part-LEFT_CONTROLLER = Left controller
skeleton_bone-NONE = None
skeleton_bone-HEAD = Head Shift
skeleton_bone-NECK = Neck Length
skeleton_bone-TORSO = Torso Length
skeleton_bone-CHEST = Chest Distance
skeleton_bone-WAIST = Waist Distance
skeleton_bone-CHEST = Chest Length
skeleton_bone-CHEST_OFFSET = Chest Offset
skeleton_bone-WAIST = Waist Length
skeleton_bone-HIP = Hip Length
skeleton_bone-HIP_OFFSET = Hip Offset
skeleton_bone-HIPS_WIDTH = Hips Width
skeleton_bone-LEGS_LENGTH = Legs Length
skeleton_bone-KNEE_HEIGHT = Knee Height
skeleton_bone-UPPER_LEG = Upper Leg Length
skeleton_bone-LOWER_LEG = Lower Leg Length
skeleton_bone-FOOT_LENGTH = Foot Length
skeleton_bone-FOOT_SHIFT = Foot Shift
skeleton_bone-SKELETON_OFFSET = Skeleton Offset
skeleton_bone-CONTROLLER_DISTANCE_Z = Controller Distance Z
skeleton_bone-CONTROLLER_DISTANCE_Y = Controller Distance Y
skeleton_bone-FOREARM_LENGTH = Forearm Distance
skeleton_bone-SHOULDERS_DISTANCE = Shoulders Distance
skeleton_bone-SHOULDERS_WIDTH = Shoulders Width
skeleton_bone-UPPER_ARM_LENGTH = Upper Arm Length
skeleton_bone-ELBOW_OFFSET = Elbow Offset
skeleton_bone-UPPER_ARM = Upper Arm Length
skeleton_bone-LOWER_ARM = Lower Arm Length
skeleton_bone-CONTROLLER_Y = Controller Distance Y
skeleton_bone-CONTROLLER_Z = Controller Distance Z
## Tracker reset buttons
reset-reset_all = Reset all proportions

View File

@@ -41,23 +41,23 @@ body_part-LEFT_CONTROLLER = Control izquierdo
skeleton_bone-NONE = Nada
skeleton_bone-HEAD = Inclinación de cabeza
skeleton_bone-NECK = Largo del cuello
skeleton_bone-TORSO = Largo del torso
skeleton_bone-CHEST = Distancia del pecho
skeleton_bone-WAIST = Distancia de la cintura
skeleton_bone-CHEST = Chest Length
skeleton_bone-CHEST_OFFSET = Chest Offset
skeleton_bone-WAIST = Waist Length
skeleton_bone-HIP = Hip Length
skeleton_bone-HIP_OFFSET = Desplazamiento de la cadera
skeleton_bone-HIPS_WIDTH = Ancho de la cadera
skeleton_bone-LEGS_LENGTH = Largo de las piernas
skeleton_bone-KNEE_HEIGHT = Altura de las rodillas
skeleton_bone-UPPER_LEG = Upper Leg Length
skeleton_bone-LOWER_LEG = Lower Leg Length
skeleton_bone-FOOT_LENGTH = Largo de pies
skeleton_bone-FOOT_SHIFT = Desplazamiento de pies
skeleton_bone-SKELETON_OFFSET = Desplazamiento del esqueleto
skeleton_bone-CONTROLLER_DISTANCE_Z = Distancia Z del mando
skeleton_bone-CONTROLLER_DISTANCE_Y = Distancia Y del mando
skeleton_bone-FOREARM_LENGTH = Distancia del antebrazo
skeleton_bone-SHOULDERS_DISTANCE = Distancia de los hombros
skeleton_bone-SHOULDERS_WIDTH = Ancho de los hombros
skeleton_bone-UPPER_ARM_LENGTH = Largo del brazo superior
skeleton_bone-ELBOW_OFFSET = Desplazamiento del codo
skeleton_bone-UPPER_ARM = Largo del brazo superior
skeleton_bone-LOWER_ARM = Distancia del antebrazo
skeleton_bone-CONTROLLER_Y = Distancia Y del mando
skeleton_bone-CONTROLLER_Z = Distancia Z del mando
## Tracker reset buttons
reset-reset_all = Reiniciar todas las proporciones

View File

@@ -41,23 +41,23 @@ body_part-LEFT_CONTROLLER = Vasak kontroller
skeleton_bone-NONE = Mitte midagi
skeleton_bone-HEAD = Pea Nihe
skeleton_bone-NECK = Kaela Pikkus
skeleton_bone-TORSO = Torso Pikkus
skeleton_bone-CHEST = Rinna Vahemaa
skeleton_bone-WAIST = Vöökoha Vahemaa
skeleton_bone-CHEST = Chest Length
skeleton_bone-CHEST_OFFSET = Chest Offset
skeleton_bone-WAIST = Waist Length
skeleton_bone-HIP = Hip Lengthskeleton_bone-CHEST = Rinna Vahemaa
skeleton_bone-HIP_OFFSET = Puusa Nihe
skeleton_bone-HIPS_WIDTH = Puusa Laius
skeleton_bone-LEGS_LENGTH = Jalgade Pikkus
skeleton_bone-KNEE_HEIGHT = Põlve Kõrgus
skeleton_bone-UPPER_LEG = Upper Leg Length
skeleton_bone-LOWER_LEG = Lower Leg Length
skeleton_bone-FOOT_LENGTH = Jala Pikkus
skeleton_bone-FOOT_SHIFT = Jala Nihe
skeleton_bone-SKELETON_OFFSET = Skeletti Nihe
skeleton_bone-CONTROLLER_DISTANCE_Z = Kontrolleri Kaugus Z
skeleton_bone-CONTROLLER_DISTANCE_Y = Kontrolleri Kaugus Y
skeleton_bone-FOREARM_LENGTH = Käsivarre Kaugus
skeleton_bone-SHOULDERS_DISTANCE = Õlgade Kaugus
skeleton_bone-SHOULDERS_WIDTH = Õlgade Laius
skeleton_bone-UPPER_ARM_LENGTH = Õlavarre Pikkus
skeleton_bone-ELBOW_OFFSET = Küünarnuki Nihe
skeleton_bone-UPPER_ARM = Õlavarre Pikkus
skeleton_bone-LOWER_ARM = Käsivarre Kaugus
skeleton_bone-CONTROLLER_Y = Kontrolleri Kaugus Y
skeleton_bone-CONTROLLER_Z = Kontrolleri Kaugus Z
## Tracker reset buttons
reset-reset_all = Lähtesta kõik proportsioonid

View File

@@ -41,23 +41,23 @@ body_part-LEFT_CONTROLLER = Left controller
skeleton_bone-NONE = Aucun
skeleton_bone-HEAD = Décalage de la tête
skeleton_bone-NECK = Longueur du cou
skeleton_bone-TORSO = Longueur du torse
skeleton_bone-CHEST = Distance de la poitrine
skeleton_bone-WAIST = Distance de la taille
skeleton_bone-CHEST = Longueur de la poitrine
skeleton_bone-CHEST_OFFSET = Écart de la poitrine
skeleton_bone-WAIST = Longueur de la taille
skeleton_bone-HIP = Longueur des hanches
skeleton_bone-HIP_OFFSET = Écart de la hanche
skeleton_bone-HIPS_WIDTH = Largeur des hanches
skeleton_bone-LEGS_LENGTH = Longueur des jambes
skeleton_bone-KNEE_HEIGHT = Hauteur des genoux
skeleton_bone-UPPER_LEG = Longueur des jambes supérieures
skeleton_bone-LOWER_LEG = Longueur des jambes inférieures
skeleton_bone-FOOT_LENGTH = Longueur des pieds
skeleton_bone-FOOT_SHIFT = Décalage des pieds
skeleton_bone-SKELETON_OFFSET = Écart du squelette
skeleton_bone-CONTROLLER_DISTANCE_Z = Distance Z des contrôleurs
skeleton_bone-CONTROLLER_DISTANCE_Y = Distance Y des contrôleurs
skeleton_bone-FOREARM_LENGTH = Longueur des avant-bras
skeleton_bone-SHOULDERS_DISTANCE = Distance des épaules
skeleton_bone-SHOULDERS_WIDTH = Largeur des épaules
skeleton_bone-UPPER_ARM_LENGTH = Longueur des bras supérieurs
skeleton_bone-ELBOW_OFFSET = Écart des coudes
skeleton_bone-UPPER_ARM = Longueur des bras supérieurs
skeleton_bone-LOWER_ARM = Longueur des avant-bras
skeleton_bone-CONTROLLER_Y = Distance Y des contrôleurs
skeleton_bone-CONTROLLER_Z = Distance Z des contrôleurs
## Tracker reset buttons
reset-reset_all = Réinitialiser toutes les proportions

View File

@@ -41,23 +41,23 @@ body_part-LEFT_CONTROLLER = Left controller
skeleton_bone-NONE = Non assegnato
skeleton_bone-HEAD = Correzione Testa
skeleton_bone-NECK = Lunghezza Collo
skeleton_bone-TORSO = Torso Lunghezza
skeleton_bone-CHEST = Distanza Petto
skeleton_bone-WAIST = Distanza Girovita
skeleton_bone-CHEST = Chest Length
skeleton_bone-CHEST_OFFSET = Chest Offset
skeleton_bone-WAIST = Waist Length
skeleton_bone-HIP = Hip Length
skeleton_bone-HIP_OFFSET = Correzione Fianchi
skeleton_bone-HIPS_WIDTH = Larghezza Fianchi
skeleton_bone-LEGS_LENGTH = Lunghezza Gambe
skeleton_bone-KNEE_HEIGHT = Altezza Ginocchia
skeleton_bone-UPPER_LEG = Upper Leg Length
skeleton_bone-LOWER_LEG = Lower Leg Length
skeleton_bone-FOOT_LENGTH = Lunghezza Piedi
skeleton_bone-FOOT_SHIFT = Correzione Piedi
skeleton_bone-SKELETON_OFFSET = Compensazione scheletro
skeleton_bone-CONTROLLER_DISTANCE_Z = Distanza Z Controller
skeleton_bone-CONTROLLER_DISTANCE_Y = Distanza Y Controller
skeleton_bone-FOREARM_LENGTH = Distanza Avambracci
skeleton_bone-SHOULDERS_DISTANCE = Distanza Spalle
skeleton_bone-SHOULDERS_WIDTH = Larghezza Spalle
skeleton_bone-UPPER_ARM_LENGTH = Lunghezza Braccia
skeleton_bone-ELBOW_OFFSET = Correzione Gomito
skeleton_bone-UPPER_ARM = Lunghezza Braccia
skeleton_bone-LOWER_ARM = Distanza Avambracci
skeleton_bone-CONTROLLER_Y = Distanza Y Controller
skeleton_bone-CONTROLLER_Z = Distanza Z Controller
## Tracker reset buttons
reset-reset_all = Ripristina tutte le proporzioni

View File

@@ -41,23 +41,23 @@ body_part-LEFT_CONTROLLER = 左コントローラ
skeleton_bone-NONE = 無し
skeleton_bone-HEAD = ヘッドシフト
skeleton_bone-NECK = 首長さ
skeleton_bone-TORSO = 胴長さ
skeleton_bone-CHEST = 胸部の距離
skeleton_bone-WAIST = 腰部の距離
skeleton_bone-CHEST = Chest Length
skeleton_bone-CHEST_OFFSET = Chest Offset
skeleton_bone-WAIST = Waist Length
skeleton_bone-HIP = Hip Length
skeleton_bone-HIP_OFFSET = ヒップオフセット
skeleton_bone-HIPS_WIDTH = ヒップ幅
skeleton_bone-LEGS_LENGTH = 脚長さ
skeleton_bone-KNEE_HEIGHT = 膝高さ
skeleton_bone-UPPER_LEG = Upper Leg Length
skeleton_bone-LOWER_LEG = Lower Leg Length
skeleton_bone-FOOT_LENGTH = 足先長さ
skeleton_bone-FOOT_SHIFT = 足先シフト
skeleton_bone-SKELETON_OFFSET = スケルトンオフセット
skeleton_bone-CONTROLLER_DISTANCE_Z = コントローラ距離 Z
skeleton_bone-CONTROLLER_DISTANCE_Y = コントローラ距離 Y
skeleton_bone-FOREARM_LENGTH = 前腕長さ
skeleton_bone-SHOULDERS_DISTANCE = 肩の距離
skeleton_bone-SHOULDERS_WIDTH = 肩幅
skeleton_bone-UPPER_ARM_LENGTH = 上腕長さ
skeleton_bone-ELBOW_OFFSET = 肘オフセット
skeleton_bone-UPPER_ARM = 上腕長さ
skeleton_bone-LOWER_ARM = 前腕長さ
skeleton_bone-CONTROLLER_Y = コントローラ距離 Y
skeleton_bone-CONTROLLER_Z = コントローラ距離 Z
## Tracker reset buttons
reset-reset_all = すべてのプロポーションをリセット

View File

@@ -41,23 +41,23 @@ body_part-LEFT_CONTROLLER = Left controller
skeleton_bone-NONE = None
skeleton_bone-HEAD = 머리 밀림
skeleton_bone-NECK = 목 길이
skeleton_bone-TORSO = 몸통 길이
skeleton_bone-CHEST = 가슴 거리
skeleton_bone-WAIST = 허리 거리
skeleton_bone-CHEST = Chest Length
skeleton_bone-CHEST_OFFSET = Chest Offset
skeleton_bone-WAIST = Waist Length
skeleton_bone-HIP = Hip Length
skeleton_bone-HIP_OFFSET = 골반 오프셋
skeleton_bone-HIPS_WIDTH = 골반 너비
skeleton_bone-LEGS_LENGTH = 다리 길이
skeleton_bone-KNEE_HEIGHT = 무릎 높이
skeleton_bone-UPPER_LEG = Upper Leg Length
skeleton_bone-LOWER_LEG = Lower Leg Length
skeleton_bone-FOOT_LENGTH = 발 크기
skeleton_bone-FOOT_SHIFT = 발 밀림
skeleton_bone-SKELETON_OFFSET = 골격 오프셋
skeleton_bone-CONTROLLER_DISTANCE_Z = 컨트롤러 Z축 거리
skeleton_bone-CONTROLLER_DISTANCE_Y = 컨트롤러 Y축 거리
skeleton_bone-FOREARM_LENGTH = 전완 길이
skeleton_bone-SHOULDERS_DISTANCE = 어깨 거리
skeleton_bone-SHOULDERS_WIDTH = 어깨 너비
skeleton_bone-UPPER_ARM_LENGTH = 위팔 거리
skeleton_bone-ELBOW_OFFSET = 팔꿈치 오프셋
skeleton_bone-UPPER_ARM = 위팔 거리
skeleton_bone-LOWER_ARM = 전완 길이
skeleton_bone-CONTROLLER_Y = 컨트롤러 Y축 거리
skeleton_bone-CONTROLLER_Z = 컨트롤러 Z축 거리
## Tracker reset buttons
reset-reset_all = 모든 신체 비율 리셋

View File

@@ -41,23 +41,23 @@ body_part-LEFT_CONTROLLER = Left controller
skeleton_bone-NONE = Brak
skeleton_bone-HEAD = Head Shift
skeleton_bone-NECK = Długość Szyi
skeleton_bone-TORSO = Długość Tułowia
skeleton_bone-CHEST = Długość Klatki Piersiowej
skeleton_bone-WAIST = Waist Distance
skeleton_bone-CHEST = Chest Length
skeleton_bone-CHEST_OFFSET = Chest Offset
skeleton_bone-WAIST = Waist Length
skeleton_bone-HIP = Hip Length
skeleton_bone-HIP_OFFSET = Offset Bioder
skeleton_bone-HIPS_WIDTH = Szerokość Bioder
skeleton_bone-LEGS_LENGTH = Długość Nóg
skeleton_bone-KNEE_HEIGHT = Wysokość Kolana
skeleton_bone-UPPER_LEG = Upper Leg Length
skeleton_bone-LOWER_LEG = Lower Leg Length
skeleton_bone-FOOT_LENGTH = Długość Stopy
skeleton_bone-FOOT_SHIFT = Foot Shift
skeleton_bone-SKELETON_OFFSET = Skeleton Offset
skeleton_bone-CONTROLLER_DISTANCE_Z = Controller Distance Z
skeleton_bone-CONTROLLER_DISTANCE_Y = Controller Distance Y
skeleton_bone-FOREARM_LENGTH = Długość PrzedRamienia
skeleton_bone-SHOULDERS_DISTANCE = Shoulders Distance
skeleton_bone-SHOULDERS_WIDTH = Szerokość Ramion
skeleton_bone-UPPER_ARM_LENGTH = Długość Bicepsa
skeleton_bone-ELBOW_OFFSET = Offset Łokcia
skeleton_bone-UPPER_ARM = Długość Bicepsa
skeleton_bone-LOWER_ARM = Długość PrzedRamienia
skeleton_bone-CONTROLLER_Z = Controller Distance Z
skeleton_bone-CONTROLLER_Y = Controller Distance Y
## Tracker reset buttons
reset-reset_all = Zresetuj wszystkie wymiary

View File

@@ -41,23 +41,23 @@ body_part-LEFT_CONTROLLER = Controle esquerdo
skeleton_bone-NONE = Nada
skeleton_bone-HEAD = Deslocamento da Cabeça
skeleton_bone-NECK = Tamanho do Pescoço
skeleton_bone-TORSO = Tamanho do Torso
skeleton_bone-CHEST = Distância do Peito
skeleton_bone-WAIST = Distância da Cintura
skeleton_bone-CHEST = Chest Length
skeleton_bone-CHEST_OFFSET = Chest Offset
skeleton_bone-WAIST = Waist Length
skeleton_bone-HIP = Hip Length
skeleton_bone-HIP_OFFSET = Compensação do Quadril
skeleton_bone-HIPS_WIDTH = Largura do Quadril
skeleton_bone-LEGS_LENGTH = Tamanho das Perna
skeleton_bone-KNEE_HEIGHT = Altura dos Joelhos
skeleton_bone-UPPER_LEG = Upper Leg Length
skeleton_bone-LOWER_LEG = Lower Leg Length
skeleton_bone-FOOT_LENGTH = Tamanho do Pé
skeleton_bone-FOOT_SHIFT = Compensação do Pé
skeleton_bone-SKELETON_OFFSET = Compensação do Esqueleto
skeleton_bone-CONTROLLER_DISTANCE_Z = Distância do Controle Z
skeleton_bone-CONTROLLER_DISTANCE_Y = Distância do Controle Y
skeleton_bone-FOREARM_LENGTH = Distância do Antebraço
skeleton_bone-SHOULDERS_DISTANCE = Distância dos Ombros
skeleton_bone-SHOULDERS_WIDTH = Largura dos Ombros
skeleton_bone-UPPER_ARM_LENGTH = Tamanho do Braço Superior
skeleton_bone-ELBOW_OFFSET = Compensação do Cotovelo
skeleton_bone-UPPER_ARM = Tamanho do Braço Superior
skeleton_bone-LOWER_ARM = Distância do Antebraço
skeleton_bone-CONTROLLER_Y = Distância do Controle Y
skeleton_bone-CONTROLLER_Z = Distância do Controle Z
## Tracker reset buttons
reset-reset_all = Redefinir todas as proporções

View File

@@ -41,23 +41,23 @@ body_part-LEFT_CONTROLLER = Tay cầm trái
skeleton_bone-NONE = Chưa liên kết
skeleton_bone-HEAD = Đầu ca
skeleton_bone-NECK = Cổ dài
skeleton_bone-TORSO = Chiều dài thân
skeleton_bone-CHEST = Khoảng cách ngực
skeleton_bone-WAIST = Khoảng cách eo
skeleton_bone-CHEST = Chest Length
skeleton_bone-CHEST_OFFSET = Chest Offset
skeleton_bone-WAIST = Waist Length
skeleton_bone-HIP = Hip Length
skeleton_bone-HIP_OFFSET = Lệc đo hông
skeleton_bone-HIPS_WIDTH = Chiều rộng hông
skeleton_bone-LEGS_LENGTH = Chiều dài chân
skeleton_bone-KNEE_HEIGHT = Chiều cao đầu gối
skeleton_bone-UPPER_LEG = Upper Leg Length
skeleton_bone-LOWER_LEG = Lower Leg Length
skeleton_bone-FOOT_LENGTH = CHiều dài bàn chân
skeleton_bone-FOOT_SHIFT = Lệch đo bàn chân
skeleton_bone-SKELETON_OFFSET = Lệch đo thân
skeleton_bone-CONTROLLER_DISTANCE_Z = Khoảng cách tay cầm Z
skeleton_bone-CONTROLLER_DISTANCE_Y = Khoảng cách tay cầm Y
skeleton_bone-FOREARM_LENGTH = khoảng cách cánh tay
skeleton_bone-SHOULDERS_DISTANCE = Khoảng cách vai
skeleton_bone-SHOULDERS_WIDTH = Chiều rộng vai
skeleton_bone-UPPER_ARM_LENGTH = Chiều dài tay trên
skeleton_bone-ELBOW_OFFSET = Lệch đo khuỷu tay
skeleton_bone-UPPER_ARM = Chiều dài tay trên
skeleton_bone-LOWER_ARM = khoảng cách cánh tay
skeleton_bone-CONTROLLER_Y = Khoảng cách tay cầm Y
skeleton_bone-CONTROLLER_Z = Khoảng cách tay cầm Z
## Tracker reset buttons
reset-reset_all = Reset tất cả bộ phận

View File

@@ -41,23 +41,23 @@ body_part-LEFT_CONTROLLER = 左控制器
skeleton_bone-NONE = 无
skeleton_bone-HEAD = 头部偏移
skeleton_bone-NECK = 颈部长度
skeleton_bone-TORSO = 躯干长度
skeleton_bone-CHEST = 胸部距离
skeleton_bone-WAIST = 腰部距离
skeleton_bone-CHEST = Chest Length
skeleton_bone-CHEST_OFFSET = Chest Offset
skeleton_bone-WAIST = Waist Length
skeleton_bone-HIP = Hip Length
skeleton_bone-HIP_OFFSET = 髋部偏移
skeleton_bone-HIPS_WIDTH = 髋部宽度
skeleton_bone-LEGS_LENGTH = 腿部长度
skeleton_bone-KNEE_HEIGHT = 膝盖高度
skeleton_bone-UPPER_LEG = Upper Leg Length
skeleton_bone-LOWER_LEG = Lower Leg Length
skeleton_bone-FOOT_LENGTH = 脚部长度
skeleton_bone-FOOT_SHIFT = 脚部偏移
skeleton_bone-SKELETON_OFFSET = 骨骼偏移
skeleton_bone-CONTROLLER_DISTANCE_Z = 控制器距离 Z
skeleton_bone-CONTROLLER_DISTANCE_Y = 控制器距离 Y
skeleton_bone-FOREARM_LENGTH = 前臂距离
skeleton_bone-SHOULDERS_DISTANCE = 肩膀距离
skeleton_bone-SHOULDERS_WIDTH = 肩膀宽度
skeleton_bone-UPPER_ARM_LENGTH = 上臂长度
skeleton_bone-ELBOW_OFFSET = 肘部偏移
skeleton_bone-UPPER_ARM = 上臂长度
skeleton_bone-LOWER_ARM = 前臂距离
skeleton_bone-CONTROLLER_Y = 控制器距离 Y
skeleton_bone-CONTROLLER_Z = 控制器距离 Z
## Tracker reset buttons
reset-reset_all = 重置所有比例

View File

@@ -34,7 +34,7 @@ export function VerifyResultsStep({
return (
<>
<div className="flex flex-col flex-grow justify-between gap-1">
<div className="flex flex-col flex-grow justify-between gap-2">
<div className="flex flex-col gap-1 max-w-sm">
<Typography variant="main-title" bold>
{l10n.getString(

View File

@@ -73,9 +73,11 @@ public class AutoBone {
public final FastList<SkeletonConfigOffsets> legacyHeightConfigs = new FastList<>(
new SkeletonConfigOffsets[] {
SkeletonConfigOffsets.NECK,
SkeletonConfigOffsets.TORSO,
SkeletonConfigOffsets.LEGS_LENGTH,
SkeletonConfigOffsets.CHEST,
SkeletonConfigOffsets.WAIST,
SkeletonConfigOffsets.HIP,
SkeletonConfigOffsets.UPPER_LEG,
SkeletonConfigOffsets.LOWER_LEG,
}
);
@@ -119,17 +121,14 @@ public class AutoBone {
case HEAD -> skeletonConfig.getOffset(SkeletonConfigOffsets.HEAD);
case NECK -> skeletonConfig.getOffset(SkeletonConfigOffsets.NECK);
case CHEST -> skeletonConfig.getOffset(SkeletonConfigOffsets.CHEST);
case WAIST -> -skeletonConfig.getOffset(SkeletonConfigOffsets.CHEST)
+ skeletonConfig.getOffset(SkeletonConfigOffsets.TORSO)
- skeletonConfig.getOffset(SkeletonConfigOffsets.WAIST);
case HIP -> skeletonConfig.getOffset(SkeletonConfigOffsets.WAIST);
case WAIST -> skeletonConfig.getOffset(SkeletonConfigOffsets.WAIST);
case HIP -> skeletonConfig.getOffset(SkeletonConfigOffsets.HIP);
case LEFT_HIP, RIGHT_HIP -> skeletonConfig.getOffset(SkeletonConfigOffsets.HIPS_WIDTH)
/ 2f;
case LEFT_UPPER_LEG, RIGHT_UPPER_LEG -> skeletonConfig
.getOffset(SkeletonConfigOffsets.LEGS_LENGTH)
- skeletonConfig.getOffset(SkeletonConfigOffsets.KNEE_HEIGHT);
.getOffset(SkeletonConfigOffsets.UPPER_LEG);
case LEFT_LOWER_LEG, RIGHT_LOWER_LEG -> skeletonConfig
.getOffset(SkeletonConfigOffsets.KNEE_HEIGHT);
.getOffset(SkeletonConfigOffsets.LOWER_LEG);
default -> -1f;
};
@@ -236,26 +235,23 @@ public class AutoBone {
if (headOffset != null) {
configConsumer.accept(SkeletonConfigOffsets.HEAD, headOffset);
}
Float neckOffset = offsets.get(BoneType.NECK);
if (neckOffset != null) {
configConsumer.accept(SkeletonConfigOffsets.NECK, neckOffset);
}
Float chestOffset = offsets.get(BoneType.CHEST);
Float hipOffset = offsets.get(BoneType.HIP);
Float waistOffset = offsets.get(BoneType.WAIST);
if (chestOffset != null && hipOffset != null && waistOffset != null) {
configConsumer
.accept(SkeletonConfigOffsets.TORSO, chestOffset + hipOffset + waistOffset);
}
Float hipOffset = offsets.get(BoneType.HIP);
if (chestOffset != null) {
configConsumer.accept(SkeletonConfigOffsets.CHEST, chestOffset);
configConsumer
.accept(SkeletonConfigOffsets.CHEST, chestOffset);
}
if (waistOffset != null) {
configConsumer.accept(SkeletonConfigOffsets.WAIST, waistOffset);
}
if (hipOffset != null) {
configConsumer.accept(SkeletonConfigOffsets.WAIST, hipOffset);
configConsumer.accept(SkeletonConfigOffsets.HIP, hipOffset);
}
Float hipWidthOffset = offsets.get(BoneType.LEFT_HIP);
@@ -275,14 +271,15 @@ public class AutoBone {
if (lowerLegOffset == null) {
lowerLegOffset = offsets.get(BoneType.RIGHT_LOWER_LEG);
}
if (upperLegOffset != null && lowerLegOffset != null) {
if (upperLegOffset != null) {
configConsumer
.accept(SkeletonConfigOffsets.LEGS_LENGTH, upperLegOffset + lowerLegOffset);
.accept(SkeletonConfigOffsets.UPPER_LEG, upperLegOffset);
}
if (lowerLegOffset != null) {
configConsumer.accept(SkeletonConfigOffsets.LOWER_LEG, lowerLegOffset);
}
if (lowerLegOffset != null) {
configConsumer.accept(SkeletonConfigOffsets.KNEE_HEIGHT, lowerLegOffset);
}
return true;
} catch (Exception e) {
return false;

View File

@@ -358,23 +358,28 @@ public class AutoBoneHandler {
skeletonConfigBuffer.setOffsets(autoBoneResults.configValues);
float neckLength = skeletonConfigBuffer.getOffset(SkeletonConfigOffsets.NECK);
float chestDistance = skeletonConfigBuffer
float chestLength = skeletonConfigBuffer
.getOffset(SkeletonConfigOffsets.CHEST);
float torsoLength = skeletonConfigBuffer
.getOffset(SkeletonConfigOffsets.TORSO);
float waistLength = skeletonConfigBuffer
.getOffset(SkeletonConfigOffsets.WAIST);
float hipLength = skeletonConfigBuffer
.getOffset(SkeletonConfigOffsets.HIP);
float torsoLength = chestLength + waistLength + hipLength;
float hipWidth = skeletonConfigBuffer
.getOffset(SkeletonConfigOffsets.HIPS_WIDTH);
float legsLength = skeletonConfigBuffer
.getOffset(SkeletonConfigOffsets.LEGS_LENGTH);
float kneeHeight = skeletonConfigBuffer
.getOffset(SkeletonConfigOffsets.KNEE_HEIGHT);
float legLength = skeletonConfigBuffer
.getOffset(SkeletonConfigOffsets.UPPER_LEG)
+ skeletonConfigBuffer
.getOffset(SkeletonConfigOffsets.LOWER_LEG);
float lowerLegLength = skeletonConfigBuffer
.getOffset(SkeletonConfigOffsets.LOWER_LEG);
float neckTorso = neckLength / torsoLength;
float chestTorso = chestDistance / torsoLength;
float chestTorso = chestLength / torsoLength;
float torsoWaist = hipWidth / torsoLength;
float legTorso = legsLength / torsoLength;
float legBody = legsLength / (torsoLength + neckLength);
float kneeLeg = kneeHeight / legsLength;
float legTorso = legLength / torsoLength;
float legBody = legLength / (torsoLength + neckLength);
float kneeLeg = lowerLegLength / legLength;
LogManager
.info(

View File

@@ -2,7 +2,6 @@ package dev.slimevr.autobone.errors;
import com.jme3.math.FastMath;
import dev.slimevr.autobone.AutoBoneTrainingStep;
import dev.slimevr.autobone.errors.proportions.ProportionLimiter;
import dev.slimevr.autobone.errors.proportions.RangeProportionLimiter;
@@ -18,7 +17,7 @@ public class BodyProportionError implements IAutoBoneError {
// The headset height is not the full height! This value compensates for the
// offset from the headset height to the user height
public float eyeHeightToHeightRatio = 0.936f;
public static float eyeHeightToHeightRatio = 0.936f;
// Default config
// Height: 1.58
@@ -37,65 +36,87 @@ public class BodyProportionError implements IAutoBoneError {
public static final ProportionLimiter[] proportionLimits = new ProportionLimiter[] {
// Head
// Experimental: 0.059
new RangeProportionLimiter(0.059f, config -> {
return config.getOffset(SkeletonConfigOffsets.HEAD);
}, 0.01f),
new RangeProportionLimiter(
0.059f,
config -> config.getOffset(SkeletonConfigOffsets.HEAD),
0.01f
),
// Neck
// Expected: 0.052
// Experimental: 0.059
new RangeProportionLimiter(0.054f, config -> {
return config.getOffset(SkeletonConfigOffsets.NECK);
}, 0.0015f),
// Torso
// Expected: 0.288 (0.333 including hip, this shouldn't be right...)
new RangeProportionLimiter(0.333f, config -> {
return config.getOffset(SkeletonConfigOffsets.TORSO);
}, 0.015f),
new RangeProportionLimiter(
0.054f,
config -> config.getOffset(SkeletonConfigOffsets.NECK),
0.0015f
),
// Chest
// Experimental: 0.189
new RangeProportionLimiter(0.189f, config -> {
return config.getOffset(SkeletonConfigOffsets.CHEST);
}, 0.02f),
new RangeProportionLimiter(
0.189f,
config -> config.getOffset(SkeletonConfigOffsets.CHEST),
0.02f
),
// Waist
// Experimental: 0.118
new RangeProportionLimiter(0.118f, config -> {
return config.getOffset(SkeletonConfigOffsets.TORSO)
- config.getOffset(SkeletonConfigOffsets.CHEST)
- config.getOffset(SkeletonConfigOffsets.WAIST);
}, 0.05f),
new RangeProportionLimiter(
0.118f,
config -> config.getOffset(SkeletonConfigOffsets.WAIST),
0.05f
),
// Hip
// Experimental: 0.0237
new RangeProportionLimiter(0.0237f, config -> {
return config.getOffset(SkeletonConfigOffsets.WAIST);
}, 0.01f),
new RangeProportionLimiter(
0.0237f,
config -> config.getOffset(SkeletonConfigOffsets.HIP),
0.01f
),
// Hip Width
// Expected: 0.191
// Experimental: 0.154
new RangeProportionLimiter(0.184f, config -> {
return config.getOffset(SkeletonConfigOffsets.HIPS_WIDTH);
}, 0.04f),
new RangeProportionLimiter(
0.184f,
config -> config.getOffset(SkeletonConfigOffsets.HIPS_WIDTH),
0.04f
),
// Upper Leg
// Expected: 0.245
new RangeProportionLimiter(0.245f, config -> {
return config.getOffset(SkeletonConfigOffsets.LEGS_LENGTH)
- config.getOffset(SkeletonConfigOffsets.KNEE_HEIGHT);
}, 0.015f),
new RangeProportionLimiter(
0.245f,
config -> config.getOffset(SkeletonConfigOffsets.UPPER_LEG),
0.015f
),
// Lower Leg
// Expected: 0.246 (0.285 including below ankle, could use a separate
// offset?)
new RangeProportionLimiter(0.285f, config -> {
return config.getOffset(SkeletonConfigOffsets.KNEE_HEIGHT);
}, 0.02f),
new RangeProportionLimiter(
0.285f,
config -> config.getOffset(SkeletonConfigOffsets.LOWER_LEG),
0.02f
),
};
public static ProportionLimiter getProportionLimitForOffset(SkeletonConfigOffsets offset) {
ProportionLimiter result = null;
switch (offset) {
case HEAD -> result = proportionLimits[0];
case NECK -> result = proportionLimits[1];
case CHEST -> result = proportionLimits[2];
case WAIST -> result = proportionLimits[3];
case HIP -> result = proportionLimits[4];
case HIPS_WIDTH -> result = proportionLimits[5];
case UPPER_LEG -> result = proportionLimits[6];
case LOWER_LEG -> result = proportionLimits[7];
}
return result;
}
@Override
public float getStepError(AutoBoneTrainingStep trainingStep) throws AutoBoneException {
return getBodyProportionError(

View File

@@ -1,9 +1,9 @@
package dev.slimevr.autobone.errors.proportions;
import java.util.function.Function;
import dev.slimevr.vr.processor.skeleton.SkeletonConfig;
import java.util.function.Function;
public class HardProportionLimiter implements ProportionLimiter {
@@ -28,4 +28,9 @@ public class HardProportionLimiter implements ProportionLimiter {
float boneLength = boneLengthFunction.apply(config);
return targetRatio - (boneLength / height);
}
@Override
public float getTargetRatio() {
return targetRatio;
}
}

View File

@@ -5,4 +5,6 @@ import dev.slimevr.vr.processor.skeleton.SkeletonConfig;
public interface ProportionLimiter {
public float getProportionError(SkeletonConfig config, float height);
public float getTargetRatio();
}

View File

@@ -1,11 +1,10 @@
package dev.slimevr.autobone.errors.proportions;
import java.util.function.Function;
import com.jme3.math.FastMath;
import dev.slimevr.vr.processor.skeleton.SkeletonConfig;
import java.util.function.Function;
public class RangeProportionLimiter extends HardProportionLimiter {
@@ -72,4 +71,9 @@ public class RangeProportionLimiter extends HardProportionLimiter {
return 0f;
}
@Override
public float getTargetRatio() {
return targetRatio;
}
}

View File

@@ -102,6 +102,42 @@ public class CurrentVRConfigConverter implements VersionedModelConverter {
modelData.set("trackers", trackersNode);
}
}
if (version < 5) {
// Migrate old skeleton offsets to new ones
ObjectNode skeletonNode = (ObjectNode) modelData.get("skeleton");
if (skeletonNode != null) {
ObjectNode offsetsNode = (ObjectNode) skeletonNode.get("offsets");
if (offsetsNode != null) {
// torsoLength, chestDistance and waistDistance become
// chestLength, waistLength and hipLength.
float torsoLength = offsetsNode.get("torsoLength").floatValue();
float chestDistance = offsetsNode.get("chestDistance").floatValue();
float waistDistance = offsetsNode.get("waistDistance").floatValue();
offsetsNode.set("chestLength", offsetsNode.get("chestDistance"));
offsetsNode
.set(
"waistLength",
new FloatNode(torsoLength - chestDistance - waistDistance)
);
offsetsNode.set("hipLength", offsetsNode.get("waistDistance"));
offsetsNode.remove("torsoLength");
offsetsNode.remove("chestDistance");
offsetsNode.remove("waistDistance");
// legsLength and kneeHeight become
// upperLegLength and lowerLegLength
float legsLength = offsetsNode.get("legsLength").floatValue();
float kneeHeight = offsetsNode.get("kneeHeight").floatValue();
offsetsNode.set("upperLegLength", new FloatNode(legsLength - kneeHeight));
offsetsNode.set("lowerLegLength", offsetsNode.get("kneeHeight"));
offsetsNode.remove("legsLength");
offsetsNode.remove("kneeHeight");
skeletonNode.set("offsets", offsetsNode);
modelData.set("skeleton", skeletonNode);
}
}
}
return modelData;
}

View File

@@ -14,7 +14,7 @@ import java.util.Map;
@JsonVersionedModel(
currentVersion = "4", defaultDeserializeToVersion = "4", toCurrentConverterClass = CurrentVRConfigConverter.class
currentVersion = "5", defaultDeserializeToVersion = "5", toCurrentConverterClass = CurrentVRConfigConverter.class
)
public class VRConfig {

View File

@@ -4,6 +4,7 @@ import com.jme3.math.FastMath;
import com.jme3.math.Quaternion;
import com.jme3.math.Vector3f;
import dev.slimevr.VRServer;
import dev.slimevr.autobone.errors.BodyProportionError;
import dev.slimevr.util.ann.VRServerThread;
import dev.slimevr.vr.processor.ComputedHumanPoseTracker;
import dev.slimevr.vr.processor.ComputedHumanPoseTrackerPosition;
@@ -78,7 +79,6 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback {
protected boolean hasRightArmTracker;
static final Quaternion FORWARD_QUATERNION = new Quaternion()
.fromAngles(FastMath.HALF_PI, 0, 0);
static final float FLOOR_OFFSET = 0.05f;
// #region Tracker Input
protected Tracker hmdTracker;
protected Tracker neckTracker;
@@ -245,7 +245,7 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback {
// #region Attach tracker nodes for tracker offsets
neckNode.attachChild(trackerHeadNode);
chestNode.attachChild(trackerChestNode);
neckNode.attachChild(trackerChestNode);
hipNode.attachChild(trackerWaistNode);
leftKneeNode.attachChild(trackerLeftKneeNode);
@@ -1135,13 +1135,17 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback {
.getFirstAvailableTracker(leftLowerArmTracker, leftUpperArmTracker)
.getRotation(rotBuf1);
leftElbowNode.localTransform.setRotation(rotBuf1);
} else {
neckNode.localTransform.getRotation(rotBuf1);
leftShoulderTailNode.localTransform.setRotation(rotBuf1);
trackerLeftElbowNode.localTransform.setRotation(rotBuf1);
leftElbowNode.localTransform.setRotation(rotBuf1);
}
if (leftHandTracker != null) {
if (leftHandTracker != null)
leftHandTracker.getRotation(rotBuf1);
leftWristNode.localTransform.setRotation(rotBuf1);
leftHandNode.localTransform.setRotation(rotBuf1);
trackerLeftHandNode.localTransform.setRotation(rotBuf1);
}
leftWristNode.localTransform.setRotation(rotBuf1);
leftHandNode.localTransform.setRotation(rotBuf1);
trackerLeftHandNode.localTransform.setRotation(rotBuf1);
}
// Right arm
@@ -1184,13 +1188,17 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback {
.getFirstAvailableTracker(rightLowerArmTracker, rightUpperArmTracker)
.getRotation(rotBuf1);
rightElbowNode.localTransform.setRotation(rotBuf1);
} else {
neckNode.localTransform.getRotation(rotBuf1);
rightShoulderTailNode.localTransform.setRotation(rotBuf1);
trackerRightElbowNode.localTransform.setRotation(rotBuf1);
rightElbowNode.localTransform.setRotation(rotBuf1);
}
if (rightHandTracker != null) {
if (rightHandTracker != null)
rightHandTracker.getRotation(rotBuf1);
rightWristNode.localTransform.setRotation(rotBuf1);
rightHandNode.localTransform.setRotation(rotBuf1);
trackerRightHandNode.localTransform.setRotation(rotBuf1);
}
rightWristNode.localTransform.setRotation(rotBuf1);
rightHandNode.localTransform.setRotation(rotBuf1);
trackerRightHandNode.localTransform.setRotation(rotBuf1);
}
}
@@ -1655,81 +1663,25 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback {
return;
}
Vector3f vec;
float height;
switch (config) {
case HEAD -> skeletonConfig.setOffset(SkeletonConfigOffsets.HEAD, null);
case NECK -> skeletonConfig.setOffset(SkeletonConfigOffsets.NECK, null);
case TORSO -> { // Distance from shoulders to hip (full torso
// length)
vec = new Vector3f();
case CHEST, WAIST, HIP, UPPER_LEG, LOWER_LEG -> {
Vector3f vec = new Vector3f();
hmdTracker.getPosition(vec);
height = vec.y;
float height = vec.y / BodyProportionError.eyeHeightToHeightRatio;
if (height > 0.5f) { // Reset only if floor level seems right,
skeletonConfig
.setOffset(
SkeletonConfigOffsets.TORSO,
((height) * 0.42f)
- skeletonConfig.getOffset(SkeletonConfigOffsets.NECK)
);
} else// if floor level is incorrect
{
skeletonConfig.setOffset(SkeletonConfigOffsets.TORSO, null);
}
}
case CHEST -> // Chest is 57% of the upper body by default
// (shoulders to chest)
skeletonConfig
.setOffset(
SkeletonConfigOffsets.CHEST,
skeletonConfig.getOffset(SkeletonConfigOffsets.TORSO) * 0.57f
);
case WAIST -> // Waist length is from hip to waist
skeletonConfig.setOffset(SkeletonConfigOffsets.WAIST, null);
case HIP_OFFSET -> skeletonConfig.setOffset(SkeletonConfigOffsets.HIP_OFFSET, null);
case HIPS_WIDTH -> skeletonConfig.setOffset(SkeletonConfigOffsets.HIPS_WIDTH, null);
case FOOT_LENGTH -> skeletonConfig.setOffset(SkeletonConfigOffsets.FOOT_LENGTH, null);
case FOOT_SHIFT -> skeletonConfig.setOffset(SkeletonConfigOffsets.FOOT_SHIFT, null);
case SKELETON_OFFSET -> skeletonConfig
.setOffset(SkeletonConfigOffsets.SKELETON_OFFSET, null);
case LEGS_LENGTH -> { // Set legs length to be 5cm above floor level
vec = new Vector3f();
hmdTracker.getPosition(vec);
height = vec.y;
if (height > 0.5f) { // Reset only if floor level seems right,
skeletonConfig
.setOffset(
SkeletonConfigOffsets.LEGS_LENGTH,
config,
height
- skeletonConfig.getOffset(SkeletonConfigOffsets.NECK)
- skeletonConfig.getOffset(SkeletonConfigOffsets.TORSO)
- FLOOR_OFFSET
* BodyProportionError
.getProportionLimitForOffset(config)
.getTargetRatio()
);
} else // if floor level is incorrect
{
skeletonConfig.setOffset(SkeletonConfigOffsets.LEGS_LENGTH, null);
} else { // if floor level is incorrect
skeletonConfig.setOffset(config, null);
}
resetSkeletonConfig(SkeletonConfigOffsets.KNEE_HEIGHT);
}
case KNEE_HEIGHT -> // Knees are at 55% of the legs by default
skeletonConfig
.setOffset(
SkeletonConfigOffsets.KNEE_HEIGHT,
skeletonConfig.getOffset(SkeletonConfigOffsets.LEGS_LENGTH) * 0.55f
);
case CONTROLLER_DISTANCE_Z -> skeletonConfig
.setOffset(SkeletonConfigOffsets.CONTROLLER_DISTANCE_Z, null);
case CONTROLLER_DISTANCE_Y -> skeletonConfig
.setOffset(SkeletonConfigOffsets.CONTROLLER_DISTANCE_Y, null);
case LOWER_ARM_LENGTH -> skeletonConfig
.setOffset(SkeletonConfigOffsets.LOWER_ARM_LENGTH, null);
case ELBOW_OFFSET -> skeletonConfig.setOffset(SkeletonConfigOffsets.ELBOW_OFFSET, null);
case SHOULDERS_DISTANCE -> skeletonConfig
.setOffset(SkeletonConfigOffsets.SHOULDERS_DISTANCE, null);
case SHOULDERS_WIDTH -> skeletonConfig
.setOffset(SkeletonConfigOffsets.SHOULDERS_WIDTH, null);
case UPPER_ARM_LENGTH -> skeletonConfig
.setOffset(SkeletonConfigOffsets.UPPER_ARM_LENGTH, null);
default -> skeletonConfig.setOffset(config, null);
}
}

View File

@@ -130,8 +130,11 @@ public class SkeletonConfig {
// Re-calculate user height
userHeight = getOffset(SkeletonConfigOffsets.NECK)
+ getOffset(SkeletonConfigOffsets.TORSO)
+ getOffset(SkeletonConfigOffsets.LEGS_LENGTH);
+ getOffset(SkeletonConfigOffsets.CHEST)
+ getOffset(SkeletonConfigOffsets.WAIST)
+ getOffset(SkeletonConfigOffsets.HIP)
+ getOffset(SkeletonConfigOffsets.UPPER_LEG)
+ getOffset(SkeletonConfigOffsets.LOWER_LEG);
}
public void setOffset(SkeletonConfigOffsets config, Float newValue) {
@@ -236,18 +239,12 @@ public class SkeletonConfig {
case CHEST_TRACKER -> setNodeOffset(
nodeOffset,
0,
0,
getOffset(SkeletonConfigOffsets.CHEST_OFFSET)
- getOffset(SkeletonConfigOffsets.CHEST),
-getOffset(SkeletonConfigOffsets.SKELETON_OFFSET)
);
case WAIST -> setNodeOffset(
nodeOffset,
0,
(getOffset(SkeletonConfigOffsets.CHEST)
- getOffset(SkeletonConfigOffsets.TORSO)
+ getOffset(SkeletonConfigOffsets.WAIST)),
0
);
case HIP -> setNodeOffset(nodeOffset, 0, -getOffset(SkeletonConfigOffsets.WAIST), 0);
case WAIST -> setNodeOffset(nodeOffset, 0, -getOffset(SkeletonConfigOffsets.WAIST), 0);
case HIP -> setNodeOffset(nodeOffset, 0, -getOffset(SkeletonConfigOffsets.HIP), 0);
case HIP_TRACKER -> setNodeOffset(
nodeOffset,
0,
@@ -269,8 +266,7 @@ public class SkeletonConfig {
case LEFT_UPPER_LEG, RIGHT_UPPER_LEG -> setNodeOffset(
nodeOffset,
0,
-(getOffset(SkeletonConfigOffsets.LEGS_LENGTH)
- getOffset(SkeletonConfigOffsets.KNEE_HEIGHT)),
-getOffset(SkeletonConfigOffsets.UPPER_LEG),
0
);
case LEFT_KNEE_TRACKER, RIGHT_KNEE_TRACKER -> setNodeOffset(
@@ -282,7 +278,7 @@ public class SkeletonConfig {
case LEFT_LOWER_LEG, RIGHT_LOWER_LEG -> setNodeOffset(
nodeOffset,
0,
-getOffset(SkeletonConfigOffsets.KNEE_HEIGHT),
-getOffset(SkeletonConfigOffsets.LOWER_LEG),
-getOffset(SkeletonConfigOffsets.FOOT_SHIFT)
);
case LEFT_FOOT, RIGHT_FOOT -> setNodeOffset(
@@ -297,36 +293,6 @@ public class SkeletonConfig {
0,
-getOffset(SkeletonConfigOffsets.SKELETON_OFFSET)
);
case LEFT_CONTROLLER, RIGHT_CONTROLLER -> setNodeOffset(
nodeOffset,
0,
getOffset(SkeletonConfigOffsets.CONTROLLER_DISTANCE_Y),
getOffset(SkeletonConfigOffsets.CONTROLLER_DISTANCE_Z)
);
case LEFT_HAND, RIGHT_HAND -> setNodeOffset(
nodeOffset,
0,
-getOffset(SkeletonConfigOffsets.CONTROLLER_DISTANCE_Y),
-getOffset(SkeletonConfigOffsets.CONTROLLER_DISTANCE_Z)
);
case LEFT_LOWER_ARM, RIGHT_LOWER_ARM -> setNodeOffset(
nodeOffset,
0,
getOffset(SkeletonConfigOffsets.LOWER_ARM_LENGTH),
0
);
case LEFT_ELBOW_TRACKER, RIGHT_ELBOW_TRACKER -> setNodeOffset(
nodeOffset,
0,
getOffset(SkeletonConfigOffsets.ELBOW_OFFSET),
0
);
case LEFT_UPPER_ARM, RIGHT_UPPER_ARM -> setNodeOffset(
nodeOffset,
0,
-getOffset(SkeletonConfigOffsets.UPPER_ARM_LENGTH),
0
);
case LEFT_SHOULDER -> setNodeOffset(
nodeOffset,
-getOffset(SkeletonConfigOffsets.SHOULDERS_WIDTH) / 2f,
@@ -339,6 +305,30 @@ public class SkeletonConfig {
-getOffset(SkeletonConfigOffsets.SHOULDERS_DISTANCE),
0
);
case LEFT_UPPER_ARM, RIGHT_UPPER_ARM -> setNodeOffset(
nodeOffset,
0,
-getOffset(SkeletonConfigOffsets.UPPER_ARM),
0
);
case LEFT_LOWER_ARM, RIGHT_LOWER_ARM -> setNodeOffset(
nodeOffset,
0,
getOffset(SkeletonConfigOffsets.LOWER_ARM),
0
);
case LEFT_HAND, RIGHT_HAND -> setNodeOffset(
nodeOffset,
0,
-getOffset(SkeletonConfigOffsets.CONTROLLER_Y),
-getOffset(SkeletonConfigOffsets.CONTROLLER_Z)
);
case LEFT_CONTROLLER, RIGHT_CONTROLLER -> setNodeOffset(
nodeOffset,
0,
getOffset(SkeletonConfigOffsets.CONTROLLER_Y),
getOffset(SkeletonConfigOffsets.CONTROLLER_Z)
);
}
}

View File

@@ -7,193 +7,146 @@ import java.util.Map;
public enum SkeletonConfigOffsets {
HEAD(
1,
"Head",
"headShift",
"Head shift",
0.1f,
new BoneType[] { BoneType.HEAD }
),
NECK(
2,
"Neck",
"neckLength",
"Neck length",
0.1f,
new BoneType[] { BoneType.NECK }
),
TORSO(
3,
"Torso",
"torsoLength",
"Torso length",
0.56f,
new BoneType[] { BoneType.WAIST }
),
CHEST(
4,
"Chest",
"chestDistance",
"Chest distance",
3,
"chestLength",
0.32f,
new BoneType[] { BoneType.CHEST, BoneType.WAIST,
new BoneType[] { BoneType.CHEST, BoneType.CHEST_TRACKER,
BoneType.LEFT_SHOULDER, BoneType.RIGHT_SHOULDER }
),
CHEST_OFFSET(
4,
"chestOffset",
0.0f,
new BoneType[] { BoneType.CHEST_TRACKER }
),
WAIST(
5,
"Waist",
"waistDistance",
"Waist distance",
"waistLength",
0.20f,
new BoneType[] { BoneType.WAIST }
),
HIP(
6,
"hipLength",
0.04f,
new BoneType[] { BoneType.WAIST, BoneType.HIP }
new BoneType[] { BoneType.HIP }
),
HIP_OFFSET(
6,
"Hip offset",
7,
"hipOffset",
"Hip offset",
0.0f,
new BoneType[] { BoneType.HIP_TRACKER }
),
HIPS_WIDTH(
7,
"Hips width",
8,
"hipsWidth",
"Hips width",
0.26f,
new BoneType[] { BoneType.LEFT_HIP, BoneType.RIGHT_HIP }
),
LEGS_LENGTH(
8,
"Legs length",
"legsLength",
"Legs length",
0.92f,
UPPER_LEG(
9,
"upperLegLength",
0.42f,
new BoneType[] { BoneType.LEFT_UPPER_LEG, BoneType.RIGHT_UPPER_LEG }
),
KNEE_HEIGHT(
9,
"Knee height",
"kneeHeight",
"Knee height",
LOWER_LEG(
10,
"lowerLegLength",
0.50f,
new BoneType[] { BoneType.LEFT_UPPER_LEG, BoneType.RIGHT_UPPER_LEG,
BoneType.LEFT_LOWER_LEG, BoneType.RIGHT_LOWER_LEG }
new BoneType[] { BoneType.LEFT_LOWER_LEG, BoneType.RIGHT_LOWER_LEG }
),
FOOT_LENGTH(
10,
"Foot length",
11,
"footLength",
"Foot length",
0.05f,
new BoneType[] { BoneType.LEFT_FOOT, BoneType.RIGHT_FOOT }
),
FOOT_SHIFT(
11,
"Foot shift",
12,
"footShift",
"Foot shift",
-0.05f,
new BoneType[] { BoneType.LEFT_LOWER_LEG, BoneType.RIGHT_LOWER_LEG }
),
SKELETON_OFFSET(
12,
"Skeleton offset",
13,
"skeletonOffset",
"Skeleton offset",
0.0f,
new BoneType[] { BoneType.CHEST_TRACKER, BoneType.HIP_TRACKER,
BoneType.LEFT_KNEE_TRACKER, BoneType.RIGHT_KNEE_TRACKER,
BoneType.LEFT_FOOT_TRACKER, BoneType.RIGHT_KNEE_TRACKER }
),
CONTROLLER_DISTANCE_Z(
13,
"Controller distance z",
"controllerDistanceZ",
"Controller distance z",
0.13f,
new BoneType[] { BoneType.LEFT_CONTROLLER, BoneType.RIGHT_CONTROLLER,
BoneType.LEFT_HAND, BoneType.RIGHT_HAND }
),
CONTROLLER_DISTANCE_Y(
14,
"Controller distance y",
"controllerDistanceY",
"Controller distance y",
0.035f,
new BoneType[] { BoneType.LEFT_CONTROLLER, BoneType.RIGHT_CONTROLLER,
BoneType.LEFT_HAND, BoneType.RIGHT_HAND }
),
LOWER_ARM_LENGTH(
15,
"Lower arm length",
"lowerArmLength",
"Lower arm length",
0.25f,
new BoneType[] { BoneType.LEFT_LOWER_ARM, BoneType.RIGHT_LOWER_ARM }
),
SHOULDERS_DISTANCE(
16,
"Shoulders distance",
14,
"shouldersDistance",
"Shoulders distance",
0.08f,
new BoneType[] { BoneType.LEFT_SHOULDER, BoneType.RIGHT_SHOULDER }
),
SHOULDERS_WIDTH(
17,
"Shoulders width",
15,
"shouldersWidth",
"Shoulders width",
0.36f,
new BoneType[] { BoneType.LEFT_SHOULDER, BoneType.RIGHT_SHOULDER }
),
UPPER_ARM_LENGTH(
18,
"Upper arm length",
UPPER_ARM(
16,
"upperArmLength",
"Upper arm length",
0.25f,
new BoneType[] { BoneType.LEFT_UPPER_ARM, BoneType.RIGHT_UPPER_ARM }
),
ELBOW_OFFSET(
LOWER_ARM(
17,
"lowerArmLength",
0.25f,
new BoneType[] { BoneType.LEFT_LOWER_ARM, BoneType.RIGHT_LOWER_ARM }
),
CONTROLLER_Y(
18,
"controllerDistanceY",
0.035f,
new BoneType[] { BoneType.LEFT_CONTROLLER, BoneType.RIGHT_CONTROLLER,
BoneType.LEFT_HAND, BoneType.RIGHT_HAND }
),
CONTROLLER_Z(
19,
"Elbow offset",
"elbowOffset",
"Elbow offset",
0f,
new BoneType[] { BoneType.LEFT_ELBOW_TRACKER, BoneType.RIGHT_ELBOW_TRACKER }
"controllerDistanceZ",
0.13f,
new BoneType[] { BoneType.LEFT_CONTROLLER, BoneType.RIGHT_CONTROLLER,
BoneType.LEFT_HAND, BoneType.RIGHT_HAND }
),;
public static final SkeletonConfigOffsets[] values = values();
private static final Map<String, SkeletonConfigOffsets> byStringVal = new HashMap<>();
private static final Map<Number, SkeletonConfigOffsets> byIdVal = new HashMap<>();
static {
for (SkeletonConfigOffsets configVal : values()) {
byIdVal.put(configVal.id, configVal);
byStringVal.put(configVal.stringVal.toLowerCase(), configVal);
}
}
public final int id;
public final String stringVal;
public final String configKey;
public final String label;
public final float defaultValue;
public final BoneType[] affectedOffsets;
SkeletonConfigOffsets(
int id,
String stringVal,
String configKey,
String label,
float defaultValue,
BoneType[] affectedOffsets
) {
this.id = id;
this.stringVal = stringVal;
this.configKey = configKey;
this.label = label;
this.defaultValue = defaultValue;
@@ -201,10 +154,6 @@ public enum SkeletonConfigOffsets {
== null ? new BoneType[0] : affectedOffsets;
}
public static SkeletonConfigOffsets getByStringValue(String stringVal) {
return stringVal == null ? null : byStringVal.get(stringVal.toLowerCase());
}
public static SkeletonConfigOffsets getById(int id) {
return byIdVal.get(id);
}