Noise texture
Shader noise read instead of computed. Arithmetic noise in a fragment shader is the expensive way to get noise: eight hashed corners a sample, every pixel, every frame, and a cloud pixel takes 54 samples. Reading a texture replaces that with one fetch, and a mip-mapped texture also fades to its average in the distance where computed noise shimmers. The ground shader (biome-plugin), planet surfaces and planet clouds use it.
Noise volume
noiseVolume is a block of 3D gradient noise that tiles in every
direction, as bytes. It is pure (no engine, seeded), so the same seed is the
same ground everywhere.
import { noiseVolume } from 'tosijs-3d'
const bytes = noiseVolume(64, 16) // 64 texels a side, repeating every 16 cells
A value is 0.5 + 0.5 * gain * n, where n is the noise in about -0.9 to 0.9.
The average is 0.5, so a shader reads texel * 2 - 1.
Value noise in GLSL
For value noise the lattice is a 3D texture with one random byte a point
(latticeVolume); the shader eases the fraction itself and the linear filter
does the eight-corner blend, so it is the same noise from one read. Neighbouring
cells always agree about a shared corner, which an arithmetic hash on a headset
GPU does not guarantee.
NOISE_TEXTURE_GLSL defines b3dVn(p) (0…1, like b3dGgNoise) and
b3dVnFbm(p) (like b3dGgFbm). With B3D_NOISETEX undefined (no 3D
textures: WebGL 1) they are the arithmetic ones, so it must come after
GAS_GIANT_GLSL.