Skip to content

Commit cd75e01

Browse files
committed
Add a new bilingual mapper guide docs_atmospheric_mapper_checklist.md with practical DE/EN setup notes for rain/snow weather entities and QA expectations.
Extend atmospheric particle state with stable id and zoneId fields to support zone-aware behavior and deterministic variation. Introduce atmospheric quality profiles (Low/Medium/High style via cg_atmosphericLevel) plus shared helpers for profile lookup, view-cone checks, zone resolution, deterministic RNG, and adaptive budgeting. Rework rain visibility/generation to use profile-driven distance/cone rules, zone resolution, and deterministic randomization instead of purely frame-random behavior. Rework snow generation analogously with deterministic zone-based variation and profile-aware spawn distance handling. Initialize per-particle IDs/zones during atmospheric setup and keep rain/snow shader/splash initialization intact. Apply adaptive per-frame particle budgets and distance/view-cone culling in the main atmospheric update loop to reduce unnecessary updates while preserving effect quality.
1 parent e8f230f commit cd75e01

File tree

7 files changed

+291
-126
lines changed

7 files changed

+291
-126
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# Atmospheric / Wetter – Mapper Checklist (DE/EN)
2+
3+
## Deutsch
4+
5+
### 1) Wetterzonen als Entities setzen
6+
- Nutze `rally_weather_rain` für Regenzonen und `rally_weather_snow` für Schneezonen in der Map.
7+
- Diese Entities werden serverseitig als `ET_WEATHER` angelegt.
8+
- Die Brush-Geometrie der Entity ist relevant, weil clientseitig geprüft wird, ob Partikelpositionen innerhalb dieser Zone liegen.
9+
10+
### 2) Typ und Basisparameter verstehen
11+
- `rally_weather_rain` setzt `weapon = 0`, `rally_weather_snow` setzt `weapon = 1`; darüber erkennt der Client den Wettertyp.
12+
- Die Basis-Partikelanzahl pro Typ wird in den Client-State geschrieben und beim Setup übernommen.
13+
14+
### 3) Spawnflags (Regen) bewusst einsetzen
15+
- Bei Regen wird `spawnflags` übertragen und clientseitig als Schalter für Splash-Verhalten ausgewertet.
16+
- Effekt: `waterSplash`/`landSplash` werden abhängig davon aktiviert/deaktiviert.
17+
- Bei Schnee sind Splashes standardmäßig deaktiviert.
18+
19+
### 4) Automatisches Qualitäts-/Budgetsystem berücksichtigen
20+
- Das System ist automatisch adaptiv: Profilwahl über `cg_atmosphericLevel` (Low/Medium/High).
21+
- Pro Frame wird das Budget aus Profil + FPS + FOV + Basisdrops berechnet.
22+
- Die sichtbare Partikelmenge kann sich daher je nach Client/HW unterscheiden (gewolltes Performance-Verhalten).
23+
24+
### 5) Sichtkegel-/Distanz-Culling beachten
25+
- Partikel außerhalb Distanz oder Sichtkegel werden deaktiviert/neu verteilt.
26+
- Sehr große oder ungünstig platzierte Wettervolumes können dadurch „dünner“ wirken.
27+
- Empfehlung: Wetterzonen entlang typischer Fahr-/Sichtlinien platzieren statt globale Monster-Volumes.
28+
29+
### 6) Konsistenz durch deterministische Seeds
30+
- Spawn-Variation (Position/Farbe/Flake-Auswahl) wird deterministisch pro Zone + Partikel erzeugt.
31+
- Ergebnis: konsistenteres Erscheinungsbild statt vollständig zufälliger Verteilung pro Frame.
32+
33+
### 7) QA / Abnahme
34+
- Relevante Client-Cvar: `cg_atmosphericLevel` (Default: `2`).
35+
- Beim Testen mindestens Low/Medium/High prüfen.
36+
37+
---
38+
39+
## English
40+
41+
### 1) Place weather entities correctly
42+
- Use `rally_weather_rain` for rain volumes and `rally_weather_snow` for snow volumes.
43+
- These entities are created as `ET_WEATHER` server-side.
44+
- Entity brush bounds matter because client-side particle checks test whether points are inside the weather zone.
45+
46+
### 2) Understand type wiring and base inputs
47+
- `rally_weather_rain` uses `weapon = 0`, `rally_weather_snow` uses `weapon = 1`; client code uses this as weather type.
48+
- Baseline particle count is carried in entity state and consumed during atmospheric setup.
49+
50+
### 3) Use rain spawnflags intentionally
51+
- For rain, `spawnflags` are passed and interpreted client-side as splash toggle input.
52+
- This controls whether water/land splash effects are enabled.
53+
- Snow splash effects are disabled by design.
54+
55+
### 4) Expect automatic adaptive behavior
56+
- The system is automatically adaptive: profile selection via `cg_atmosphericLevel` (Low/Medium/High).
57+
- Per-frame budget is computed from profile + FPS + FOV + base drops.
58+
- Visible density may differ by client performance/settings (intentional for performance).
59+
60+
### 5) Account for cone/distance culling
61+
- Particles outside distance/view cone are culled or repositioned.
62+
- Very large or poorly placed weather volumes may look thinner in practice.
63+
- Recommendation: place weather zones around expected racing/sight corridors rather than one giant global volume.
64+
65+
### 6) Deterministic consistency
66+
- Spawn variation (position/color/flake choice) is deterministic per zone + particle.
67+
- Result: more stable visual appearance than fully random every frame.
68+
69+
### 7) QA / validation
70+
- Relevant client cvar: `cg_atmosphericLevel` (default: `2`).
71+
- Validate maps at least on low/medium/high.

0 commit comments

Comments
 (0)