diff --git a/Game/GigLine/Content/Hollywood/DemoMap.umap b/Game/GigLine/Content/Hollywood/DemoMap.umap index 4626b60..ad1ac90 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:8de62798452ec172a9a16454c52b6b4067c785c782856e9957f94d72e9b0bcce -size 782187 +oid sha256:e716eb77fe4946cdd8aa8abca8891c0a29e60c2f6fb2faae9dee5c21ab01b5c4 +size 782209 diff --git a/Game/GigLine/Content/Hollywood/Site/M_Asphalt.uasset b/Game/GigLine/Content/Hollywood/Site/M_Asphalt.uasset index 8c247dd..e4ce9b9 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:d7813524abdda9ff0c36675b03e0834d0e42ad1398bf5ab41fd43051006beb8f +oid sha256:6b0a66117b33dcffeb8616b94a36f5449838ff9a2497e92618a81607cc9e5f27 size 10019 diff --git a/Game/GigLine/Content/Hollywood/Site/M_Concrete.uasset b/Game/GigLine/Content/Hollywood/Site/M_Concrete.uasset index 2f0baa2..7a69e45 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:d11332ddd221887467723279522a1e001d34ecb31dc2a492ea6e95bcb24200a1 +oid sha256:b6d7e79dc1a132a11a153259467f68570639cf08238487744b72fc914092f077 size 10024 diff --git a/Game/GigLine/Content/Hollywood/Site/M_FacadeBanner.uasset b/Game/GigLine/Content/Hollywood/Site/M_FacadeBanner.uasset index 4ce4ad9..0537cf4 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:d6e295f4bb0fbdb0019fa60bdea16e76dbdc8f9190fc6f5c866322ff04048180 +oid sha256:97431815765503077f3f98de4f3403c54d5472b03fb36f9d72371d2c8397e60e size 11419 diff --git a/Game/GigLine/Content/Hollywood/Site/M_FacadeGlass.uasset b/Game/GigLine/Content/Hollywood/Site/M_FacadeGlass.uasset index 4e1e5cc..433d3f8 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:d3adfdf3801ada7f0dfba07ba047f832d7fb14dae40e5c68f4b3d081a284af64 +oid sha256:cef43c06daf2f8e8cb17a22398e26aad4faa89fbf0b19af5877836ca8d8a318a size 11414 diff --git a/Game/GigLine/Content/Hollywood/Site/M_FacadeStone.uasset b/Game/GigLine/Content/Hollywood/Site/M_FacadeStone.uasset index 45c8e07..8c7bcfb 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:7b81c127d48d6197a64c4e2659552cba9216040b6539e2e858532bd178aca767 +oid sha256:81d94e181fa048421387d68ca3d23946deaa5716e79359f1f912d52ae0252dd9 size 17083 diff --git a/Game/GigLine/Content/Hollywood/Site/M_FacadeStoneShadow.uasset b/Game/GigLine/Content/Hollywood/Site/M_FacadeStoneShadow.uasset index c6a4cbf..1d7a2dc 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:ad51f421a3586dd35254243895992e68b588f3112ebfda2de8b65f1a213e596a +oid sha256:00245e54cd7d163840cd32a385858e2e04a869cb7cf1d1a9964da5a44a6c234a size 17113 diff --git a/Game/GigLine/Content/Hollywood/Site/M_Ground.uasset b/Game/GigLine/Content/Hollywood/Site/M_Ground.uasset index 813b10d..0973393 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:e1421d11234823430518fd5a54d55bf3cbbc2a55ab1f3b074af937a4e8278f19 +oid sha256:efffd3d2c26184b024124aa9a82e7e6034b017d112edaf5b1d1663cba8ee73cb size 10014 diff --git a/Game/GigLine/Content/Hollywood/Site/M_KerbConcrete.uasset b/Game/GigLine/Content/Hollywood/Site/M_KerbConcrete.uasset index 829b14a..53d505f 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:15e398b8e172bda884355ab272df67c545898ebbdb2f354fe804dae562c350db +oid sha256:8d304a703dfc13801931ac99c1a18edd02e786bef2a70d56533f7e551f6b74f9 size 10044 diff --git a/Game/GigLine/Content/Hollywood/Site/M_RoadPaint.uasset b/Game/GigLine/Content/Hollywood/Site/M_RoadPaint.uasset index 96521d1..32fe208 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:ba4e8f0049f41185b3055937940cbf49fe5161e5b666ca657d2a89f059fb240a +oid sha256:5c78904e00685c177bd6ad6e09bdfa65a31a94675f49872bacc115212a6c9544 size 10029 diff --git a/Game/GigLine/Content/Hollywood/Site/M_Stucco.uasset b/Game/GigLine/Content/Hollywood/Site/M_Stucco.uasset index b6e1c19..5d8e187 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:c27c5f16cb64c6b6f982d2c5f02c3b8228661195aec2965a44e652f51d3d201f +oid sha256:16ae48369f7d2845f3bb173d7498900d0d9e54203c8a3ef76f8f115e68e64a6c size 11389 diff --git a/Game/GigLine/Content/Hollywood/Site/Terrain_DEM.uasset b/Game/GigLine/Content/Hollywood/Site/Terrain_DEM.uasset index a976d33..990afad 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:3843721059acc7150315582fbf1b9def613e25dd080075d538d0e3242506f5d7 +oid sha256:9a89822abedeb6daf155acb873301c3185edeb9dc83fda6cb08779b828616195 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 ae6b6c3..accddf7 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:7c6e450c1b0a3521ae49a289abdf4d42fde11f2d5bdbe0a7bedb578ef30e16d8 +oid sha256:08218e62cc3bf6906df435d2560b1647814443734cdc71db0bc11f56b80aaff2 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 2549b47..d12ff5a 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:68e68c98469dc02e6c5b8fcb2c3e900e8fab307bc2d949086b5235264033d564 +oid sha256:00599ec06721aec7c2d5ac357f58119647275301482e8b87b0df6d8b470e0b26 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 0cb65af..07b42cf 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:1c8c6abccdfebaffef6972723ae1f5c41f6b7d7df0f4d9d63db0803dd2a9b046 +oid sha256:06672fa907eebb228d03720f33025ac9f1611a4bdfe1941259f260ba39774a75 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 e45cd49..bdb788b 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:9f22caa766a717ac75a4f9429d17f7400613b32f0dbe8d28731c12c0aed4edad +oid sha256:aebf18239d60cafb7c616072ad384fbc828b97ff9f9d36ed6bf19df0e8bbd952 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 6240c8f..befb7f9 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:b6b94da8dfca26cd352b52728b8242e44e780409b0c3937226f093e2d8ebe212 +oid sha256:8c90f9d586305e9223aaf2aa400ed59e4753c8297860ac90f5de2662fd08db93 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 7cd1c3b..43c0e77 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:8ba641f281f25e0e701e1eb25077190440fc68b99ba7752e4875446a94a05659 +oid sha256:e3f5045bcea18a8475026b660b0e4f94fb47dac1ec18b1edf9793d7f5e1e6fa2 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 820ce12..93a4d91 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:aa0b132aeb6b4fbb2cb8761359f704a361ee14df75555f5b191a2229880d8f3d +oid sha256:3e6806193859e62a7129a58f076207312fcc4712942c17252e1e86fbf8818539 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 a5bf1b4..e2a026c 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:2921580cd5d52b92370e75934aa75a17e732210c335080afeeaf1daf978ef35f +oid sha256:0a0e2ced9b86df11f0872ad5fdb82ec4c9e02248a420e575c35118927e6aa106 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 9a834e6..318aa98 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:dbae927e11940232de71bab55753a112e22a19f06af982fedd1c034f3d6a7d11 +oid sha256:0b81aaa7eabf197612f01078f0aba08971140bd324c1e7baddce58029cd4dc47 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 a284c86..dde2de1 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:34b7e9401e78d7628f17c722337e9ea47f7b327e8eb953dfad155a01c12acb05 +oid sha256:7e3dac804132d4871af48be131474922fe9907fafc7366519c10a21b1cb333d3 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 7cd96d8..1cd1294 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:9b0372b50359c9807961b2f4db59d394d3e364c27a9b07b66bc48bbf2f59f719 +oid sha256:af31fbf3bcf2bdf83c6bcdc7cb24942e41e60aca33c085e1c94014b0b136a0fc 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 0f431c1..f7b7fbf 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:3cb25e6212bb41d463201a129be68c71b673c7ac54ad9083b47e2b015ebce747 +oid sha256:8853be6be3ca56682a939208579d841c4f32f776fce278e7ff250036cb23c4ee 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 c6de12a..dd4ff5d 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:6cf2d288294921a07933e9c80afaf0d5872cffa589e207cc93622cb5b8901d8f +oid sha256:e5fc3881423d08461729e0e3190c3fa452b79d9438eebc693a62f4d37283dce0 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 449f847..cfd69d1 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:4737a430db9b10bbf4a45c1ca8f8451cab2dfc81a0b4bda7e2961a5f4ade485a +oid sha256:27c444ad24e9eccd1847db563b805a4174ddd044ab279d31d23708e0d60611ba size 72413 diff --git a/Game/GigLine/Content/Test/Character/CharacterHair.uasset b/Game/GigLine/Content/Test/Character/CharacterHair.uasset index 1e70d74..6606492 100644 --- a/Game/GigLine/Content/Test/Character/CharacterHair.uasset +++ b/Game/GigLine/Content/Test/Character/CharacterHair.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9a8161350d42c9f78a42fa0da5117a32dfbe3bda5e82dea6ec381d11f6d6f968 -size 250937 +oid sha256:ed36e73f2eb1b803c0ae479b231578403dbce5bc431022e9bdf6abc0b2bf71c7 +size 274165 diff --git a/Game/GigLine/Content/Test/ReviewMap.umap b/Game/GigLine/Content/Test/ReviewMap.umap index 6c43951..2479442 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:2642ee68daa97bfee857231934a99dba98d83a318de1fe3cdf44da29b824473d +oid sha256:abd9ffa32561f7a7853782cbf593497c68ecb8252d1435ec39f4db4a4a0a2370 size 29694 diff --git a/Screenshots/README.md b/Screenshots/README.md index 6e1503a..f4b77fa 100644 --- a/Screenshots/README.md +++ b/Screenshots/README.md @@ -107,6 +107,7 @@ What this shot is evidence for: - The pawn carries a visible skeletal body with the warm skin material, and a spring-arm camera with collision testing. The **V** toggle swaps first and third person; the shipped default stays first person and the review passes `-thirdperson`. - **The idle clip drives the body and the arms hang at the sides**, with the hands at the hips and the feet flat. Earlier captures of this shot showed a bind A-pose. +- **Hair is present** as a short card system hugging the skull (three overlapping rows), not the spiked crown of the first attempt. Still open, tracked in `TODO.md`: @@ -175,6 +176,8 @@ Every issue is tracked in `TODO.md` under the version that will fix it; an issue | Retail parapet has no moulded profile, and wall lettering built as a plate does not read at 40 m | `0.9.0` → 6800 Lee Drug and 6806–6820, second pass | Open (moved out of `0.1.6`) | | 6822 Budget is a bare blockout volume — no photograph exists to model it from | `0.9.0` → photography gap | Deferred (moved out of `0.1.6`) | | Camera collision is implemented but never exercised against a wall | `0.2.0` → camera collision | Open | +| Skin renders darker than the baked diffuse suggests — the material graph may have been half-rebuilt by a crashed commandlet run | `0.2.2` → skin and hair tuning | Open | +| The generated pore and strand textures are not wired: the material-editing tool segfaults in the headless commandlet | `0.2.2` → skin and hair tuning | Open | | The walk clip has never been captured in motion — it imports and its curves carry the stride, but no shot shows it | `0.2.0` → verify animation plays correctly | Open | | Between kerb and building line the walkable surface is the terrain mesh, not a modelled pavement | `0.6.0` → model the pavement between kerb and building line | Open | diff --git a/Screenshots/demo/review-demo-crossing.png b/Screenshots/demo/review-demo-crossing.png index 93218dc..5762846 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:83ae29e23d32692d8b468d379331f97795edace8863804ee1c920e14f7f56822 -size 3088663 +oid sha256:d77822c1340f570683397227c0dfa0d8af520a910305ef4861b289dead5413f2 +size 3089714 diff --git a/Screenshots/demo/review-demo-north-buildings.png b/Screenshots/demo/review-demo-north-buildings.png index 1f08dd2..237a8e6 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:f8819f25cde7e94188d51b685991eaa3d7fd0a3cc840efcf7e053aff90005798 -size 2617803 +oid sha256:a7bc84a57690b007ef77cdef347b571d791b5299aeb4caa887c851cd86d1a47b +size 2619786 diff --git a/Screenshots/demo/review-demo-retail-frontage.png b/Screenshots/demo/review-demo-retail-frontage.png index 64d45e1..20afb2c 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:c90621d73dd2342dba7cb8357ad82f7fc1f5aa7dc5718035d58aa20002df7994 -size 2523413 +oid sha256:24acb217407ccc0ce7f7608d196a952143e26fe0a67f899c8df0c82ab60ced39 +size 2522012 diff --git a/Screenshots/demo/review-demo-spawn-view.png b/Screenshots/demo/review-demo-spawn-view.png index 1fd7f62..012813c 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:293cbb2b1d19f232b6af002c65d89c05ca917c6e0339cae2f5b1f3bc8ce93ddf -size 2933226 +oid sha256:7e297b893de94513baaccb09b1f1ce303c13b46ed4071714c75b6ee0be1cce7d +size 2935924 diff --git a/Screenshots/demo/review-demo-street-level.png b/Screenshots/demo/review-demo-street-level.png index 5c66c6b..54468d3 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:69ba600ae3596b62818eccfd4d49fb387241dfb8e798a5c097903038f72a592c -size 2848456 +oid sha256:6e16263ab957b24bd80957ee9282b1f0f76a33fb570828687f01bd7d338b2525 +size 2850067 diff --git a/Screenshots/demo/review-demo-third-person-front.png b/Screenshots/demo/review-demo-third-person-front.png index c86df1d..765fc7a 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:b0e653a3b904858789ef1121ab1305c2e33467d9c2fab6d7ea233aae7986efa9 -size 2793949 +oid sha256:98d43966ed285357e0a61c0a118517ad6b2c7e8dccfd08f52e092acb515cf7cb +size 2793193 diff --git a/Screenshots/demo/review-demo-third-person-walk.png b/Screenshots/demo/review-demo-third-person-walk.png index 9aa203c..9ac3765 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:85a7cf6d6090893ba5f1ac52095cf6a395e9caa74b0b187db245cc4b1357bf36 -size 2179777 +oid sha256:451b3724c57afc88b355c38cae9d3d524dbbc746f7d311d8d623510182ae0fc2 +size 2179242 diff --git a/Screenshots/demo/review-demo-third-person.png b/Screenshots/demo/review-demo-third-person.png index 1adf41e..551d2ab 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:a8ece3502186e088dbe9495edae9b0185d2f413738bb169ab184182b30950e59 -size 2996384 +oid sha256:32b9b38f620246d4e4f84a2659a785f031b5a80a2a0b853d5552bf940006cbf0 +size 2999328 diff --git a/TODO.md b/TODO.md index 8dd58c2..4f62b08 100644 --- a/TODO.md +++ b/TODO.md @@ -19,7 +19,8 @@ Actionable task list for this project. This file is the single, central place fo - `Tools/comfyui_generate.py` drives the local ComfyUI instance (`127.0.0.1:8188`) for textures, writing a JSON sidecar with the model, prompt, seed and full workflow so anything generated can be regenerated or rejected. Installed models include `juggernautXL_ragnarok.safetensors` and `sd-v1-5-inpainting.ckpt`. - **Stable Diffusion is not usable for flat skin swatches.** Three attempts on two models produced an anatomical close-up twice and a leather-scale surface once; SDXL has no reliable notion of "texture without anatomy". Skin detail is therefore generated procedurally instead (`Tools/generate_character_textures.py`: tileable octave noise for pores plus a strand-sheet texture for hair). - **Hair is now its own asset** (`Tools/character_hair_build.py` → `SM_Char_Hair` → `/Game/Test/Character/CharacterHair`), which is what the `character-artist` skill asks for: cards are a separate mesh, not geometry joined into the body. It imports with its own material slot and is attached in C++ as a second `USkeletalMeshComponent` on `SetLeaderPoseComponent`, so it follows the head bone without a second animation. 321 verts, 192 quads, 404 tris. - - **The card layout is still wrong.** The cards are anchored pointing outward, so the silhouette reads as a spiked crown instead of a short cut. Next iteration: orient each card tangentially along the skull, add a second overlapping row, and drive the shape from the scalp normal rather than a fixed outward vector. + - **The card layout now hugs the skull.** Each card is oriented by the scalp normal at its anchor — the length runs along the downward tangent, the width across it, and a small lift at the tip gives the cut volume. Three overlapping rows (7/9/10 cards, 26 total, 468 tris) replaced the single outward-pointing ring that read as a spiked crown. Overlap is what stops cards reading as separate spikes. + - **Skin still needs work:** it renders darker than the baked diffuse suggests — possibly because the crashed (or half-run) material tool rebuilt the graph — and the generated pore/strand textures are still unwired. - `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. - [ ] Tag `v0.2.2` and write `CHANGELOG.md` entry; then remove this section. diff --git a/Tools/character_hair_build.py b/Tools/character_hair_build.py index 51a3d6e..fec6c9b 100644 --- a/Tools/character_hair_build.py +++ b/Tools/character_hair_build.py @@ -69,8 +69,14 @@ def hair_material() -> bpy.types.Material: return mat -def card(name, anchor, outward, up, width, height, curl, segments=4): - """One curved card: a strip of quads that arcs away from the scalp.""" +def card(name, anchor, along, across, normal, width, height, lift, segments=4): + """A card that lies ALONG the scalp rather than sticking out of it. + + `along` is the direction the hair falls over the skull (the downward tangent at + the anchor), `across` the card's width direction and `normal` the scalp normal. + The first version passed a fixed global up and an outward vector, which made every + card stand away from the head - the spiked crown in the review shot. + """ mesh = bpy.data.meshes.new(name) obj = bpy.data.objects.new(name, mesh) bpy.context.scene.collection.objects.link(obj) @@ -79,13 +85,11 @@ def card(name, anchor, outward, up, width, height, curl, segments=4): faces = [] for i in range(segments + 1): t = i / segments - # Taper to a point at the tip and curl outward as the strand falls. - w = width * (1.0 - 0.75 * t) - h = height * t - bulge = curl * math.sin(t * math.pi * 0.85) - base = anchor + up * h + outward * bulge - left = base - outward.cross(up).normalized() * w - right = base + outward.cross(up).normalized() * w + w = width * (1.0 - 0.65 * t) + # Follow the skull, then lift a little at the tip so the cut has volume. + base = anchor + along * (height * t) + normal * (lift * math.sin(t * math.pi * 0.7)) + left = base - across * w + right = base + across * w verts.append(left) verts.append(right) for i in range(segments): @@ -133,21 +137,29 @@ def main(argv=None) -> int: material = hair_material() pieces = [scalp_cap(Vector((centre.x, centre.y, centre.z + 0.012)), radius, material)] - up = Vector((0.0, 0.0, 1.0)) - rings = ((CARDS_INNER, 1.00, 0.70), (CARDS_MIDDLE, 0.90, 0.85), (CARDS_OUTER, 0.78, 1.0)) + down = Vector((0.0, 0.0, -1.0)) + # Two rows: an inner row that covers the crown and an outer row that overlaps it + # down to the hairline. Overlap is what stops the cards reading as separate spikes. + rings = ( + # count, radius scale, anchor height, length, width, lift + (7, 0.55, 0.80, 0.085, 0.30, 0.25), + (9, 0.72, 0.62, 0.070, 0.26, 0.18), + (10, 0.86, 0.42, 0.055, 0.24, 0.12), + ) index = 0 - for ring, (count, radius_scale, length_scale) in enumerate(rings): + for ring, (count, radius_scale, height_scale, length, width_scale, lift_scale) in enumerate(rings): for i in range(count): angle = math.tau * (i + 0.5 * ring) / count - outward = Vector((math.cos(angle), math.sin(angle), 0.22)).normalized() - anchor = Vector(( - centre.x + outward.x * radius * radius_scale * 0.92, - centre.y + outward.y * radius * radius_scale * 0.92, - centre.z + radius * (0.52 - 0.16 * ring), - )) - pieces.append(card(f"HairCard_{index}", anchor, outward, up, - width=radius * 0.30, height=CARD_HEIGHT * length_scale, - curl=radius * 0.34)) + horizontal = Vector((math.cos(angle), math.sin(angle), 0.0)) + normal = (horizontal * radius_scale + Vector((0.0, 0.0, height_scale))).normalized() + anchor = Vector((centre.x, centre.y, centre.z)) + normal * radius + # Downward tangent: the part of -Z that lies in the scalp's tangent plane. + along = (down - normal * down.dot(normal)).normalized() + across = along.cross(normal).normalized() + pieces.append(card(f"HairCard_{index}", anchor, along, across, normal, + width=radius * width_scale, + height=radius * length * 10.0, + lift=radius * lift_scale)) index += 1 log(f"built {len(pieces)} pieces: 1 scalp cap + {index} cards")