Need Help or Found an Issue?
Quick Start
Select a wind preset and watch simulated wind patterns evolve in real-time.
Wind Presets
Zero: No wind (static field)
Dead: Minimal wind with very smooth, gradual variations
Calm: Light winds with smooth, gentle variations
Moderate: Moderate wind speeds with smooth patterns
Strong: Strong winds with consistent flow
Extra Strong: Very strong winds for challenging conditions
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 simulated 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.
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 simulated, 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 RMS-normalized magnitude. The magnitude is first normalized by RMS, then the exponent is applied. Values < 1.0 make magnitudes more uniform/steady; values > 1.0 increase calm-vs-gust contrast (gustier). Typical range: 0.3 (steady) to 2.0 (gustier).
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. However, post-processing operations (RMS normalization, exponent reshaping, sigmoid gating, and clipping) modify the field and break the divergence-free property. The magnitude is normalized by RMS (Root Mean Square, initialized once from 1000 samples), then an exponent reshapes the distribution to control steady (low exponent) vs. gusty/high-contrast (high 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 simulated 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 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 swirling wind patterns. However, post-processing (normalization, exponent, gating, clipping) breaks this property in the final field. Simplex noise provides smooth, continuous sampling over space and time without aliasing artifacts common in other noise functions.
Components: Presets use multiple components (2–3+) with different spatial and temporal scales to create layered wind patterns. Lower component indices are larger-scale; higher indices add smaller-scale variation. Each component's strength controls its magnitude, the exponent parameter reshapes the magnitude distribution (low exponent = steadier, high exponent = gustier/high-contrast), 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).
Known Limitations
This list is not exhaustive. Additional limitations, errors, or inaccuracies may exist.
Visualization Only: This is the wind engine that powers the Steel and F-Class simulators. It generates plausible wind patterns for simulation purposes, not meteorological predictions.
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.
Not Divergence-Free: While the curl operator initially produces divergence-free (incompressible) flow fields, post-processing operations (RMS normalization, exponent reshaping, sigmoid gating, clipping) modify the field and break this property. The final wind field is not divergence-free and 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.
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.
Full Disclaimers: See the
Terms of Service for complete information.