feat(character): ComfyUI blueprints and a render-vs-blueprint evaluation
Two tools that turn character work into something measurable. - Tools/comfyui_character_blueprint.py generates a four-view sheet (front, side, back, head) plus a contact sheet from one description, with fixed seeds and a JSON record of prompts and prompt ids. First sheet: 'GigLine walker', lean pedestrian in a navy tee, jeans and sneakers. - Tools/character_match.py compares a rendered character against a sheet: figure aspect, fill and coverage deltas, mean CIE76 colour distance, dominant-palette distance, and a side-by-side montage. The deltas stay separate on purpose - a single similarity score between a photoreal sheet and a low-detail body would be a number with no meaning. - comfyui_generate.py grew wait_for_image() so both tools share the polling path instead of duplicating it. - 13 unit tests for the colour maths, masks and palette; 95 tool tests pass. First real result, recorded rather than smoothed over: aspect delta 1.24, fill delta 0.12, mean deltaE 31.9, palette deltaE 25.4. The montage shows the reason - the model is a nude body and the blueprint wears a tee and jeans, so clothing dominates every metric. Figure segmentation is explicit (--render-box): auto-detection picked backdrop blobs on every attempt, and a background plate is the proper fix.
This commit is contained in:
1 parent
1fc5835327
commit
85a8437cbc
56 files changed
+841
-170
No files matched your search
@@ -92,6 +92,17 @@ AGigLineCharacter::AGigLineCharacter()
|
||||
|
||||
// Hair: a separate component that copies the body's pose, so it follows the head
|
||||
// bone without a second rig or a second animation. Hidden with the body.
|
||||
// The skin material is assigned at runtime: a SkeletalMesh slot cannot be repointed
|
||||
// from Python, so Tools/ue_character_materials.py builds M_Character_Skin and the
|
||||
// pawn binds it here. Without this the imported FBX phong material is used and the
|
||||
// generated pore detail never reaches the render.
|
||||
static ConstructorHelpers::FObjectFinder<UMaterialInterface> SkinMaterialFinder(
|
||||
TEXT("/Game/Test/Character/M_Character_Skin.M_Character_Skin"));
|
||||
if (SkinMaterialFinder.Succeeded())
|
||||
{
|
||||
GetMesh()->SetMaterial(0, SkinMaterialFinder.Object);
|
||||
}
|
||||
|
||||
HairMesh = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("HairMesh"));
|
||||
HairMesh->SetupAttachment(GetCapsuleComponent());
|
||||
HairMesh->SetCollisionEnabled(ECollisionEnabled::NoCollision);
|
||||
|
||||
Reference in new issue
Block a user