Fix geoset filtering to always show body parts (group 0)

Body parts (submeshId 0-99) now always render regardless of activeGeosets.
Other geoset groups (hair, chest, etc.) still require explicit enabling.
This fixes missing body parts while maintaining equipment filtering.
This commit is contained in:
Kelsi 2026-02-05 23:35:28 -08:00
parent 9c5e2fb93d
commit 99fd4ca537

View file

@ -1218,9 +1218,22 @@ void CharacterRenderer::render(const Camera& camera, const glm::mat4& view, cons
// Draw batches (submeshes) with per-batch textures
for (const auto& batch : gpuModel.data.batches) {
// Filter by active geosets (if set)
if (!instance.activeGeosets.empty() &&
instance.activeGeosets.find(batch.submeshId) == instance.activeGeosets.end()) {
continue;
// Geoset format: GroupID * 100 + VariationID
// Groups: 0=body, 1=hair, 2=facial, 3=gloves, 4=boots, 5=chest, 7=ears, 13=pants, 15=cape, 17=eyeglow
if (!instance.activeGeosets.empty()) {
uint16_t group = batch.submeshId / 100;
uint16_t variation = batch.submeshId % 100;
// Always show body parts (group 0)
if (group == 0) {
// Body always renders
} else {
// For other groups, check if this specific geoset is enabled
bool found = instance.activeGeosets.find(batch.submeshId) != instance.activeGeosets.end();
if (!found) {
continue;
}
}
}
// Resolve texture for this batch