CultLib/packages/cultmath/THIRD-PARTY-NOTICES.md
Meta Vens 559800f494 CultMath: Cycles node semantics (Math, Map Range, Clamp, Mix, RGB to BW, ramp index) as math.Cycles.cs and CultMath.Cycles.hlsl under Apache-2.0
Ports of Blender v5.2.2's intern/cycles kernel functions, one function per node
operation, with the HLSL mirror, the Unity copy, the lowering table entry for a
separate Apache-2.0 GLSL file, the golden-fixture families, the package licence
expressions and the notices section.

Builds. Does not pass yet: CultMath.Cycles.glsl and the regenerated golden
fixture arrive in a later commit, so CommittedGlslEqualsLowering and
GoldenFixtureMatchesCSharp fail at this commit.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 03:59:59 +02:00

74 lines
4.1 KiB
Markdown

# Third-Party Notices
## 2D and 3D Simplex Noise
`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.
`math.snoise(float3)` and `cultmath_snoise(float3)` follow `src/noise3D.glsl` and
`math.snoise(float2)` follows `src/noise2D.glsl` of stegu/webgl-noise at commit
`22434e04d7753f7e949e8d724ab3da2864c17a0f` (the simplex-boundary fix is
`21d9fe23d7`, scale `ff3b5d34ea`, permutation `a3e6d57095`). Modified from upstream:
the 3D corner tie order follows Gustavson's `simplexnoise1234`, because the
upstream `step` compares are cyclic where the offset's components are equal.
`math.snoise_grad`/`cultmath_snoise_grad` (and the `fbm_grad`/`ridged_grad`
octave sums built on them) follow the analytic-gradient differentiation from
the same project's `src/noise3Dgrad.glsl`, with the same kernel radius,
permutation and scale as `snoise(float3)`.
- Copyright 2011 Ashima Arts.
- Upstream: <https://github.com/ashima/webgl-noise>
- License: MIT.
## Cycles node semantics
`math.cycles_*` and `cultmath_cycles_*` port what Blender's Cycles renderer
computes for the Math, Map Range, Clamp, Mix and RGB to BW nodes and for a Color
Ramp lookup. Each function's comment names the Cycles file it follows, all from
`intern/cycles` at the Blender `v5.2.2` tag: `kernel/svm/math_util.h`,
`kernel/svm/map_range.h`, `kernel/svm/clamp.h`, `kernel/svm/mix.h`,
`kernel/svm/color_util.h`, `kernel/svm/ramp.h`, `kernel/svm/convert.h`,
`util/math_base.h`, `util/math_float3.h` and `util/color.h`. The code was
changed: Cycles C++ became C# and HLSL, one function per node operation, with
the nodes' socket defaults and clamp options left to the caller, and the modulo
is the quotient form every CultMath target shares rather than `fmodf`. Nothing
was read from Blender's GPL sources (`source/blender/gpu`, `source/blender/blenlib`).
- Copyright 2011-2022 Blender Foundation.
- Upstream: <https://projects.blender.org/blender/blender> (`intern/cycles`).
- License: Apache-2.0 (<https://www.apache.org/licenses/LICENSE-2.0>), which is
per-file here: it covers `src/CultMath/math.Cycles.cs`,
`shaders/CultMath.Cycles.hlsl` and the Unity copy of that include, and
`shaders/CultMath.Cycles.glsl`, which is generated from that include. Each
carries the Apache-2.0 header and this attribution. The rest of CultMath, the
generated GLSL library included, is MIT or MPL-2.0 as above, so the
`GameCult.Math` NuGet package and the `org.gamecult.cultmath` Unity package
both declare `MIT AND MPL-2.0 AND Apache-2.0` and ship this file.
- The test fixtures under `tests/CultMath.Tests/fixtures/cycles-oracle` are
results of running Blender 5.2.2 through `tools/cycles-oracle/oracle.py`
(GPL-3.0-or-later, a Blender Python script, shipped neither in the NuGet
package nor in the Unity package).
## Phacelle Noise
`math.phacelle` and `cultmath_phacelle` follow Rune Skovbo Johansen's Phacelle
noise (Shadertoy `t3dyWl`; erosion filter `wXcfWn`; blog, March 2026), read
from the C# port `PhacelleNoise` in `lpmitchell/AdvancedTerrainErosion`
(`AdvancedTerrainErosion.cs`, converted to burstable C# by Luke Mitchell,
2026). The cell weight, the phase blend and the normalization follow it. The
3D-cell generalisation, the caller-supplied stripe wave vector, the exact
gradient and the exact pruning are new here.
- Copyright (c) 2025 Rune Skovbo Johansen.
- Upstream: <https://github.com/lpmitchell/AdvancedTerrainErosion>
- License: MPL-2.0 (<https://mozilla.org/MPL/2.0/>). MPL-2.0 is file-level, so it
covers exactly the files that carry the port and nothing else:
`src/CultMath/math.Phacelle.cs`, `src/CultMath/CultPhasor.cs`,
`shaders/CultMath.Phacelle.hlsl` and the Unity copy of that include, and
`shaders/CultMath.Phacelle.glsl`, which is generated from that include. Each
carries the MPL-2.0 header and this attribution. The rest of CultMath, the
generated GLSL library included, is MIT, so the `GameCult.Math` NuGet
package and the `org.gamecult.cultmath` Unity package both declare
`MIT AND MPL-2.0` and ship this file.