メインコンテンツまでスキップ

Probability Field Generator

Mathematical Foundation: Normal Distribution Function

The Gaussian function implements the fundamental normal distribution that appears throughout nature, from quantum mechanics to statistical analysis.

Mathematical Definition:

gaussian(d,s)=ed22s2\text{gaussian}(d, s) = e^{-\frac{d^2}{2s^2}}

For multidimensional vectors:

gaussian(d,s)=ed22s2=ed12+d22++dn22s2\text{gaussian}(\mathbf{d}, s) = e^{-\frac{|\mathbf{d}|^2}{2s^2}} = e^{-\frac{d_1^2 + d_2^2 + \ldots + d_n^2}{2s^2}}

Parameter Analysis:

  • dd or d\mathbf{d}: Distance value (scalar or vector)
  • s>0s > 0: Spread parameter controlling distribution width
  • When s0s \rightarrow 0: Distribution approaches Dirac delta function
  • When ss \rightarrow \infty: Distribution approaches uniform distribution

Properties:

  • Bell-shaped curve with maximum value of 1 at distance 0
  • Smooth falloff with infinite tail behavior
  • Rotational symmetry for multidimensional cases
  • Mathematical elegance enabling analytical solutions

Mathematical Beauty in Natural Distribution

By manipulating the distance parameter and spread factor, infinite variations of smooth falloff patterns emerge, creating everything from subtle ambient glows to dramatic energy concentrations that pulse with mathematical precision.

ライブエディター
const fragment = () => {
      const center = vec2(0.5)
      const distance = uv.sub(center).length()
      const spread = iTime.mul(0.5).sin().add(1).div(2).mul(0.3).add(0.1)
      const intensity = gaussian(distance, spread)
      return vec4(vec3(intensity.mul(2)), 1)
}

Multiple Gaussian Interaction

Multiple Gaussian distributions can be combined to create complex patterns. Each distribution acts as a separate "hotspot" that can move and interact with others, useful for creating organic blob-like effects or modeling multiple light sources.

ライブエディター
const fragment = () => {
      const time = iTime.mul(0.4)

      const center1 = vec2(time.sin().mul(0.2).add(0.3), time.mul(1.2).cos().mul(0.15).add(0.4))
      const center2 = vec2(time.mul(0.8).cos().mul(0.25).add(0.7), time.mul(1.5).sin().mul(0.2).add(0.6))
      const center3 = vec2(time.mul(1.3).sin().mul(0.18).add(0.5), time.mul(0.6).cos().mul(0.22).add(0.3))

      const dist1 = uv.sub(center1).length()
      const dist2 = uv.sub(center2).length()
      const dist3 = uv.sub(center3).length()

      const cloud1 = gaussian(dist1, 0.15)
      const cloud2 = gaussian(dist2, 0.12)
      const cloud3 = gaussian(dist3, 0.18)

      const interference = cloud1.add(cloud2).add(cloud3)
      const energy = interference.pow(1.5)

      return vec4(energy.mul(0.6), energy.mul(1.2), energy.mul(0.9), 1)

}