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}")