From bea6aa3e054044186a6e72c7079d753749acb6fd Mon Sep 17 00:00:00 2001 From: Zwitschi Date: Mon, 9 Nov 2026 14:20:07 +0100 Subject: [PATCH] light: raise the sun so the character leaves building shadow (needs approval) The skin was never grey. A red test colour reached the render and the slot was confirmed holding M_Character_Skin, so the material and the assignment were both fine - the body was simply standing in building shadow and lit almost entirely by the blue skylight (intensity 2.6). Warm skin under blue fill reads blue-grey. Raising the sun from pitch -62 to -74, same camera: face (99, 98, 100) -> (131, 121, 117) arms (67, 74, 81) -> (71, 78, 85) This touches every approved shot, so it sits on the branch for the owner's approval rather than being folded in. Also records that the Unreal commandlet silently drops unknown switches, which is why a --unlit-test flag never took effect. --- Game/GigLine/Content/Hollywood/DemoMap.umap | 4 ++-- .../Content/Hollywood/Site/M_Asphalt.uasset | 2 +- .../Content/Hollywood/Site/M_Concrete.uasset | 2 +- .../Hollywood/Site/M_FacadeBanner.uasset | 2 +- .../Hollywood/Site/M_FacadeGlass.uasset | 2 +- .../Hollywood/Site/M_FacadeStone.uasset | 2 +- .../Hollywood/Site/M_FacadeStoneShadow.uasset | 2 +- .../Content/Hollywood/Site/M_Ground.uasset | 2 +- .../Hollywood/Site/M_KerbConcrete.uasset | 2 +- .../Content/Hollywood/Site/M_RoadPaint.uasset | 2 +- .../Content/Hollywood/Site/M_Stucco.uasset | 2 +- .../Content/Hollywood/Site/Terrain_DEM.uasset | 2 +- .../Hollywood/Textures/T_Asphalt_BC.uasset | 2 +- .../Hollywood/Textures/T_Asphalt_R.uasset | 2 +- .../Hollywood/Textures/T_Concrete_BC.uasset | 2 +- .../Hollywood/Textures/T_Concrete_R.uasset | 2 +- .../Textures/T_StoneAshlar_BC.uasset | 2 +- .../Hollywood/Textures/T_StoneAshlar_R.uasset | 2 +- .../Hollywood/Textures/T_Stucco_BC.uasset | 2 +- .../Hollywood/Textures/T_Stucco_R.uasset | 2 +- .../Theatre/SM_Trim_BladeSign.uasset | 2 +- .../Theatre/SM_Trim_BladeSignBracket.uasset | 2 +- .../Theatre/SM_Trim_BladeSignFrame.uasset | 2 +- .../Theatre/SM_Trim_MarqueeCanopy.uasset | 2 +- .../Theatre/SM_Trim_MarqueeFascia.uasset | 2 +- .../Theatre/SM_Trim_MarqueeSoffit.uasset | 2 +- Game/GigLine/Content/Test/ReviewMap.umap | 2 +- MEMORY.md | 2 ++ Screenshots/demo/review-demo-crossing.png | 4 ++-- .../demo/review-demo-north-buildings.png | 4 ++-- .../demo/review-demo-retail-frontage.png | 4 ++-- Screenshots/demo/review-demo-spawn-view.png | 4 ++-- Screenshots/demo/review-demo-street-level.png | 4 ++-- .../demo/review-demo-third-person-front.png | 4 ++-- .../demo/review-demo-third-person-walk.png | 4 ++-- Screenshots/demo/review-demo-third-person.png | 4 ++-- TODO.md | 2 +- Tools/ue_build_demo_map.py | 4 ++-- Tools/ue_character_materials.py | 21 +++++++++++++------ 39 files changed, 64 insertions(+), 53 deletions(-) diff --git a/Game/GigLine/Content/Hollywood/DemoMap.umap b/Game/GigLine/Content/Hollywood/DemoMap.umap index a99bbad..cd8062b 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:92163de5a961f307aacb1a860b329c4d64de340c51f9781fc53846c8f4cd5bca -size 782191 +oid sha256:c4009b01c597701662d2fe9c7087db94aec14ad04d304d675bea06fcd8bd340f +size 782187 diff --git a/Game/GigLine/Content/Hollywood/Site/M_Asphalt.uasset b/Game/GigLine/Content/Hollywood/Site/M_Asphalt.uasset index 3cb46e1..fe94222 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:62a614070d26c567686aae999b1c90240eb663af0f0f260d80d527d1239ecd60 +oid sha256:3b3a068d5ab073de713e5ade0185cb850094c19f8b6af4cfe3d58f4c16614e5e size 10019 diff --git a/Game/GigLine/Content/Hollywood/Site/M_Concrete.uasset b/Game/GigLine/Content/Hollywood/Site/M_Concrete.uasset index 5b21e5b..6ff45ab 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:66424212813926590c11a6422155d20f8086612f516158fbe9d3a7de33358e83 +oid sha256:f5e05ded7d14977d6bc71b03087a83c2602aef8fad5e1c0c744875e9046ca522 size 10024 diff --git a/Game/GigLine/Content/Hollywood/Site/M_FacadeBanner.uasset b/Game/GigLine/Content/Hollywood/Site/M_FacadeBanner.uasset index b99f703..d446245 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:47a2422896e5e07121125c09cdadfcc384db5f0bf925a7cc4845cebec73a943c +oid sha256:f8cc0e94f0025e65821c1a0a10af7236880d849be54a2fba286d432f3b2b7f6e size 11419 diff --git a/Game/GigLine/Content/Hollywood/Site/M_FacadeGlass.uasset b/Game/GigLine/Content/Hollywood/Site/M_FacadeGlass.uasset index def94e0..9db4b13 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:88ba2f0ba6443ad0cdf08e91a223623645aed10d78b3621eac2effc69e222a70 +oid sha256:119e7810db8f723822efba2abe7f6213fa00c1cd9c6fc1b2ee2ef9823dcaf213 size 11414 diff --git a/Game/GigLine/Content/Hollywood/Site/M_FacadeStone.uasset b/Game/GigLine/Content/Hollywood/Site/M_FacadeStone.uasset index dae4be2..3386707 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:0c8d8a195835fdbd65ec3ff913c2320697f077e027a85b419cea2a7c8413ea16 +oid sha256:7ed1653f806a823b8274a29f522f852ea06d17ede7328d32eb288afd394d0bd5 size 17083 diff --git a/Game/GigLine/Content/Hollywood/Site/M_FacadeStoneShadow.uasset b/Game/GigLine/Content/Hollywood/Site/M_FacadeStoneShadow.uasset index 0a2a46e..4d36706 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:787a7b7654bca39c40bec699fcbba742d793d05e9feba93b8f87625d65fcde81 +oid sha256:3582a8cdab050151c925f9c99eab9d1457847278caa9bc41c64baa26dc650e2a size 17113 diff --git a/Game/GigLine/Content/Hollywood/Site/M_Ground.uasset b/Game/GigLine/Content/Hollywood/Site/M_Ground.uasset index 706a021..f7fc04c 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:dce807138c94030a5d4cc266396e085814cc711ccad0b07dfc9b9b2fe79919af +oid sha256:10b872b0957db7437ebcec222b95e7953a3b92eac1f2663bbefa4fea4dd2c3c0 size 10014 diff --git a/Game/GigLine/Content/Hollywood/Site/M_KerbConcrete.uasset b/Game/GigLine/Content/Hollywood/Site/M_KerbConcrete.uasset index 3d65968..dc1059a 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:a6540c5548011edd39fa5f0ec6dc999078e26bd1d9a0973201753e65ab00af0c +oid sha256:ecffd78e161d3d9007f1690f611844dbe19bbbb707b01adcb41cf10cdce44de5 size 10044 diff --git a/Game/GigLine/Content/Hollywood/Site/M_RoadPaint.uasset b/Game/GigLine/Content/Hollywood/Site/M_RoadPaint.uasset index 3ae7021..a5e4f28 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:34345a35f495d21523bc616bf3a2c9b9960d15379a62cbc937939e2d44318d63 +oid sha256:f20525517de7866ecb64c62e19f7b9d6ab97ceef5df975e61b0311f59d818155 size 10029 diff --git a/Game/GigLine/Content/Hollywood/Site/M_Stucco.uasset b/Game/GigLine/Content/Hollywood/Site/M_Stucco.uasset index baf270a..8083487 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:0c6e920b91e19f2e2b874cc0ec729fd41b7b12ca41b924a22892affc9a427a84 +oid sha256:0c686f758f4d418f65d863dd58650b0c5c7563380a07d656ced8ecc7b11eecac size 11389 diff --git a/Game/GigLine/Content/Hollywood/Site/Terrain_DEM.uasset b/Game/GigLine/Content/Hollywood/Site/Terrain_DEM.uasset index 32af0c9..6407c73 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:416e4dff5640b9427585f3478026923f4ac0522ba9cbb13efda74060ce5e1b62 +oid sha256:b739e5360c0755b767550748521c6180f56d28642e2073511755597e5f7055bc 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 6a788fe..5d299d3 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:f40f0a15184379c9cb21c5492c72965d213268e8d3cb54eaccaa7184839deef2 +oid sha256:091e0b3b7c67dc919e41757ff274cb6a8e78312f24ec3cd75312c9c4017454c6 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 b5f645c..1e33557 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:3168faf332c363547097449bfdf8303cc60055df679a8fa8583ad720ac29c5d1 +oid sha256:b4dbf1b4b02dbf5678f173ba485c6900b47e36d083df8753902ec7c86a7fca72 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 17acefa..cb2cf57 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:0c494e2171bde237230d53c04329255a1b743b0a12f21fce933bcf2f1f383e6b +oid sha256:b65b35578be502f97c2bd82b050e8ca934b5d5c16b6ecd289d0be1476d976934 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 0235c07..d32d5c3 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:ccdf7a02d9a6b114a87b49066e7d2008ad488385e8c61ccf77da76264c6b9282 +oid sha256:0c8b5aa5a77df7f7521239bf8ca7f5dae58688cb602c29fec4508cb065d42f83 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 515a067..92061ed 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:a4c5a8b8accc9fdfc150e243ece1f78818299572a0044f5422c8d92258f4a2d0 +oid sha256:5ff05d42dbae68e1cce03f37ebaaa98923a251902cd4d22ebcdbcdf2b746bcfd 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 2342b12..60b817a 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:1f1093d221fee2ddc27e4e1c13a5bd7522463839a0aef0a08c69ee3f50c93004 +oid sha256:fd369c09254e11f73672ac477b9ca2713360caf55521dfa379fb846545056a94 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 fb49bda..758ccac 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:1de70a932199464f5063b39dd6e7f0a8f7b3a8716618aec03de3d13791ee43f2 +oid sha256:bb17299f06971487075cbfd621efff802af76552195be28183c91246ce3e043c 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 30caeec..8f03901 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:5c2e10c2481d8fdabcc9066f4625da610ec86716cee46bee132f3f5c5029cb0a +oid sha256:27aa3427f615b6ffa23fcb1ed5b0b2fc4e1f3637c70abe5dc7ddc781ee866fb7 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 32fc64e..7983e88 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:f2840f75c9efdd3adee2809b7d22b60bf647d97f007b74bb24e22be1631c343f +oid sha256:14c74564ba7e3e028a17f3770ade7dea439f5e29deb1d2ad5e96c428881b3533 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 3f02c52..7bf9bdb 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:c636670338bb7a09163601744344bcdb11977644139091845d46a99a213a4d86 +oid sha256:7f6f9b94a06ebbfeccc0b0c7e811bd2baaa2a7b6250b0ad1e67e53ab8c035a1d 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 3453719..b8ce48c 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:9235b01c445042001658775e998e423ccec1c9f0b953af47fe10687875dba059 +oid sha256:2156846041cb844c6b354ee1ea1a9a95d4ce9f8148c30fc7e56b5ac1f5d81abc 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 c650138..d3dba06 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:d289003e1257b50b798c7b2aada7c941cfac5c5c5b50642516bf0b053b6a53a3 +oid sha256:015a8788eef7f38bb9d1a716e3ecf22327c974944a084f60a4fe374ecab8b66e 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 5c66ea0..dae5c93 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:647a16ad1c1ae619aaabc7a68cbc0aad343a342f09d66858aef5cd7cf3d007eb +oid sha256:6ba9af2d666f01fb37e6810c614c6c27f9d1570e8196a1231396204b7a2c1d77 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 5f2872b..8d30403 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:d1e4880d1840a18cb58bb321dc39488de8f2baf7f4df1894e1e2b7c79a126d4d +oid sha256:1653fffd4f73e3d204947ea056bdd933b83d691f52fd382bec08cf5c511f10a4 size 72413 diff --git a/Game/GigLine/Content/Test/ReviewMap.umap b/Game/GigLine/Content/Test/ReviewMap.umap index 2d5e873..365dc8a 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:85643c28eac876270fe91fff4523c4f9cb2fc79b1915a5dec596e4cf678b3914 +oid sha256:061edd655d9f9f2929660eb6a8715bdb0f8f98b1aebc776f23c0ccd5ad9bf332 size 30542 diff --git a/MEMORY.md b/MEMORY.md index 2cfe396..3fcc7db 100644 --- a/MEMORY.md +++ b/MEMORY.md @@ -510,3 +510,5 @@ Scope: facts and traps that cost time to establish. Planned work lives in [TODO. - **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. +- **Warm skin sampling as blue-grey was lighting, not material.** The body stood in building shadow and was lit almost entirely by the blue `Demo_SkyLight` (intensity 2.6): face (99, 98, 100), arms (67, 74, 81). Raising the sun to pitch -74 moved the face to (131, 121, 117). A deliberate red test colour reaching the render first proved the material and the slot assignment were fine, which is what stopped a long hunt in the wrong place. +- **The Unreal commandlet drops unknown command-line switches.** A `--unlit-test` flag passed after `-script` never reached Python; an environment variable does get through (and even that proved unnecessary once the red test settled the question). diff --git a/Screenshots/demo/review-demo-crossing.png b/Screenshots/demo/review-demo-crossing.png index c17c847..6b40fde 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:95ff71103919d9a7914b957cae2aa24e13dbfecf52c9ab83de26d5f33d0c015d -size 3088404 +oid sha256:370bf57262d3503bf1497b984a6029a8484aff8fbe9a21cd813651a9989bfcf3 +size 3055230 diff --git a/Screenshots/demo/review-demo-north-buildings.png b/Screenshots/demo/review-demo-north-buildings.png index 67922f0..e3887d5 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:7d4f49c117b7103cbbc3fae768a981fb72e166643e5e7229c06e9c29f7cc0f24 -size 2619363 +oid sha256:b1cf9b6267603d9fdc555ee6de7588bfa08c256bef7de649ba97872f09b90508 +size 2613575 diff --git a/Screenshots/demo/review-demo-retail-frontage.png b/Screenshots/demo/review-demo-retail-frontage.png index ff3e5df..66537a2 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:37b0229f0c91f3879776734c518279fdc4b5640dc05c9eece38a2ff013ca20ee -size 2522716 +oid sha256:7e3e2f56637d3c3806b413d53fadb56ca651c18539386043c577934348c9f5cf +size 2487967 diff --git a/Screenshots/demo/review-demo-spawn-view.png b/Screenshots/demo/review-demo-spawn-view.png index b888d49..b3aa03f 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:4b450cefc55dfdfa0b27fbc9bad98197168f1181bad56cb4b333bf9080251487 -size 2934054 +oid sha256:e149f48ca3d3b227dcc10bc7b2a1bec0c7c2e656f0d04448868739783812cdfd +size 2884922 diff --git a/Screenshots/demo/review-demo-street-level.png b/Screenshots/demo/review-demo-street-level.png index d7be7e2..d9131eb 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:1528751a2b7ec4411905d38394925b1fffbc667242030aefee7daf13daf92e19 -size 2847775 +oid sha256:e09677cce3997dbdd52f77d7be76262961673ecc2f795b0c4ee09866f37adc4d +size 2795082 diff --git a/Screenshots/demo/review-demo-third-person-front.png b/Screenshots/demo/review-demo-third-person-front.png index b412cf5..80782fe 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:363ab2272f2c059fba9d205440e90e05d86f5a86d228c9c03a97088823ac4b4f -size 2788716 +oid sha256:a4949405d583c4bbabcb8b6d00b297a0a5673d1e9c28034a455eced56e024410 +size 2791255 diff --git a/Screenshots/demo/review-demo-third-person-walk.png b/Screenshots/demo/review-demo-third-person-walk.png index 7cde1b2..0652d66 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:01d30367e0e051f2a9d5f5784341e0be99df58c27af9dbe742120211d593df97 -size 2173203 +oid sha256:55dd3e2f2507d19ccf12112ca1aad6f600b52aa34ac88c01df311c4651b7d8ed +size 2172564 diff --git a/Screenshots/demo/review-demo-third-person.png b/Screenshots/demo/review-demo-third-person.png index a37b0f4..56b756c 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:e5f0e86838d39b18d31971d2c64aad5a8b1195cc1aacd0bcddc812d1aab20510 -size 2995172 +oid sha256:26eb754c9df2ad2cc8a3703774b5d59e8f916705a064718a1dd972de2b9903ce +size 2974983 diff --git a/TODO.md b/TODO.md index ec8da99..c9b032f 100644 --- a/TODO.md +++ b/TODO.md @@ -25,7 +25,7 @@ Actionable task list for this project. This file is the single, central place fo - **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. - **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 fixed:** the strand sheet now supplies only the opacity mask and the colour is a dark constant (0.030/0.020/0.014). Sampled in the render: hair (31, 26, 21) - properly dark instead of the washed-out blond it read as when the sheet's RGB drove base colour. - - **Skin colour: assignment proved, tone unexplained.** A runtime log confirmed the slot holds `M_Character_Skin` (`slot0=M_Character_Skin slots=1`), and a deliberate red test colour reached the render - so binding works. But the intended warm tone (0.78/0.55/0.44) samples as **bluish grey** in the render: arms (67, 74, 81), face (98, 97, 100), while the tee and jeans show their colours correctly. Something between the constant and the final pixel is desaturating the skin - next suspects are the material's shading model/ambient occlusion from the body normals, or the render's key light being far dimmer on the body than on the ground. + - **Skin colour explained 2026-11-09: the character stands in building shadow.** The material, the assignment and the tone were all correct; the body was lit almost entirely by the blue sky light (intensity 2.6), so warm skin sampled as grey-blue. Raising the sun from pitch -62 to -74 lifted the face from (99, 98, 100) to (131, 121, 117) and the arms from (67, 74, 81) to (71, 78, 85) at the same camera. **That is a lighting change affecting every approved shot, so it is on this branch awaiting the owner's approval, not merged.** Original note: A runtime log confirmed the slot holds `M_Character_Skin` (`slot0=M_Character_Skin slots=1`), and a deliberate red test colour reached the render - so binding works. But the intended warm tone (0.78/0.55/0.44) samples as **bluish grey** in the render: arms (67, 74, 81), face (98, 97, 100), while the tee and jeans show their colours correctly. Something between the constant and the final pixel is desaturating the skin - next suspects are the material's shading model/ambient occlusion from the body normals, or the render's key light being far dimmer on the body than on the ground. - **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/ue_build_demo_map.py b/Tools/ue_build_demo_map.py index 3e017ba..aae4dc4 100644 --- a/Tools/ue_build_demo_map.py +++ b/Tools/ue_build_demo_map.py @@ -322,7 +322,7 @@ def build(): # 3. Ambience. A height fog gives the street depth and hides the terrain # edge that otherwise reads as a black band at the horizon. sun = spawn(unreal.DirectionalLight, unreal.Vector(0, 0, 2000), "Demo_Sun", - unreal.Rotator(pitch=-62.0, yaw=120.0, roll=0.0)) + unreal.Rotator(pitch=-74.0, yaw=120.0, roll=0.0)) if sun: comp = sun.get_component_by_class(unreal.DirectionalLightComponent) if comp: @@ -341,7 +341,7 @@ def build(): comp.set_mobility(unreal.ComponentMobility.MOVABLE) except Exception as exc: # noqa: BLE001 log(f"sun mobility not set: {exc!r}") - log("staged: Demo_Sun (pitch -62, yaw 120, intensity 4, warm; higher sun so both frontages read)") + log("staged: Demo_Sun (pitch -74, yaw 120, intensity 4, warm; higher sun lifts the north sidewalk out of building shadow)") sky = spawn(unreal.SkyLight, unreal.Vector(0, 0, 2000), "Demo_SkyLight") if sky: diff --git a/Tools/ue_character_materials.py b/Tools/ue_character_materials.py index c4419bc..218f36f 100644 --- a/Tools/ue_character_materials.py +++ b/Tools/ue_character_materials.py @@ -71,7 +71,7 @@ def new_material(name): return material -def skin_material(diffuse, detail): +def skin_material(diffuse, detail, unlit_test=False): material = new_material("M_Character_Skin") lib = unreal.MaterialEditingLibrary @@ -84,13 +84,20 @@ def skin_material(diffuse, detail): # was always working - the skin simply reads dark under the demo's key light. This # tone is lifted to sit in shadow the way the blueprint's skin does. base.set_editor_property("constant", unreal.LinearColor(0.78, 0.55, 0.44, 1.0)) - lib.connect_material_property(base, "", unreal.MaterialProperty.MP_BASE_COLOR) + if unlit_test: + # Diagnostic: unlit renders the constant exactly, so the render tells us whether + # a wrong skin tone comes from lighting/shading or from the material itself. + material.set_editor_property("shading_model", unreal.MaterialShadingModel.MSM_UNLIT) + lib.connect_material_property(base, "", unreal.MaterialProperty.MP_EMISSIVE_COLOR) + else: + lib.connect_material_property(base, "", unreal.MaterialProperty.MP_BASE_COLOR) rough = lib.create_material_expression(material, unreal.MaterialExpressionConstant, -200, -200) rough.set_editor_property("r", 0.58) lib.connect_material_property(rough, "", unreal.MaterialProperty.MP_ROUGHNESS) lib.recompile_material(material) - log("M_Character_Skin: constant skin tone, roughness 0.58 " + log(("M_Character_Skin: UNLIT TEST, emissive " if unlit_test else + "M_Character_Skin: constant skin tone, roughness 0.58 ") "(baked diffuse not used - it samples black on this mesh)") return material @@ -118,14 +125,14 @@ def hair_material(strands): return material -def main(): +def main(unlit_test=False): diffuse = unreal.EditorAssetLibrary.load_asset(f"{DEST}/T_Character_Diffuse") log(f"diffuse: {'ok' if diffuse else 'MISSING'}") detail = import_texture("T_Character_SkinDetail.png") strands = import_texture("T_Character_Hair.png") if diffuse and detail: - skin_material(diffuse, detail) + skin_material(diffuse, detail, unlit_test=unlit_test) if strands: hair = hair_material(strands) @@ -144,7 +151,9 @@ def main(): try: - main() + # Environment, not a command-line flag: the commandlet drops unknown switches, so + # the flag never reached Python. An env var is inherited. + main(unlit_test=os.environ.get("GIGLINE_UNLIT_TEST") == "1") except Exception as exc: # noqa: BLE001 import traceback log(f"FAILED: {type(exc).__name__}: {exc}")