From feb7cf86069ec8fa6547a60817f4e1e60a1ad43f Mon Sep 17 00:00:00 2001 From: Nibu Date: Wed, 11 Nov 2026 11:53:16 +0000 Subject: [PATCH 1/2] Shaders: GalaxyMap, Clouds, Lightning, SimplexBrush use cultmath_snoise from CultMath.hlsl CPU snoise (CultMath C#) and the GPU shaders now share one implementation, so fBm agrees. Deletes the GPU Noise copies nothing includes any more (Classic 2D/3D, Simplex 3D, SimplexGrad 3D). Background.shader keeps SimplexNoise2D/SimplexNoiseGrad2D: CultMath has no 2D gradient (cultmath_snoise_grad is float3 -> float4 only). Co-Authored-By: Claude Sonnet 5.5 --- Assets/Plugins/GPU Noise/ClassicNoise2D.cginc | 129 ------------ .../GPU Noise/ClassicNoise2D.cginc.meta | 5 - Assets/Plugins/GPU Noise/ClassicNoise3D.cginc | 194 ------------------ .../GPU Noise/ClassicNoise3D.cginc.meta | 5 - Assets/Plugins/GPU Noise/SimplexNoise3D.cginc | 114 ---------- .../GPU Noise/SimplexNoise3D.cginc.meta | 9 - .../GPU Noise/SimplexNoiseGrad3D.cginc | 118 ----------- .../GPU Noise/SimplexNoiseGrad3D.cginc.meta | 9 - 8 files changed, 583 deletions(-) delete mode 100644 Assets/Plugins/GPU Noise/ClassicNoise2D.cginc delete mode 100644 Assets/Plugins/GPU Noise/ClassicNoise2D.cginc.meta delete mode 100644 Assets/Plugins/GPU Noise/ClassicNoise3D.cginc delete mode 100644 Assets/Plugins/GPU Noise/ClassicNoise3D.cginc.meta delete mode 100644 Assets/Plugins/GPU Noise/SimplexNoise3D.cginc delete mode 100644 Assets/Plugins/GPU Noise/SimplexNoise3D.cginc.meta delete mode 100644 Assets/Plugins/GPU Noise/SimplexNoiseGrad3D.cginc delete mode 100644 Assets/Plugins/GPU Noise/SimplexNoiseGrad3D.cginc.meta diff --git a/Assets/Plugins/GPU Noise/ClassicNoise2D.cginc b/Assets/Plugins/GPU Noise/ClassicNoise2D.cginc deleted file mode 100644 index ef6b2e96c..000000000 --- a/Assets/Plugins/GPU Noise/ClassicNoise2D.cginc +++ /dev/null @@ -1,129 +0,0 @@ -// -// Noise Shader Library for Unity - https://github.com/keijiro/NoiseShader -// -// Original work (webgl-noise) Copyright (C) 2011 Stefan Gustavson -// Translation and modification was made by Keijiro Takahashi. -// -// This shader is based on the webgl-noise GLSL shader. For further details -// of the original shader, please see the following description from the -// original source code. -// - -// -// GLSL textureless classic 2D noise "cnoise", -// with an RSL-style periodic variant "pnoise". -// Author: Stefan Gustavson (stefan.gustavson@liu.se) -// Version: 2011-08-22 -// -// Many thanks to Ian McEwan of Ashima Arts for the -// ideas for permutation and gradient selection. -// -// Copyright (c) 2011 Stefan Gustavson. All rights reserved. -// Distributed under the MIT license. See LICENSE file. -// https://github.com/ashima/webgl-noise -// - -float4 mod(float4 x, float4 y) -{ - return x - y * floor(x / y); -} - -float4 mod289(float4 x) -{ - return x - floor(x / 289.0) * 289.0; -} - -float4 permute(float4 x) -{ - return mod289(((x*34.0)+1.0)*x); -} - -float4 taylorInvSqrt(float4 r) -{ - return (float4)1.79284291400159 - r * 0.85373472095314; -} - -float2 fade(float2 t) { - return t*t*t*(t*(t*6.0-15.0)+10.0); -} - -// Classic Perlin noise -float cnoise(float2 P) -{ - float4 Pi = floor(P.xyxy) + float4(0.0, 0.0, 1.0, 1.0); - float4 Pf = frac (P.xyxy) - float4(0.0, 0.0, 1.0, 1.0); - Pi = mod289(Pi); // To avoid truncation effects in permutation - float4 ix = Pi.xzxz; - float4 iy = Pi.yyww; - float4 fx = Pf.xzxz; - float4 fy = Pf.yyww; - - float4 i = permute(permute(ix) + iy); - - float4 gx = frac(i / 41.0) * 2.0 - 1.0 ; - float4 gy = abs(gx) - 0.5 ; - float4 tx = floor(gx + 0.5); - gx = gx - tx; - - float2 g00 = float2(gx.x,gy.x); - float2 g10 = float2(gx.y,gy.y); - float2 g01 = float2(gx.z,gy.z); - float2 g11 = float2(gx.w,gy.w); - - float4 norm = taylorInvSqrt(float4(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11))); - g00 *= norm.x; - g01 *= norm.y; - g10 *= norm.z; - g11 *= norm.w; - - float n00 = dot(g00, float2(fx.x, fy.x)); - float n10 = dot(g10, float2(fx.y, fy.y)); - float n01 = dot(g01, float2(fx.z, fy.z)); - float n11 = dot(g11, float2(fx.w, fy.w)); - - float2 fade_xy = fade(Pf.xy); - float2 n_x = lerp(float2(n00, n01), float2(n10, n11), fade_xy.x); - float n_xy = lerp(n_x.x, n_x.y, fade_xy.y); - return 2.3 * n_xy; -} - -// Classic Perlin noise, periodic variant -float pnoise(float2 P, float2 rep) -{ - float4 Pi = floor(P.xyxy) + float4(0.0, 0.0, 1.0, 1.0); - float4 Pf = frac (P.xyxy) - float4(0.0, 0.0, 1.0, 1.0); - Pi = mod(Pi, rep.xyxy); // To create noise with explicit period - Pi = mod289(Pi); // To avoid truncation effects in permutation - float4 ix = Pi.xzxz; - float4 iy = Pi.yyww; - float4 fx = Pf.xzxz; - float4 fy = Pf.yyww; - - float4 i = permute(permute(ix) + iy); - - float4 gx = frac(i / 41.0) * 2.0 - 1.0 ; - float4 gy = abs(gx) - 0.5 ; - float4 tx = floor(gx + 0.5); - gx = gx - tx; - - float2 g00 = float2(gx.x,gy.x); - float2 g10 = float2(gx.y,gy.y); - float2 g01 = float2(gx.z,gy.z); - float2 g11 = float2(gx.w,gy.w); - - float4 norm = taylorInvSqrt(float4(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11))); - g00 *= norm.x; - g01 *= norm.y; - g10 *= norm.z; - g11 *= norm.w; - - float n00 = dot(g00, float2(fx.x, fy.x)); - float n10 = dot(g10, float2(fx.y, fy.y)); - float n01 = dot(g01, float2(fx.z, fy.z)); - float n11 = dot(g11, float2(fx.w, fy.w)); - - float2 fade_xy = fade(Pf.xy); - float2 n_x = lerp(float2(n00, n01), float2(n10, n11), fade_xy.x); - float n_xy = lerp(n_x.x, n_x.y, fade_xy.y); - return 2.3 * n_xy; -} diff --git a/Assets/Plugins/GPU Noise/ClassicNoise2D.cginc.meta b/Assets/Plugins/GPU Noise/ClassicNoise2D.cginc.meta deleted file mode 100644 index ff437e70a..000000000 --- a/Assets/Plugins/GPU Noise/ClassicNoise2D.cginc.meta +++ /dev/null @@ -1,5 +0,0 @@ -fileFormatVersion: 2 -guid: e1b0b5fd6a4e44923b40d856017562e1 -ShaderImporter: - defaultTextures: [] - userData: diff --git a/Assets/Plugins/GPU Noise/ClassicNoise3D.cginc b/Assets/Plugins/GPU Noise/ClassicNoise3D.cginc deleted file mode 100644 index 738f6d12a..000000000 --- a/Assets/Plugins/GPU Noise/ClassicNoise3D.cginc +++ /dev/null @@ -1,194 +0,0 @@ -// -// Noise Shader Library for Unity - https://github.com/keijiro/NoiseShader -// -// Original work (webgl-noise) Copyright (C) 2011 Stefan Gustavson -// Translation and modification was made by Keijiro Takahashi. -// -// This shader is based on the webgl-noise GLSL shader. For further details -// of the original shader, please see the following description from the -// original source code. -// - -// -// GLSL textureless classic 3D noise "cnoise", -// with an RSL-style periodic variant "pnoise". -// Author: Stefan Gustavson (stefan.gustavson@liu.se) -// Version: 2011-10-11 -// -// Many thanks to Ian McEwan of Ashima Arts for the -// ideas for permutation and gradient selection. -// -// Copyright (c) 2011 Stefan Gustavson. All rights reserved. -// Distributed under the MIT license. See LICENSE file. -// https://github.com/ashima/webgl-noise -// - -float3 mod(float3 x, float3 y) -{ - return x - y * floor(x / y); -} - -float3 mod289(float3 x) -{ - return x - floor(x / 289.0) * 289.0; -} - -float4 mod289(float4 x) -{ - return x - floor(x / 289.0) * 289.0; -} - -float4 permute(float4 x) -{ - return mod289(((x*34.0)+1.0)*x); -} - -float4 taylorInvSqrt(float4 r) -{ - return (float4)1.79284291400159 - r * 0.85373472095314; -} - -float3 fade(float3 t) { - return t*t*t*(t*(t*6.0-15.0)+10.0); -} - -// Classic Perlin noise -float cnoise(float3 P) -{ - float3 Pi0 = floor(P); // Integer part for indexing - float3 Pi1 = Pi0 + (float3)1.0; // Integer part + 1 - Pi0 = mod289(Pi0); - Pi1 = mod289(Pi1); - float3 Pf0 = frac(P); // Fractional part for interpolation - float3 Pf1 = Pf0 - (float3)1.0; // Fractional part - 1.0 - float4 ix = float4(Pi0.x, Pi1.x, Pi0.x, Pi1.x); - float4 iy = float4(Pi0.y, Pi0.y, Pi1.y, Pi1.y); - float4 iz0 = (float4)Pi0.z; - float4 iz1 = (float4)Pi1.z; - - float4 ixy = permute(permute(ix) + iy); - float4 ixy0 = permute(ixy + iz0); - float4 ixy1 = permute(ixy + iz1); - - float4 gx0 = ixy0 / 7.0; - float4 gy0 = frac(floor(gx0) / 7.0) - 0.5; - gx0 = frac(gx0); - float4 gz0 = (float4)0.5 - abs(gx0) - abs(gy0); - float4 sz0 = step(gz0, (float4)0.0); - gx0 -= sz0 * (step((float4)0.0, gx0) - 0.5); - gy0 -= sz0 * (step((float4)0.0, gy0) - 0.5); - - float4 gx1 = ixy1 / 7.0; - float4 gy1 = frac(floor(gx1) / 7.0) - 0.5; - gx1 = frac(gx1); - float4 gz1 = (float4)0.5 - abs(gx1) - abs(gy1); - float4 sz1 = step(gz1, (float4)0.0); - gx1 -= sz1 * (step((float4)0.0, gx1) - 0.5); - gy1 -= sz1 * (step((float4)0.0, gy1) - 0.5); - - float3 g000 = float3(gx0.x,gy0.x,gz0.x); - float3 g100 = float3(gx0.y,gy0.y,gz0.y); - float3 g010 = float3(gx0.z,gy0.z,gz0.z); - float3 g110 = float3(gx0.w,gy0.w,gz0.w); - float3 g001 = float3(gx1.x,gy1.x,gz1.x); - float3 g101 = float3(gx1.y,gy1.y,gz1.y); - float3 g011 = float3(gx1.z,gy1.z,gz1.z); - float3 g111 = float3(gx1.w,gy1.w,gz1.w); - - float4 norm0 = taylorInvSqrt(float4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); - g000 *= norm0.x; - g010 *= norm0.y; - g100 *= norm0.z; - g110 *= norm0.w; - - float4 norm1 = taylorInvSqrt(float4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); - g001 *= norm1.x; - g011 *= norm1.y; - g101 *= norm1.z; - g111 *= norm1.w; - - float n000 = dot(g000, Pf0); - float n100 = dot(g100, float3(Pf1.x, Pf0.y, Pf0.z)); - float n010 = dot(g010, float3(Pf0.x, Pf1.y, Pf0.z)); - float n110 = dot(g110, float3(Pf1.x, Pf1.y, Pf0.z)); - float n001 = dot(g001, float3(Pf0.x, Pf0.y, Pf1.z)); - float n101 = dot(g101, float3(Pf1.x, Pf0.y, Pf1.z)); - float n011 = dot(g011, float3(Pf0.x, Pf1.y, Pf1.z)); - float n111 = dot(g111, Pf1); - - float3 fade_xyz = fade(Pf0); - float4 n_z = lerp(float4(n000, n100, n010, n110), float4(n001, n101, n011, n111), fade_xyz.z); - float2 n_yz = lerp(n_z.xy, n_z.zw, fade_xyz.y); - float n_xyz = lerp(n_yz.x, n_yz.y, fade_xyz.x); - return 2.2 * n_xyz; -} - -// Classic Perlin noise, periodic variant -float pnoise(float3 P, float3 rep) -{ - float3 Pi0 = mod(floor(P), rep); // Integer part, modulo period - float3 Pi1 = mod(Pi0 + (float3)1.0, rep); // Integer part + 1, mod period - Pi0 = mod289(Pi0); - Pi1 = mod289(Pi1); - float3 Pf0 = frac(P); // Fractional part for interpolation - float3 Pf1 = Pf0 - (float3)1.0; // Fractional part - 1.0 - float4 ix = float4(Pi0.x, Pi1.x, Pi0.x, Pi1.x); - float4 iy = float4(Pi0.y, Pi0.y, Pi1.y, Pi1.y); - float4 iz0 = (float4)Pi0.z; - float4 iz1 = (float4)Pi1.z; - - float4 ixy = permute(permute(ix) + iy); - float4 ixy0 = permute(ixy + iz0); - float4 ixy1 = permute(ixy + iz1); - - float4 gx0 = ixy0 / 7.0; - float4 gy0 = frac(floor(gx0) / 7.0) - 0.5; - gx0 = frac(gx0); - float4 gz0 = (float4)0.5 - abs(gx0) - abs(gy0); - float4 sz0 = step(gz0, (float4)0.0); - gx0 -= sz0 * (step((float4)0.0, gx0) - 0.5); - gy0 -= sz0 * (step((float4)0.0, gy0) - 0.5); - - float4 gx1 = ixy1 / 7.0; - float4 gy1 = frac(floor(gx1) / 7.0) - 0.5; - gx1 = frac(gx1); - float4 gz1 = (float4)0.5 - abs(gx1) - abs(gy1); - float4 sz1 = step(gz1, (float4)0.0); - gx1 -= sz1 * (step((float4)0.0, gx1) - 0.5); - gy1 -= sz1 * (step((float4)0.0, gy1) - 0.5); - - float3 g000 = float3(gx0.x,gy0.x,gz0.x); - float3 g100 = float3(gx0.y,gy0.y,gz0.y); - float3 g010 = float3(gx0.z,gy0.z,gz0.z); - float3 g110 = float3(gx0.w,gy0.w,gz0.w); - float3 g001 = float3(gx1.x,gy1.x,gz1.x); - float3 g101 = float3(gx1.y,gy1.y,gz1.y); - float3 g011 = float3(gx1.z,gy1.z,gz1.z); - float3 g111 = float3(gx1.w,gy1.w,gz1.w); - - float4 norm0 = taylorInvSqrt(float4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); - g000 *= norm0.x; - g010 *= norm0.y; - g100 *= norm0.z; - g110 *= norm0.w; - float4 norm1 = taylorInvSqrt(float4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); - g001 *= norm1.x; - g011 *= norm1.y; - g101 *= norm1.z; - g111 *= norm1.w; - - float n000 = dot(g000, Pf0); - float n100 = dot(g100, float3(Pf1.x, Pf0.y, Pf0.z)); - float n010 = dot(g010, float3(Pf0.x, Pf1.y, Pf0.z)); - float n110 = dot(g110, float3(Pf1.x, Pf1.y, Pf0.z)); - float n001 = dot(g001, float3(Pf0.x, Pf0.y, Pf1.z)); - float n101 = dot(g101, float3(Pf1.x, Pf0.y, Pf1.z)); - float n011 = dot(g011, float3(Pf0.x, Pf1.y, Pf1.z)); - float n111 = dot(g111, Pf1); - - float3 fade_xyz = fade(Pf0); - float4 n_z = lerp(float4(n000, n100, n010, n110), float4(n001, n101, n011, n111), fade_xyz.z); - float2 n_yz = lerp(n_z.xy, n_z.zw, fade_xyz.y); - float n_xyz = lerp(n_yz.x, n_yz.y, fade_xyz.x); - return 2.2 * n_xyz; -} diff --git a/Assets/Plugins/GPU Noise/ClassicNoise3D.cginc.meta b/Assets/Plugins/GPU Noise/ClassicNoise3D.cginc.meta deleted file mode 100644 index b4dd551ab..000000000 --- a/Assets/Plugins/GPU Noise/ClassicNoise3D.cginc.meta +++ /dev/null @@ -1,5 +0,0 @@ -fileFormatVersion: 2 -guid: 3ba1abd1cb44c47b68fbb577c6c4ba3e -ShaderImporter: - defaultTextures: [] - userData: diff --git a/Assets/Plugins/GPU Noise/SimplexNoise3D.cginc b/Assets/Plugins/GPU Noise/SimplexNoise3D.cginc deleted file mode 100644 index 0b7add240..000000000 --- a/Assets/Plugins/GPU Noise/SimplexNoise3D.cginc +++ /dev/null @@ -1,114 +0,0 @@ -// -// Noise Shader Library for Unity - https://github.com/keijiro/NoiseShader -// -// Original work (webgl-noise) Copyright (C) 2011 Ashima Arts. -// Translation and modification was made by Keijiro Takahashi. -// -// This shader is based on the webgl-noise GLSL shader. For further details -// of the original shader, please see the following description from the -// original source code. -// - -// -// Description : Array and textureless GLSL 2D/3D/4D simplex -// noise functions. -// Author : Ian McEwan, Ashima Arts. -// Maintainer : ijm -// Lastmod : 20110822 (ijm) -// License : Copyright (C) 2011 Ashima Arts. All rights reserved. -// Distributed under the MIT License. See LICENSE file. -// https://github.com/ashima/webgl-noise -// - -float3 mod289(float3 x) -{ - return x - floor(x / 289.0) * 289.0; -} - -float4 mod289(float4 x) -{ - return x - floor(x / 289.0) * 289.0; -} - -float4 permute(float4 x) -{ - return mod289((x * 34.0 + 1.0) * x); -} - -float4 taylorInvSqrt(float4 r) -{ - return 1.79284291400159 - r * 0.85373472095314; -} - -float snoise(float3 v) -{ - const float2 C = float2(1.0 / 6.0, 1.0 / 3.0); - - // First corner - float3 i = floor(v + dot(v, C.yyy)); - float3 x0 = v - i + dot(i, C.xxx); - - // Other corners - 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); - - // x1 = x0 - i1 + 1.0 * C.xxx; - // x2 = x0 - i2 + 2.0 * C.xxx; - // x3 = x0 - 1.0 + 3.0 * C.xxx; - float3 x1 = x0 - i1 + C.xxx; - float3 x2 = x0 - i2 + C.yyy; - float3 x3 = x0 - 0.5; - - // Permutations - i = mod289(i); // Avoid truncation effects in permutation - float4 p = - permute(permute(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)); - - // Gradients: 7x7 points over a square, mapped onto an octahedron. - // The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294) - float4 j = p - 49.0 * floor(p / 49.0); // mod(p,7*7) - - float4 x_ = floor(j / 7.0); - float4 y_ = floor(j - 7.0 * x_); // mod(j,N) - - float4 x = (x_ * 2.0 + 0.5) / 7.0 - 1.0; - float4 y = (y_ * 2.0 + 0.5) / 7.0 - 1.0; - - float4 h = 1.0 - abs(x) - abs(y); - - float4 b0 = float4(x.xy, y.xy); - float4 b1 = float4(x.zw, y.zw); - - //float4 s0 = float4(lessThan(b0, 0.0)) * 2.0 - 1.0; - //float4 s1 = float4(lessThan(b1, 0.0)) * 2.0 - 1.0; - 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 g0 = float3(a0.xy, h.x); - float3 g1 = float3(a0.zw, h.y); - float3 g2 = float3(a1.xy, h.z); - float3 g3 = float3(a1.zw, h.w); - - // Normalise gradients - float4 norm = taylorInvSqrt(float4(dot(g0, g0), dot(g1, g1), dot(g2, g2), dot(g3, g3))); - g0 *= norm.x; - g1 *= norm.y; - g2 *= norm.z; - g3 *= norm.w; - - // Mix final noise value - float4 m = max(0.6 - float4(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), 0.0); - m = m * m; - m = m * m; - - float4 px = float4(dot(x0, g0), dot(x1, g1), dot(x2, g2), dot(x3, g3)); - return 42.0 * dot(m, px); -} diff --git a/Assets/Plugins/GPU Noise/SimplexNoise3D.cginc.meta b/Assets/Plugins/GPU Noise/SimplexNoise3D.cginc.meta deleted file mode 100644 index 612bd9ef0..000000000 --- a/Assets/Plugins/GPU Noise/SimplexNoise3D.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: b577a94f58a1398409bfcfe9cd5dbf99 -timeCreated: 1448788105 -licenseType: Pro -ShaderImporter: - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/GPU Noise/SimplexNoiseGrad3D.cginc b/Assets/Plugins/GPU Noise/SimplexNoiseGrad3D.cginc deleted file mode 100644 index 4cfef835a..000000000 --- a/Assets/Plugins/GPU Noise/SimplexNoiseGrad3D.cginc +++ /dev/null @@ -1,118 +0,0 @@ -// -// Noise Shader Library for Unity - https://github.com/keijiro/NoiseShader -// -// Original work (webgl-noise) Copyright (C) 2011 Ashima Arts. -// Translation and modification was made by Keijiro Takahashi. -// -// This shader is based on the webgl-noise GLSL shader. For further details -// of the original shader, please see the following description from the -// original source code. -// - -// -// Description : Array and textureless GLSL 2D/3D/4D simplex -// noise functions. -// Author : Ian McEwan, Ashima Arts. -// Maintainer : ijm -// Lastmod : 20110822 (ijm) -// License : Copyright (C) 2011 Ashima Arts. All rights reserved. -// Distributed under the MIT License. See LICENSE file. -// https://github.com/ashima/webgl-noise -// - -float3 mod289(float3 x) -{ - return x - floor(x / 289.0) * 289.0; -} - -float4 mod289(float4 x) -{ - return x - floor(x / 289.0) * 289.0; -} - -float4 permute(float4 x) -{ - return mod289((x * 34.0 + 1.0) * x); -} - -float4 taylorInvSqrt(float4 r) -{ - return 1.79284291400159 - r * 0.85373472095314; -} - -float3 snoise_grad(float3 v) -{ - const float2 C = float2(1.0 / 6.0, 1.0 / 3.0); - - // First corner - float3 i = floor(v + dot(v, C.yyy)); - float3 x0 = v - i + dot(i, C.xxx); - - // Other corners - 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); - - // x1 = x0 - i1 + 1.0 * C.xxx; - // x2 = x0 - i2 + 2.0 * C.xxx; - // x3 = x0 - 1.0 + 3.0 * C.xxx; - float3 x1 = x0 - i1 + C.xxx; - float3 x2 = x0 - i2 + C.yyy; - float3 x3 = x0 - 0.5; - - // Permutations - i = mod289(i); // Avoid truncation effects in permutation - float4 p = - permute(permute(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)); - - // Gradients: 7x7 points over a square, mapped onto an octahedron. - // The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294) - float4 j = p - 49.0 * floor(p / 49.0); // mod(p,7*7) - - float4 x_ = floor(j / 7.0); - float4 y_ = floor(j - 7.0 * x_); // mod(j,N) - - float4 x = (x_ * 2.0 + 0.5) / 7.0 - 1.0; - float4 y = (y_ * 2.0 + 0.5) / 7.0 - 1.0; - - float4 h = 1.0 - abs(x) - abs(y); - - float4 b0 = float4(x.xy, y.xy); - float4 b1 = float4(x.zw, y.zw); - - //float4 s0 = float4(lessThan(b0, 0.0)) * 2.0 - 1.0; - //float4 s1 = float4(lessThan(b1, 0.0)) * 2.0 - 1.0; - 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 g0 = float3(a0.xy, h.x); - float3 g1 = float3(a0.zw, h.y); - float3 g2 = float3(a1.xy, h.z); - float3 g3 = float3(a1.zw, h.w); - - // Normalise gradients - float4 norm = taylorInvSqrt(float4(dot(g0, g0), dot(g1, g1), dot(g2, g2), dot(g3, g3))); - g0 *= norm.x; - g1 *= norm.y; - g2 *= norm.z; - g3 *= norm.w; - - // Compute gradient of noise function at P - float4 m = max(0.6 - float4(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), 0.0); - float4 m2 = m * m; - float4 m3 = m2 * m; - float4 m4 = m2 * m2; - float3 grad = - -6.0 * m3.x * x0 * dot(x0, g0) + m4.x * g0 + - -6.0 * m3.y * x1 * dot(x1, g1) + m4.y * g1 + - -6.0 * m3.z * x2 * dot(x2, g2) + m4.z * g2 + - -6.0 * m3.w * x3 * dot(x3, g3) + m4.w * g3; - return 42.0 * grad; -} diff --git a/Assets/Plugins/GPU Noise/SimplexNoiseGrad3D.cginc.meta b/Assets/Plugins/GPU Noise/SimplexNoiseGrad3D.cginc.meta deleted file mode 100644 index 250b646fa..000000000 --- a/Assets/Plugins/GPU Noise/SimplexNoiseGrad3D.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: a7111eafc2463224faacf7be3bddb9a4 -timeCreated: 1449292284 -licenseType: Pro -ShaderImporter: - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: -- 2.47.3 From b6c428d6827a63710ee931c4c317196cc9bc8038 Mon Sep 17 00:00:00 2001 From: Nibu Date: Wed, 11 Nov 2026 12:08:15 +0000 Subject: [PATCH 2/2] Shaders: GalaxyMap, Clouds, SimplexBrush and Lightning.compute call cultmath_snoise The previous commit deleted the GPU Noise includes; this one carries the call-site edits it described. Release map notes Background's remaining 2D gradient copy. Co-Authored-By: Claude Sonnet 5.5 --- Assets/Shaders/Brushes/SimplexBrush.shader | 4 ++-- Assets/Shaders/Clouds.shader | 6 +++--- Assets/Shaders/Compute/Lightning/Lightning.compute | 4 ++-- Assets/Shaders/GalaxyMap.shader | 6 +++--- docs/aetheria-release-map.md | 4 +++- 5 files changed, 13 insertions(+), 11 deletions(-) diff --git a/Assets/Shaders/Brushes/SimplexBrush.shader b/Assets/Shaders/Brushes/SimplexBrush.shader index 3a6bf56e5..af54035b2 100644 --- a/Assets/Shaders/Brushes/SimplexBrush.shader +++ b/Assets/Shaders/Brushes/SimplexBrush.shader @@ -25,7 +25,7 @@ Category { #pragma target 2.0 #include "UnityCG.cginc" - #include "Assets/Plugins/GPU Noise/SimplexNoise3D.cginc" + #include "Packages/org.gamecult.cultmath/Shaders/CultMath.hlsl" float _Depth; float _Power; @@ -68,7 +68,7 @@ Category { fixed4 frag (v2f i) : SV_Target { float dist = length(i.texcoord - float2(.5,.5)); - return powerPulse(dist * 2,_Power) * (_Depth * abs(snoise(float3(i.texcoord1.xy*_Frequency,_Time.y*_Speed)))+_Constant); + return powerPulse(dist * 2,_Power) * (_Depth * abs(cultmath_snoise(float3(i.texcoord1.xy*_Frequency,_Time.y*_Speed)))+_Constant); } ENDCG } diff --git a/Assets/Shaders/Clouds.shader b/Assets/Shaders/Clouds.shader index 11e3fe0a3..ccbda8835 100644 --- a/Assets/Shaders/Clouds.shader +++ b/Assets/Shaders/Clouds.shader @@ -29,7 +29,7 @@ #pragma fragment frag #include "UnityCG.cginc" - #include "Assets/Plugins/GPU Noise/SimplexNoise3D.cginc" + #include "Packages/org.gamecult.cultmath/Shaders/CultMath.hlsl" struct appdata { @@ -64,7 +64,7 @@ float sum = 0; for(int i = 0; i < 6; i++) { - sum += snoise(p * freq + Parallax * ParallaxDirection) * amp; + sum += cultmath_snoise(p * freq + Parallax * ParallaxDirection) * amp; parallax /= ParallaxLacunarity; freq *= NoiseLacunarity; amp *= NoiseGain; @@ -83,7 +83,7 @@ fixed4 frag (v2f i) : SV_Target { float3 p = float3(i.uv,_Time.x*Speed); - float noise = saturate((1-abs(snoise(p*NoiseFrequency/2))) * fbm(p)); + float noise = saturate((1-abs(cultmath_snoise(p*NoiseFrequency/2))) * fbm(p)); return noise * _Color * (1-length(i.uv)/FadeDistance); } ENDCG diff --git a/Assets/Shaders/Compute/Lightning/Lightning.compute b/Assets/Shaders/Compute/Lightning/Lightning.compute index 0750006b9..7edd707d4 100644 --- a/Assets/Shaders/Compute/Lightning/Lightning.compute +++ b/Assets/Shaders/Compute/Lightning/Lightning.compute @@ -5,7 +5,7 @@ #define NUM_THREAD_X 64 #include "LightningVertex.cginc" -#include "Assets/Plugins/GPU Noise/SimplexNoise2D.cginc" +#include "Packages/org.gamecult.cultmath/Shaders/CultMath.hlsl" struct Node { @@ -46,7 +46,7 @@ float fbm(float2 p) float sum = 0; for(int i = 0; i < 4; i++) { - sum += snoise(p * freq) * amp; + sum += cultmath_snoise(p * freq) * amp; freq *= _NoiseLacunarity; amp *= _NoiseGain; } diff --git a/Assets/Shaders/GalaxyMap.shader b/Assets/Shaders/GalaxyMap.shader index 567396a35..109cd96d0 100644 --- a/Assets/Shaders/GalaxyMap.shader +++ b/Assets/Shaders/GalaxyMap.shader @@ -36,7 +36,7 @@ Shader "Unlit/GalaxyMap" #pragma fragment frag #include "UnityCG.cginc" - #include "Assets/Plugins/GPU Noise/SimplexNoise2D.cginc" + #include "Packages/org.gamecult.cultmath/Shaders/CultMath.hlsl" struct appdata { @@ -86,8 +86,8 @@ Shader "Unlit/GalaxyMap" for(int i = 0; i < octaves; i++) { if(i<4) - sum += (1-abs(snoise(p * freq))) * amp; - else sum += abs(snoise(p * freq)) * amp; + sum += (1-abs(cultmath_snoise(p * freq))) * amp; + else sum += abs(cultmath_snoise(p * freq)) * amp; freq *= NoiseLacunarity; amp *= NoiseGain; } diff --git a/docs/aetheria-release-map.md b/docs/aetheria-release-map.md index 18f9b6941..72e96f22e 100644 --- a/docs/aetheria-release-map.md +++ b/docs/aetheria-release-map.md @@ -7459,7 +7459,9 @@ That file's Cut 4 (AI heading planner) and Cut 5 (combat facing) are carried as is `stage.Generated("Djinni")`, `EvasionTermTests.cs:520`, so the target's fit follows the galaxy). The cause is 0.3.0's breaking `snoise` kernel (its CHANGELOG), read in C# by `Settings.cs:72-73` (galaxy cloud density), `GlobalData.cs:30` and `Environment.cs:132,144`. Shaders use the GPU Noise plugin, not - CultMath (`Background.shader:39`), so nothing on the GPU moves. Every other DemoTerminus test passes. + CultMath (`Background.shader:39`), so nothing on the GPU moved at 0.3.0. GalaxyMap, Clouds, SimplexBrush and + Lightning.compute now include `CultMath.hlsl`; Background keeps its 2D gradient copy because CultMath has no 2D + `snoise_grad`. Every other DemoTerminus test passes. Between the tags CultMath also adds `phacelle` (MPL-2.0 files), `cellular`, `smin_grad`, the `*_grad` noises and `BoundedLeastSquares`; no existing signature changes. - **TA9. The pin guard.** `Directory.Build.targets:21` conditions `VerifyCultLibRevision` on a -- 2.47.3