Skip to content

Commit

Permalink
adding bone types for easier retargeting setup
Browse files Browse the repository at this point in the history
  • Loading branch information
thecaptury committed Feb 18, 2025
1 parent 8dd4897 commit 3c442f7
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 0 deletions.
13 changes: 13 additions & 0 deletions RemoteCaptury.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -566,6 +566,8 @@ const char* Captury_getHumanReadableMessageType(CapturyPacketTypes type)
return "<get framerate>";
case capturyFramerate:
return "<framerate>";
case capturyBoneTypes:
return "<bone types>"
}
return "<unknown message type>";
}
Expand Down Expand Up @@ -1219,6 +1221,7 @@ static bool receive(SOCKET& sok)
actor->joints[j].orientation[x] = cacp->joints[k].orientation[x];
actor->joints[j].scale[x] = 1.0f;
}
actor->joints[j].boneType = CAPTURY_UNKNOWN_BONE;
}
break; }
case 2: {
Expand All @@ -1232,6 +1235,7 @@ static bool receive(SOCKET& sok)
actor->joints[j].orientation[x] = jp->orientation[x];
actor->joints[j].scale[x] = 1.0f;
}
actor->joints[j].boneType = CAPTURY_UNKNOWN_BONE;
strncpy(actor->joints[j].name, jp->name, sizeof(actor->joints[j].name)-1);
at += sizeof(CapturyJointPacket2) + strlen(jp->name) + 1;
}
Expand All @@ -1247,6 +1251,7 @@ static bool receive(SOCKET& sok)
actor->joints[j].orientation[x] = jp->orientation[x];
actor->joints[j].scale[x] = jp->scale[x];
}
actor->joints[j].boneType = CAPTURY_UNKNOWN_BONE;
strncpy(actor->joints[j].name, jp->name, sizeof(actor->joints[j].name)-1);
at += sizeof(CapturyJointPacket3) + strlen(jp->name) + 1;
}
Expand Down Expand Up @@ -1283,6 +1288,14 @@ static bool receive(SOCKET& sok)
}
unlockMutex(&mutex);
break; }
case capturyBoneTypes: {
CapturyBoneTypesPacket* cbt = (CapturyBoneTypesPacket*)p;
lockMutex(&mutex);
CapturyActor_p actor = actorsById[cbt->actorId];
for (int i = 0; i < std::min<int>(actor->numJoints, size - sizeof(CapturyBoneTypesPacket)); ++i)
actor->joints[i].boneType = cbt->boneTypes[i];
unlockMutex(&mutex);
break; }
case capturyCamera: {
CapturyCamera camera;
CapturyCameraPacket* ccp = (CapturyCameraPacket*)p;
Expand Down
10 changes: 10 additions & 0 deletions RemoteCaptury.h
Original file line number Diff line number Diff line change
Expand Up @@ -461,6 +461,7 @@ typedef enum { capturyActors = 1, capturyActor = 2,
capturyDisableRemoteLogging = 77,
capturyGetFramerate = 78,
capturyFramerate = 79,
capturyBoneTypes = 80,
capturyError = 0 } CapturyPacketTypes;

// returns a string for nicer error messages
Expand Down Expand Up @@ -941,6 +942,15 @@ struct CapturyFrameratePacket {
int denominator;
};

// sent to client
struct CapturyBoneTypesPacket {
int32_t type; // capturyBoneIndices
int32_t size; // size of full message including type and size

int32_t actorId;
uint8_t boneTypes[];
};

#pragma pack(pop)

#ifndef FOURCC
Expand Down
63 changes: 63 additions & 0 deletions captury/PublicStructs.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,75 @@

#pragma pack(push, 1)

enum CapturyBoneTypes {
CAPTURY_UNKNOWN_BONE = -1,
CAPTURY_HIPS = 0, // the joint where legs attach to the spine
CAPTURY_SPINE,
CAPTURY_NECK,
CAPTURY_HEAD,
CAPTURY_LEFT_CLAVICLE,
CAPTURY_LEFT_SHOULDER,
CAPTURY_LEFT_ELBOW,
CAPTURY_LEFT_WRIST,
CAPTURY_LEFT_THUMB_METACARPAL,
CAPTURY_LEFT_THUMB_MEDIAL,
CAPTURY_LEFT_THUMB_DISTAL,
CAPTURY_LEFT_INDEX_METACARPAL,
CAPTURY_LEFT_INDEX_PROXIMAL,
CAPTURY_LEFT_INDEX_MEDIAL,
CAPTURY_LEFT_INDEX_DISTAL,
CAPTURY_LEFT_MIDDLE_METACARPAL,
CAPTURY_LEFT_MIDDLE_PROXIMAL,
CAPTURY_LEFT_MIDDLE_MEDIAL,
CAPTURY_LEFT_MIDDLE_DISTAL,
CAPTURY_LEFT_RING_METACARPAL,
CAPTURY_LEFT_RING_PROXIMAL,
CAPTURY_LEFT_RING_MEDIAL,
CAPTURY_LEFT_RING_DISTAL,
CAPTURY_LEFT_PINKY_METACARPAL,
CAPTURY_LEFT_PINKY_PROXIMAL,
CAPTURY_LEFT_PINKY_MEDIAL,
CAPTURY_LEFT_PINKY_DISTAL,
CAPTURY_RIGHT_CLAVICLE,
CAPTURY_RIGHT_SHOULDER,
CAPTURY_RIGHT_ELBOW,
CAPTURY_RIGHT_WRIST,
CAPTURY_RIGHT_THUMB_METACARPAL,
CAPTURY_RIGHT_THUMB_MEDIAL,
CAPTURY_RIGHT_THUMB_DISTAL,
CAPTURY_RIGHT_INDEX_METACARPAL,
CAPTURY_RIGHT_INDEX_PROXIMAL,
CAPTURY_RIGHT_INDEX_MEDIAL,
CAPTURY_RIGHT_INDEX_DISTAL,
CAPTURY_RIGHT_MIDDLE_METACARPAL,
CAPTURY_RIGHT_MIDDLE_PROXIMAL,
CAPTURY_RIGHT_MIDDLE_MEDIAL,
CAPTURY_RIGHT_MIDDLE_DISTAL,
CAPTURY_RIGHT_RING_METACARPAL,
CAPTURY_RIGHT_RING_PROXIMAL,
CAPTURY_RIGHT_RING_MEDIAL,
CAPTURY_RIGHT_RING_DISTAL,
CAPTURY_RIGHT_PINKY_METACARPAL,
CAPTURY_RIGHT_PINKY_PROXIMAL,
CAPTURY_RIGHT_PINKY_MEDIAL,
CAPTURY_RIGHT_PINKY_DISTAL,
CAPTURY_LEFT_HIP,
CAPTURY_LEFT_KNEE,
CAPTURY_LEFT_ANKLE,
CAPTURY_LEFT_BALL,
CAPTURY_RIGHT_HIP,
CAPTURY_RIGHT_KNEE,
CAPTURY_RIGHT_ANKLE,
CAPTURY_RIGHT_BALL
};

struct CapturyJoint {
char name[64];
int32_t parent; // index of parent joint or -1 for root node
float offset[3]; // offset to parent joint
float orientation[3]; // XYZ quaternion - w needs to be reconstructed (w >= 0)
float scale[3]; // local scale
int8_t boneType; // knowing which functional bone it is can make retargeting easier
};

struct CapturyBlendShape {
Expand Down

0 comments on commit 3c442f7

Please sign in to comment.