From 002e709e98e9084f29c1fe7b2d3ca88cf926c867 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Fri, 10 Jul 2026 15:45:19 +0100 Subject: [PATCH] Consume EveUnity fields projection --- Aetheria.State/Aetheria.State.csproj | 1 + .../Gameplay/AetheriaRenderSplatBuffer.cs | 137 -------- .../AetheriaRenderSplatBuffer.cs.meta | 11 - .../Gameplay/AetheriaRenderSplatRasterizer.cs | 300 +----------------- Assets/Shaders/AetheriaRenderSplats.shader | 68 ---- .../Shaders/AetheriaRenderSplats.shader.meta | 10 - Assets/Shaders/AetheriaRenderSplatsCore.hlsl | 115 ------- .../AetheriaRenderSplatsCore.hlsl.meta | 10 - Packages/manifest.json | 3 +- .../AetheriaRuntimeGameViewportDocuments.cs | 3 +- .../AetheriaRuntimeRenderSplatDocuments.cs | 11 +- .../GameCult.Aetheria.State.Unity.asmdef | 1 + Packages/packages-lock.json | 12 +- 13 files changed, 27 insertions(+), 655 deletions(-) delete mode 100644 Assets/Scripts/Gameplay/AetheriaRenderSplatBuffer.cs delete mode 100644 Assets/Scripts/Gameplay/AetheriaRenderSplatBuffer.cs.meta delete mode 100644 Assets/Shaders/AetheriaRenderSplats.shader delete mode 100644 Assets/Shaders/AetheriaRenderSplats.shader.meta delete mode 100644 Assets/Shaders/AetheriaRenderSplatsCore.hlsl delete mode 100644 Assets/Shaders/AetheriaRenderSplatsCore.hlsl.meta diff --git a/Aetheria.State/Aetheria.State.csproj b/Aetheria.State/Aetheria.State.csproj index a071843e3..c8ca014f1 100644 --- a/Aetheria.State/Aetheria.State.csproj +++ b/Aetheria.State/Aetheria.State.csproj @@ -15,5 +15,6 @@ + diff --git a/Assets/Scripts/Gameplay/AetheriaRenderSplatBuffer.cs b/Assets/Scripts/Gameplay/AetheriaRenderSplatBuffer.cs deleted file mode 100644 index 9fab7182f..000000000 --- a/Assets/Scripts/Gameplay/AetheriaRenderSplatBuffer.cs +++ /dev/null @@ -1,137 +0,0 @@ -using GameCult.Aetheria.State.Verse; -using Unity.Mathematics; -using UnityEngine; - -public sealed class AetheriaRenderSplatBuffer : System.IDisposable -{ - public const string SplatBufferPropertyName = "_AetheriaSplats"; - public const string SplatCountPropertyName = "_AetheriaSplatCount"; - public const string ViewportToClipPropertyName = "_AetheriaViewportToClip"; - public const string ChannelFilterPropertyName = "_AetheriaChannelFilter"; - - private const int SplatStrideBytes = 80; - - private AetheriaRenderSplat[] _splats = System.Array.Empty(); - private GraphicsBuffer _buffer; - private int _capacity; - - public int Count { get; private set; } - public GraphicsBuffer Buffer => _buffer; - public bool HasGpuBuffer => _buffer != null && _buffer.IsValid() && Count > 0; - - public bool Upload(AetheriaRuntimeRenderSplatSoa splats, int channelFilter = -1, int layerFilter = -1) - { - Count = Pack(splats, channelFilter, layerFilter); - EnsureCapacity(Count); - if (Count <= 0) - return false; - - _buffer.SetData(_splats, 0, 0, Count); - return true; - } - - private int Pack(AetheriaRuntimeRenderSplatSoa splats, int channelFilter, int layerFilter) - { - if (splats == null || splats.Count <= 0) - return 0; - - EnsureCpuCapacity(splats.Count); - var count = 0; - for (var i = 0; i < splats.Count; i++) - { - var channel = Read(splats.Channel, i, 0); - if (channelFilter >= 0 && channel != channelFilter) - continue; - - var layerIndex = Read(splats.LayerIndex, i, -1); - if (layerFilter >= 0 && layerIndex != layerFilter) - continue; - - var halfExtentX = (float)Read(splats.HalfExtentX, i, 0); - var halfExtentY = (float)Read(splats.HalfExtentY, i, 0); - if (halfExtentX <= 0 || halfExtentY <= 0) - continue; - - _splats[count++] = new AetheriaRenderSplat - { - CenterHalfExtent = new float4( - (float)Read(splats.CenterX, i, 0), - (float)Read(splats.CenterY, i, 0), - halfExtentX, - halfExtentY), - RotationChannelFalloff = new float4( - (float)Read(splats.RotationCos, i, 1), - (float)Read(splats.RotationSin, i, 0), - channel, - Read(splats.Falloff, i, AetheriaRuntimeRenderSplatFalloffs.Smooth)), - LayerSource = new float4( - layerIndex, - Read(splats.SourceKind, i, AetheriaRuntimeRenderSplatSourceKinds.Constant), - (float)Read(splats.AnimationSpeed, i, 0), - (float)Read(splats.SourceFlags, i, 0)), - SourceFrequencyPhase = new float4( - (float)Read(splats.FrequencyX, i, 1), - (float)Read(splats.FrequencyY, i, 1), - (float)Read(splats.PhaseX, i, 0), - (float)Read(splats.PhaseY, i, 0)), - Value = new float4( - (float)Read(splats.ValueR, i, 0), - (float)Read(splats.ValueG, i, 0), - (float)Read(splats.ValueB, i, 0), - (float)Read(splats.ValueA, i, 1)) - }; - } - - return count; - } - - private void EnsureCpuCapacity(int count) - { - if (_splats.Length >= count) - return; - - _splats = new AetheriaRenderSplat[math.ceilpow2(math.max(1, count))]; - } - - private void EnsureCapacity(int count) - { - if (_buffer != null && _buffer.IsValid() && _capacity >= count) - return; - - _buffer?.Release(); - _buffer = null; - _capacity = 0; - if (count <= 0) - return; - - _capacity = math.ceilpow2(math.max(1, count)); - _buffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, _capacity, SplatStrideBytes); - } - - public void Dispose() - { - _buffer?.Release(); - _buffer = null; - _capacity = 0; - Count = 0; - } - - private static double Read(System.Collections.Generic.IReadOnlyList values, int index, double fallback) - { - return values != null && index >= 0 && index < values.Count ? values[index] : fallback; - } - - private static int Read(System.Collections.Generic.IReadOnlyList values, int index, int fallback) - { - return values != null && index >= 0 && index < values.Count ? values[index] : fallback; - } - - private struct AetheriaRenderSplat - { - public float4 CenterHalfExtent; - public float4 RotationChannelFalloff; - public float4 LayerSource; - public float4 SourceFrequencyPhase; - public float4 Value; - } -} diff --git a/Assets/Scripts/Gameplay/AetheriaRenderSplatBuffer.cs.meta b/Assets/Scripts/Gameplay/AetheriaRenderSplatBuffer.cs.meta deleted file mode 100644 index 0d577cb03..000000000 --- a/Assets/Scripts/Gameplay/AetheriaRenderSplatBuffer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 32e6f17486f34e8c8c5f7640bff319af -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/AetheriaRenderSplatRasterizer.cs b/Assets/Scripts/Gameplay/AetheriaRenderSplatRasterizer.cs index 462a8300a..573cb42e0 100644 --- a/Assets/Scripts/Gameplay/AetheriaRenderSplatRasterizer.cs +++ b/Assets/Scripts/Gameplay/AetheriaRenderSplatRasterizer.cs @@ -1,300 +1,6 @@ -using GameCult.Aetheria.State.Verse; -using Unity.Mathematics; -using UnityEngine; -using UnityEngine.Experimental.Rendering; -using UnityEngine.Rendering; +using GameCult.Eve.UnityScene.Fields; -public sealed class AetheriaRenderSplatRasterizer : MonoBehaviour +// Existing scenes retain this MonoScript GUID while EveUnity owns projection. +public sealed class AetheriaRenderSplatRasterizer : EveFieldsSplatRasterizer { - [SerializeField] - private Material splatMaterial; - - [SerializeField] - private RenderTexture targetTexture; - - [SerializeField] - private GraphicsFormat targetFormat = GraphicsFormat.R16_SFloat; - - [SerializeField] - private int width = 512; - - [SerializeField] - private int height = 512; - - [SerializeField] - private int channelFilter = -1; - - [SerializeField] - private int layerFilter = -1; - - [SerializeField] - private int materialPass; - - [SerializeField] - private Color clearColor = Color.clear; - - [SerializeField] - private bool clearBeforeDraw = true; - - private readonly AetheriaRenderSplatBuffer _buffer = new AetheriaRenderSplatBuffer(); - private CommandBuffer _commandBuffer; - private RenderTexture _ownedTargetTexture; - private Material _ownedSplatMaterial; - private static readonly int SplatBufferPropertyId = - Shader.PropertyToID(AetheriaRenderSplatBuffer.SplatBufferPropertyName); - private static readonly int SplatCountPropertyId = - Shader.PropertyToID(AetheriaRenderSplatBuffer.SplatCountPropertyName); - private static readonly int ViewportToClipPropertyId = - Shader.PropertyToID(AetheriaRenderSplatBuffer.ViewportToClipPropertyName); - private static readonly int ChannelFilterPropertyId = - Shader.PropertyToID(AetheriaRenderSplatBuffer.ChannelFilterPropertyName); - - public RenderTexture TargetTexture => targetTexture != null ? targetTexture : _ownedTargetTexture; - public int ChannelFilter - { - get => channelFilter; - set => channelFilter = value; - } - - public int LayerFilter - { - get => layerFilter; - set => layerFilter = value; - } - - public int LastDrawnCount { get; private set; } - - public RenderTexture Render( - AetheriaRuntimeRenderSplatsViewportDocument document, - int overrideWidth = 0, - int overrideHeight = 0) - { - if (document == null) - { - LastDrawnCount = 0; - return TargetTexture; - } - - var output = EnsureTarget(overrideWidth, overrideHeight); - var material = ResolveMaterial(); - if (output == null || material == null) - { - LastDrawnCount = 0; - return output; - } - - _buffer.Upload(document.Splats, channelFilter, layerFilter); - LastDrawnCount = _buffer.Count; - if (!_buffer.HasGpuBuffer) - { - if (clearBeforeDraw) - Clear(output); - return output; - } - - _commandBuffer ??= new CommandBuffer { name = "Aetheria Render Splats" }; - _commandBuffer.Clear(); - _commandBuffer.SetRenderTarget(output); - if (clearBeforeDraw) - _commandBuffer.ClearRenderTarget(false, true, clearColor); - - _commandBuffer.SetGlobalBuffer(SplatBufferPropertyId, _buffer.Buffer); - _commandBuffer.SetGlobalInt(SplatCountPropertyId, _buffer.Count); - _commandBuffer.SetGlobalInt(ChannelFilterPropertyId, channelFilter); - _commandBuffer.SetGlobalMatrix(ViewportToClipPropertyId, BuildViewportToClip(document.Viewport)); - _commandBuffer.DrawProcedural( - Matrix4x4.identity, - material, - math.max(0, materialPass), - MeshTopology.Triangles, - 6, - _buffer.Count); - Graphics.ExecuteCommandBuffer(_commandBuffer); - return output; - } - - public RenderTexture Render( - AetheriaRuntimeRenderSplatsViewportDocument document, - int overrideWidth, - int overrideHeight, - int overrideChannelFilter) - { - var previousChannelFilter = channelFilter; - channelFilter = overrideChannelFilter; - try - { - return Render(document, overrideWidth, overrideHeight); - } - finally - { - channelFilter = previousChannelFilter; - } - } - - public RenderTexture RenderLayer( - AetheriaRuntimeRenderSplatsViewportDocument document, - int overrideWidth, - int overrideHeight, - int overrideLayerFilter, - int overrideMaterialPass, - GraphicsFormat overrideTargetFormat, - Color overrideClearColor) - { - var previousLayerFilter = layerFilter; - var previousMaterialPass = materialPass; - var previousTargetFormat = targetFormat; - var previousClearColor = clearColor; - layerFilter = overrideLayerFilter; - materialPass = overrideMaterialPass; - targetFormat = overrideTargetFormat; - clearColor = overrideClearColor; - try - { - return Render(document, overrideWidth, overrideHeight); - } - finally - { - layerFilter = previousLayerFilter; - materialPass = previousMaterialPass; - targetFormat = previousTargetFormat; - clearColor = previousClearColor; - } - } - - public RenderTexture RenderLayerToTarget( - AetheriaRuntimeRenderSplatsViewportDocument document, - RenderTexture output, - int overrideLayerFilter, - int overrideMaterialPass, - Color overrideClearColor) - { - var previousTargetTexture = targetTexture; - var previousLayerFilter = layerFilter; - var previousMaterialPass = materialPass; - var previousClearColor = clearColor; - targetTexture = output; - layerFilter = overrideLayerFilter; - materialPass = overrideMaterialPass; - clearColor = overrideClearColor; - try - { - return Render(document, output != null ? output.width : 0, output != null ? output.height : 0); - } - finally - { - targetTexture = previousTargetTexture; - layerFilter = previousLayerFilter; - materialPass = previousMaterialPass; - clearColor = previousClearColor; - } - } - - private Material ResolveMaterial() - { - if (splatMaterial != null) - return splatMaterial; - - if (_ownedSplatMaterial != null) - return _ownedSplatMaterial; - - var shader = Shader.Find("Aetheria/Render Splats"); - if (shader == null) - return null; - - _ownedSplatMaterial = new Material(shader) - { - hideFlags = HideFlags.DontSave - }; - return _ownedSplatMaterial; - } - - private RenderTexture EnsureTarget(int overrideWidth, int overrideHeight) - { - if (targetTexture != null) - return targetTexture; - - var targetWidth = math.max(1, overrideWidth > 0 ? overrideWidth : width); - var targetHeight = math.max(1, overrideHeight > 0 ? overrideHeight : height); - if (_ownedTargetTexture != null && - _ownedTargetTexture.width == targetWidth && - _ownedTargetTexture.height == targetHeight && - _ownedTargetTexture.graphicsFormat == targetFormat) - { - return _ownedTargetTexture; - } - - ReleaseOwnedTarget(); - var descriptor = new RenderTextureDescriptor(targetWidth, targetHeight) - { - depthBufferBits = 0, - graphicsFormat = targetFormat, - msaaSamples = 1, - sRGB = false, - useMipMap = false, - autoGenerateMips = false - }; - _ownedTargetTexture = new RenderTexture(descriptor) - { - name = "Aetheria Render Splats", - filterMode = FilterMode.Bilinear, - wrapMode = TextureWrapMode.Clamp - }; - _ownedTargetTexture.Create(); - return _ownedTargetTexture; - } - - private void Clear(RenderTexture output) - { - _commandBuffer ??= new CommandBuffer { name = "Aetheria Render Splats" }; - _commandBuffer.Clear(); - _commandBuffer.SetRenderTarget(output); - _commandBuffer.ClearRenderTarget(false, true, clearColor); - Graphics.ExecuteCommandBuffer(_commandBuffer); - } - - private static Matrix4x4 BuildViewportToClip(AetheriaRuntimeViewportBounds viewport) - { - viewport ??= new AetheriaRuntimeViewportBounds(); - var minX = (float)math.min(viewport.MinX, viewport.MaxX); - var minY = (float)math.min(viewport.MinY, viewport.MaxY); - var maxX = (float)math.max(viewport.MinX, viewport.MaxX); - var maxY = (float)math.max(viewport.MinY, viewport.MaxY); - var width = math.max(0.0001f, maxX - minX); - var height = math.max(0.0001f, maxY - minY); - - return new Matrix4x4( - new Vector4(2f / width, 0, 0, 0), - new Vector4(0, 2f / height, 0, 0), - new Vector4(0, 0, 1, 0), - new Vector4(-(maxX + minX) / width, -(maxY + minY) / height, 0, 1)); - } - - private void OnDisable() - { - _buffer.Dispose(); - _commandBuffer?.Release(); - _commandBuffer = null; - DestroyOwnedMaterial(); - ReleaseOwnedTarget(); - LastDrawnCount = 0; - } - - private void DestroyOwnedMaterial() - { - if (_ownedSplatMaterial == null) - return; - - Destroy(_ownedSplatMaterial); - _ownedSplatMaterial = null; - } - - private void ReleaseOwnedTarget() - { - if (_ownedTargetTexture == null) - return; - - _ownedTargetTexture.Release(); - Destroy(_ownedTargetTexture); - _ownedTargetTexture = null; - } } diff --git a/Assets/Shaders/AetheriaRenderSplats.shader b/Assets/Shaders/AetheriaRenderSplats.shader deleted file mode 100644 index 589d414be..000000000 --- a/Assets/Shaders/AetheriaRenderSplats.shader +++ /dev/null @@ -1,68 +0,0 @@ -Shader "Aetheria/Render Splats" -{ - Properties - { - _ValueScale("Value Scale", Float) = 1 - } - - SubShader - { - Tags { "RenderType" = "Transparent" "Queue" = "Transparent" } - - Pass - { - Name "Add" - Cull Off - ZWrite Off - ZTest Always - BlendOp Add - Blend One One - - HLSLPROGRAM - #pragma target 4.5 - #pragma vertex Vert - #pragma fragment Frag - #include "UnityCG.cginc" - #define AETHERIA_SPLAT_PASS - #include "AetheriaRenderSplatsCore.hlsl" - ENDHLSL - } - - Pass - { - Name "Max" - Cull Off - ZWrite Off - ZTest Always - BlendOp Max - Blend One One - - HLSLPROGRAM - #pragma target 4.5 - #pragma vertex Vert - #pragma fragment Frag - #include "UnityCG.cginc" - #define AETHERIA_SPLAT_PASS - #include "AetheriaRenderSplatsCore.hlsl" - ENDHLSL - } - - Pass - { - Name "Alpha" - Cull Off - ZWrite Off - ZTest Always - Blend SrcAlpha OneMinusSrcAlpha - - HLSLPROGRAM - #pragma target 4.5 - #pragma vertex Vert - #pragma fragment Frag - #include "UnityCG.cginc" - #define AETHERIA_SPLAT_PASS - #include "AetheriaRenderSplatsCore.hlsl" - ENDHLSL - } - } -} diff --git a/Assets/Shaders/AetheriaRenderSplats.shader.meta b/Assets/Shaders/AetheriaRenderSplats.shader.meta deleted file mode 100644 index ba44374f6..000000000 --- a/Assets/Shaders/AetheriaRenderSplats.shader.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: a1aa8658e37f433cb08a29ab01f4e8e5 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - preprocessorOverride: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Shaders/AetheriaRenderSplatsCore.hlsl b/Assets/Shaders/AetheriaRenderSplatsCore.hlsl deleted file mode 100644 index 5f73e4dab..000000000 --- a/Assets/Shaders/AetheriaRenderSplatsCore.hlsl +++ /dev/null @@ -1,115 +0,0 @@ -#ifndef AETHERIA_RENDER_SPLATS_CORE_INCLUDED -#define AETHERIA_RENDER_SPLATS_CORE_INCLUDED - -struct AetheriaSplat -{ - float4 centerHalfExtent; - float4 rotationChannelFalloff; - float4 layerSource; - float4 sourceFrequencyPhase; - float4 value; -}; - -StructuredBuffer _AetheriaSplats; -float4x4 _AetheriaViewportToClip; -int _AetheriaSplatCount; -int _AetheriaChannelFilter; -float _ValueScale; - -float hash21(float2 p) -{ - p = frac(p * float2(123.34, 456.21)); - p += dot(p, p + 45.32); - return frac(p.x * p.y); -} - -float valueNoise(float2 p) -{ - float2 i = floor(p); - float2 f = frac(p); - float a = hash21(i); - float b = hash21(i + float2(1, 0)); - float c = hash21(i + float2(0, 1)); - float d = hash21(i + float2(1, 1)); - float2 u = f * f * (3 - 2 * f); - return lerp(lerp(a, b, u.x), lerp(c, d, u.x), u.y) * 2 - 1; -} - -struct Varyings -{ - float4 position : SV_POSITION; - float2 localUv : TEXCOORD0; - nointerpolation uint instanceId : TEXCOORD1; -}; - -Varyings Vert(uint vertexId : SV_VertexID, uint instanceId : SV_InstanceID) -{ - static const float2 corners[6] = - { - float2(-1, -1), - float2(1, -1), - float2(1, 1), - float2(-1, -1), - float2(1, 1), - float2(-1, 1) - }; - - AetheriaSplat splat = _AetheriaSplats[instanceId]; - float2 local = corners[vertexId]; - float2 scaled = local * splat.centerHalfExtent.zw; - float c = splat.rotationChannelFalloff.x; - float s = splat.rotationChannelFalloff.y; - float2 world = splat.centerHalfExtent.xy + float2( - scaled.x * c - scaled.y * s, - scaled.x * s + scaled.y * c); - - Varyings output; - output.position = mul(_AetheriaViewportToClip, float4(world, 0, 1)); - output.localUv = local; - output.instanceId = instanceId; - return output; -} - -float ResolveFalloff(float2 localUv, int falloff) -{ - float distance01 = saturate(length(localUv)); - if (falloff == 0) - return 1; - if (falloff == 1) - return saturate(1 - distance01); - if (falloff == 3) - { - float t = smoothstep(0, 1, distance01); - return t; - } - - return 1 - smoothstep(0, 1, distance01); -} - -float4 Frag(Varyings input) : SV_Target -{ - AetheriaSplat splat = _AetheriaSplats[input.instanceId]; - int channel = (int)round(splat.rotationChannelFalloff.z); - if (_AetheriaChannelFilter >= 0 && channel != _AetheriaChannelFilter) - discard; - - int falloff = (int)round(splat.rotationChannelFalloff.w); - float alpha = ResolveFalloff(input.localUv, falloff); - clip(alpha - 0.0001); - - int sourceKind = (int)round(splat.layerSource.y); - float source = 1; - if (sourceKind == 1 || sourceKind == 2) - { - float2 frequency = splat.sourceFrequencyPhase.xy; - float2 phase = splat.sourceFrequencyPhase.zw; - float timeOffset = sourceKind == 2 ? _Time.y * splat.layerSource.z : 0; - source = valueNoise(input.localUv * frequency + phase + timeOffset); - if (splat.layerSource.w != 0) - source = abs(source); - } - - return splat.value * (alpha * source * _ValueScale); -} - -#endif diff --git a/Assets/Shaders/AetheriaRenderSplatsCore.hlsl.meta b/Assets/Shaders/AetheriaRenderSplatsCore.hlsl.meta deleted file mode 100644 index b0399d066..000000000 --- a/Assets/Shaders/AetheriaRenderSplatsCore.hlsl.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 91df759011f84ed8b003bb7828809e0b -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - preprocessorOverride: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/manifest.json b/Packages/manifest.json index bcdc4ff80..3433650c7 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -23,7 +23,8 @@ "org.gamecult.cultmath": "file:../../CultMath", "org.gamecult.cultlib": "https://github.com/GameCult/CultLib.git?path=/unity/org.gamecult.cultlib#cultlib-unity-source-v1.0.3-r2", "org.gamecult.eve.surface": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.surface#eveunity-surface-v0.1.0", - "org.gamecult.eve.unity-scene": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-scene#eveunity-scene-v0.1.1", + "org.gamecult.eve.plugin-fields": "https://github.com/GameCult/EvePlugins.git?path=/plugins/eve-plugin-fields/unity/org.gamecult.eve.plugin-fields#eve-plugin-fields-unity-v0.1.1", + "org.gamecult.eve.unity-scene": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-scene#eveunity-scene-v0.1.2", "org.gamecult.eve.unity-uitoolkit": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-uitoolkit#eveunity-uitoolkit-v0.1.0", "com.unity.modules.accessibility": "1.0.0", "com.unity.modules.adaptiveperformance": "1.0.0", diff --git a/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeGameViewportDocuments.cs b/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeGameViewportDocuments.cs index 8ab928bb9..473f4d59e 100644 --- a/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeGameViewportDocuments.cs +++ b/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeGameViewportDocuments.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Linq; using GameCult.Caching; +using GameCult.Eve.PluginFields; using MessagePack; #nullable enable @@ -1305,7 +1306,7 @@ namespace GameCult.Aetheria.State.Verse } [MessagePackObject] - public sealed class AetheriaRuntimeViewportBounds + public sealed class AetheriaRuntimeViewportBounds : IEveFieldsViewport { [Key(0)] public double MinX { get; set; } diff --git a/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeRenderSplatDocuments.cs b/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeRenderSplatDocuments.cs index 3b8eb7d38..8179ae7b3 100644 --- a/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeRenderSplatDocuments.cs +++ b/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeRenderSplatDocuments.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using GameCult.Caching; +using GameCult.Eve.PluginFields; using MessagePack; #nullable enable @@ -52,7 +53,7 @@ namespace GameCult.Aetheria.State.Verse [CultDocument("gamecult.fields.splats", "gamecult.fields.splats.v1")] [MessagePackObject] - public sealed class AetheriaRuntimeRenderSplatsViewportDocument + public sealed class AetheriaRuntimeRenderSplatsViewportDocument : IEveFieldsSplatsDocument { [Key(0)] public string Schema { get; set; } = AetheriaRuntimeDaemonSchemas.RenderSplatsViewport; @@ -84,10 +85,14 @@ namespace GameCult.Aetheria.State.Verse [Key(9)] public AetheriaRuntimeRenderSplatSoa Splats { get; set; } = new AetheriaRuntimeRenderSplatSoa(); + + IEveFieldsViewport IEveFieldsSplatsDocument.Viewport => Viewport; + IReadOnlyList IEveFieldsSplatsDocument.Layers => Layers; + IEveFieldsSplatSoa IEveFieldsSplatsDocument.Splats => Splats; } [MessagePackObject] - public sealed class AetheriaRuntimeRenderSplatLayerDefinition + public sealed class AetheriaRuntimeRenderSplatLayerDefinition : IEveFieldsSplatLayer { [Key(0)] public string LayerKey { get; set; } = ""; @@ -121,7 +126,7 @@ namespace GameCult.Aetheria.State.Verse } [MessagePackObject] - public sealed class AetheriaRuntimeRenderSplatSoa + public sealed class AetheriaRuntimeRenderSplatSoa : IEveFieldsSplatSoa { [Key(0)] public int Count { get; set; } diff --git a/Packages/org.gamecult.aetheria.state/Runtime/GameCult.Aetheria.State.Unity.asmdef b/Packages/org.gamecult.aetheria.state/Runtime/GameCult.Aetheria.State.Unity.asmdef index 1ea8f5a96..5b9752053 100644 --- a/Packages/org.gamecult.aetheria.state/Runtime/GameCult.Aetheria.State.Unity.asmdef +++ b/Packages/org.gamecult.aetheria.state/Runtime/GameCult.Aetheria.State.Unity.asmdef @@ -3,6 +3,7 @@ "rootNamespace": "GameCult.Aetheria.State.Unity", "references": [ "GameCult.Eve.Surface", + "GameCult.Eve.PluginFields", "GameCult.Mesh", "CultMath", "MessagePack" diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index c06702c97..798ed046b 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -323,6 +323,13 @@ "source": "local", "dependencies": {} }, + "org.gamecult.eve.plugin-fields": { + "version": "https://github.com/GameCult/EvePlugins.git?path=/plugins/eve-plugin-fields/unity/org.gamecult.eve.plugin-fields#eve-plugin-fields-unity-v0.1.1", + "depth": 0, + "source": "git", + "dependencies": {}, + "hash": "0b099274a4e2b4c301eced4322166837792f585a" + }, "org.gamecult.eve.surface": { "version": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.surface#eveunity-surface-v0.1.0", "depth": 0, @@ -333,14 +340,15 @@ "hash": "e10821f1cc81f619479c6507438f6a097d1f0ce2" }, "org.gamecult.eve.unity-scene": { - "version": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-scene#eveunity-scene-v0.1.1", + "version": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-scene#eveunity-scene-v0.1.2", "depth": 0, "source": "git", "dependencies": { "org.gamecult.cultlib": "1.0.3", + "org.gamecult.eve.plugin-fields": "0.1.1", "org.gamecult.eve.surface": "0.1.0" }, - "hash": "7e65154d7f42cf1c4ac55871c35676e7ccd2e5b2" + "hash": "3e23fff486f2d29451cad59eafc7a6a2d4ac460b" }, "org.gamecult.eve.unity-uitoolkit": { "version": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-uitoolkit#eveunity-uitoolkit-v0.1.0",