World: redo environment as off-world natural-frontier Synty biomes (DR-025)
Replace the sci-fi-colony dressing with two cosmetic classic-URP biomes in Game.unity: a lush Meadow_Forest base sanctuary (origin) and a hostile Arid_Desert survey expedition (+1000) - ~380 collider-stripped instances, warpgate/outpost landmarks, cyan/orange Aether accent lights. Warm daylight sun + Trilight ambient + a procedural daytime skybox + a cloned daylight post-FX grade (ACES kept). New client-only WorldAtmosphereSystem(+Config) cross-fades per-region fog/ambient by camera X>500 (mirrors HudSystem). Cosmetic-only - colliders stripped, never the subscene - so zero sim/netcode/PhysicsWorld impact (adversarially verified). Shadow-casting disabled on small foliage. EditMode 214/214. See DR-025. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+32993
-4806
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,165 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &-4441572633185463556
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 1
|
||||
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: 97c23e3b12dc18c42a140437e53d3951, type: 3}
|
||||
m_Name: Tonemapping
|
||||
m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.Tonemapping
|
||||
active: 1
|
||||
mode:
|
||||
m_OverrideState: 1
|
||||
m_Value: 2
|
||||
neutralHDRRangeReductionMode:
|
||||
m_OverrideState: 0
|
||||
m_Value: 2
|
||||
acesPreset:
|
||||
m_OverrideState: 0
|
||||
m_Value: 3
|
||||
hueShiftAmount:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
detectPaperWhite:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
paperWhite:
|
||||
m_OverrideState: 0
|
||||
m_Value: 300
|
||||
detectBrightnessLimits:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
minNits:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.005
|
||||
maxNits:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1000
|
||||
--- !u!114 &-3245916173682126434
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 1
|
||||
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: 0b2db86121404754db890f4c8dfe81b2, type: 3}
|
||||
m_Name: Bloom
|
||||
m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.Bloom
|
||||
active: 1
|
||||
skipIterations:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
threshold:
|
||||
m_OverrideState: 1
|
||||
m_Value: 1.4
|
||||
intensity:
|
||||
m_OverrideState: 1
|
||||
m_Value: 0.28
|
||||
scatter:
|
||||
m_OverrideState: 1
|
||||
m_Value: 0.5
|
||||
clamp:
|
||||
m_OverrideState: 0
|
||||
m_Value: 65472
|
||||
tint:
|
||||
m_OverrideState: 1
|
||||
m_Value: {r: 1, g: 0.98, b: 0.95, a: 1}
|
||||
highQualityFiltering:
|
||||
m_OverrideState: 1
|
||||
m_Value: 1
|
||||
filter:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
downscale:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
maxIterations:
|
||||
m_OverrideState: 0
|
||||
m_Value: 6
|
||||
dirtTexture:
|
||||
m_OverrideState: 0
|
||||
m_Value: {fileID: 0}
|
||||
dimension: 1
|
||||
dirtIntensity:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
--- !u!114 &-2801731409977683993
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 1
|
||||
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: 899c54efeace73346a0a16faa3afe726, type: 3}
|
||||
m_Name: Vignette
|
||||
m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.Vignette
|
||||
active: 1
|
||||
color:
|
||||
m_OverrideState: 1
|
||||
m_Value: {r: 0, g: 0, b: 0, a: 1}
|
||||
center:
|
||||
m_OverrideState: 0
|
||||
m_Value: {x: 0.5, y: 0.5}
|
||||
intensity:
|
||||
m_OverrideState: 1
|
||||
m_Value: 0.15
|
||||
smoothness:
|
||||
m_OverrideState: 1
|
||||
m_Value: 0.4
|
||||
rounded:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
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: d7fd9488000d3734a9e00ee676215985, type: 3}
|
||||
m_Name: PostFX_Daylight
|
||||
m_EditorClassIdentifier: Unity.RenderPipelines.Core.Runtime::UnityEngine.Rendering.VolumeProfile
|
||||
components:
|
||||
- {fileID: -3245916173682126434}
|
||||
- {fileID: -4441572633185463556}
|
||||
- {fileID: 5577075502713826208}
|
||||
- {fileID: -2801731409977683993}
|
||||
--- !u!114 &5577075502713826208
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 1
|
||||
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: 66f335fb1ffd8684294ad653bf1c7564, type: 3}
|
||||
m_Name: ColorAdjustments
|
||||
m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.ColorAdjustments
|
||||
active: 1
|
||||
postExposure:
|
||||
m_OverrideState: 1
|
||||
m_Value: 0.1
|
||||
contrast:
|
||||
m_OverrideState: 1
|
||||
m_Value: 4
|
||||
colorFilter:
|
||||
m_OverrideState: 1
|
||||
m_Value: {r: 1, g: 1, b: 1, a: 1}
|
||||
hueShift:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
saturation:
|
||||
m_OverrideState: 1
|
||||
m_Value: 6
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 09ca16b0a83161346aaa963465d1ec16
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,38 @@
|
||||
%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: Sky_DaytimeProcedural
|
||||
m_Shader: {fileID: 106, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Parent: {fileID: 0}
|
||||
m_ModifiedSerializedProperties: 0
|
||||
m_ValidKeywords:
|
||||
- _SUNDISK_HIGH_QUALITY
|
||||
m_InvalidKeywords: []
|
||||
m_LightmapFlags: 4
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
disabledShaderPasses: []
|
||||
m_LockedProperties:
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs: []
|
||||
m_Ints: []
|
||||
m_Floats:
|
||||
- _AtmosphereThickness: 1
|
||||
- _Exposure: 1.1
|
||||
- _SunDisk: 2
|
||||
- _SunSize: 0.04
|
||||
- _SunSizeConvergence: 5
|
||||
m_Colors:
|
||||
- _GroundColor: {r: 0.6039216, g: 0.54901963, b: 0.4392157, a: 1}
|
||||
- _SkyTint: {r: 0.65882355, g: 0.78431374, b: 0.9098039, a: 1}
|
||||
m_BuildTextureStacks: []
|
||||
m_AllowLocking: 1
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e1cd63d2feef80f45a168f477934722f
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,38 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace ProjectM.Client
|
||||
{
|
||||
/// <summary>
|
||||
/// Live-tunable knobs for <see cref="WorldAtmosphereSystem"/> — the per-region fog/ambient cross-fade
|
||||
/// between the lush cyan-ordered meadow base (origin) and the hostile orange-wild arid expedition (+1000 X).
|
||||
/// Mirrors the <c>WorldFeelConfig</c>/<c>VFXConfig</c> bridge idiom: a MonoBehaviour placed in the gameplay
|
||||
/// scene with a static <see cref="Instance"/> the client presentation system reads (falling back to these
|
||||
/// same defaults when absent). Pure presentation — never touches the simulation. Colours are sRGB.
|
||||
/// </summary>
|
||||
public sealed class WorldAtmosphereConfig : MonoBehaviour
|
||||
{
|
||||
public static WorldAtmosphereConfig Instance;
|
||||
|
||||
[Header("Region boundary (camera world-space X)")]
|
||||
[Tooltip("Camera X past this reads as the +1000 expedition region (matches HudSystem's ExpeditionRegionXMin).")]
|
||||
public float BoundaryX = 500f;
|
||||
[Tooltip("Half-width of the smooth transition band around BoundaryX, in world units.")]
|
||||
public float BlendHalfWidth = 80f;
|
||||
|
||||
[Header("Base (meadow) atmosphere")]
|
||||
public Color BaseFogColor = new Color(0.784f, 0.878f, 0.824f, 1f); // #C8E0D2
|
||||
public float BaseFogDensity = 0.006f;
|
||||
public Color BaseAmbientSky = new Color(0.725f, 0.831f, 0.949f, 1f); // #B9D4F2
|
||||
|
||||
[Header("Expedition (arid desert) atmosphere")]
|
||||
public Color ExpeditionFogColor = new Color(0.851f, 0.549f, 0.227f, 1f); // #D98C3A
|
||||
public float ExpeditionFogDensity = 0.010f;
|
||||
public Color ExpeditionAmbientSky = new Color(0.910f, 0.769f, 0.604f, 1f); // #E8C49A
|
||||
|
||||
void OnEnable() { Instance = this; }
|
||||
void OnDisable() { if (Instance == this) Instance = null; }
|
||||
|
||||
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
|
||||
static void ResetStatics() { Instance = null; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 64d951a6fc764c84aa140356667f6cde
|
||||
@@ -0,0 +1,50 @@
|
||||
using Unity.Entities;
|
||||
using UnityEngine;
|
||||
|
||||
namespace ProjectM.Client
|
||||
{
|
||||
/// <summary>
|
||||
/// Client-only ATMOSPHERE cross-fade for the two-region world. A managed presentation system
|
||||
/// (SystemBase, main thread, NO Burst) in <see cref="PresentationSystemGroup"/> that OBSERVES the
|
||||
/// follow-camera's world-space X and lerps <see cref="RenderSettings"/> fog + Trilight sky-ambient between
|
||||
/// the lush cyan meadow base (origin) and the hostile orange arid expedition (+1000 X) — mirroring
|
||||
/// HudSystem's region split at camera X > 500. The directional light + skybox + post-FX volume stay
|
||||
/// GLOBAL; only fog colour/density + ambient sky colour shift per region. Pure presentation: never mutates
|
||||
/// the simulation, no ECS query (camera + RenderSettings only). Knobs live in
|
||||
/// <see cref="WorldAtmosphereConfig"/> (falls back to baked defaults when absent). Guarded to the gameplay
|
||||
/// "Game" scene so it never restyles the menu. Fog enable/mode + equator/ground ambient are baked into the
|
||||
/// scene; this only drives the per-region deltas.
|
||||
/// </summary>
|
||||
[WorldSystemFilter(WorldSystemFilterFlags.ClientSimulation)]
|
||||
[UpdateInGroup(typeof(PresentationSystemGroup))]
|
||||
public partial class WorldAtmosphereSystem : SystemBase
|
||||
{
|
||||
Camera _cam;
|
||||
|
||||
protected override void OnUpdate()
|
||||
{
|
||||
if (UnityEngine.SceneManagement.SceneManager.GetActiveScene().name != "Game") return;
|
||||
if (_cam == null) _cam = Camera.main;
|
||||
if (_cam == null) return;
|
||||
|
||||
var cfg = WorldAtmosphereConfig.Instance;
|
||||
float boundary = cfg != null ? cfg.BoundaryX : 500f;
|
||||
float half = cfg != null ? Mathf.Max(1f, cfg.BlendHalfWidth) : 80f;
|
||||
|
||||
Color baseFog = cfg != null ? cfg.BaseFogColor : new Color(0.784f, 0.878f, 0.824f, 1f);
|
||||
float baseDen = cfg != null ? cfg.BaseFogDensity : 0.006f;
|
||||
Color baseAmb = cfg != null ? cfg.BaseAmbientSky : new Color(0.725f, 0.831f, 0.949f, 1f);
|
||||
Color expFog = cfg != null ? cfg.ExpeditionFogColor : new Color(0.851f, 0.549f, 0.227f, 1f);
|
||||
float expDen = cfg != null ? cfg.ExpeditionFogDensity : 0.010f;
|
||||
Color expAmb = cfg != null ? cfg.ExpeditionAmbientSky : new Color(0.910f, 0.769f, 0.604f, 1f);
|
||||
|
||||
float x = _cam.transform.position.x;
|
||||
float t = Mathf.Clamp01((x - (boundary - half)) / (2f * half));
|
||||
t = t * t * (3f - 2f * t); // smoothstep
|
||||
|
||||
RenderSettings.fogColor = Color.Lerp(baseFog, expFog, t);
|
||||
RenderSettings.fogDensity = Mathf.Lerp(baseDen, expDen, t);
|
||||
RenderSettings.ambientSkyColor = Color.Lerp(baseAmb, expAmb, t);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a18f3829153b57d458785f851b924abc
|
||||
Reference in New Issue
Block a user