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>
This commit is contained in:
+18
-18
@@ -4857,7 +4857,7 @@ PrefabInstance:
|
|||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 5214937767286086917, guid: f4c1ab01cce3344498755643a1be1e5a, type: 3}
|
- target: {fileID: 5214937767286086917, guid: f4c1ab01cce3344498755643a1be1e5a, type: 3}
|
||||||
propertyPath: m_IsActive
|
propertyPath: m_IsActive
|
||||||
value: 1
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 7190243807045937801, guid: f4c1ab01cce3344498755643a1be1e5a, type: 3}
|
- target: {fileID: 7190243807045937801, guid: f4c1ab01cce3344498755643a1be1e5a, type: 3}
|
||||||
propertyPath: m_IsActive
|
propertyPath: m_IsActive
|
||||||
@@ -6350,7 +6350,7 @@ PrefabInstance:
|
|||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 7308756808918190896, guid: b79cbc8e3d7fb5b4d9ee4f9988f6ef45, type: 3}
|
- target: {fileID: 7308756808918190896, guid: b79cbc8e3d7fb5b4d9ee4f9988f6ef45, type: 3}
|
||||||
propertyPath: m_IsActive
|
propertyPath: m_IsActive
|
||||||
value: 1
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 7937096490965078410, guid: b79cbc8e3d7fb5b4d9ee4f9988f6ef45, type: 3}
|
- target: {fileID: 7937096490965078410, guid: b79cbc8e3d7fb5b4d9ee4f9988f6ef45, type: 3}
|
||||||
propertyPath: m_LocalScale.x
|
propertyPath: m_LocalScale.x
|
||||||
@@ -14243,7 +14243,7 @@ PrefabInstance:
|
|||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 2186473713617367126, guid: d6538b1be0012ec49affc54b4b0b8f19, type: 3}
|
- target: {fileID: 2186473713617367126, guid: d6538b1be0012ec49affc54b4b0b8f19, type: 3}
|
||||||
propertyPath: m_IsActive
|
propertyPath: m_IsActive
|
||||||
value: 1
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
m_RemovedComponents: []
|
m_RemovedComponents: []
|
||||||
m_RemovedGameObjects: []
|
m_RemovedGameObjects: []
|
||||||
@@ -17162,7 +17162,7 @@ PrefabInstance:
|
|||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 3757109599224033816, guid: 60467653c9024a94cbe4863e1b401660, type: 3}
|
- target: {fileID: 3757109599224033816, guid: 60467653c9024a94cbe4863e1b401660, type: 3}
|
||||||
propertyPath: m_IsActive
|
propertyPath: m_IsActive
|
||||||
value: 1
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 3985497998431930066, guid: 60467653c9024a94cbe4863e1b401660, type: 3}
|
- target: {fileID: 3985497998431930066, guid: 60467653c9024a94cbe4863e1b401660, type: 3}
|
||||||
propertyPath: m_CastShadows
|
propertyPath: m_CastShadows
|
||||||
@@ -18514,7 +18514,7 @@ PrefabInstance:
|
|||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 3757109599224033816, guid: 60467653c9024a94cbe4863e1b401660, type: 3}
|
- target: {fileID: 3757109599224033816, guid: 60467653c9024a94cbe4863e1b401660, type: 3}
|
||||||
propertyPath: m_IsActive
|
propertyPath: m_IsActive
|
||||||
value: 1
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 3985497998431930066, guid: 60467653c9024a94cbe4863e1b401660, type: 3}
|
- target: {fileID: 3985497998431930066, guid: 60467653c9024a94cbe4863e1b401660, type: 3}
|
||||||
propertyPath: m_CastShadows
|
propertyPath: m_CastShadows
|
||||||
@@ -21002,7 +21002,7 @@ PrefabInstance:
|
|||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 1074864049481174882, guid: 8e2a923736393f34d9d8dc6a0d5baf44, type: 3}
|
- target: {fileID: 1074864049481174882, guid: 8e2a923736393f34d9d8dc6a0d5baf44, type: 3}
|
||||||
propertyPath: m_IsActive
|
propertyPath: m_IsActive
|
||||||
value: 1
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 1579166258069663415, guid: 8e2a923736393f34d9d8dc6a0d5baf44, type: 3}
|
- target: {fileID: 1579166258069663415, guid: 8e2a923736393f34d9d8dc6a0d5baf44, type: 3}
|
||||||
propertyPath: m_CastShadows
|
propertyPath: m_CastShadows
|
||||||
@@ -21647,7 +21647,7 @@ PrefabInstance:
|
|||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 7308756808918190896, guid: b79cbc8e3d7fb5b4d9ee4f9988f6ef45, type: 3}
|
- target: {fileID: 7308756808918190896, guid: b79cbc8e3d7fb5b4d9ee4f9988f6ef45, type: 3}
|
||||||
propertyPath: m_IsActive
|
propertyPath: m_IsActive
|
||||||
value: 1
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 7937096490965078410, guid: b79cbc8e3d7fb5b4d9ee4f9988f6ef45, type: 3}
|
- target: {fileID: 7937096490965078410, guid: b79cbc8e3d7fb5b4d9ee4f9988f6ef45, type: 3}
|
||||||
propertyPath: m_LocalScale.x
|
propertyPath: m_LocalScale.x
|
||||||
@@ -24657,7 +24657,7 @@ PrefabInstance:
|
|||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 3757109599224033816, guid: 60467653c9024a94cbe4863e1b401660, type: 3}
|
- target: {fileID: 3757109599224033816, guid: 60467653c9024a94cbe4863e1b401660, type: 3}
|
||||||
propertyPath: m_IsActive
|
propertyPath: m_IsActive
|
||||||
value: 1
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 3985497998431930066, guid: 60467653c9024a94cbe4863e1b401660, type: 3}
|
- target: {fileID: 3985497998431930066, guid: 60467653c9024a94cbe4863e1b401660, type: 3}
|
||||||
propertyPath: m_CastShadows
|
propertyPath: m_CastShadows
|
||||||
@@ -28078,7 +28078,7 @@ PrefabInstance:
|
|||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 1074864049481174882, guid: 8e2a923736393f34d9d8dc6a0d5baf44, type: 3}
|
- target: {fileID: 1074864049481174882, guid: 8e2a923736393f34d9d8dc6a0d5baf44, type: 3}
|
||||||
propertyPath: m_IsActive
|
propertyPath: m_IsActive
|
||||||
value: 1
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 1579166258069663415, guid: 8e2a923736393f34d9d8dc6a0d5baf44, type: 3}
|
- target: {fileID: 1579166258069663415, guid: 8e2a923736393f34d9d8dc6a0d5baf44, type: 3}
|
||||||
propertyPath: m_CastShadows
|
propertyPath: m_CastShadows
|
||||||
@@ -33864,7 +33864,7 @@ PrefabInstance:
|
|||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 2186473713617367126, guid: d6538b1be0012ec49affc54b4b0b8f19, type: 3}
|
- target: {fileID: 2186473713617367126, guid: d6538b1be0012ec49affc54b4b0b8f19, type: 3}
|
||||||
propertyPath: m_IsActive
|
propertyPath: m_IsActive
|
||||||
value: 1
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
m_RemovedComponents: []
|
m_RemovedComponents: []
|
||||||
m_RemovedGameObjects: []
|
m_RemovedGameObjects: []
|
||||||
@@ -35618,7 +35618,7 @@ PrefabInstance:
|
|||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 8430139830498947291, guid: 41db7f3d229920b4c8bfca0cefbd6bad, type: 3}
|
- target: {fileID: 8430139830498947291, guid: 41db7f3d229920b4c8bfca0cefbd6bad, type: 3}
|
||||||
propertyPath: m_IsActive
|
propertyPath: m_IsActive
|
||||||
value: 1
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 9202559580053351009, guid: 41db7f3d229920b4c8bfca0cefbd6bad, type: 3}
|
- target: {fileID: 9202559580053351009, guid: 41db7f3d229920b4c8bfca0cefbd6bad, type: 3}
|
||||||
propertyPath: m_LocalScale.x
|
propertyPath: m_LocalScale.x
|
||||||
@@ -39690,7 +39690,7 @@ MonoBehaviour:
|
|||||||
CavernMoteColor: {r: 0.55, g: 0.65, b: 0.95, a: 0.33}
|
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}
|
BlightSporeColor: {r: 0.72, g: 0.5, b: 0.85, a: 0.33}
|
||||||
AridWind: {x: 2.2, y: -0.15, z: 0.5}
|
AridWind: {x: 2.2, y: -0.15, z: 0.5}
|
||||||
SwayEnabled: 1
|
SwayEnabled: 0
|
||||||
SwayRadius: 30
|
SwayRadius: 30
|
||||||
SwayAmpDeg: 1.4
|
SwayAmpDeg: 1.4
|
||||||
SwayHz: 0.8
|
SwayHz: 0.8
|
||||||
@@ -42327,7 +42327,7 @@ PrefabInstance:
|
|||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 1074864049481174882, guid: 8e2a923736393f34d9d8dc6a0d5baf44, type: 3}
|
- target: {fileID: 1074864049481174882, guid: 8e2a923736393f34d9d8dc6a0d5baf44, type: 3}
|
||||||
propertyPath: m_IsActive
|
propertyPath: m_IsActive
|
||||||
value: 1
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 1579166258069663415, guid: 8e2a923736393f34d9d8dc6a0d5baf44, type: 3}
|
- target: {fileID: 1579166258069663415, guid: 8e2a923736393f34d9d8dc6a0d5baf44, type: 3}
|
||||||
propertyPath: m_CastShadows
|
propertyPath: m_CastShadows
|
||||||
@@ -46927,7 +46927,7 @@ PrefabInstance:
|
|||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 30244553050222735, guid: 73663df767caaeb4e8d8a22389f6b41f, type: 3}
|
- target: {fileID: 30244553050222735, guid: 73663df767caaeb4e8d8a22389f6b41f, type: 3}
|
||||||
propertyPath: m_IsActive
|
propertyPath: m_IsActive
|
||||||
value: 1
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 368552065002284600, guid: 73663df767caaeb4e8d8a22389f6b41f, type: 3}
|
- target: {fileID: 368552065002284600, guid: 73663df767caaeb4e8d8a22389f6b41f, type: 3}
|
||||||
propertyPath: m_CastShadows
|
propertyPath: m_CastShadows
|
||||||
@@ -47156,7 +47156,7 @@ PrefabInstance:
|
|||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 1074864049481174882, guid: 8e2a923736393f34d9d8dc6a0d5baf44, type: 3}
|
- target: {fileID: 1074864049481174882, guid: 8e2a923736393f34d9d8dc6a0d5baf44, type: 3}
|
||||||
propertyPath: m_IsActive
|
propertyPath: m_IsActive
|
||||||
value: 1
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 1579166258069663415, guid: 8e2a923736393f34d9d8dc6a0d5baf44, type: 3}
|
- target: {fileID: 1579166258069663415, guid: 8e2a923736393f34d9d8dc6a0d5baf44, type: 3}
|
||||||
propertyPath: m_CastShadows
|
propertyPath: m_CastShadows
|
||||||
@@ -47877,7 +47877,7 @@ PrefabInstance:
|
|||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 2186473713617367126, guid: d6538b1be0012ec49affc54b4b0b8f19, type: 3}
|
- target: {fileID: 2186473713617367126, guid: d6538b1be0012ec49affc54b4b0b8f19, type: 3}
|
||||||
propertyPath: m_IsActive
|
propertyPath: m_IsActive
|
||||||
value: 1
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
m_RemovedComponents: []
|
m_RemovedComponents: []
|
||||||
m_RemovedGameObjects: []
|
m_RemovedGameObjects: []
|
||||||
@@ -60106,7 +60106,7 @@ PrefabInstance:
|
|||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 7549560119917370044, guid: 9d046103ca4c9b846a6b0017630ca7da, type: 3}
|
- target: {fileID: 7549560119917370044, guid: 9d046103ca4c9b846a6b0017630ca7da, type: 3}
|
||||||
propertyPath: m_IsActive
|
propertyPath: m_IsActive
|
||||||
value: 1
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
m_RemovedComponents: []
|
m_RemovedComponents: []
|
||||||
m_RemovedGameObjects: []
|
m_RemovedGameObjects: []
|
||||||
@@ -67184,7 +67184,7 @@ PrefabInstance:
|
|||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 5214937767286086917, guid: f4c1ab01cce3344498755643a1be1e5a, type: 3}
|
- target: {fileID: 5214937767286086917, guid: f4c1ab01cce3344498755643a1be1e5a, type: 3}
|
||||||
propertyPath: m_IsActive
|
propertyPath: m_IsActive
|
||||||
value: 1
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 7190243807045937801, guid: f4c1ab01cce3344498755643a1be1e5a, type: 3}
|
- target: {fileID: 7190243807045937801, guid: f4c1ab01cce3344498755643a1be1e5a, type: 3}
|
||||||
propertyPath: m_IsActive
|
propertyPath: m_IsActive
|
||||||
|
|||||||
@@ -26,8 +26,9 @@ namespace ProjectM.Client
|
|||||||
public Color BlightSporeColor = new Color(0.72f, 0.50f, 0.85f, 0.33f);
|
public Color BlightSporeColor = new Color(0.72f, 0.50f, 0.85f, 0.33f);
|
||||||
public Vector3 AridWind = new Vector3(2.2f, -0.15f, 0.5f);
|
public Vector3 AridWind = new Vector3(2.2f, -0.15f, 0.5f);
|
||||||
|
|
||||||
[Header("Idle foliage sway (flora prop roots within view of the camera)")]
|
[Header("Idle foliage sway (root tilt) — OFF by default since 1.5b: ALL Synty flora uses the Synty/Foliage")]
|
||||||
public bool SwayEnabled = true;
|
[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(1f)] public float SwayRadius = 30f;
|
||||||
[Min(0f)] public float SwayAmpDeg = 1.4f;
|
[Min(0f)] public float SwayAmpDeg = 1.4f;
|
||||||
[Min(0.05f)] public float SwayHz = 0.8f;
|
[Min(0.05f)] public float SwayHz = 0.8f;
|
||||||
|
|||||||
@@ -87,6 +87,10 @@ namespace ProjectM.Client
|
|||||||
if (!FloraName.IsMatch(t.gameObject.name)) continue;
|
if (!FloraName.IsMatch(t.gameObject.name)) continue;
|
||||||
if (t.gameObject.name.Contains("LOD")) continue; // prop roots only; LOD children follow
|
if (t.gameObject.name.Contains("LOD")) continue; // prop roots only; LOD children follow
|
||||||
if (t.GetComponent<LODGroup>() == null && t.GetComponent<MeshRenderer>() == null) continue;
|
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;
|
var p = t.position;
|
||||||
_flora.Add(new Flora
|
_flora.Add(new Flora
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user