搬送ベルトの物理学
Factorioのベルト輸送システムは、ゲームの中で最も詳細なシミュレーションの一つである。チェストや他のコンテナ内のアイテムは単純に合計された数字として保存され、邪魔の入らない一続きのベルト上のアイテムは最適化の結果、集合体として移動されるが、最終的にベルト上のアイテムは、特にそれらがインサータによって拾われたり、置かれたりするとき、個別にシミュレーションされる。このため、特にインサータのスループットに関しては、複雑な動作が発生する。
ベルトの特性
- 密度 ある長さのベルトに何個のアイテムが収まるかを、ベルトレーン1タイルあたりのアイテム数で測る。これはアイテムの種類やベルトの種類に関係なく、まっすぐなベルトで4個である。ベルト上のアイテム密度は、(Zキーを使って)地面に落としたときと異なることがある。
- 速度 ベルト上のアイテムのスピードは、実用的な理由から1秒あたりのタイル数で測定される。内部的には1ティック(1/60秒)あたりの位置(1/256タイル)で計測されることに注意。詳しくは後述する。基本的な搬送ベルトの速度は1ゲーム秒あたり1.875タイルである。高速搬送ベルトはその2倍、超高速搬送ベルトはその3倍である。
- スループット 1秒間に何個のアイテムが1つのタイルから次のタイルに移動するか。密度(1タイルあたりのアイテム数)に速度(1秒あたりのタイル数)を掛けたもので、例えば搬送ベルトの場合、1つのベルトレーンでは1秒あたり4 * 1.875 = 7.5アイテムとなる。両方のレーンでは2倍、つまり1秒間に15個のアイテムが手に入る。
- 圧縮 ベルト上のアイテムの間に空きがない場合、それは「完全に圧縮されている」と呼ばれ、そうでない場合、その圧縮は部分的なものでしかなく、最適なスループットは得られない。インサータ、分配器、横から来る他のベルト、掘削機など、ベルト上にアイテムを置くエンティティは、アイテムがちょうど入る大きさになるまで小さな隙間を広げて、アイテムのためのスペースを作る。つまり、アイテムがバックし始める前に、ベルトは自然に完全に圧縮される。
- レーン ベルトには平行な2つのレーンがあり、それぞれのレーンの密度と速度は一定で、曲がり角や曲がり角に関係なく、もう一方のレーンとは無関係である。そのため、曲がり角の内側のレーンにあるものは、外側のレーンにあるものより先にそのレーンから出る。
ベルトの速度
上記の値から、3種類のベルトの速度と処理能力を計算することができる。測定によってこれらの値を確認することができる。
ベルトの種類 | 速度 | スループット | ||||
---|---|---|---|---|---|---|
係数 | タイル/秒 | 単一レーン, アイテム/秒 | 単一レーン, アイテム/分 | 両レーン, アイテム/秒 | 両レーン, アイテム/分 | |
搬送ベルト | 1 | 1.875 | 7.5 | 450 | 15 | 900 |
高速搬送ベルト | 2 | 3.75 | 15 | 900 | 30 | 1800 |
超高速搬送ベルト | 3 | 5.625 | 22.5 | 1350 | 45 | 2700 |
ベルト上のアイテム
前述したように、アイテムは密度と圧縮の観点からベルト上のスペースを取る。しかし、ベルト上のすべてのアイテムは、論理的には、どの時点でも、ただ1つのベルトタイルの上にある。
例えば、スクリーンショットでは、あるアイテムがあるタイルから半分出ていて、次のタイルに半分乗っているように見えても、それは正確に2つのタイルのどちらかに計上される。
- アイテムが乗っているベルトのタイルを止めればアイテムも止まるが、そうでなければ動き続ける。
- 2つのベルトタイルを回路ネットワークに接続し、それらが運んでいるアイテムの統計情報を取得すると、アイテムがどちらか一方のタイルだけで数えられていることがわかるだろう。
- インサータは論理的に自分の前のタイルにあるアイテムしか拾うことができず、隣のタイルから割り込んでくるアイテムは拾えない。
この意味で、アイテムは隣り合う面積を持つものではなく、アイテム同士で一定の最小距離を持つ点と考えるのが便利である。ベルトの計算やベルトを含む回路ネットワークでは、その「中心点」がアイテムの図形内のどこにあるかは問題ではないが、真ん中にあるように見える。
上の画像では、ベルトを1ティックずつずらして動かし、最上段のタイルを一斉に停止したため、停止したアイテムの最前列がさまざまな量だけ飛び出している。一番左のベルトのアイテムは次のタイルのほぼ半分まで入っており、その中心点は上の停止したタイルの端に最も近いことを意味する。
以下は、いくつかのアイテムが2つの直線的な高速搬送ベルトタイル上を移動し、各ティックでどのような読み取り信号になるかを示す概略的な例である。中心点は*
印で示されている。(ベルトタイル1と2の間の隙間は可視化のためだけで、ゲームではタイル間にこのような隙間はない)。
ティック ベルトタイル1 ベルトタイル2 ベルトタイル1の読み取り ベルトタイル2の読み取り |------------------------------| |------------------------------| パルス ホールド パルス ホールド 0 <---*--> <---*--> <---*-- ><---*--> <---*--> 0 3 0 2 1 <---*--> <---*--> <---* --><---*--> <---*--> 0 3 0 2 2 <---*--> <---*--> <-- -*--><---*--> <---*-- 0 2 1 3 3 <---*--> <---*--> < ---*--><---*--> <---* 0 2 0 3 4 -> <---*--> <---*--> <---*--><---*--> <-- 0 2 0 2 5 *--> <---*--> <---*- -> <---*--><---*--> < 1 3 0 2 6 --*--> <---*--> <--- *--> <---*--><---*--> 0 2 1 3 7 <---*--> <---*--> <- --*--> <---*--><---*--> 0 2 0 3 8 <---*--> <---*--> <---*--> <---*--><---*--> 0 2 0 3
ベルト上の座標と長さ
注意深い計測の結果、曲がっているベルトの外側のレーンは、直線のベルトよりも正確に 1.15234375 倍長く、分数で書くと 295/256 になる。これは、直線のベルトタイルにはアイテムを置ける 256 通りの座標があることを意味するが、その精度で座標を測定することは間接的にしか行えない。
これらの座標の観点で見た各種ベルトタイルの速度と長さを紹介する。
対象 | 座標何個分か | |
---|---|---|
搬送ベルトの速度(1ティック) | 8 | |
高速搬送ベルトの速度(1ティック) | 16 | |
超高速搬送ベルトの速度(1ティック) | 24 | |
ベルト上のアイテムの長さ (どのスピードでも) | 64 | |
直線のベルトタイルと地下搬送ベルトの1レーンの長さ | 256 | |
分配器の入力ラインの1レーンの長さ | 179 (128+51)1 | |
分配器の出力レーンの1レーンの長さ | 128 | |
曲がったベルトの内側のレーンの長さ | 106 | |
曲がったベルトの外側のレーンの長さ | 295 | |
直進するベルト1タイルの後半または、地下からの出口に対して 横からアイテムを運び込んだときの移動距離 |
![]() |
68 |
直進するベルト1タイルの前半または、地下への入口に対して 横からアイテムを運び込んだときの移動距離 |
![]() |
188 |
(1)バッファの長さ51を含む [1]
例えば、上の表から、搬送ベルトの速度を推定できる。
- 8 (1ティックあたりの座標) / 256 (直線ベルトタイルあたりの座標) * 60 (1秒あたりのティック数) = 1.875 タイル/秒
ベルトレーンあたりのスループットは以下のようになる。
- 8 (1ティックあたりの座標) / 64 (アイテムあたりの座標) * 60 (1秒あたりのティック数) = 7.5 アイテム/秒
関連項目
- ベルト輸送
- Jan 04 FFF #276: Belt item spacing & Script rendering(英語)
- Feb 03 FFF #176: Belts optimization for 0.15(英語)
- Accurate belt segment measurements(英語) (0.17での議論)
- About belt numbers, from boskid(英語)