pixelsmokefx
Real low-poly 3D smoke on every bullet hit - no particles, no assets, generated at runtime. Your shots always render; enemy shots only on-screen within 200 m. One DLL for BepInEx 5.x.
模組介紹 作者原文
Pixel Smoke Fx
Low-poly 3D smoke for bullet hits in Ravenfield (EA29+). Zero particles, zero assets, zero external files - the smoke mesh is generated at runtime inside the plugin.
Built for BepInEx 5.x on Ravenfield EA29 and newer (Unity 2020.3-era builds; verified on EA35).
What it does
Every bullet hit (non-explosive weapons) leaves a burst of three round low-poly smoke puffs that expand fast, shrink exponentially, and fade to nothing - pure code, no particle systems, no texture files. Since v1.1.0 the puffs are damage-sized (sniper hits billow big, shotgun pellets stay tiny) and styled as a black anime/soot cloud: smooth round profile (subdivision-3 icosphere, gentle displacement), per-face vertex colors baked in three discrete brightness bands (bright top / mid / dark bottom - classic cel shading), no flat black silhouette.
hit -> SpawnDecal hook -> pool slot (no Instantiate/Destroy churn)
-> icosphere mesh (generated once, shared by all slots)
-> damage -> size factor (clamped) -> expand (0.04 -> 1.0 in 0.15s)
-> exp shrink -> alpha fade -> back to pool
Key behaviors
| Behavior | Default | cfg key |
|----------|---------|---------|
| Master switch | on | [General] Enabled |
| Player shots render ALWAYS (no distance/frustum culling for your own fire) | on | [General] AlwaysRenderPlayer |
| Other shots render only when on screen | - | frustum culling |
| Other shots render only when closer than 200 m | 200 m | [Performance] HalfDist |
| Full size under 60 m, half size beyond | 60 m | [Performance] FullDist |
| Pool slots (concurrent smoke cap) | 120 | [Performance] PoolSize |
| Same-gun burst window (all shotgun pellets render) | 0.08 s | [Performance] BurstWindow |
| Min gap between bursts (global / per gun) | 0.005 / 0.02 s | [Performance] GlobalCooldown / GunCooldown |
| Blob lifetime | 1.5 s | [Performance] Lifetime |
| Expand window / shrink rate / master size | 0.15 / 2.2 / 0.7 | [Fx] ExpandTime / DecayRate / BaseScale |
| Damage that maps to size factor 1.0 | 40 | [Fx] DamageRef |
| Min / max damage size factor | 0.5 / 1.5 | [Fx] MinSizeFactor / MaxSizeFactor |
| Low-damage pellet floor (shotguns) | 0.25 | [Fx] ShotgunFactor |
Why it's fast
- No particles: one static mesh per puff (1280 triangles, flat-shaded), shared across all slots.
- Pooled: objects are reused, nothing is Instantiate/Destroyed per hit.
- Culled early: off-screen non-player shots skip before any work; renderers outside the frustum skip per-frame pushes.
- Zero garbage: cached components, cached reflection, zero allocation hot path.
- 360 renderers absolute worst case (120 slots x 3 puffs) - trivial for this engine.
Requirements
- Ravenfield EA29+ (any Unity 2020.3-era build; verified on EA35, Steam or standalone)
- BepInEx 5.x (install to /BepInEx)
Installation
- Install BepInEx 5.x into the Ravenfield folder if you have not already (run the game once so BepInEx creates its folders).
- Copy PixelSmokeFx.dll into /BepInEx/plugins.
- Launch the game. The plugin logs Pixel Smoke Fx: harmony hook CONFIRMED on first boot.
(Folder structure: see INSTALL.txt in the same zip.)
Configuration
All settings live in BepInEx/config/com.local.pixelsmokefx.cfg (auto-created on first boot).
| Section | Option | Meaning |
|---|---|---|
| General | Enabled | master switch |
| General | TargetWeapon | only weapons whose name contains this substring; empty = all non-explosive guns |
| General | AlwaysRenderPlayer | shots fired by YOU always render, regardless of distance inside viewport |
| Performance | PoolSize | concurrent-smoke cap (down for old PCs, up for long battles) |
| Performance | GlobalCooldown | min seconds between any two bursts (same-burst hits bypass) |
| Performance | GunCooldown | min seconds between bursts of the same weapon |
| Performance | BurstWindow | hits from one weapon within this window count as ONE shot and all render (shotgun-friendly) |
| Performance | FullDist / HalfDist | size LOD + far cutoff for non-player shots
安裝與使用 安裝:按包內說明操作
- 解壓本站下載的壓縮包,先讀包內的 readme / 說明檔案。
- 多數模組依賴遊戲的模組載入器:常見做法是用社群模組管理器(如 r2modman)選中本遊戲安裝,由管理器自動處理載入器與依賴。
- 手動安裝時,把模組檔案放進遊戲目錄下對應的 Mod / plugins 資料夾。
- 啟動遊戲確認載入成功;帶「前置依賴」的模組需要把依賴一併安裝。
不同模組的安裝位置差異較大,包內說明是最可靠的依據。
下面這些內容需要先安裝,否則該模組不會生效: