Feel: ambient motion layer + art look locked (clean dark-Synty, pixel OFF)

Art look LOCKED by the operator from the artlook_* side-by-sides:
clean dark-Synty; PixelOutline._MasterEnabled=0 shipped (feature stays
dev-toggleable via F3; other fullscreen effects remain backlog).

New AmbientMotionSystem (client-only PresentationSystemGroup, the
"world alive" anti-static beat, zero netcode):
- per-biome DRIFT particles from one world-space emitter following the
  camera (meadow motes / arid wind-blown dust / cavern motes / blight
  spores; palette keys on camera-X region + replicated room biome,
  mirroring WorldAtmosphereSystem's switch)
- idle SWAY on the ACTIVE cosmetic flora prop roots near the camera
  (LOD children follow the root; probed: none static-batched)
- walk-through RUSTLE: flora brushed by the local player
  (GhostOwnerIsLocal idiom) gets a decaying energy shake
Rotations write around a cached base (lossless when toggled off);
knobs in AmbientMotionConfig (scene object, code defaults when absent).

Verified live: drift palettes exact in both regions (meadow
0.62/0.85/0.60 -> arid 0.85/0.68/0.45 on region cross), flora beside
the player rocked (0,0)->(-4.0,+5.0) deg within the rustle+sway
envelope, 466/466 EditMode, console clean. Discovery for follow-up:
the BASE biome's flora props are authored INACTIVE (84 bushes etc.) -
the base has no sway targets until some are re-enabled.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-09 21:01:14 -07:00
parent edc476adfd
commit 90d4bed381
6 changed files with 405 additions and 6 deletions
+93
View File
@@ -40011,6 +40011,68 @@ Transform:
m_CorrespondingSourceObject: {fileID: 6078297801174817557, guid: 66d4f7c006b77084da3929add6d06f24, type: 3}
m_PrefabInstance: {fileID: 1002930408}
m_PrefabAsset: {fileID: 0}
--- !u!1 &1007206781
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1007206783}
- component: {fileID: 1007206782}
m_Layer: 0
m_Name: AmbientMotion
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1007206782
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1007206781}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: c5eaa0f5b116ec34695d5e4646784462, type: 3}
m_Name:
m_EditorClassIdentifier: ProjectM.Client::ProjectM.Client.AmbientMotionConfig
Enabled: 1
DriftEnabled: 1
DriftRate: 28
DriftSize: 0.09
MeadowMoteColor: {r: 0.62, g: 0.85, b: 0.6, a: 0.35}
AridDustColor: {r: 0.85, g: 0.68, b: 0.45, a: 0.28}
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
SwayRadius: 30
SwayAmpDeg: 1.4
SwayHz: 0.8
RustleEnabled: 1
RustleRadius: 1.7
RustleAmpDeg: 7
RustleHz: 9
RustleDecay: 2.5
--- !u!4 &1007206783
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1007206781}
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: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1001 &1010024963
PrefabInstance:
m_ObjectHideFlags: 0
@@ -77186,6 +77248,7 @@ GameObject:
m_Component:
- component: {fileID: 2045829909}
- component: {fileID: 2045829910}
- component: {fileID: 2045829911}
m_Layer: 0
m_Name: CabinLight
m_TagString: Untagged
@@ -77273,6 +77336,35 @@ Light:
m_LightUnit: 1
m_LuxAtDistance: 1
m_EnableSpotReflector: 1
--- !u!114 &2045829911
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2045829908}
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 &2047680188
PrefabInstance:
m_ObjectHideFlags: 0
@@ -81293,3 +81385,4 @@ SceneRoots:
- {fileID: 1851179016}
- {fileID: 70737666}
- {fileID: 1276835916}
- {fileID: 1007206783}