From 23cc86c4e9cabfa3b64e9c83b88d07f48b256ea1 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Mon, 14 Sep 2026 13:30:00 +0200 Subject: [PATCH] Ship CultMath 0.2.0 to Unity with a UnityEngine conversion bridge - Bump GameCult.Math and org.gamecult.cultmath to 0.2.0; the CultCache Unity tools package now depends on cultmath 0.2.0. - Rebuild the tracked netstandard2.1 CultMath.dll/pdb with the builder's deterministic command; build-unity-package.ps1 verifies it byte-for-byte. - Add Runtime/UnityBridge (CultMath.UnityBridge asmdef) with ToCultMath / ToUnity / ToColor extension methods for Vector2/3/4, Vector2Int/3Int, Quaternion and Color. C# only admits conversion operators on the source or target type, and the core DLL stays engine-free. - The builder admits exactly that one bridge assembly: it must reference UnityEngine and CultMath.dll, and no core source may be compiled in the package. - Sync the Unity copy of CultMath.hlsl and the third-party notice. Co-Authored-By: Claude Opus 5 --- packages/cultmath/THIRD-PARTY-NOTICES.md | 6 +- .../cultmath/scripts/build-unity-package.ps1 | 41 ++++++++---- .../cultmath/src/CultMath/CultMath.csproj | 4 +- .../unity/org.gamecult.cultmath/README.md | 12 +++- .../Runtime/Plugins/CultMath.dll | Bin 47104 -> 66048 bytes .../Runtime/Plugins/CultMath.pdb | Bin 23936 -> 33440 bytes .../Runtime/UnityBridge.meta | 8 +++ .../UnityBridge/CultMath.UnityBridge.asmdef | 16 +++++ .../CultMath.UnityBridge.asmdef.meta | 7 ++ .../Runtime/UnityBridge/UnityConversions.cs | 28 ++++++++ .../UnityBridge/UnityConversions.cs.meta | 11 ++++ .../Shaders/CultMath.hlsl | 61 ++++++++++++++++-- .../THIRD-PARTY-NOTICES.md | 6 +- .../unity/org.gamecult.cultmath/package.json | 4 +- .../Assets/Caching/package.json | 4 +- 15 files changed, 179 insertions(+), 29 deletions(-) create mode 100644 packages/cultmath/unity/org.gamecult.cultmath/Runtime/UnityBridge.meta create mode 100644 packages/cultmath/unity/org.gamecult.cultmath/Runtime/UnityBridge/CultMath.UnityBridge.asmdef create mode 100644 packages/cultmath/unity/org.gamecult.cultmath/Runtime/UnityBridge/CultMath.UnityBridge.asmdef.meta create mode 100644 packages/cultmath/unity/org.gamecult.cultmath/Runtime/UnityBridge/UnityConversions.cs create mode 100644 packages/cultmath/unity/org.gamecult.cultmath/Runtime/UnityBridge/UnityConversions.cs.meta diff --git a/packages/cultmath/THIRD-PARTY-NOTICES.md b/packages/cultmath/THIRD-PARTY-NOTICES.md index c283df2b..06ebb6c3 100644 --- a/packages/cultmath/THIRD-PARTY-NOTICES.md +++ b/packages/cultmath/THIRD-PARTY-NOTICES.md @@ -1,9 +1,9 @@ # Third-Party Notices -## 2D Simplex Noise +## 2D and 3D Simplex Noise -`math.simplex_noise` and `cultmath_simplex_noise` port the textureless 2D -simplex-noise function by Ian McEwan and Ashima Arts, as distributed by Stefan +`math.snoise` and `cultmath_snoise` port the textureless 2D and 3D +simplex-noise functions by Ian McEwan and Ashima Arts, as distributed by Stefan Gustavson's `webgl-noise` project and Unity Mathematics. - Copyright 2011 Ashima Arts. diff --git a/packages/cultmath/scripts/build-unity-package.ps1 b/packages/cultmath/scripts/build-unity-package.ps1 index f5fcacc0..7bc3da7c 100644 --- a/packages/cultmath/scripts/build-unity-package.ps1 +++ b/packages/cultmath/scripts/build-unity-package.ps1 @@ -52,6 +52,10 @@ $requiredTemplateFiles = @( "Runtime\Plugins\CultMath.dll.meta", "Runtime\Plugins\CultMath.pdb", "Runtime\Plugins\CultMath.pdb.meta", + "Runtime\UnityBridge\CultMath.UnityBridge.asmdef", + "Runtime\UnityBridge\CultMath.UnityBridge.asmdef.meta", + "Runtime\UnityBridge\UnityConversions.cs", + "Runtime\UnityBridge\UnityConversions.cs.meta", "Shaders\CultMath.hlsl", "Shaders\CultMath.hlsl.meta" ) @@ -62,7 +66,7 @@ foreach ($relativePath in $requiredTemplateFiles) { } $unityAssetFiles = @(Get-ChildItem -LiteralPath $templateRoot -Recurse -File | Where-Object { - $_.Extension -in @(".asmdef", ".dll", ".pdb", ".hlsl") + $_.Extension -in @(".asmdef", ".cs", ".dll", ".pdb", ".hlsl") }) $missingAssetMetas = @($unityAssetFiles | Where-Object { -not (Test-Path -LiteralPath ($_.FullName + ".meta")) }) $missingDirectoryMetas = @(Get-ChildItem -LiteralPath $templateRoot -Recurse -Directory | Where-Object { @@ -78,9 +82,18 @@ $pluginMeta = Get-Content -LiteralPath ($trackedAssembly + ".meta") -Raw if ($pluginMeta -notmatch '(?m)^\s*isExplicitlyReferenced:\s*0\s*$') { throw "CultMath.dll must be auto-referenced; explicit-only plugins do not reach dependent Unity asmdefs" } -$facadeDefinitions = @(Get-ChildItem -LiteralPath $templateRoot -Recurse -File -Filter "*.asmdef") -if ($facadeDefinitions.Count -ne 0) { - throw "CultMath's precompiled DLL is the Unity assembly authority; empty asmdef facades are forbidden" +# The precompiled DLL is the only authority for CultMath's numeric types. The one +# compiled assembly allowed beside it is the UnityEngine conversion bridge, which +# references that DLL and must not re-declare core sources. +$bridgeRoot = Join-Path $templateRoot "Runtime\UnityBridge" +$bridgeDefinition = Join-Path $bridgeRoot "CultMath.UnityBridge.asmdef" +$definitions = @(Get-ChildItem -LiteralPath $templateRoot -Recurse -File -Filter "*.asmdef") +if ($definitions.Count -ne 1 -or $definitions[0].FullName -ne $bridgeDefinition) { + throw "CultMath's Unity package may define only the Runtime\UnityBridge assembly; found: $($definitions.FullName -join ', ')" +} +$bridge = Get-Content -LiteralPath $bridgeDefinition -Raw | ConvertFrom-Json +if ($bridge.noEngineReferences -or -not $bridge.overrideReferences -or @($bridge.precompiledReferences) -notcontains "CultMath.dll") { + throw "CultMath.UnityBridge must reference UnityEngine and the precompiled CultMath.dll" } $expectedFileVersion = "$($manifest.version).0" $trackedFileVersion = [Diagnostics.FileVersionInfo]::GetVersionInfo($trackedAssembly).FileVersion @@ -97,23 +110,29 @@ foreach ($pair in @(@($freshAssembly, $trackedAssembly), @($freshSymbols, $track } } +$coreSourceNames = @(Get-ChildItem -LiteralPath (Join-Path $repoRoot "src\CultMath") -File -Filter "*.cs" | ForEach-Object Name) $trackedSourceFiles = @(Get-ChildItem -LiteralPath $templateRoot -Recurse -File -Filter "*.cs") -if ($trackedSourceFiles.Count -ne 0) { - throw "CultMath Unity package must not compile repository C# sources: $($trackedSourceFiles.FullName -join ', ')" +$strayOrCoreSources = @($trackedSourceFiles | Where-Object { + $_.DirectoryName -ne $bridgeRoot -or $coreSourceNames -contains $_.Name +}) +if ($trackedSourceFiles.Count -eq 0 -or $strayOrCoreSources.Count -ne 0) { + throw "CultMath Unity package may compile only bridge sources under Runtime\UnityBridge, never core sources: $($strayOrCoreSources.FullName -join ', ')" } New-Item -ItemType Directory -Force -Path $outputRoot | Out-Null Copy-Item -Path (Join-Path $templateRoot "*") -Destination $outputRoot -Recurse -Force $stagedAssemblies = @(Get-ChildItem -LiteralPath (Join-Path $outputRoot "Runtime\Plugins") -Filter "*.dll") +$stagedBridgeRoot = Join-Path $outputRoot "Runtime\UnityBridge" $stagedSources = @(Get-ChildItem -LiteralPath $outputRoot -Recurse -File -Filter "*.cs") -$stagedFacades = @(Get-ChildItem -LiteralPath $outputRoot -Recurse -File -Filter "*.asmdef") -if ($stagedAssemblies.Count -ne 1 -or $stagedAssemblies[0].Name -ne "CultMath.dll" -or $stagedSources.Count -ne 0 -or $stagedFacades.Count -ne 0) { - throw "CultMath package must contain one owned auto-referenced DLL, no C# source files, and no asmdef facade" +$stagedDefinitions = @(Get-ChildItem -LiteralPath $outputRoot -Recurse -File -Filter "*.asmdef") +$stagedStraySources = @($stagedSources | Where-Object { $_.DirectoryName -ne $stagedBridgeRoot }) +if ($stagedAssemblies.Count -ne 1 -or $stagedAssemblies[0].Name -ne "CultMath.dll" -or $stagedStraySources.Count -ne 0 -or $stagedDefinitions.Count -ne 1) { + throw "CultMath package must contain one owned auto-referenced DLL and only the UnityBridge assembly as source" } Write-Host "CultMath Unity package: $outputRoot" Write-Host "Package: $($manifest.name)@$($manifest.version)" Write-Host "Managed assemblies: $($stagedAssemblies.Count)" -Write-Host "C# source files: $($stagedSources.Count)" -Write-Host "Asmdef facades: $($stagedFacades.Count)" +Write-Host "Bridge C# source files: $($stagedSources.Count)" +Write-Host "Asmdef definitions: $($stagedDefinitions.Count)" diff --git a/packages/cultmath/src/CultMath/CultMath.csproj b/packages/cultmath/src/CultMath/CultMath.csproj index 0ca99063..a8f61d97 100644 --- a/packages/cultmath/src/CultMath/CultMath.csproj +++ b/packages/cultmath/src/CultMath/CultMath.csproj @@ -1,4 +1,4 @@ - + net8.0;netstandard2.1 @@ -8,7 +8,7 @@ CultMath CultMath GameCult.Math - 0.1.2 + 0.2.0 Clean-room C# math shaped for HLSL-style renderer code. GameCult README.md diff --git a/packages/cultmath/unity/org.gamecult.cultmath/README.md b/packages/cultmath/unity/org.gamecult.cultmath/README.md index 7d9c34bf..20e1840c 100644 --- a/packages/cultmath/unity/org.gamecult.cultmath/README.md +++ b/packages/cultmath/unity/org.gamecult.cultmath/README.md @@ -1,8 +1,16 @@ # CultMath for Unity This is CultMath's Unity 2021.3-compatible Git-UPM surface. It contains the -precompiled `CultMath.dll`, portable symbols, and the numeric -`Shaders/CultMath.hlsl` mirror. +precompiled `CultMath.dll`, portable symbols, the numeric +`Shaders/CultMath.hlsl` mirror, and the `CultMath.UnityBridge` assembly. + +`CultMath.UnityBridge` is the only C# source Unity compiles here. It holds the +UnityEngine conversions the engine-free core cannot declare: `ToCultMath()` on +`Vector2/3/4`, `Vector2Int/3Int`, `Quaternion`, and `Color`; `ToUnity()` on +`float2/3/4`, `int2/3`, and `quaternion`; `ToColor()` on `float4`. C# only +admits conversion operators on the source or target type, so these are +extension methods rather than implicit casts. Import `CultMath.UnityBridge` to +use them. Unity does not compile CultMath's repository source tree. That source uses the current C# language and remains owned by the normal .NET project. The package diff --git a/packages/cultmath/unity/org.gamecult.cultmath/Runtime/Plugins/CultMath.dll b/packages/cultmath/unity/org.gamecult.cultmath/Runtime/Plugins/CultMath.dll index 379dad44e209aea24d0cd34f7cb28a1a490d2ae8..8428d20690adaebbde2e500625a8f679c80308c2 100644 GIT binary patch literal 66048 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%0ARed(@)^bI8{rXMTJ- dbZkFVyKr9j)2Dv3{s)Bt=O+CB%>NA$_@DOK!M6Ya diff --git a/packages/cultmath/unity/org.gamecult.cultmath/Runtime/Plugins/CultMath.pdb b/packages/cultmath/unity/org.gamecult.cultmath/Runtime/Plugins/CultMath.pdb index 223b4de88b508404e9dd23578205c7692bc9427e..29e4b8f36d31510cf419bde4383440839fda51d1 100644 GIT binary patch literal 33440 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 D-I6+t literal 23936 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 + /// Explicit conversions between UnityEngine and CultMath value types. + /// C# only admits user-defined conversion operators declared on the source or target + /// type, and CultMath's core types stay engine-free, so the bridge is extension methods. + /// + public static class UnityConversions + { + public static float2 ToCultMath(this Vector2 value) => new float2(value.x, value.y); + public static float3 ToCultMath(this Vector3 value) => new float3(value.x, value.y, value.z); + public static float4 ToCultMath(this Vector4 value) => new float4(value.x, value.y, value.z, value.w); + public static float4 ToCultMath(this Color value) => new float4(value.r, value.g, value.b, value.a); + public static quaternion ToCultMath(this Quaternion value) => new quaternion(value.x, value.y, value.z, value.w); + public static int2 ToCultMath(this Vector2Int value) => new int2(value.x, value.y); + public static int3 ToCultMath(this Vector3Int value) => new int3(value.x, value.y, value.z); + + public static Vector2 ToUnity(this float2 value) => new Vector2(value.x, value.y); + public static Vector3 ToUnity(this float3 value) => new Vector3(value.x, value.y, value.z); + public static Vector4 ToUnity(this float4 value) => new Vector4(value.x, value.y, value.z, value.w); + public static Quaternion ToUnity(this quaternion value) => new Quaternion(value.x, value.y, value.z, value.w); + public static Vector2Int ToUnity(this int2 value) => new Vector2Int(value.x, value.y); + public static Vector3Int ToUnity(this int3 value) => new Vector3Int(value.x, value.y, value.z); + public static Color ToColor(this float4 value) => new Color(value.x, value.y, value.z, value.w); + } +} diff --git a/packages/cultmath/unity/org.gamecult.cultmath/Runtime/UnityBridge/UnityConversions.cs.meta b/packages/cultmath/unity/org.gamecult.cultmath/Runtime/UnityBridge/UnityConversions.cs.meta new file mode 100644 index 00000000..ccbd3f10 --- /dev/null +++ b/packages/cultmath/unity/org.gamecult.cultmath/Runtime/UnityBridge/UnityConversions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8fc742177b3f4715b204afe0e69a400c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/packages/cultmath/unity/org.gamecult.cultmath/Shaders/CultMath.hlsl b/packages/cultmath/unity/org.gamecult.cultmath/Shaders/CultMath.hlsl index 4c00fb69..f3c398d6 100644 --- a/packages/cultmath/unity/org.gamecult.cultmath/Shaders/CultMath.hlsl +++ b/packages/cultmath/unity/org.gamecult.cultmath/Shaders/CultMath.hlsl @@ -73,11 +73,64 @@ float cultmath_smootherstep(float value) return value * value * value * (value * (value * 6.0 - 15.0) + 10.0); } -float2 cultmath_simplex_mod289(float2 value) { return value - floor(value * (1.0 / 289.0)) * 289.0; } -float3 cultmath_simplex_mod289(float3 value) { return value - floor(value * (1.0 / 289.0)) * 289.0; } -float3 cultmath_simplex_permute(float3 value) { return cultmath_simplex_mod289(((value * 34.0) + 1.0) * value); } +float2 cultmath_snoise_mod289(float2 value) { return value - floor(value * (1.0 / 289.0)) * 289.0; } +float3 cultmath_snoise_mod289(float3 value) { return value - floor(value * (1.0 / 289.0)) * 289.0; } +float4 cultmath_snoise_mod289(float4 value) { return value - floor(value * (1.0 / 289.0)) * 289.0; } +float3 cultmath_snoise_permute(float3 value) { return cultmath_snoise_mod289(((value * 34.0) + 1.0) * value); } +float4 cultmath_snoise_permute(float4 value) { return cultmath_snoise_mod289(((value * 34.0) + 1.0) * value); } -float cultmath_simplex_noise(float2 value) +// Ashima Arts / Ian McEwan 3D simplex noise (MIT), same float32 evaluation +// order as the C# math.snoise(float3) mirror. +float cultmath_snoise(float3 value) +{ + const float2 c = float2(1.0 / 6.0, 1.0 / 3.0); + float3 i = floor(value + dot(value, c.yyy)); + float3 x0 = value - i + dot(i, c.xxx); + float3 g = step(x0.yzx, x0.xyz); + float3 l = 1.0 - g; + float3 i1 = min(g.xyz, l.zxy); + float3 i2 = max(g.xyz, l.zxy); + float3 x1 = x0 - i1 + c.xxx; + float3 x2 = x0 - i2 + c.yyy; + float3 x3 = x0 - 0.5; + + i = cultmath_snoise_mod289(i); + float4 p = cultmath_snoise_permute(cultmath_snoise_permute(cultmath_snoise_permute( + i.z + float4(0.0, i1.z, i2.z, 1.0)) + i.y + float4(0.0, i1.y, i2.y, 1.0)) + i.x + float4(0.0, i1.x, i2.x, 1.0)); + + const float n_ = 0.142857142857; + float3 ns = float3(2.0 * n_, 0.5 * n_ - 1.0, n_); + float4 j = p - 49.0 * floor(p * ns.z * ns.z); + float4 x_ = floor(j * ns.z); + float4 y_ = floor(j - 7.0 * x_); + float4 x = x_ * ns.x + ns.yyyy; + float4 y = y_ * ns.x + ns.yyyy; + float4 h = 1.0 - abs(x) - abs(y); + + float4 b0 = float4(x.xy, y.xy); + float4 b1 = float4(x.zw, y.zw); + float4 s0 = floor(b0) * 2.0 + 1.0; + float4 s1 = floor(b1) * 2.0 + 1.0; + float4 sh = -step(h, 0.0); + float4 a0 = b0.xzyw + s0.xzyw * sh.xxyy; + float4 a1 = b1.xzyw + s1.xzyw * sh.zzww; + + float3 p0 = float3(a0.xy, h.x); + float3 p1 = float3(a0.zw, h.y); + float3 p2 = float3(a1.xy, h.z); + float3 p3 = float3(a1.zw, h.w); + float4 norm = 1.79284291400159 - 0.85373472095314 * float4(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3)); + p0 *= norm.x; + p1 *= norm.y; + p2 *= norm.z; + p3 *= norm.w; + + float4 m = max(0.6 - float4(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), 0.0); + m = m * m; + return 42.0 * dot(m * m, float4(dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3))); +} + +float cultmath_snoise(float2 value) { const float4 c = float4( 0.211324865405187, diff --git a/packages/cultmath/unity/org.gamecult.cultmath/THIRD-PARTY-NOTICES.md b/packages/cultmath/unity/org.gamecult.cultmath/THIRD-PARTY-NOTICES.md index c283df2b..06ebb6c3 100644 --- a/packages/cultmath/unity/org.gamecult.cultmath/THIRD-PARTY-NOTICES.md +++ b/packages/cultmath/unity/org.gamecult.cultmath/THIRD-PARTY-NOTICES.md @@ -1,9 +1,9 @@ # Third-Party Notices -## 2D Simplex Noise +## 2D and 3D Simplex Noise -`math.simplex_noise` and `cultmath_simplex_noise` port the textureless 2D -simplex-noise function by Ian McEwan and Ashima Arts, as distributed by Stefan +`math.snoise` and `cultmath_snoise` port the textureless 2D and 3D +simplex-noise functions by Ian McEwan and Ashima Arts, as distributed by Stefan Gustavson's `webgl-noise` project and Unity Mathematics. - Copyright 2011 Ashima Arts. diff --git a/packages/cultmath/unity/org.gamecult.cultmath/package.json b/packages/cultmath/unity/org.gamecult.cultmath/package.json index 80ceddad..302eb481 100644 --- a/packages/cultmath/unity/org.gamecult.cultmath/package.json +++ b/packages/cultmath/unity/org.gamecult.cultmath/package.json @@ -1,7 +1,7 @@ -{ +{ "name": "org.gamecult.cultmath", "displayName": "CultMath", - "version": "0.1.2", + "version": "0.2.0", "unity": "2021.3", "description": "Precompiled CultMath numeric primitives and matching HLSL semantics for GameCult Unity runtimes.", "license": "MPL-2.0", diff --git a/src/GameCult.Unity/Assets/Caching/package.json b/src/GameCult.Unity/Assets/Caching/package.json index cde27289..560600a9 100644 --- a/src/GameCult.Unity/Assets/Caching/package.json +++ b/src/GameCult.Unity/Assets/Caching/package.json @@ -1,4 +1,4 @@ -{ +{ "name": "org.gamecult.caching.unity", "displayName": "GameCult CultCache Unity Tools", "version": "1.1.0", @@ -11,7 +11,7 @@ ], "dependencies": { "org.gamecult.cultlib": "1.0.57", - "org.gamecult.cultmath": "0.1.2" + "org.gamecult.cultmath": "0.2.0" }, "license": "MIT", "category": "Scripting"