Download the zip for your system, unzip it anywhere and start Zenith (START HERE.txt inside says the rest). You need your own copy of Factorio 2.1 on the same computer; Space Age is optional.
Zenith-0.1.2-windows.zip: Windows (x64)Zenith-0.1.2-linux.zip: Linux (x64)factorio-3d-bridge_0.1.2.zip: the bridge mod alone, for Factorio's own mods folder (the downloads above already have it)- Unsupported:
Zenith-0.1.2-macos-unsupported.zip,Zenith-0.1.2-linux-arm64-unsupported.zip,Zenith-0.1.2-windows-arm64-unsupported.zip: never run by anyone;UNSUPPORTED.txtinside each says how Factorio runs beside it.
Every download comes with two add-ons already in its addons folder:
- Cinematic camera 0.2.0, switched on: a free camera, timelapses and recording. Its releases
- Terrain Elevation 0.1.4, switched off: hills under the factory, drawn only (the game stays flat). Turn it on in the Add-ons menu. Its releases
Performance
Every number was measured on the same laptop (RTX 5060 laptop GPU), on a copy of a big real base
(about 380,000 entities), with the windowed client. Each "before" is the 0.1.1 code and each
"after" is 0.1.2, run back to back, two runs each, averaged. Your PC will give different numbers.
The changes should be about the same. Every change below is an improvement: less time (ms) for the same work, or more frames (fps) and game speed (UPS).
The game's speed (UPS) at a busy base
Standing by the busiest belts, Hold the game at 60 UPS turned off so the raw cost shows.
| 0.1.1 | 0.1.2 | Better by | |
|---|---|---|---|
| Game speed, High | 27.8 UPS | 43.4 UPS | 56% more |
| Game speed, Ultra | 33.5 UPS | 47.5 UPS | 42% more |
| Zenith's bridge, per game tick (High) | 27.9 ms | 18.0 ms | 35% less |
| Reading items on belts, per tick (High) | 15.0 ms | 5.2 ms | 65% less |
| Reading items on belts, per tick (Ultra) | 11.9 ms | 4.7 ms | 61% less |
| Reading items on belts, per tick, walking | 7.1 ms | 2.7 ms | 62% less |
The bridge no longer re-reads belt lanes that haven't changed. On a busy base most of them are
backed up and still.
Frames standing still
| 0.1.1 | 0.1.2 | Better by | |
|---|---|---|---|
| Frame rate, High | 77.5 fps | 93.5 fps | 21% more |
| Slowest 1% of frames, High | 34.0 ms | 21.8 ms | 36% less |
| Frames over 33 ms, High | 1.25% | 0% | 100% less |
| Frame rate, Ultra | 82 fps | 85 fps | 4% more |
| Slowest 1% of frames, Ultra | 23.2 ms | 21.3 ms | 8% less |
| Minimap and map redraws, slowest 1% | 12.9 ms | 4.3 ms | 67% less |
| Ambient occlusion (now off by default) | 6–7 ms of GPU | 0 ms | 6 to 7 ms less |
Zoomed out over the base
| 0.1.1 | 0.1.2 | Better by | |
|---|---|---|---|
| Frame rate, Ultra | 43 fps | 63 fps | 47% more |
| GPU time, Ultra | 22.7 ms | 15.0 ms | 34% less |
| Draw calls, Ultra | 4,270 | 3,165 | 26% less |
| Frame rate, High | 68 fps | 88 fps | 29% more |
| GPU time, High | 13.7 ms | 10.7 ms | 22% less |
Belts that are small on screen are now drawn with a few triangles instead of about 1,450 per tile.
Walking through the base
| 0.1.1 | 0.1.2 | Better by | |
|---|---|---|---|
| Slowest 1% of frames, Ultra | 42.0 ms | 34.7 ms | 17% less |
| Frames over 33 ms, Ultra | 3.8% | 1.5% | 61% less |
| Worst frame spent choosing chunks | 10.8 ms | 2.7 ms | 75% less |
| Worst frame spent building a chunk | 14.6 ms | 9.2 ms | 37% less |
Alt-mode
| 0.1.1 | 0.1.2 | Better by | |
|---|---|---|---|
| Slowest 1% of frames with Alt-mode on | 84.5 ms | 28 ms | 67% less |
| Bridge cost of Alt-mode | 0.32 ms per tick | about 0 (the same as off) | 100% less |
| Machines showing their Alt-mode icon | 403 | 801 (all of them) | 99% more |
Smoother while moving
Running round the busy belts at exoskeleton speed (about 31 tiles a second), High and Ultra, Hold
the game at 60 UPS on and off. "Before" here is 0.1.2 without this work (everything above already
in both), so these gains come on top of the walking ones above. Each figure is the middle of the
runs' range.
| Before | 0.1.2 | Better by | |
|---|---|---|---|
| Slowest 1% of frames, running | 36.5 ms | 30.5 ms | 16% less |
| Slowest 1% of frames, main thread only | 34.0 ms | 27.0 ms | 21% less |
| Frames over 33 ms, per 84 s run | 135 | 24.5 | 82% less |
| Slowest 1% of frames, standing | 26.0 ms | 21.0 ms | 19% less |
Zenith's background work (loading chunks, messages, wires, far belts) now shares one time budget a
frame instead of each taking its own slice, the game's messages are read on a thread of their own,
and machine sounds and glows only look at what's near you.
Belts drawn correctly
| 0.1.1 | 0.1.2 | Better by | |
|---|---|---|---|
| Belts shown an item short or doubled, per update (busy base) | 2.5 | 0 to 0.02 | 99% less |
Keeping whole belt lines in step costs the bridge about 0.7 ms more a tick on the test base, with the
game still at 60 UPS.
Up next for performance
- Belts moved as groups: a run of items moving together (a full belt, a backed-up queue) is
sent as one group and moved by Zenith itself, starting and stopping together. The game is only
checked where items can come or go (inserters, side-loading, splitters, undergrounds, loaders),
not every belt along the way. Expected: far fewer checks for the server on long belts, much less
network traffic, and belts that stay smooth even when the game is busy.
Items on belts
- Stacked belts: a stack inserter's stacks (up to 4 items in one place) are drawn as piles, as
Factorio draws them. On the test base, 2.4 times as many items now show (394,801 items in 161,599 stacks; before, one item per stack). - New settings: "Belt item distance" sets how far items on belts are drawn. "Belt updates"
sets how many of them move (1,000 to 24,000, or Unlimited). They replace "Belt items in full" and
"Belt items far away", and your old far distance carries over. - No more hidden limit: the distance you choose holds.
- Full belts no longer freeze: a full, flowing belt could look still for seconds and then jump.
- No more splitting: big updates are drawn whole, so lanes don't split into moving and stopped
pieces. - Steady hand-over: the edge where moving items become icons no longer goes back and forth
while you stand still. Items stay until their icons replace them, in the same frame, so belts are
never bare or drawn twice. - Belts stay in step: a belt line that moved on is updated along its whole length, splitters and
undergrounds included, so belts no longer show an item short or one too many. - Missed items keep moving: an item an update misses glides on along its belt instead of
stopping and jumping. - Far belts are drawn as full as they are again (stacked belts showed gaps).
- Far plates (iron, copper, steel) no longer vanish far from the camera.
Fixes and changes
- Trains and wagons: right-click mines them, with their fuel and cargo (issue #10).
- Alt-mode icons: they show on every machine, not only the nearest 400 (issue #9). Requester
and buffer chests show their first four requested items, each a quarter of the icon. - Alt-mode arrows: Factorio's inserter, pump and machine arrows, as three settings with
Factorio's defaults. Machines show arrows on the fluid connections their recipe uses, and
recyclers show their output arrow (issue #9). - E key: it opens only your own inventory, never what's under the mouse.
- The see-through effect on trees and buildings near the mouse is gone (and its shortcut).
- Shadow distance: new setting under Settings → Graphics.
- Graphics settings: short descriptions, with a (?) for the full explanation.
- Ambient occlusion: off by default. It stays in Settings as a work-in-progress option with a
high GPU cost. - Linux download: the program and scripts are now marked runnable when unzipped.
Unsupported downloads (new)
macOS (Apple Silicon and Intel), Linux ARM64 (issue #8) and Windows ARM64. Nobody has
run these, and each zip has an UNSUPPORTED.txt explaining how Factorio runs beside it.
On macOS the app isn't signed by Apple. Right-click Zenith.app and choose Open the first time.