diff --git a/Art/characters/blueprints/match-front.png b/Art/characters/blueprints/match-front.png index 9b429a8..8f94451 100644 --- a/Art/characters/blueprints/match-front.png +++ b/Art/characters/blueprints/match-front.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6884bbd2e4910c5039e9bedb727f85c696d71baa6fb15b53a889a730dd232283 -size 402413 +oid sha256:6c1cf23c0a2566944f2dfa9ee110990ff2e5e0cc459ec14799cfb38821f94ca4 +size 388189 diff --git a/Game/GigLine/Content/Hollywood/DemoMap.umap b/Game/GigLine/Content/Hollywood/DemoMap.umap index 6c5d70d..7e61f7a 100644 --- a/Game/GigLine/Content/Hollywood/DemoMap.umap +++ b/Game/GigLine/Content/Hollywood/DemoMap.umap @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fefd4f0b82a2d683acef909b974688b9b31f6b232e96071a1fe49de4cd741701 -size 782191 +oid sha256:98ef1ce6460c99d70638268c62ef350ff37b017bb0b939c0de588f50378b0400 +size 782187 diff --git a/Game/GigLine/Content/Hollywood/Site/M_Asphalt.uasset b/Game/GigLine/Content/Hollywood/Site/M_Asphalt.uasset index db43dd2..c85637c 100644 --- a/Game/GigLine/Content/Hollywood/Site/M_Asphalt.uasset +++ b/Game/GigLine/Content/Hollywood/Site/M_Asphalt.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ddf1c61be6475f33aa5721aafe4fcde685e22f27422e1c593a919e4c42c73ea7 +oid sha256:7cfa85954d35548d329340aae76896f02fb9418a48fe6123fc65d95dcd1500da size 10019 diff --git a/Game/GigLine/Content/Hollywood/Site/M_Concrete.uasset b/Game/GigLine/Content/Hollywood/Site/M_Concrete.uasset index 29f5c65..a0d3fba 100644 --- a/Game/GigLine/Content/Hollywood/Site/M_Concrete.uasset +++ b/Game/GigLine/Content/Hollywood/Site/M_Concrete.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:00e5d95b839f41f86c29437183a8ee164676aa1dae5fd000f4677c4a12ba4c9e +oid sha256:aedf69f25fc019f7ef5137a2c004c0f14958f5bf0572410742add6a343c05925 size 10024 diff --git a/Game/GigLine/Content/Hollywood/Site/M_FacadeBanner.uasset b/Game/GigLine/Content/Hollywood/Site/M_FacadeBanner.uasset index be0fef1..b9b53b4 100644 --- a/Game/GigLine/Content/Hollywood/Site/M_FacadeBanner.uasset +++ b/Game/GigLine/Content/Hollywood/Site/M_FacadeBanner.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2374ed4b1522375a48ca29af95d9a72b74eae3a13971b63078a5b52c28af432a +oid sha256:d0ca5c96c721b5d55bfa1eeda35ccfe0b93bddad1ce566140cf7cfc3143d3cb6 size 11419 diff --git a/Game/GigLine/Content/Hollywood/Site/M_FacadeGlass.uasset b/Game/GigLine/Content/Hollywood/Site/M_FacadeGlass.uasset index 9ff68de..b2e9b4b 100644 --- a/Game/GigLine/Content/Hollywood/Site/M_FacadeGlass.uasset +++ b/Game/GigLine/Content/Hollywood/Site/M_FacadeGlass.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:871856d181773b13ca698914bd6e5734df08859d4d127744a8bd2043f310fbfc +oid sha256:1427b1d475c1d104078cf36fba0b9d444922c6452c3bbe58af1edb9a6bffe89b size 11414 diff --git a/Game/GigLine/Content/Hollywood/Site/M_FacadeStone.uasset b/Game/GigLine/Content/Hollywood/Site/M_FacadeStone.uasset index c1a7c38..c94da80 100644 --- a/Game/GigLine/Content/Hollywood/Site/M_FacadeStone.uasset +++ b/Game/GigLine/Content/Hollywood/Site/M_FacadeStone.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:087e64b751377e6fd434d3f8980cf93ad7103b21067e58d671ba3e1c4299d0c9 +oid sha256:b96095f47f0fdc7dda01735d2d48a6271f68ef01786aac0edc7db6ca5e7dd90f size 17083 diff --git a/Game/GigLine/Content/Hollywood/Site/M_FacadeStoneShadow.uasset b/Game/GigLine/Content/Hollywood/Site/M_FacadeStoneShadow.uasset index 246830e..26353c5 100644 --- a/Game/GigLine/Content/Hollywood/Site/M_FacadeStoneShadow.uasset +++ b/Game/GigLine/Content/Hollywood/Site/M_FacadeStoneShadow.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3a7fcdb1aa8c6560031c428f5c729af38d071af94ffcfb0adfd37b00e189f6bd +oid sha256:9c4a4a616b0c639cef2a0a7d3695bdffd96077b48d868b9221a58a5caf8885e5 size 17113 diff --git a/Game/GigLine/Content/Hollywood/Site/M_Ground.uasset b/Game/GigLine/Content/Hollywood/Site/M_Ground.uasset index d565495..de2274a 100644 --- a/Game/GigLine/Content/Hollywood/Site/M_Ground.uasset +++ b/Game/GigLine/Content/Hollywood/Site/M_Ground.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9135badbc94b261eaceae9997f52f477d6f30fa7342f1440c9fb1550259d9f18 +oid sha256:efdefcbaa4a158a322422c9870cbbcf1a149f06a68fba211b7708a3a6de576e5 size 10014 diff --git a/Game/GigLine/Content/Hollywood/Site/M_KerbConcrete.uasset b/Game/GigLine/Content/Hollywood/Site/M_KerbConcrete.uasset index d135ea4..5960dbc 100644 --- a/Game/GigLine/Content/Hollywood/Site/M_KerbConcrete.uasset +++ b/Game/GigLine/Content/Hollywood/Site/M_KerbConcrete.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c46c70ea02afedf95b103909790cd375824230104915665dd077e1a2f9fe1931 +oid sha256:19e9662657cccc732c2aaa3a74199c177bae602e02abe030b11b0d89cd0e39c3 size 10044 diff --git a/Game/GigLine/Content/Hollywood/Site/M_RoadPaint.uasset b/Game/GigLine/Content/Hollywood/Site/M_RoadPaint.uasset index d25b862..a586b98 100644 --- a/Game/GigLine/Content/Hollywood/Site/M_RoadPaint.uasset +++ b/Game/GigLine/Content/Hollywood/Site/M_RoadPaint.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0da60e4b0d21266a9ea139fc50479f7eaa42ea993da756f3bca9846f173705de +oid sha256:9331ae3f3312a7a9d035291c16c0266b01febacfc37adde59d516930b5606a00 size 10029 diff --git a/Game/GigLine/Content/Hollywood/Site/M_Stucco.uasset b/Game/GigLine/Content/Hollywood/Site/M_Stucco.uasset index 140ac86..87543c4 100644 --- a/Game/GigLine/Content/Hollywood/Site/M_Stucco.uasset +++ b/Game/GigLine/Content/Hollywood/Site/M_Stucco.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b4b3c11ad2e291aa9fb1938ebe0e0e7b36314f21748197ef8602aa5bc496f04a +oid sha256:a3398b98f1c5e9691e8b12e08e9d64933f02e3ed328233f91a85cf0581088b2d size 11389 diff --git a/Game/GigLine/Content/Hollywood/Site/Terrain_DEM.uasset b/Game/GigLine/Content/Hollywood/Site/Terrain_DEM.uasset index bb8533e..d8ae0ad 100644 --- a/Game/GigLine/Content/Hollywood/Site/Terrain_DEM.uasset +++ b/Game/GigLine/Content/Hollywood/Site/Terrain_DEM.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a06f0695c1588ccdf236111100e76e1a672b93cdcc4d16e073c11c8f1556e4b7 +oid sha256:b468009deda592eda2e926ea976182179aa2d8f8c89e3bf0574427040ad1223c size 357901 diff --git a/Game/GigLine/Content/Hollywood/Textures/T_Asphalt_BC.uasset b/Game/GigLine/Content/Hollywood/Textures/T_Asphalt_BC.uasset index df676c0..3cad3e3 100644 --- a/Game/GigLine/Content/Hollywood/Textures/T_Asphalt_BC.uasset +++ b/Game/GigLine/Content/Hollywood/Textures/T_Asphalt_BC.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f7934695c2b913fb1f95c5779b182ef356cfa32d5262d6448710c87473e5f4ec +oid sha256:993b5bd4f113acf359b2d8737a52791253dc43e91402f9de4bf5534404cb9063 size 70879 diff --git a/Game/GigLine/Content/Hollywood/Textures/T_Asphalt_R.uasset b/Game/GigLine/Content/Hollywood/Textures/T_Asphalt_R.uasset index 0c6b38e..98e8ac9 100644 --- a/Game/GigLine/Content/Hollywood/Textures/T_Asphalt_R.uasset +++ b/Game/GigLine/Content/Hollywood/Textures/T_Asphalt_R.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:97262b87ac0d4e65ed22b381b98f8eabf751c0f9c1e8422da870ce6ebc654aa2 +oid sha256:3053ffba3b684467c9c6ec6bc07a20318d346b147e5116a6edb87883a5e461cc size 29011 diff --git a/Game/GigLine/Content/Hollywood/Textures/T_Concrete_BC.uasset b/Game/GigLine/Content/Hollywood/Textures/T_Concrete_BC.uasset index 063a056..3b842d7 100644 --- a/Game/GigLine/Content/Hollywood/Textures/T_Concrete_BC.uasset +++ b/Game/GigLine/Content/Hollywood/Textures/T_Concrete_BC.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6e5bf05eb9521e34e3bd5bcfc6d47c3b727b57333451fb5032701d4a7a404058 +oid sha256:db51b572e139bf20e6e8ef46b38954487a084d04ea87cc5362fc3edd060e9d4d size 58568 diff --git a/Game/GigLine/Content/Hollywood/Textures/T_Concrete_R.uasset b/Game/GigLine/Content/Hollywood/Textures/T_Concrete_R.uasset index 3e4fda8..0b4618b 100644 --- a/Game/GigLine/Content/Hollywood/Textures/T_Concrete_R.uasset +++ b/Game/GigLine/Content/Hollywood/Textures/T_Concrete_R.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c864f50af6f0394e3de9f72ce5179fcd48ba200938af0a41328c3d2c5ef9da75 +oid sha256:9a2781442ec046f80b72f6f3e3b27ef0ba0c52e154763b9d951633d78a05961f size 17517 diff --git a/Game/GigLine/Content/Hollywood/Textures/T_StoneAshlar_BC.uasset b/Game/GigLine/Content/Hollywood/Textures/T_StoneAshlar_BC.uasset index ab82d71..d3974b0 100644 --- a/Game/GigLine/Content/Hollywood/Textures/T_StoneAshlar_BC.uasset +++ b/Game/GigLine/Content/Hollywood/Textures/T_StoneAshlar_BC.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7687c9211a78ccd4334af1ff12900ef24b018aebd026546cdb3c15f473266bdb +oid sha256:a08deb1afdae35b4c3be84f8c2e204d7c93f8299ccd6d0141f81006503c88c47 size 40610 diff --git a/Game/GigLine/Content/Hollywood/Textures/T_StoneAshlar_R.uasset b/Game/GigLine/Content/Hollywood/Textures/T_StoneAshlar_R.uasset index 9b003a0..c0bb15d 100644 --- a/Game/GigLine/Content/Hollywood/Textures/T_StoneAshlar_R.uasset +++ b/Game/GigLine/Content/Hollywood/Textures/T_StoneAshlar_R.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:035d7646a8e3e4aa9b815c774839b753cc1d0cb6b9e95714cf43aac48070eda0 +oid sha256:3b0b010a39c750e732496ff4eb0dca51c24ec1bbd6179498553c55aee6c48b57 size 18770 diff --git a/Game/GigLine/Content/Hollywood/Textures/T_Stucco_BC.uasset b/Game/GigLine/Content/Hollywood/Textures/T_Stucco_BC.uasset index ec64d5d..d3f1f38 100644 --- a/Game/GigLine/Content/Hollywood/Textures/T_Stucco_BC.uasset +++ b/Game/GigLine/Content/Hollywood/Textures/T_Stucco_BC.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:54d50c97f02e336c5c7f9c6a8c3c439ee08260d02e93def9d1b48cdfb8a9620d +oid sha256:ac2d87e0c19d9f586a767d15fe5e6c6a3ab32b129f3a31cfd2ec055d015705f4 size 62746 diff --git a/Game/GigLine/Content/Hollywood/Textures/T_Stucco_R.uasset b/Game/GigLine/Content/Hollywood/Textures/T_Stucco_R.uasset index cf62fae..fb6f270 100644 --- a/Game/GigLine/Content/Hollywood/Textures/T_Stucco_R.uasset +++ b/Game/GigLine/Content/Hollywood/Textures/T_Stucco_R.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1edaafb2925737a7e2d8a1d88b139553aca54ba680ee687bb0473c7af9f7a4d5 +oid sha256:e6390a8ad6d4d853353ceef753cb876a3c224307d87afef2683aefedd087a857 size 17541 diff --git a/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_BladeSign.uasset b/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_BladeSign.uasset index 83acdc1..460f7be 100644 --- a/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_BladeSign.uasset +++ b/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_BladeSign.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f81c8ae249ecabc83152f3a9ff22435b6e9c1577a78198af8ce5a6c0fbe6586b +oid sha256:e82e7306e9a77c7d92d99c69c504e9e454b3ba92239fab98c8f2fa2713b6c88a size 72330 diff --git a/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_BladeSignBracket.uasset b/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_BladeSignBracket.uasset index 89433f7..e94baf4 100644 --- a/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_BladeSignBracket.uasset +++ b/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_BladeSignBracket.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4b2c651d7e235ee2180d9e2a0bb65cab0876d916ed2c51070659ddce34cac9ca +oid sha256:5a62ed243d7cb858cd7cf8ff957eb6b62ed8fefc3994313ef3a9d3c49dd2589f size 72466 diff --git a/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_BladeSignFrame.uasset b/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_BladeSignFrame.uasset index e004420..5b3c87d 100644 --- a/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_BladeSignFrame.uasset +++ b/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_BladeSignFrame.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ea04a31d60f36ac4a4de9d8ac86bf1aecfcf689538cf143ce02e4ff5441a8d26 +oid sha256:de1a00154f54e27cdb1fce6ec1ae2ad1a066cf19f382fc1eb70a0e78139209e9 size 72406 diff --git a/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_MarqueeCanopy.uasset b/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_MarqueeCanopy.uasset index 25c7e6c..ae65a7f 100644 --- a/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_MarqueeCanopy.uasset +++ b/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_MarqueeCanopy.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:92660e4ae53b438692bc1725b995b8d76135a2f565a8641c6b98ef648794f82b +oid sha256:f1c3c799809819964065409bcd770b688c1655cfcbfdaaa8313ae5fe9030804c size 72370 diff --git a/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_MarqueeFascia.uasset b/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_MarqueeFascia.uasset index ac28654..03a0bd3 100644 --- a/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_MarqueeFascia.uasset +++ b/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_MarqueeFascia.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8ebe7b2bc839c641df2b95f154ed02fdb42388253514b8418cd70c29af67e0c4 +oid sha256:e0ce65522f05d1f946a6f3e8bf35f85405ccff2bcb0f04c6b98ebcb49299a6ac size 72438 diff --git a/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_MarqueeSoffit.uasset b/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_MarqueeSoffit.uasset index df4d806..77ede69 100644 --- a/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_MarqueeSoffit.uasset +++ b/Game/GigLine/Content/Hollywood/Theatre/SM_Trim_MarqueeSoffit.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b8265121a70e3764d94a03baba76a978580f8c72d47f7bfc99f892144b195910 +oid sha256:213b0841bf31c72d57695444ebbf9089f2b214a7e3d574aed0109d062d2fa84d size 72413 diff --git a/Game/GigLine/Content/Test/Character/CharacterJeans.uasset b/Game/GigLine/Content/Test/Character/CharacterJeans.uasset index c780c28..319573c 100644 --- a/Game/GigLine/Content/Test/Character/CharacterJeans.uasset +++ b/Game/GigLine/Content/Test/Character/CharacterJeans.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:30343da2b0d68148d6429367b9b4be8ad5b3043601dee2b0d0cd7ad877b61d00 -size 1068248 +oid sha256:b53092868ca0afa429af4a046b740a9dd9bd54f2b2fe129f0813ddf9a083f626 +size 1069803 diff --git a/Game/GigLine/Content/Test/Character/CharacterShoes.uasset b/Game/GigLine/Content/Test/Character/CharacterShoes.uasset index e9b6036..8b835ee 100644 --- a/Game/GigLine/Content/Test/Character/CharacterShoes.uasset +++ b/Game/GigLine/Content/Test/Character/CharacterShoes.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0f726d0e2a9f65363aeba44056054619f5695fa4cc06a0e47cff0802bbaf398f -size 1337081 +oid sha256:a32b221c1b4653c2628f1f10caaae2f8f49765559ed179ae5a23531ff308a09a +size 1339812 diff --git a/Game/GigLine/Content/Test/Character/CharacterTee.uasset b/Game/GigLine/Content/Test/Character/CharacterTee.uasset index a85ce77..fc3487a 100644 --- a/Game/GigLine/Content/Test/Character/CharacterTee.uasset +++ b/Game/GigLine/Content/Test/Character/CharacterTee.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:53e6ba455263681f9e1c39b438642ce94b16f41c0a51279aa172be16a37717d8 -size 1130508 +oid sha256:c5f16f04e7022b7b9e1dbbf1cc20a6ba7c325c7d8d0fc869aa1539e451e0ee08 +size 1146389 diff --git a/Game/GigLine/Content/Test/ReviewMap.umap b/Game/GigLine/Content/Test/ReviewMap.umap index 1bc57cd..ed59cef 100644 --- a/Game/GigLine/Content/Test/ReviewMap.umap +++ b/Game/GigLine/Content/Test/ReviewMap.umap @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f8724029a034d68eb377dc2930e3fb97f8088a61dbbdf06d28833df02069e955 +oid sha256:3bbeede8df99cd935df578f6db0d7302ff39ecef0f430b151b091c93b8edd67a size 30542 diff --git a/Game/GigLine/Source/GigLine/GigLineCharacter.cpp b/Game/GigLine/Source/GigLine/GigLineCharacter.cpp index 8d958fd..98e7d6c 100644 --- a/Game/GigLine/Source/GigLine/GigLineCharacter.cpp +++ b/Game/GigLine/Source/GigLine/GigLineCharacter.cpp @@ -311,6 +311,27 @@ void AGigLineCharacter::BeginPlay() // `-walk` holds forward input from the first frame. The screenshot run uses it // with `-thirdperson` so a capture can show the walk clip mid-stride: an idle // shot cannot prove the animation set, and a still cannot show a stride. + // Bind the character materials here rather than in the constructor: the slot + // assignment made there never reached the render. LoadObject, not FObjectFinder, + // because FObjectFinder may only be used inside a constructor - putting one in + // Tick was a fatal "FObjectFinders can't be used outside of constructors". + if (GetMesh()) + { + if (UMaterialInterface* Skin = LoadObject( + nullptr, TEXT("/Game/Test/Character/M_Character_Skin.M_Character_Skin"))) + { + GetMesh()->SetMaterial(0, Skin); + } + } + if (HairMesh) + { + if (UMaterialInterface* HairMat = LoadObject( + nullptr, TEXT("/Game/Test/Character/M_Character_Hair_Mat.M_Character_Hair_Mat"))) + { + HairMesh->SetMaterial(0, HairMat); + } + } + bWalkForever = FParse::Param(FCommandLine::Get(), TEXT("walk")); // `-perf` starts the overlay on: the performance capture and any manual frame diff --git a/MEMORY.md b/MEMORY.md index 148dfc2..2cfe396 100644 --- a/MEMORY.md +++ b/MEMORY.md @@ -508,3 +508,5 @@ Scope: facts and traps that cost time to establish. Planned work lives in [TODO. - **MPFB vertex groups are polluted by helper geometry.** The body mesh weights its helper cubes to groups named `Left`, `Right`, `HelperGeometry` and `JointCubes` at 1.0, so a "strongest group" lookup returns a helper for most vertices - the first clothing build selected **zero** faces. Filter helper names out before asking which bone a vertex belongs to. - **Blender refuses to apply a modifier to a mesh with shape keys.** The body carries ten; a garment copy must clear them (`shape_key_remove(all=True)`) before solidify can be applied. - **Edit-mode selection reverts to vertex selection.** Setting `polygon.select` in object mode and then entering edit mode re-derives selection from the vertices, which were all still selected - deleting "the unselected faces" wiped the entire garment. Filter with `bmesh.ops.delete(context="FACES")` instead. +- **`ConstructorHelpers::FObjectFinder` outside a constructor is a fatal error**, not a warning: the game dies in `Tick` with "FObjectFinders can't be used outside of constructors". Use `LoadObject(nullptr, Path)` for runtime loads and keep `FObjectFinder` to the constructor. +- **A 1 cm solidify shell lets the body poke through.** Garments built by duplicating body faces needed 2 cm of solidify plus an 8 mm fatten along their own normals before the cloth read as continuous at shoulders, hips and knees. diff --git a/Screenshots/demo/review-demo-crossing.png b/Screenshots/demo/review-demo-crossing.png index 2fcce98..b5d444d 100644 --- a/Screenshots/demo/review-demo-crossing.png +++ b/Screenshots/demo/review-demo-crossing.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f81f49911a7bb9aacd53876b879065b6ec120d027f484c5ee96b6b582cc595c7 -size 3090004 +oid sha256:28153d99982ff24f7af081a7bdf87bf9b3a95aac234d5a0b434751d6e03584a5 +size 3089619 diff --git a/Screenshots/demo/review-demo-north-buildings.png b/Screenshots/demo/review-demo-north-buildings.png index a767a08..193d66b 100644 --- a/Screenshots/demo/review-demo-north-buildings.png +++ b/Screenshots/demo/review-demo-north-buildings.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cd6959f464cf447884ff70c8e8e113bd819a7e03ce7a2af7ced03226b8898462 -size 2620154 +oid sha256:75bf44cbe07e977ca20044e17582e400e250a9d1624854a47812b18103018517 +size 2618848 diff --git a/Screenshots/demo/review-demo-retail-frontage.png b/Screenshots/demo/review-demo-retail-frontage.png index 67411f6..e710eb7 100644 --- a/Screenshots/demo/review-demo-retail-frontage.png +++ b/Screenshots/demo/review-demo-retail-frontage.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e440d59b2ef60fadbcb976d1bbc793e053bfc07ceaef8aded17d085c2dc3ea19 -size 2524127 +oid sha256:fa8765ee7a27a8dec67c29c4636ed9b18f12df56ae2306a14811ad8f780f6627 +size 2522127 diff --git a/Screenshots/demo/review-demo-spawn-view.png b/Screenshots/demo/review-demo-spawn-view.png index 23a03ce..b8d778b 100644 --- a/Screenshots/demo/review-demo-spawn-view.png +++ b/Screenshots/demo/review-demo-spawn-view.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:630df4f6bb32c3c9d84ffd564ce1b327259d3f66b5c2844ddc4c9f238fb78cd4 -size 2934218 +oid sha256:5525013be744f96dc86a361ff24e290ebc2468aa4c28b50e54f63bc4ee0b71e9 +size 2930228 diff --git a/Screenshots/demo/review-demo-street-level.png b/Screenshots/demo/review-demo-street-level.png index c142181..184ed81 100644 --- a/Screenshots/demo/review-demo-street-level.png +++ b/Screenshots/demo/review-demo-street-level.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0fbfe443aac4620af516b912bf127bfd0930a663c5ed17ec3dff37baabc0b3a9 -size 2849095 +oid sha256:1233c80d421e3402d889062d5e350563de2fb0d445b6e4fea840c6783bd59153 +size 2848430 diff --git a/Screenshots/demo/review-demo-third-person-front.png b/Screenshots/demo/review-demo-third-person-front.png index 210ad7f..9b10193 100644 --- a/Screenshots/demo/review-demo-third-person-front.png +++ b/Screenshots/demo/review-demo-third-person-front.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:83c2285fb767d5ee9eab73d2abf12b8d23e0fcae5c18d60feef3c1ddd6532baa -size 2793641 +oid sha256:5df0ea73aeca38a0ec0510fe3f7793c6124ca01173244ef2351cc22eb7352f42 +size 2788098 diff --git a/Screenshots/demo/review-demo-third-person-walk.png b/Screenshots/demo/review-demo-third-person-walk.png index e4be209..e0a42f7 100644 --- a/Screenshots/demo/review-demo-third-person-walk.png +++ b/Screenshots/demo/review-demo-third-person-walk.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:62d0d57bbb40bc0fe2e3ea6a22dd0d4ca572143b0e10bcd2f0df91de21861720 -size 2155728 +oid sha256:92752fb076a42f2f54ce6077cfb443967481a455ea2f980875d0eeb8b29e978c +size 2173847 diff --git a/Screenshots/demo/review-demo-third-person.png b/Screenshots/demo/review-demo-third-person.png index 7412a8c..a3104c8 100644 --- a/Screenshots/demo/review-demo-third-person.png +++ b/Screenshots/demo/review-demo-third-person.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ab85571608f91aa13368cebdfb0f5eddf0b2e3231325a2b573f31ebe88ca9397 -size 3003366 +oid sha256:a8d0ea03b044526114f20e0de98d5a22f41f8d4eca1eab589b599b3376694f44 +size 2993836 diff --git a/TODO.md b/TODO.md index 3b492f3..c660487 100644 --- a/TODO.md +++ b/TODO.md @@ -23,8 +23,9 @@ Actionable task list for this project. This file is the single, central place fo - **Skin still needs work.** `M_Character_Skin` (constant tone 0.62/0.42/0.33, roughness 0.58) is built and the pawn calls `SetMaterial(0, ...)`, but the body still renders neutral grey in review shots, so the assignment is not taking. The baked `T_Character_Diffuse` cannot be used either: sampling it renders the body black, so the MPFB mesh's UVs do not map onto that bake. Next: verify the slot index after `SetSkeletalMesh`, or assign in `BeginPlay` instead of the constructor. - **Character blueprint and evaluation tools exist.** `Tools/comfyui_character_blueprint.py` generates a four-view sheet (front/side/back/head) from one description with fixed seeds; `Tools/character_match.py` compares a render against it and reports aspect, fill, coverage, mean CIE76 and palette distance plus a side-by-side montage. First result against `Screenshots/demo/review-demo-third-person-front.png`: **aspect delta 1.24, fill delta 0.12, mean ΔE 31.9, palette ΔE 25.4** — and the montage shows why: the model is a **nude body**, the blueprint is clothed (navy tee, jeans, sneakers). - **Clothing exists now** (`Tools/character_clothing_build.py` + `Tools/ue_character_clothing_import.py`): tee, jeans and shoes as three separate skinned meshes, built from the body's own faces per the character-artist workflow (duplicate faces, solidify for thickness, one mesh per piece), imported as `CharacterTee` / `CharacterJeans` / `CharacterShoes` and attached as leader-pose components. The navy tee, dark jeans and off-white shoes read correctly at review distance. - - **The garments have coverage holes.** Grey skin shows through at the shoulders, hips and knees. Solidify offset (1 cm) is not enough where the body is convex, and trimming by x-width removes faces the body then shows through. Next: raise the offset, or grow the garment along its own normals after the solidify. - - **Hair reads light and wispy** since its material instance was repointed to `M_Character_Hair_Mat` (masked strand sheet): the alpha is cutting the cards into separate hairs and the base colour is being lifted by the texture. Either darken the texture or drive colour from a constant and use the sheet only as an opacity mask. + - **Garment coverage fixed 2026-11-09.** Solidify thickness raised to 2 cm plus a normal fatten pass of 8 mm closed the shoulders, hips and knees; the tee, jeans and shoes now read as continuous cloth. Evaluation against the blueprint improved from **mean ΔE 31.9 → 21.8** and **palette ΔE 25.4 → 19.7**; the montage is `Art/characters/blueprints/match-front.png`. + - **Hair reads light and wispy** since its material instance was repointed to `M_Character_Hair_Mat` (masked strand sheet): the alpha is cutting the cards into separate hairs and the base colour is lifted by the texture. Either darken the texture or use the sheet only as an opacity mask and drive colour from a constant. + - **Skin still renders neutral grey.** The constructor assignment never reached the render, and moving it to `BeginPlay` with `LoadObject` required fixing a fatal: `FObjectFinder` may only be used inside a constructor, so the first attempt crashed the game in `Tick`. The binding now runs in `BeginPlay`, but the arms and face are still grey in the render, so `M_Character_Skin` itself is suspect — possibly the material has no compiled base-colour expression reaching the pin. - **Figure segmentation is explicit, not automatic.** Auto-detection failed on the review shots: the backdrop (sky band, pale wall, dark pavement) is larger and more saturated than the subject, so every size-based rule picked a backdrop blob. `--render-box` takes the figure box as fractions of the frame. A background plate rendered without the character would make this automatic. - `Tools/ue_character_materials.py` (wiring the generated textures into the skin and hair materials) **segfaults in the headless commandlet** when it edits the material graph. Not wired; the hair keeps the dark base colour it carries from Blender. Needs either an editor-session run or a material asset built from scratch instead of edited in place. diff --git a/Tools/character_clothing_build.py b/Tools/character_clothing_build.py index 798c109..61edaa3 100644 --- a/Tools/character_clothing_build.py +++ b/Tools/character_clothing_build.py @@ -38,9 +38,9 @@ GARMENTS = ( "upperarm01.L", "upperarm01.R", "breast.L", "breast.R", "neck01", "neck02", "pelvis.L", "pelvis.R"], "z_min": 0.90, "z_max": 1.44, - "x_max": 0.235, # trims the bare arms out of the tee + "x_max": 0.255, # trims the bare arms out of the tee "use_bones": False, - "thickness": 0.009, + "thickness": 0.020, "colour": (0.020, 0.032, 0.075, 1.0), # navy cotton "roughness": 0.78, }, @@ -51,9 +51,9 @@ GARMENTS = ( "upperleg02.L", "upperleg02.R", "lowerleg01.L", "lowerleg01.R", "lowerleg02.L", "lowerleg02.R", "spine01"], "z_min": 0.06, "z_max": 1.06, - "x_max": 0.30, + "x_max": 0.32, "use_bones": False, - "thickness": 0.010, + "thickness": 0.020, "colour": (0.032, 0.055, 0.105, 1.0), # dark denim "roughness": 0.62, }, @@ -154,6 +154,19 @@ def build_garment(body, arm, spec, out_dir): solidify.offset = 1.0 bpy.ops.object.modifier_apply(modifier=solidify.name) + # Push the shell out along its own normals. Solidify alone left the body visible + # through the garment at every convex patch - shoulders, hips, knees. + import bmesh + bm = bmesh.new() + bm.from_mesh(mesh) + bm.normal_update() + for vertex in bm.verts: + vertex.co += vertex.normal * spec.get("fatten", 0.008) + bm.to_mesh(mesh) + bm.free() + mesh.update() + log(f"{spec['asset']}: fattened by {spec.get('fatten', 0.008):.3f} m") + material = bpy.data.materials.get(f"M_Char_{spec['name']}") \ or bpy.data.materials.new(f"M_Char_{spec['name']}") material.use_nodes = True