Need Help or Found an Issue?
Quick Start
Select a wind preset and watch realistic wind patterns evolve in real-time. Each simulation uses deterministic wind patterns for consistent behavior.
Wind Presets
Dead: Minimal wind with very smooth, gradual variations
Calm: Light winds with smooth, gentle variations
Moderate: Moderate wind speeds with smooth, predictable patterns
Strong: Strong winds with smooth, consistent flow
Shear: Sharp wind gradients with strong local variations
Controls
Preset: Select from different wind patterns, each with unique characteristics for different shooting conditions. The preset determines component strengths, spatial/temporal scales, and exponent values.
Time Speed: Simulation speed multiplier (0.1x-20x). Controls how fast time advances in the simulation. 1.0x = real-time, higher values speed up time evolution. Useful for observing long-term patterns quickly.
Color Threshold: Wind speed (mph) at which arrows turn red in the visualization. All arrows below this threshold show as blue/green, above it they transition to red. Adjust to highlight different wind speed ranges.
Restart: Reset the wind simulation to time zero and regenerate the field. Each restart uses the same preset parameters but produces different patterns due to randomized noise seeds.
Clock: Displays elapsed simulation time in seconds. Time advances according to the Time Speed multiplier.
Visualization
Wind Visualization: Each grid point shows wind using two elements: colored squares indicate wind speed (blue=calm, red=strong), and white triangles indicate wind direction (point downwind). The squares provide the speed color map while triangles rotate to show instantaneous wind direction.
2D Wind Field: The wind varies continuously across both downrange (0-1000 yards) and crossrange (±100 yards) dimensions. Each component contributes patterns at different spatial scales, creating realistic variation.
Speed Scale: Color gradient represents wind speed: deep blue ≈ 0 mph, transitioning to red at the Color Threshold setting. The gradient transitions smoothly based on wind speed, with faster winds appearing more red.
Triangle Direction: Each white triangle points in the direction the wind is blowing (downwind). Triangle rotation shows instantaneous wind direction at that location.
Top Stats
Active Components: Number of wind components in the current preset. Each component adds a layer of variation at different spatial and temporal scales.
Min/Max/Avg Speed: Statistics computed across the entire visible wind field. Updates in real-time as the field evolves. These values help you understand the overall wind conditions.
RMS Strength: Displays the RMS strength of the first component (Component 0) as a reference. Individual component strengths are shown in the detailed table below.
Advection Gain: Multiplier that controls how quickly wind patterns drift across the range. Set by presets (typically 5.0). Higher values make patterns move faster without changing the instantaneous wind speeds. This simulates the transport of wind patterns by larger-scale flows.
Component Details Table
Each row represents one wind component, ordered from largest to smallest spatial scale (Component 0 = largest, highest indices = smallest). Multiple components combine to create realistic, multi-scale wind patterns.
Field: Component name ("Component N") or "Composite" showing the combined effect of all components.
Min/Max/Avg Speed (mph): Wind speed statistics computed for this component alone (or composite) across the visible field. Useful for understanding each component's contribution.
Strength (mph): Wind speed multiplier that scales the final curl field after all processing (RMS normalization, exponent reshaping, and optional sigmoid gating). This is the primary control for component intensity and directly scales the final wind speed contribution.
Downrange/Crossrange Scale (yards): Spatial correlation lengths. Larger values mean the wind changes more slowly across distance. A 10,000-yard scale varies slowly over the entire 1000-yard range, while a 500-yard scale creates noticeable local variation. These control the "wavelength" of spatial patterns.
Temporal Scale (min): How quickly this component evolves over time. Larger values (e.g., 40 min) mean slow, gradual changes. Smaller values (e.g., 1-2 min) create rapid temporal variation. Controls the period of temporal oscillations.
Exponent: Reshapes the normalized magnitude after RMS normalization. The magnitude is first normalized by RMS, then the exponent is applied. Lower values (< 1.0) make the distribution gustier (emphasizes values near 0), while higher values (> 1.0) make it steadier (emphasizes middle values). Typical range: 0.3 (very gusty) to 2.0 (very steady).
Gate (mph): Sigmoid threshold in mph where the gate opens. When threshold > 0, the final magnitude gates itself through a sigmoid function. Below threshold: gate mostly closed (very quiet wind). Above threshold: gate opens and allows wind through. Creates alternating quiet periods and gusts. 0 = no gating (continuous wind).
RMS Normalization: Root Mean Square value used to normalize the curl field magnitude for stable energy levels. Initialized once at startup by sampling 1000 random (x, y, t) locations. This value ensures consistent magnitude distribution across time and between components. Displayed in scientific notation (e.g., 1.23e-02).
Global Advection Offset (yards): Cumulative spatial offset applied to all wind components due to advection. Shows how far the entire wind field has drifted from its origin. Larger values indicate more advection has occurred.
Global Advection Speed (mph): Current drift velocity of the entire wind field. Calculated by sampling random points within the range, averaging the wind, and smoothing with EMA. This is the speed at which the wind patterns move across the range.
Technical Details
Wind Generation Process: The wind field is generated using a multi-octave 2D curl field sampled from 3D Simplex noise (x, y, t). Each component independently samples a potential field ψ(x, y, t), then the curl operator computes (∂ψ/∂y, -∂ψ/∂x) to produce a divergence-free 2D vector field. The magnitude is normalized by RMS (Root Mean Square, initialized once from 1000 samples), then an exponent reshapes the distribution to control steady (high exponent) vs. gusty (low exponent) behavior. If sigmoid gating is enabled (threshold > 0), the final magnitude gates itself through a sigmoid function creating threshold-based behavior (quiet below threshold, active above). Wind speed is clipped at 2x component strength to prevent unrealistic values. All components are summed to create the final wind field.
Global Advection: All wind components use the same global advection offset, creating unified movement of the entire wind field. The global advection velocity is calculated by sampling 10 random points within the range, averaging the composite wind field, and smoothing with EMA (exponential moving average) for stability. This creates realistic transport of wind patterns by larger-scale flows.
RMS Normalization: Each component's curl field magnitude RMS is initialized once at startup by sampling 1000 random (x, y, t) locations within a pattern-sized window (1000x the component's spatial and temporal scales). The magnitude is normalized by this RMS value to achieve stable energy levels. This ensures consistent magnitude distribution across time and between components. The normalization value remains fixed after initialization and is displayed in the component details table.
Sigmoid Gating: Optional self-gating function that creates threshold-based wind behavior. When threshold > 0, the final magnitude gates itself through a sigmoid function (fixed slope). Below threshold: gate mostly closed (very quiet wind). Above threshold: gate opens (allows wind through). The gate opens more steeply as magnitude increases. This creates alternating quiet periods and gusts, simulating realistic wind behavior. Wind speed is clipped at 2x component strength to prevent unrealistic values.
Random Sampling: Advection calculations sample 10 random points within the range each frame to provide representative wind field behavior for advection updates.
Curl Noise: The curl operator produces divergence-free (incompressible) 2D vector fields, which naturally look like realistic swirling wind patterns. Simplex noise provides smooth, continuous sampling over space and time without aliasing artifacts common in other noise functions.
Components: Presets use 2 components with different spatial and temporal scales to create layered wind patterns. Component 0 typically provides a large-scale steady base, while Component 1 adds local variation. Each component's strength controls overall magnitude, the exponent parameter reshapes the distribution (high exponent = steady, low exponent = gusty), and some components use sigmoid gating to create threshold-based behavior (quiet below threshold, active above).
Rendering: Uses Three.js with instanced meshes (colored squares for speed, white triangles for direction) for efficient rendering of hundreds of wind indicators at 60 FPS. Squares change color to show wind speed, while triangles rotate to show wind direction.
Histogram: Click the histogram button for any component or the composite wind field to view a cumulative distribution of wind speeds. The histogram accumulates data continuously as the visualization updates (similar to min/max/avg stats), using 0.01 mph bins. The histogram shows all samples collected since the last reset, providing a comprehensive view of the wind speed distribution across the visible range (1000 yards downrange, 200 yards crossrange).
Limitations
2D Field Only: The wind field is computed in the horizontal plane only. There is no vertical wind component variation, and the model assumes wind at shooting height is representative of conditions along the bullet path.
Divergence-Free (Incompressible): The curl operator produces incompressible flow fields, which is physically accurate for many wind patterns but may not capture all atmospheric phenomena such as thermal updrafts, downdrafts, or compressible effects.
Smooth/Continuous Spatial Field: The field is spatially smooth and continuous by design. It cannot model sharp spatial wind shear boundaries or discrete spatial gusts that may occur at fixed locations. However, sudden direction changes over time are possible through rapid temporal evolution with shorter temporal scales.
No Terrain Interaction: The model does not account for terrain features (hills, valleys, obstacles) that can dramatically affect local wind patterns. All spatial variation comes from the noise field itself.
Deterministic Evolution: Temporal evolution is based on a deterministic noise function rather than physical turbulence modeling. The field evolves smoothly over time but does not capture true turbulent fluctuations or chaotic dynamics.
Fixed Spatial Scales: Each component has fixed spatial scales that remain constant throughout the simulation. Real wind patterns may have scales that vary based on atmospheric conditions, time of day, or local effects.