Compare commits

..

2 Commits

Author SHA1 Message Date
kronic 13d591e789 Fix: revive the walk-through flora rustle — a fourth orphaned presentation layer
Track 1. Before building any new "world responds to you" work, I checked what
already existed, because today's score was three presentation systems that were
present, enabled, and produced nothing. This is the fourth.

AmbientMotionSystem's rustle layer (flora parting as the local player brushes
past) was dead in the shipping arena via THREE independent gates, each a
leftover of the deleted biomes:

  1. Root gate required a scene root literally named "BaseBiome" or
     "ExpeditionBiome*". Both went with the expedition, so the loop matched
     nothing at all. The seabed flora live under
     Env_SeabedKit/Seabed_Flora/FloraClump_N.
  2. Name regex was pure LAND flora: bush|grass|flower|fern|cactif|clover...
     Nothing in a seabed matches that. Added seabed terms first; the land terms
     stay only so an older scene still works.
  3. Renderer gate tested for a renderer ON the matched object. The natural sway
     unit is the CLUMP ROOT, which carries no renderer of its own - only
     children - so the test rejected exactly the object we want to rotate. Now
     accepts a renderer anywhere beneath, and skips a child whose parent already
     matched so the clump tilts once instead of every stalk tilting out of its
     socket.

Verified live: AmbientMotionSystem._flora.Count 0 -> 4 (the four clump roots).

304/304 EditMode green.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-08 17:50:13 -07:00
kronic b00926dc6e Art: seabed relief kit — 5 modular pieces, built in Blender and baked into Game.unity
Track 2 of the A0 readability work. The operator wanted non-flat ground; the
walkable surface must stay flat, because the character controller is configured
for a plane (SnapToGround=false, gravity float3.zero) and enemies have no
pathfinding. Real elevation is a locomotion + navigation task, not an art one.

The kit therefore avoids the height band that breaks entirely:

  SM_Seabed_Hollow_A   442 tris  below plane   no collider
  SM_Seabed_Dunes_A    442 tris  +/-0.4 crests no collider
  SM_Seabed_Ridge_A     55 tris  ~1.2 m        rim placement
  SM_Seabed_Outcrop_A  120 tris  ~1.4 m        rim placement
  SM_Seabed_Shelf_A     96 tris  ~1.4 m        rim placement

1155 tris total, all far under the <=800/prop budget, faceted, one material.
Nothing sits at 0.3-0.6 m, which is the range that either clips the diver's legs
(no collider) or becomes a wall you cannot see over (collider). The three tall
pieces sit at the arena RIM outside the 16u wave ring, where the boundary
already blocks the player - so they read as silhouette with no subscene collider
work and zero nav risk.

Two art lessons, both corrected mid-build:
  - First pass encoded relief as ALBEDO BANDING from the palette atlas. At
    top-down, flat colour bands read as a printed pattern, not form: the hollow
    looked like a bullseye and the ripple sheet like woven basketwork. The style
    bible is explicit that the read is shape + light. Uniform albedo + real
    geometry + faceted normals doing the shading.
  - Cutting an organic outline by dropping whole quads gives stair-stepped
    edges. Rebuilt in POLAR coordinates so the boundary follows R(theta) exactly.

In-engine: the palette grey read ~2x brighter than the seabed floor, so the
pieces looked like slabs laid on top. Ground pieces now share the floor's own
M_Staging_Seabed; rock pieces use a darker sibling M_Seabed_Rock (0.13,0.19,0.23)
so they read as the same ground family, a shade separated.

Exported per-piece so the Phase-2 pocket generator can place them individually
rather than inheriting a bespoke landscape.

304/304 EditMode green.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-08 17:46:57 -07:00
20 changed files with 762 additions and 3 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+429
View File
@@ -183,6 +183,84 @@ Transform:
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1001 &127396314
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 1853339074}
m_Modifications:
- target: {fileID: -8561630869405900231, guid: 331585837f6110f44a39cab480c52113, type: 3}
propertyPath: m_Name
value: SM_Seabed_Outcrop_A
objectReference: {fileID: 0}
- target: {fileID: -8544304288624978944, guid: 331585837f6110f44a39cab480c52113, type: 3}
propertyPath: 'm_Materials.Array.data[0]'
value:
objectReference: {fileID: 2100000, guid: 5bcf0d07f35ebcc46809bf9e476a911e, type: 2}
- target: {fileID: -627206506790987122, guid: 331585837f6110f44a39cab480c52113, type: 3}
propertyPath: m_LocalScale.x
value: 1.6
objectReference: {fileID: 0}
- target: {fileID: -627206506790987122, guid: 331585837f6110f44a39cab480c52113, type: 3}
propertyPath: m_LocalScale.y
value: 1.6
objectReference: {fileID: 0}
- target: {fileID: -627206506790987122, guid: 331585837f6110f44a39cab480c52113, type: 3}
propertyPath: m_LocalScale.z
value: 1.6
objectReference: {fileID: 0}
- target: {fileID: -627206506790987122, guid: 331585837f6110f44a39cab480c52113, type: 3}
propertyPath: m_LocalPosition.x
value: -20
objectReference: {fileID: 0}
- target: {fileID: -627206506790987122, guid: 331585837f6110f44a39cab480c52113, type: 3}
propertyPath: m_LocalPosition.y
value: 1.0574121
objectReference: {fileID: 0}
- target: {fileID: -627206506790987122, guid: 331585837f6110f44a39cab480c52113, type: 3}
propertyPath: m_LocalPosition.z
value: -15
objectReference: {fileID: 0}
- target: {fileID: -627206506790987122, guid: 331585837f6110f44a39cab480c52113, type: 3}
propertyPath: m_LocalRotation.w
value: 0.8870109
objectReference: {fileID: 0}
- target: {fileID: -627206506790987122, guid: 331585837f6110f44a39cab480c52113, type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: -627206506790987122, guid: 331585837f6110f44a39cab480c52113, type: 3}
propertyPath: m_LocalRotation.y
value: 0.46174863
objectReference: {fileID: 0}
- target: {fileID: -627206506790987122, guid: 331585837f6110f44a39cab480c52113, type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: -627206506790987122, guid: 331585837f6110f44a39cab480c52113, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: -627206506790987122, guid: 331585837f6110f44a39cab480c52113, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: -627206506790987122, guid: 331585837f6110f44a39cab480c52113, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: -4161369568681901532, guid: 331585837f6110f44a39cab480c52113, type: 3}
--- !u!4 &127396315 stripped
Transform:
m_CorrespondingSourceObject: {fileID: -627206506790987122, guid: 331585837f6110f44a39cab480c52113, type: 3}
m_PrefabInstance: {fileID: 127396314}
m_PrefabAsset: {fileID: 0}
--- !u!1 &190248698
GameObject:
m_ObjectHideFlags: 0
@@ -626,6 +704,84 @@ Transform:
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1001 &1102732001
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 1853339074}
m_Modifications:
- target: {fileID: 2769365240228357283, guid: c8cd92b5c9f845842aa555df3e059ec7, type: 3}
propertyPath: m_Name
value: SM_Seabed_Dunes_A
objectReference: {fileID: 0}
- target: {fileID: 3253055408675648142, guid: c8cd92b5c9f845842aa555df3e059ec7, type: 3}
propertyPath: 'm_Materials.Array.data[0]'
value:
objectReference: {fileID: 2100000, guid: 16d64fc7c2bf877448d870325460089a, type: 2}
- target: {fileID: 4264139783803505614, guid: c8cd92b5c9f845842aa555df3e059ec7, type: 3}
propertyPath: m_LocalScale.x
value: 1.1
objectReference: {fileID: 0}
- target: {fileID: 4264139783803505614, guid: c8cd92b5c9f845842aa555df3e059ec7, type: 3}
propertyPath: m_LocalScale.y
value: 1.1
objectReference: {fileID: 0}
- target: {fileID: 4264139783803505614, guid: c8cd92b5c9f845842aa555df3e059ec7, type: 3}
propertyPath: m_LocalScale.z
value: 1.1
objectReference: {fileID: 0}
- target: {fileID: 4264139783803505614, guid: c8cd92b5c9f845842aa555df3e059ec7, type: 3}
propertyPath: m_LocalPosition.x
value: 8
objectReference: {fileID: 0}
- target: {fileID: 4264139783803505614, guid: c8cd92b5c9f845842aa555df3e059ec7, type: 3}
propertyPath: m_LocalPosition.y
value: 0.99455404
objectReference: {fileID: 0}
- target: {fileID: 4264139783803505614, guid: c8cd92b5c9f845842aa555df3e059ec7, type: 3}
propertyPath: m_LocalPosition.z
value: -10
objectReference: {fileID: 0}
- target: {fileID: 4264139783803505614, guid: c8cd92b5c9f845842aa555df3e059ec7, type: 3}
propertyPath: m_LocalRotation.w
value: 0.95371693
objectReference: {fileID: 0}
- target: {fileID: 4264139783803505614, guid: c8cd92b5c9f845842aa555df3e059ec7, type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 4264139783803505614, guid: c8cd92b5c9f845842aa555df3e059ec7, type: 3}
propertyPath: m_LocalRotation.y
value: -0.3007058
objectReference: {fileID: 0}
- target: {fileID: 4264139783803505614, guid: c8cd92b5c9f845842aa555df3e059ec7, type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 4264139783803505614, guid: c8cd92b5c9f845842aa555df3e059ec7, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4264139783803505614, guid: c8cd92b5c9f845842aa555df3e059ec7, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4264139783803505614, guid: c8cd92b5c9f845842aa555df3e059ec7, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: -4161369568681901532, guid: c8cd92b5c9f845842aa555df3e059ec7, type: 3}
--- !u!4 &1102732002 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 4264139783803505614, guid: c8cd92b5c9f845842aa555df3e059ec7, type: 3}
m_PrefabInstance: {fileID: 1102732001}
m_PrefabAsset: {fileID: 0}
--- !u!1 &1116745580
GameObject:
m_ObjectHideFlags: 0
@@ -730,6 +886,162 @@ Transform:
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1001 &1337971005
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 1853339074}
m_Modifications:
- target: {fileID: 7008198239904534779, guid: 999ccca481cf3184c84e499166e25fbf, type: 3}
propertyPath: m_Name
value: SM_Seabed_Ridge_A
objectReference: {fileID: 0}
- target: {fileID: 7258054629250947191, guid: 999ccca481cf3184c84e499166e25fbf, type: 3}
propertyPath: 'm_Materials.Array.data[0]'
value:
objectReference: {fileID: 2100000, guid: 5bcf0d07f35ebcc46809bf9e476a911e, type: 2}
- target: {fileID: 8523102574360933654, guid: 999ccca481cf3184c84e499166e25fbf, type: 3}
propertyPath: m_LocalScale.x
value: 1.35
objectReference: {fileID: 0}
- target: {fileID: 8523102574360933654, guid: 999ccca481cf3184c84e499166e25fbf, type: 3}
propertyPath: m_LocalScale.y
value: 1.35
objectReference: {fileID: 0}
- target: {fileID: 8523102574360933654, guid: 999ccca481cf3184c84e499166e25fbf, type: 3}
propertyPath: m_LocalScale.z
value: 1.35
objectReference: {fileID: 0}
- target: {fileID: 8523102574360933654, guid: 999ccca481cf3184c84e499166e25fbf, type: 3}
propertyPath: m_LocalPosition.x
value: 2
objectReference: {fileID: 0}
- target: {fileID: 8523102574360933654, guid: 999ccca481cf3184c84e499166e25fbf, type: 3}
propertyPath: m_LocalPosition.y
value: 0.8714071
objectReference: {fileID: 0}
- target: {fileID: 8523102574360933654, guid: 999ccca481cf3184c84e499166e25fbf, type: 3}
propertyPath: m_LocalPosition.z
value: 21
objectReference: {fileID: 0}
- target: {fileID: 8523102574360933654, guid: 999ccca481cf3184c84e499166e25fbf, type: 3}
propertyPath: m_LocalRotation.w
value: 0.9961947
objectReference: {fileID: 0}
- target: {fileID: 8523102574360933654, guid: 999ccca481cf3184c84e499166e25fbf, type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 8523102574360933654, guid: 999ccca481cf3184c84e499166e25fbf, type: 3}
propertyPath: m_LocalRotation.y
value: 0.08715574
objectReference: {fileID: 0}
- target: {fileID: 8523102574360933654, guid: 999ccca481cf3184c84e499166e25fbf, type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 8523102574360933654, guid: 999ccca481cf3184c84e499166e25fbf, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8523102574360933654, guid: 999ccca481cf3184c84e499166e25fbf, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8523102574360933654, guid: 999ccca481cf3184c84e499166e25fbf, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: -4161369568681901532, guid: 999ccca481cf3184c84e499166e25fbf, type: 3}
--- !u!4 &1337971006 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 8523102574360933654, guid: 999ccca481cf3184c84e499166e25fbf, type: 3}
m_PrefabInstance: {fileID: 1337971005}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &1452695536
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 1853339074}
m_Modifications:
- target: {fileID: -8305782276941965880, guid: f4059d729ce764b42aa4b1ea55f65b44, type: 3}
propertyPath: m_Name
value: SM_Seabed_Hollow_A
objectReference: {fileID: 0}
- target: {fileID: 4467166058742569274, guid: f4059d729ce764b42aa4b1ea55f65b44, type: 3}
propertyPath: 'm_Materials.Array.data[0]'
value:
objectReference: {fileID: 2100000, guid: 16d64fc7c2bf877448d870325460089a, type: 2}
- target: {fileID: 8063764515608832323, guid: f4059d729ce764b42aa4b1ea55f65b44, type: 3}
propertyPath: m_LocalScale.x
value: 1.05
objectReference: {fileID: 0}
- target: {fileID: 8063764515608832323, guid: f4059d729ce764b42aa4b1ea55f65b44, type: 3}
propertyPath: m_LocalScale.y
value: 1.05
objectReference: {fileID: 0}
- target: {fileID: 8063764515608832323, guid: f4059d729ce764b42aa4b1ea55f65b44, type: 3}
propertyPath: m_LocalScale.z
value: 1.05
objectReference: {fileID: 0}
- target: {fileID: 8063764515608832323, guid: f4059d729ce764b42aa4b1ea55f65b44, type: 3}
propertyPath: m_LocalPosition.x
value: -10
objectReference: {fileID: 0}
- target: {fileID: 8063764515608832323, guid: f4059d729ce764b42aa4b1ea55f65b44, type: 3}
propertyPath: m_LocalPosition.y
value: 1.1812537
objectReference: {fileID: 0}
- target: {fileID: 8063764515608832323, guid: f4059d729ce764b42aa4b1ea55f65b44, type: 3}
propertyPath: m_LocalPosition.z
value: 5.5
objectReference: {fileID: 0}
- target: {fileID: 8063764515608832323, guid: f4059d729ce764b42aa4b1ea55f65b44, type: 3}
propertyPath: m_LocalRotation.w
value: 0.9848078
objectReference: {fileID: 0}
- target: {fileID: 8063764515608832323, guid: f4059d729ce764b42aa4b1ea55f65b44, type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 8063764515608832323, guid: f4059d729ce764b42aa4b1ea55f65b44, type: 3}
propertyPath: m_LocalRotation.y
value: 0.1736482
objectReference: {fileID: 0}
- target: {fileID: 8063764515608832323, guid: f4059d729ce764b42aa4b1ea55f65b44, type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 8063764515608832323, guid: f4059d729ce764b42aa4b1ea55f65b44, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8063764515608832323, guid: f4059d729ce764b42aa4b1ea55f65b44, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8063764515608832323, guid: f4059d729ce764b42aa4b1ea55f65b44, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: -4161369568681901532, guid: f4059d729ce764b42aa4b1ea55f65b44, type: 3}
--- !u!4 &1452695537 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 8063764515608832323, guid: f4059d729ce764b42aa4b1ea55f65b44, type: 3}
m_PrefabInstance: {fileID: 1452695536}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &1643709738
PrefabInstance:
m_ObjectHideFlags: 0
@@ -800,6 +1112,9 @@ PrefabInstance:
- targetCorrespondingSourceObject: {fileID: 6513448254367613169, guid: a56e554160baf224282f9467d6a5dfa0, type: 3}
insertIndex: -1
addedObject: {fileID: 190248699}
- targetCorrespondingSourceObject: {fileID: 6513448254367613169, guid: a56e554160baf224282f9467d6a5dfa0, type: 3}
insertIndex: -1
addedObject: {fileID: 1853339074}
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: a56e554160baf224282f9467d6a5dfa0, type: 3}
--- !u!4 &1643709739 stripped
@@ -859,6 +1174,120 @@ Transform:
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1001 &1787799168
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 1853339074}
m_Modifications:
- target: {fileID: -7866049456931649176, guid: b20fc34cefdb8824d8cdc33d37eec4ca, type: 3}
propertyPath: 'm_Materials.Array.data[0]'
value:
objectReference: {fileID: 2100000, guid: 5bcf0d07f35ebcc46809bf9e476a911e, type: 2}
- target: {fileID: 290262774620426887, guid: b20fc34cefdb8824d8cdc33d37eec4ca, type: 3}
propertyPath: m_Name
value: SM_Seabed_Shelf_A
objectReference: {fileID: 0}
- target: {fileID: 5429410514114181915, guid: b20fc34cefdb8824d8cdc33d37eec4ca, type: 3}
propertyPath: m_LocalScale.x
value: 1.3
objectReference: {fileID: 0}
- target: {fileID: 5429410514114181915, guid: b20fc34cefdb8824d8cdc33d37eec4ca, type: 3}
propertyPath: m_LocalScale.y
value: 1.3
objectReference: {fileID: 0}
- target: {fileID: 5429410514114181915, guid: b20fc34cefdb8824d8cdc33d37eec4ca, type: 3}
propertyPath: m_LocalScale.z
value: 1.3
objectReference: {fileID: 0}
- target: {fileID: 5429410514114181915, guid: b20fc34cefdb8824d8cdc33d37eec4ca, type: 3}
propertyPath: m_LocalPosition.x
value: 21
objectReference: {fileID: 0}
- target: {fileID: 5429410514114181915, guid: b20fc34cefdb8824d8cdc33d37eec4ca, type: 3}
propertyPath: m_LocalPosition.y
value: 1.024
objectReference: {fileID: 0}
- target: {fileID: 5429410514114181915, guid: b20fc34cefdb8824d8cdc33d37eec4ca, type: 3}
propertyPath: m_LocalPosition.z
value: 9
objectReference: {fileID: 0}
- target: {fileID: 5429410514114181915, guid: b20fc34cefdb8824d8cdc33d37eec4ca, type: 3}
propertyPath: m_LocalRotation.w
value: 0.81915206
objectReference: {fileID: 0}
- target: {fileID: 5429410514114181915, guid: b20fc34cefdb8824d8cdc33d37eec4ca, type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 5429410514114181915, guid: b20fc34cefdb8824d8cdc33d37eec4ca, type: 3}
propertyPath: m_LocalRotation.y
value: -0.57357645
objectReference: {fileID: 0}
- target: {fileID: 5429410514114181915, guid: b20fc34cefdb8824d8cdc33d37eec4ca, type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 5429410514114181915, guid: b20fc34cefdb8824d8cdc33d37eec4ca, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5429410514114181915, guid: b20fc34cefdb8824d8cdc33d37eec4ca, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5429410514114181915, guid: b20fc34cefdb8824d8cdc33d37eec4ca, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: -4161369568681901532, guid: b20fc34cefdb8824d8cdc33d37eec4ca, type: 3}
--- !u!4 &1787799169 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 5429410514114181915, guid: b20fc34cefdb8824d8cdc33d37eec4ca, type: 3}
m_PrefabInstance: {fileID: 1787799168}
m_PrefabAsset: {fileID: 0}
--- !u!1 &1853339073
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1853339074}
m_Layer: 0
m_Name: SeabedRelief
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1853339074
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1853339073}
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: 1452695537}
- {fileID: 1102732002}
- {fileID: 1337971006}
- {fileID: 127396315}
- {fileID: 1787799169}
m_Father: {fileID: 1643709739}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1660057539 &9223372036854775807
SceneRoots:
m_ObjectHideFlags: 0
@@ -0,0 +1,137 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: M_Seabed_Rock
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap:
RenderType: Opaque
disabledShaderPasses:
- MOTIONVECTORS
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BaseMap:
m_Texture: {fileID: 0}
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: 0
- _DstBlendAlpha: 0
- _EnvironmentReflections: 1
- _GlossMapScale: 0
- _Glossiness: 0
- _GlossyReflections: 0
- _Metallic: 0
- _OcclusionStrength: 1
- _Parallax: 0.005
- _QueueOffset: 0
- _ReceiveShadows: 1
- _Smoothness: 0.1
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _SrcBlendAlpha: 1
- _Surface: 0
- _WorkflowMode: 1
- _XRMotionVectorsPass: 1
- _ZWrite: 1
m_Colors:
- _BaseColor: {r: 0.13, g: 0.19, b: 0.23, a: 1}
- _Color: {r: 0.12999997, g: 0.18999997, b: 0.22999996, 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
--- !u!114 &3589914677059072833
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
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 5bcf0d07f35ebcc46809bf9e476a911e
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.
@@ -0,0 +1,28 @@
fileFormatVersion: 2
guid: c8cd92b5c9f845842aa555df3e059ec7
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 715df9372183c47e389bb6e19fbc3b52, type: 3}
editorImportSettings:
generateSecondaryUVSet: 0
importSettings:
nodeNameMethod: 1
animationMethod: 2
generateMipMaps: 1
texturesReadable: 0
defaultMinFilterMode: 9729
defaultMagFilterMode: 9729
anisotropicFilterLevel: 1
instantiationSettings:
mask: -1
layer: 0
skinUpdateWhenOffscreen: 1
lightIntensityFactor: 1
sceneObjectCreation: 2
assetDependencies: []
reportItems: []
Binary file not shown.
@@ -0,0 +1,28 @@
fileFormatVersion: 2
guid: f4059d729ce764b42aa4b1ea55f65b44
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 715df9372183c47e389bb6e19fbc3b52, type: 3}
editorImportSettings:
generateSecondaryUVSet: 0
importSettings:
nodeNameMethod: 1
animationMethod: 2
generateMipMaps: 1
texturesReadable: 0
defaultMinFilterMode: 9729
defaultMagFilterMode: 9729
anisotropicFilterLevel: 1
instantiationSettings:
mask: -1
layer: 0
skinUpdateWhenOffscreen: 1
lightIntensityFactor: 1
sceneObjectCreation: 2
assetDependencies: []
reportItems: []
Binary file not shown.
@@ -0,0 +1,28 @@
fileFormatVersion: 2
guid: 331585837f6110f44a39cab480c52113
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 715df9372183c47e389bb6e19fbc3b52, type: 3}
editorImportSettings:
generateSecondaryUVSet: 0
importSettings:
nodeNameMethod: 1
animationMethod: 2
generateMipMaps: 1
texturesReadable: 0
defaultMinFilterMode: 9729
defaultMagFilterMode: 9729
anisotropicFilterLevel: 1
instantiationSettings:
mask: -1
layer: 0
skinUpdateWhenOffscreen: 1
lightIntensityFactor: 1
sceneObjectCreation: 2
assetDependencies: []
reportItems: []
Binary file not shown.
@@ -0,0 +1,28 @@
fileFormatVersion: 2
guid: 999ccca481cf3184c84e499166e25fbf
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 715df9372183c47e389bb6e19fbc3b52, type: 3}
editorImportSettings:
generateSecondaryUVSet: 0
importSettings:
nodeNameMethod: 1
animationMethod: 2
generateMipMaps: 1
texturesReadable: 0
defaultMinFilterMode: 9729
defaultMagFilterMode: 9729
anisotropicFilterLevel: 1
instantiationSettings:
mask: -1
layer: 0
skinUpdateWhenOffscreen: 1
lightIntensityFactor: 1
sceneObjectCreation: 2
assetDependencies: []
reportItems: []
Binary file not shown.
@@ -0,0 +1,28 @@
fileFormatVersion: 2
guid: b20fc34cefdb8824d8cdc33d37eec4ca
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 715df9372183c47e389bb6e19fbc3b52, type: 3}
editorImportSettings:
generateSecondaryUVSet: 0
importSettings:
nodeNameMethod: 1
animationMethod: 2
generateMipMaps: 1
texturesReadable: 0
defaultMinFilterMode: 9729
defaultMagFilterMode: 9729
anisotropicFilterLevel: 1
instantiationSettings:
mask: -1
layer: 0
skinUpdateWhenOffscreen: 1
lightIntensityFactor: 1
sceneObjectCreation: 2
assetDependencies: []
reportItems: []
@@ -24,8 +24,12 @@ namespace ProjectM.Client
[UpdateInGroup(typeof(PresentationSystemGroup))]
public partial class AmbientMotionSystem : SystemBase
{
// 2026-08-08: seabed terms FIRST. The old list was pure LAND flora (bush/grass/flower/fern/cactus)
// from the deleted meadow + arid biomes, so it matched NOTHING in the shipping seabed arena and the
// whole walk-through rustle layer was dead. The land terms are kept only so an old scene still works.
static readonly System.Text.RegularExpressions.Regex FloraName = new System.Text.RegularExpressions.Regex(
"bush|grass|flower|fern|groundcover|ground_cover|wildflower|clover|reed|succulent|cactus",
"floraclump|flora_|kelp|frond|seagrass|seaweed|coral|anemone"
+ "|bush|grass|flower|fern|groundcover|ground_cover|wildflower|clover|reed|succulent|cactus",
System.Text.RegularExpressions.RegexOptions.IgnoreCase);
struct Flora
@@ -79,14 +83,22 @@ namespace ProjectM.Client
{
RestoreFlora();
_flora.Clear();
// 2026-08-08: scan EVERY root. The old gate required a root literally named "BaseBiome" or
// "ExpeditionBiome*" — both went with the expedition, so this loop matched nothing and the rustle
// layer silently did nothing in the shipping arena. The seabed flora live under
// Env_SeabedKit/Seabed_Flora/FloraClump_N.
foreach (var root in scene.GetRootGameObjects())
{
if (root.name != "BaseBiome" && !root.name.StartsWith("ExpeditionBiome")) continue;
foreach (var t in root.GetComponentsInChildren<Transform>(false))
{
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;
// The sway unit is the CLUMP ROOT, which carries no renderer of its own — only children.
// The old renderer-on-self test rejected exactly the object we want to rotate, so accept a
// renderer anywhere beneath. Skip anything whose PARENT already matched, so we tilt the
// clump once instead of tilting every stalk out of its socket.
if (t.parent != null && FloraName.IsMatch(t.parent.gameObject.name)) continue;
if (t.GetComponent<LODGroup>() == null && t.GetComponentInChildren<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