Compare commits

...

5 Commits

Author SHA1 Message Date
kronic 8da1402e25 Docs: session log Part O — baked splat ground iteration
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 23:25:20 -07:00
kronic 4e1ea3ecb9 World: baked splat ground — unique multi-texture base per biome, path/arena wear baked in, HP detail layer
Second ground iteration ("better but could be further improved"): the remaining
plainness was single-texture ground — noise only modulated brightness, never
MATERIAL. Now each biome bakes a unique 1024 splat-blended base map (zero
repetition at macro scale) with the fine texture moved to the detail slot as a
high-pass layer at real tiling:

- Meadow: grass + dirt + clover patches masked by fbm; the worn paths
  (storage->warpgate, storage->base-gate) and a congregation-wear disc at the
  storage crystal are baked INTO the splat as organic dirt zones (exact
  plane-UV mapping probed: u=0.5-x/90 — both axes inverted).
- Arid: sand + sand2 + arid-dirt patches + a subtle arena-wear disc at the
  quad center (= the room origin on both quads) + warm/cool hue drift.
- Detail slot: generated 2048 high-pass (full - 128-blur, 1.4x) of the
  grass/sand textures, LINEAR import, tiled 22x/26x — crisp up close, the
  splat carries identity at distance.
- Superseded assets removed: the overlay WornPath quads + material + texture
  (double-darkened over the baked wear and caught fog as a ghostly rectangle)
  and the old macro-noise detail textures.

Biome tint MPB + normals unchanged and still active. Measured ground luminance
0.30/0.33 (edit ambient) — play fog/dark ambient pulls it down; tints remain
the one-line brightness knob.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 23:23:17 -07:00
kronic 8d9d8d0d66 Docs: session log Part N — flora double-animation diagnosis + thinning
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 23:14:26 -07:00
kronic 9670465e25 World: flora feel fix — kill double-animation (root sway off, shader wind is the idle motion) + thin flowers
Operator: base flora too dense + "the waving/shader doesn't look great".
Diagnosis: EVERY Synty flora prop (both biomes) uses the Synty/Foliage
VERTEX-wind shader — the transform root-tilt sway has been double-animating
all flora since 1.5, and ground-flush carpet props (Flowers_Flat,
Grass_*_Plane) visibly lift their edges when tilted.

- AmbientMotionConfig.SwayEnabled -> false (code default + the serialized
  scene value): idle motion = the authored per-vertex shader wind (tips bend,
  bases planted). Knob kept for A/B; walk-through RUSTLE stays as the
  reactive layer the shader can't provide.
- AmbientMotionSystem: flat carpet props excluded from the flora cache
  entirely — no tilt even from rustle.
- Flower density thinned deterministically: Flowers_Flat keep 40%,
  Wildflowers/Sunflowers keep 50%, center (r<13) thinned harder (x0.6) —
  17/38 drifts off; play/build area reads clear, flowers become ring accents.

Console clean; sway/rustle knobs remain live-tunable in the scene.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 23:12:34 -07:00
kronic 741828e09d Docs: session log Part M + roadmap tick — Phase 1.5b ground bundle shipped
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 22:49:24 -07:00
20 changed files with 282 additions and 423 deletions
+48 -232
View File
@@ -4857,7 +4857,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 5214937767286086917, guid: f4c1ab01cce3344498755643a1be1e5a, type: 3}
propertyPath: m_IsActive
value: 1
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7190243807045937801, guid: f4c1ab01cce3344498755643a1be1e5a, type: 3}
propertyPath: m_IsActive
@@ -6350,7 +6350,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 7308756808918190896, guid: b79cbc8e3d7fb5b4d9ee4f9988f6ef45, type: 3}
propertyPath: m_IsActive
value: 1
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7937096490965078410, guid: b79cbc8e3d7fb5b4d9ee4f9988f6ef45, type: 3}
propertyPath: m_LocalScale.x
@@ -14243,7 +14243,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 2186473713617367126, guid: d6538b1be0012ec49affc54b4b0b8f19, type: 3}
propertyPath: m_IsActive
value: 1
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
@@ -17162,7 +17162,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 3757109599224033816, guid: 60467653c9024a94cbe4863e1b401660, type: 3}
propertyPath: m_IsActive
value: 1
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3985497998431930066, guid: 60467653c9024a94cbe4863e1b401660, type: 3}
propertyPath: m_CastShadows
@@ -18514,7 +18514,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 3757109599224033816, guid: 60467653c9024a94cbe4863e1b401660, type: 3}
propertyPath: m_IsActive
value: 1
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3985497998431930066, guid: 60467653c9024a94cbe4863e1b401660, type: 3}
propertyPath: m_CastShadows
@@ -21002,7 +21002,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 1074864049481174882, guid: 8e2a923736393f34d9d8dc6a0d5baf44, type: 3}
propertyPath: m_IsActive
value: 1
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1579166258069663415, guid: 8e2a923736393f34d9d8dc6a0d5baf44, type: 3}
propertyPath: m_CastShadows
@@ -21647,7 +21647,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 7308756808918190896, guid: b79cbc8e3d7fb5b4d9ee4f9988f6ef45, type: 3}
propertyPath: m_IsActive
value: 1
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7937096490965078410, guid: b79cbc8e3d7fb5b4d9ee4f9988f6ef45, type: 3}
propertyPath: m_LocalScale.x
@@ -24657,7 +24657,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 3757109599224033816, guid: 60467653c9024a94cbe4863e1b401660, type: 3}
propertyPath: m_IsActive
value: 1
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3985497998431930066, guid: 60467653c9024a94cbe4863e1b401660, type: 3}
propertyPath: m_CastShadows
@@ -26965,6 +26965,7 @@ GameObject:
m_Component:
- component: {fileID: 663963126}
- component: {fileID: 663963127}
- component: {fileID: 663963128}
m_Layer: 0
m_Name: ArtefactLight
m_TagString: Untagged
@@ -27052,6 +27053,35 @@ Light:
m_LightUnit: 1
m_LuxAtDistance: 1
m_EnableSpotReflector: 1
--- !u!114 &663963128
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 663963125}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3}
m_Name:
m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalLightData
m_UsePipelineSettings: 1
m_AdditionalLightsShadowResolutionTier: 2
m_CustomShadowLayers: 0
m_LightCookieSize: {x: 1, y: 1}
m_LightCookieOffset: {x: 0, y: 0}
m_SoftShadowQuality: 0
m_RenderingLayersMask:
serializedVersion: 0
m_Bits: 1
m_ShadowRenderingLayersMask:
serializedVersion: 0
m_Bits: 1
m_Version: 4
m_LightLayerMask: 1
m_ShadowLayerMask: 1
m_RenderingLayers: 1
m_ShadowRenderingLayers: 1
--- !u!1001 &667197736
PrefabInstance:
m_ObjectHideFlags: 0
@@ -28078,7 +28108,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 1074864049481174882, guid: 8e2a923736393f34d9d8dc6a0d5baf44, type: 3}
propertyPath: m_IsActive
value: 1
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1579166258069663415, guid: 8e2a923736393f34d9d8dc6a0d5baf44, type: 3}
propertyPath: m_CastShadows
@@ -33864,7 +33894,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 2186473713617367126, guid: d6538b1be0012ec49affc54b4b0b8f19, type: 3}
propertyPath: m_IsActive
value: 1
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
@@ -35618,7 +35648,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 8430139830498947291, guid: 41db7f3d229920b4c8bfca0cefbd6bad, type: 3}
propertyPath: m_IsActive
value: 1
value: 0
objectReference: {fileID: 0}
- target: {fileID: 9202559580053351009, guid: 41db7f3d229920b4c8bfca0cefbd6bad, type: 3}
propertyPath: m_LocalScale.x
@@ -39690,7 +39720,7 @@ MonoBehaviour:
CavernMoteColor: {r: 0.55, g: 0.65, b: 0.95, a: 0.33}
BlightSporeColor: {r: 0.72, g: 0.5, b: 0.85, a: 0.33}
AridWind: {x: 2.2, y: -0.15, z: 0.5}
SwayEnabled: 1
SwayEnabled: 0
SwayRadius: 30
SwayAmpDeg: 1.4
SwayHz: 0.8
@@ -42327,7 +42357,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 1074864049481174882, guid: 8e2a923736393f34d9d8dc6a0d5baf44, type: 3}
propertyPath: m_IsActive
value: 1
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1579166258069663415, guid: 8e2a923736393f34d9d8dc6a0d5baf44, type: 3}
propertyPath: m_CastShadows
@@ -43157,96 +43187,6 @@ Transform:
m_CorrespondingSourceObject: {fileID: 8190103183565365705, guid: 06b5cd01a210a6846933937c65a86b1d, type: 3}
m_PrefabInstance: {fileID: 1088015022}
m_PrefabAsset: {fileID: 0}
--- !u!1 &1094217350
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1094217351}
- component: {fileID: 1094217353}
- component: {fileID: 1094217352}
m_Layer: 0
m_Name: WornPath_Warpgate
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1094217351
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1094217350}
serializedVersion: 2
m_LocalRotation: {x: -0, y: 0.7071068, z: -0.7071068, w: 0}
m_LocalPosition: {x: 0, y: 0.02, z: -10.2}
m_LocalScale: {x: 2.6, y: 16.800001, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1602364762}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!23 &1094217352
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1094217350}
m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_ForceMeshLod: -1
m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 732961b7d12fa3548a41f7d0bf1d636e, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_MaskInteraction: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &1094217353
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1094217350}
m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
--- !u!1001 &1096752681
PrefabInstance:
m_ObjectHideFlags: 0
@@ -46927,7 +46867,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 30244553050222735, guid: 73663df767caaeb4e8d8a22389f6b41f, type: 3}
propertyPath: m_IsActive
value: 1
value: 0
objectReference: {fileID: 0}
- target: {fileID: 368552065002284600, guid: 73663df767caaeb4e8d8a22389f6b41f, type: 3}
propertyPath: m_CastShadows
@@ -47156,7 +47096,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 1074864049481174882, guid: 8e2a923736393f34d9d8dc6a0d5baf44, type: 3}
propertyPath: m_IsActive
value: 1
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1579166258069663415, guid: 8e2a923736393f34d9d8dc6a0d5baf44, type: 3}
propertyPath: m_CastShadows
@@ -47877,7 +47817,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 2186473713617367126, guid: d6538b1be0012ec49affc54b4b0b8f19, type: 3}
propertyPath: m_IsActive
value: 1
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
@@ -59691,39 +59631,6 @@ Transform:
m_CorrespondingSourceObject: {fileID: 3614229961255218349, guid: 145248c1f7a30134aaf7b4e97e61e587, type: 3}
m_PrefabInstance: {fileID: 1599933488}
m_PrefabAsset: {fileID: 0}
--- !u!1 &1602364761
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1602364762}
m_Layer: 0
m_Name: BasePaths
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1602364762
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1602364761}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1094217351}
- {fileID: 1718841502}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1001 &1602824811
PrefabInstance:
m_ObjectHideFlags: 0
@@ -60106,7 +60013,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 7549560119917370044, guid: 9d046103ca4c9b846a6b0017630ca7da, type: 3}
propertyPath: m_IsActive
value: 1
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
@@ -64209,96 +64116,6 @@ Transform:
m_CorrespondingSourceObject: {fileID: 796814200344226721, guid: 2679367feddb0c44398eb47b30de6244, type: 3}
m_PrefabInstance: {fileID: 1718589803}
m_PrefabAsset: {fileID: 0}
--- !u!1 &1718841501
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1718841502}
- component: {fileID: 1718841504}
- component: {fileID: 1718841503}
m_Layer: 0
m_Name: WornPath_BaseGate
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1718841502
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1718841501}
serializedVersion: 2
m_LocalRotation: {x: 0.7026672, y: 0.07911296, z: -0.07911296, w: 0.7026672}
m_LocalPosition: {x: 2.75, y: 0.02, z: 10.349999}
m_LocalScale: {x: 2.2, y: 17.539099, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1602364762}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!23 &1718841503
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1718841501}
m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_ForceMeshLod: -1
m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 732961b7d12fa3548a41f7d0bf1d636e, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_MaskInteraction: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &1718841504
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1718841501}
m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
--- !u!1001 &1719371331
PrefabInstance:
m_ObjectHideFlags: 0
@@ -67184,7 +67001,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 5214937767286086917, guid: f4c1ab01cce3344498755643a1be1e5a, type: 3}
propertyPath: m_IsActive
value: 1
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7190243807045937801, guid: f4c1ab01cce3344498755643a1be1e5a, type: 3}
propertyPath: m_IsActive
@@ -81000,4 +80817,3 @@ SceneRoots:
- {fileID: 1276835916}
- {fileID: 1007206783}
- {fileID: 1333170163}
- {fileID: 1602364762}
@@ -41,16 +41,16 @@ Material:
serializedVersion: 3
m_TexEnvs:
- _BaseMap:
m_Texture: {fileID: 2800000, guid: c27220858ae0f6446aad43a6e7176710, type: 3}
m_Scale: {x: 26, y: 26}
m_Texture: {fileID: 2800000, guid: dd6cb7f94d22cca4485f43c54224764d, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BumpMap:
m_Texture: {fileID: 2800000, guid: c39c27cb220c80f40b13ba94a921d2fa, type: 3}
m_Scale: {x: 26, y: 26}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 2800000, guid: 15a6054fd7a19af41823672d9f02cf76, type: 3}
m_Scale: {x: 1, y: 1}
m_Texture: {fileID: 2800000, guid: 49ab3af8e830e8e48b579aa223cad867, type: 3}
m_Scale: {x: 26, y: 26}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
@@ -65,8 +65,8 @@ Material:
m_Scale: {x: 2, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 2800000, guid: c27220858ae0f6446aad43a6e7176710, type: 3}
m_Scale: {x: 26, y: 26}
m_Texture: {fileID: 2800000, guid: dd6cb7f94d22cca4485f43c54224764d, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
@@ -28,16 +28,16 @@ Material:
serializedVersion: 3
m_TexEnvs:
- _BaseMap:
m_Texture: {fileID: 2800000, guid: 6064e4e3e79a3a1408ee2059beaa066b, type: 3}
m_Scale: {x: 22, y: 22}
m_Texture: {fileID: 2800000, guid: 6390290b1548fd14fbe37e43ff279f26, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BumpMap:
m_Texture: {fileID: 2800000, guid: cab96a62a647e024a9868ca6bb815a34, type: 3}
m_Scale: {x: 22, y: 22}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 2800000, guid: 2e0b30d8eb26f084fb73e0ec24c93869, type: 3}
m_Scale: {x: 1, y: 1}
m_Texture: {fileID: 2800000, guid: 70933a0f74af63c49a14909b455754eb, type: 3}
m_Scale: {x: 22, y: 22}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
@@ -52,8 +52,8 @@ Material:
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 2800000, guid: 6064e4e3e79a3a1408ee2059beaa066b, type: 3}
m_Scale: {x: 22, y: 22}
m_Texture: {fileID: 2800000, guid: 6390290b1548fd14fbe37e43ff279f26, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
-138
View File
@@ -1,138 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &-8049590104176229237
MonoBehaviour:
m_ObjectHideFlags: 11
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
m_Name:
m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion
version: 10
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Mat_WornPath
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords:
- _SURFACE_TYPE_TRANSPARENT
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: 3000
stringTagMap:
RenderType: Transparent
disabledShaderPasses:
- MOTIONVECTORS
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BaseMap:
m_Texture: {fileID: 2800000, guid: ccf08596575193a4ea09cfcf46aa319d, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpecGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_Lightmaps:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_LightmapsInd:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_ShadowMasks:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _AddPrecomputedVelocity: 0
- _AlphaClip: 0
- _AlphaToMask: 0
- _Blend: 0
- _BlendModePreserveSpecular: 1
- _BumpScale: 1
- _ClearCoatMask: 0
- _ClearCoatSmoothness: 0
- _Cull: 2
- _Cutoff: 0.5
- _DetailAlbedoMapScale: 1
- _DetailNormalMapScale: 1
- _DstBlend: 10
- _DstBlendAlpha: 0
- _EnvironmentReflections: 1
- _GlossMapScale: 0
- _Glossiness: 0
- _GlossyReflections: 0
- _Metallic: 0
- _OcclusionStrength: 1
- _Parallax: 0.005
- _QueueOffset: 0
- _ReceiveShadows: 1
- _Smoothness: 0.02
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 5
- _SrcBlendAlpha: 1
- _Surface: 1
- _WorkflowMode: 1
- _XRMotionVectorsPass: 1
- _ZWrite: 0
m_Colors:
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
m_BuildTextureStacks: []
m_AllowLocking: 1
@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 732961b7d12fa3548a41f7d0bf1d636e
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
@@ -26,8 +26,9 @@ namespace ProjectM.Client
public Color BlightSporeColor = new Color(0.72f, 0.50f, 0.85f, 0.33f);
public Vector3 AridWind = new Vector3(2.2f, -0.15f, 0.5f);
[Header("Idle foliage sway (flora prop roots within view of the camera)")]
public bool SwayEnabled = true;
[Header("Idle foliage sway (root tilt) — OFF by default since 1.5b: ALL Synty flora uses the Synty/Foliage")]
[Header("VERTEX-wind shader, so root tilt double-animates. Keep for A/B; rustle below stays the reactive layer.")]
public bool SwayEnabled = false;
[Min(1f)] public float SwayRadius = 30f;
[Min(0f)] public float SwayAmpDeg = 1.4f;
[Min(0.05f)] public float SwayHz = 0.8f;
@@ -87,6 +87,10 @@ namespace ProjectM.Client
if (!FloraName.IsMatch(t.gameObject.name)) continue;
if (t.gameObject.name.Contains("LOD")) continue; // prop roots only; LOD children follow
if (t.GetComponent<LODGroup>() == null && t.GetComponent<MeshRenderer>() == null) continue;
// 1.5b: ground-flush carpet props (Flowers_Flat, Grass_*_Plane) must NEVER root-tilt —
// any rotation lifts their edges off the ground; they stay fully static (shader wind only).
if (t.gameObject.name.IndexOf("Flat", System.StringComparison.OrdinalIgnoreCase) >= 0
|| t.gameObject.name.IndexOf("Plane", System.StringComparison.OrdinalIgnoreCase) >= 0) continue;
var p = t.position;
_flora.Add(new Flora
{
Binary file not shown.
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: ccf08596575193a4ea09cfcf46aa319d
guid: 49ab3af8e830e8e48b579aa223cad867
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
@@ -7,7 +7,7 @@ TextureImporter:
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0
@@ -37,9 +37,9 @@ TextureImporter:
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
@@ -52,7 +52,7 @@ TextureImporter:
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
@@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: 70933a0f74af63c49a14909b455754eb
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 2e0b30d8eb26f084fb73e0ec24c93869
guid: dd6cb7f94d22cca4485f43c54224764d
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
@@ -7,7 +7,7 @@ TextureImporter:
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
Binary file not shown.
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 15a6054fd7a19af41823672d9f02cf76
guid: 6390290b1548fd14fbe37e43ff279f26
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
@@ -7,7 +7,7 @@ TextureImporter:
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
Binary file not shown.
@@ -161,12 +161,13 @@ attacks/animations/effects**. Art direction deliberately UNDECIDED — lighting
Post-1.5 operator verdict: barrels fixed (radius disc + 1.5 s fuse, `eb7f57216`) but **"the ground is very
plain"** — expand 1.5 before 1.7. Locked bundles, sequenced ground-first:
1. **Ground bundle** (the stated pain): (a) ground MATERIAL pass — macro-noise blended albedo (generated
textures + Synty terrain textures), per-BIOME ground tint driven client-side (the WorldAtmosphere
sibling), rim-darkening vignette overlay; (b) **per-room dressing scatter** — client-only, seeded off the
replicated run seed, cosmetic `SM_Env_Ground_*` detail meshes (ripples/cracks/pebbles/bones), torn down
with the room; (c) base worn paths (spawn→warpgate→storage); (d) re-enable curated base flora (~300
inactive props; they inherit sway/rustle).
1. **Ground bundle** (SHIPPED `2fc5ae9a1`): (a) material pass — real tiling (22×/26×) + Synty normals +
generated LINEAR macro-noise detail textures w/ baked rim vignette (★ an sRGB-imported detail map mul2x
DARKENS 2.3× — import detail albedo LINEAR); per-room-biome ground tint via MPB inside
`WorldAtmosphereSystem`; (b) `RoomDressingSystem`+`RoomDressingConfig` — 26 seeded biome-flavoured props
per room inside the room's ACTUAL shape (hash stream 0xD2E55; 47 build-safe prefab refs), room-torn-down;
live-verified incl. teardown + exact Meadow tint convergence; (c) worn paths storage→warpgate/base-gate;
(d) 357 base flora re-enabled (buildings/pond/FX stay parked).
2. **Decals**: dynamic explosion scorch marks (fading quad pool at boom sites), static POI scorch/cracks,
cover damage-crack states (URPMaterialPropertyBaseColor darkening keyed on replicated Remaining).
3. **Hazard variant**: Blight geyser (periodic both-sides AoE on the HazardExplosion + telegraph-disc
@@ -256,14 +256,77 @@ held to the boom at 1.54 s, scale exactly 3.25; 470/470. Ground/expansion menu p
per-room dressing scatter · paths · decals · flora re-enable · hazard variants · critters · cover cracks);
awaiting operator picks.
## Part M — Phase 1.5b GROUND BUNDLE shipped (`2fc5ae9a1`)
Operator locked ALL FOUR 1.5b bundles (ground / decals / geyser / critters+weather), ground first. Shipped
the ground bundle end-to-end:
- **Material pass.** Ground-truth probe: the playable ground was two flat quads with ONE texture repeat per
45 u (meadow 2×2 over 90 u) — the whole "plain" complaint in one number. Rebuilt: base maps at real tiling
(grass 22×, sand 26×) + Synty normal maps + a generated 1024² macro-noise DETAIL texture per biome tiled 1×
(0.5-centered fbm + warm/cool hue patches + baked rim vignette). ★ Gotcha worth keeping: an sRGB-imported
detail albedo goes through the shader's sRGB→linear conversion, so mid-gray reads 0.214 and MULX2 darkens
everything 2.3× — import detail maps LINEAR (0.5 stored = neutral). Also moved the meadow ground OFF the
shared Synty asset (`Mat_Grass_Textures_01` was being edited in place — bleed hazard) onto project-owned
`Mat_Ground_Meadow`, and measured tints to an on-screen luminance target (0.15/0.20) instead of guessing —
the old effective albedo was ~46× darker than every prop standing on it.
- **Per-room-biome ground tint** folded into `WorldAtmosphereSystem` (same palette switch that owns fog/
ambient): expedition quads tinted via MaterialPropertyBlock — Meadow green / Cavern blue / Blight purple /
Arid sand — damped lerp, asset never touched.
- **`RoomDressingSystem` + `RoomDressingConfig`** (new, client-only observe-only): 26 biome-flavoured cosmetic
props per room scattered inside the room's ACTUAL shape — the client re-derives the plan via
`RunMap.NodeId(CurrentRoom, CurrentCol)``RoomLayoutMath.Plan``ScatterInShape` on a DISTINCT hash
stream (0xD2E55; nodes 0x0DE, clutter 0xC17) so dressing never co-locates with gameplay scatter.
Deterministic from the replicated seed (co-op + late-join consistent); landing/portal keep-outs; colliders
stripped on spawn; torn down on room change/run end. 47 curated URP-native prefab refs (PNB + PolygonNature
+ FK) wired as serialized scene refs (build-safe — no Resources.Load).
- **Base dressing:** 357 curated flora props re-enabled under BaseBiome (bushes/wildflowers/grass — buildings,
pond + FX props deliberately stay parked; `GlobalPostFX` left untouched) + two generated worn-dirt path
strips (feathered-alpha transparent quads) storage→warpgate and storage→base-gate.
Live-verified in Play: dressing 26/26 inside x[981,1023] z[11,12] all y=0, 11 varieties, 0 colliders;
teardown proven (run abort → 0 children); Meadow ground tint converged to the EXACT target (0.47,0.55,0.43);
470/470 EditMode; console clean. Edit-mode renders: base reads as a living meadow with a worn path to the
warpgate.
## Part N — flora feel fix (`9670465e2`): the double-animation diagnosis
Operator lap on the ground bundle: flowers too dense + "the waving/shader doesn't look great, not sure what
to change." Diagnosis: **every Synty flora prop in BOTH biomes runs the `Synty/Foliage` VERTEX-wind shader**
(light+strong wind, twist, gale-bend all enabled at authored defaults) — the AmbientMotionSystem root-tilt
sway has been double-animating all flora since it shipped, and the newly enabled ground-flush carpets
(`Flowers_Flat`, `Grass_*_Plane`) lift their edges off the ground on ANY root rotation. ★ Lesson: before
transform-animating "static" art, check the shader — Synty foliage is never static.
Fix: `SwayEnabled=false` (code default + the serialized scene value — the ★ serialized-beats-initializer
gotcha again); the shader wind IS the idle motion, walk-through rustle stays as the reactive layer; flat
carpets excluded from the flora cache entirely; flower drifts thinned deterministically (Flat 40% /
Wildflower+Sunflower 50%, center r<13 ×0.6 → 17/38 off) so the play/build area reads clear and flowers
become ring accents.
## Part O — ground iteration 2 (`4e1ea3ecb`): baked splat base + HP detail split
Operator: "better but could be further improved." The remaining plainness was single-TEXTURE ground — noise
only ever modulated brightness. Rebuilt as a **baked splat**: each biome gets a unique 1024 base map (CPU
composite, ~7 s bake) blending real materials by fbm masks — meadow grass+dirt+clover, arid sand+sand2+dirt —
with the worn paths, a congregation-wear disc at the storage crystal, an arena-wear disc at the room-quad
centers, hue drift and the rim vignette all baked in. Fine texture moved to the DETAIL slot as a generated
2048 high-pass (full 128-blur, ×1.4, LINEAR) tiled 22×/26× — crisp up close, unique-splat identity at
distance, zero macro repetition. Plane UV mapping probed exactly (u=0.5x/90, BOTH axes inverted) so baked
wear lands on the real landmarks. Superseded: the WornPath overlay quads + mat + tex DELETED (double-darkened
over baked wear, caught fog as a ghost rectangle) and the old macro-noise textures DELETED. Biome-tint MPB +
normals untouched. Ground luminance now 0.30/0.33 in edit ambient (tints stay the one-line brightness knob
for the play lap). Recipe note: bake pattern = readback-blit sources to linear Color[] → composite →
LinearToGammaSpace → PNG sRGB; HP detail imports LINEAR.
## Next-session intent
**Phase 1.5 is COMPLETE** (collision · lighting · art-look LOCKED clean dark-Synty · ambient motion ·
breakables · attack distinctness · exploding barrels · destructible cover). Next per the locked order:
**the operator's 1.5 gate lap** ("no longer static"?) → **Phase 1.7 boon overhaul** (~12 mechanic-changers
on existing hooks; design-review-FIRST — replicated ability swaps) → Phase 2 hub-ification. Taste queue:
re-enable curated base flora (barren hub) · arid brightness · craters call · B5 split-panels smoke · barrel
explosion VFX polish · cover damage-crack visuals.
**Phase 1.5b bundle 1 (ground) is SHIPPED**; remaining locked bundles in order: **2) decals** (explosion
scorch pool · POI grime · cover damage-cracks) → **3) Blight geyser** (mini design review first — new
replicated erupt-phase surface) → **4) critters + weather beats**. Then the operator's 1.5 gate lap ("no
longer static", ground judged explicitly) → Phase 1.7 boon overhaul (design-review-FIRST) → Phase 2
hub-ification. Taste queue: arid brightness · craters call · B5 split-panels smoke · barrel explosion VFX
polish · flower density judgment (base may read dense — operator call on the lap).
Related: [[Iteration_2026-07_CoopHades]] · [[2026-07-07_Workflow_Consolidation]] ·
[[2026-07-07_Expedition_Enemy_Stuck_Harvest_Feedback]]