各位自動化同好們,大家好,我終於決定花點時間整理一下這份參考文檔了。
之前介紹過《我的第一座MAM》,既然是第一座,就只是能用的程度,性能上還是有很大提升空間的,一直想著優化。鴿了這麼久,現在終於有時間介紹給大家了。
這座MAM目前迭代到了第四版(MAMv4),每五分鐘以內可以過一關,無產量損失。不出意外的話應該是最後一版,再有時間的話我可能會去琢磨 TMAM(懸空MAM),或者轉戰《異形工廠2》。
目前的遊戲版本,HUB需求不會出現懸空圖形,只要完成了MAM的建設,確認並穩定交付速率,那過到多少關就只是時間問題了,幾千上萬關也就都失去了意義。
本文檔分章節介紹各個模塊,並附模塊總覽圖,包括實體層和電路層,總覽圖通常會比較大,所以儘量放在章節的最後,可以先拉到章節最後看看總覽圖,有個大概印象再回頭看細節。
方案簡介
遊戲的升級選項共有四個,本方案是在所有選項都同步升級的情況下設計實施的。如果你的電腦性能足夠,可以偏向升級傳送效率,這樣傳送和分發設施有了足夠的吞吐量,就可以容納更多的工廠產能,通過建造更多的工廠來提升過關速度。
優化的過程其實就是不斷精簡設施規模的過程,《異形工廠》是基於Electron框架開發的,這個框架本身就存在規模性能問題,遊戲中的設施一多,就會出現卡頓情況。所以精簡規模就可以多造幾座MAM,多幾座MAM就可以提升過關速度。
說是MAM,但一個存檔中不只有MAM,還包含生產升級圖形和藍圖的工廠,本方案兼顧升級圖形、藍圖以及關卡圖形的生產和交付。
在關卡圖形生產期間全速率生產並交付升級圖形和藍圖,當生產出足夠的關卡圖形時,則暫停升級圖形和藍圖,轉為全速率交付關卡圖形。這個切換是全自動完成的,不需要任何的人工干預。
三種升級圖形的產量是按升級需求量規劃的,也就是 2:1:1 的比例。至於藍圖則利用了一點超速率的技巧,做了兩條傳送帶的量。
超速率其實最多可以做到額外多四條帶的交付速率,也就是說,HUB有16個交付口,超速率最多可以做到20條傳送帶滿速率交付,當然本方案並沒有追求這個極致,只要多出兩帶交付藍圖就夠了。
先看一張總體的縮略圖吧,上半部分是升級圖形和藍圖的生產工廠,下半部分是四座MAM。在中心HUB的正下方是四座MAM共用的交付模塊,用於緩存圖形一次性交付以滿足交付速率的需求。
總體縮略圖
概念約束
都玩到MAM了,大家對遊戲的概念肯定都瞭然於胸了,但我還是想對一些概念或術語做一個約定,方便大家閱讀本文,因為我不知道其他玩家是如何稱呼這些東西的。我寫過不少遊戲攻略,除非是日常交流,在正式的攻略文檔中不太喜歡用行話或者說黑話,那通常對新人不友好,即使用也會盡量解釋一下,所以我的攻略有時也會有點囉嗦,希望各位包涵吧。
圖形:指正式交付到HUB的最終產品,例如藍圖、升級圖形、關卡圖形。
形狀:指生產圖形的過程產品,半成品,通常是圖形的某一層,有時也指多層半成品。
象限:一個完整形狀可以分為四個區域,從右上角區域開始按順時針順序分別為第一象限(右上)、第二象限(右下)、第三象限(左下)、第四象限(左上)。
象限形狀:指一層形狀中某一個或多個象限的不完整形狀,多數情況是指一個象限的形狀,即完整形狀的四分之一。
一帶:指在當前升級情況下一條傳送帶滿速率的傳輸速度或吞吐量。
中心HUB
MAM的生產和交付是需要時間的,本方案四座MAM,關卡切換後需要約2分鐘的時間開始產出目標圖形,然後需要約2分鐘完成緩存積累並激活交付模塊,最後需要約40秒完成交付。除了最後交付的40秒,之前的約4分鐘時間,對於關卡圖形來說,HUB是閒置的。
交付切換
我們當然不能真讓HUB閒著,這段時間正好利用起來交付升級圖形。也就是說,多數時間是在交付升級圖形,每隔4分鐘中斷一次,中斷時間40秒;而關卡圖形則是每隔4分鐘交付一次,交付時間40秒。
兩種圖形的切換是藉助一個由過濾器、傳送帶讀取器,再加上一個非門組成的小裝置完成的。參考下圖,左側的圖是最簡佈局,分實體層和電路層;右側的圖是實際應用佈局中需要走線的示例。
交付切換
過濾器的機制是——
當輸入信號為 1 或者輸入內容和輸入信號匹配時,則從↑輸出端輸出內容;
當輸入信號為 0 或者輸入內容和輸入信號不匹配時,則從×廢棄端輸出內容;
當無任何輸入信號時,則阻塞。
關卡圖形走①路線經讀取器,升級圖形走②路線經過濾器後併入①線。
當①線有關卡圖形到來時,讀取器的計數側輸出1,使用非門取反後得0並給到過濾器,則過濾器流向×廢棄端,停止交付升級圖形,①線的吞吐量將全部用來交付關卡圖形。反之,則過濾器流向↑輸出端,交付升級圖形。
超速率交付
關於超速率交付參考下圖的左側部分,使用平衡器、合併器、分離器將HUB的所有交付口都圍起來,相互之間不留傳送帶,這樣可以多出4個輸入口用於交付。
其原理是利用了遊戲的一個特性,即當兩條傳送帶經合併器或平衡器合併後不經傳送帶而直接輸入HUB或垃圾桶時,其速率之和會大於單條傳送帶。
超速率交付
如上圖右側部分所示,等級為50,效率11.10倍,即傳送帶速率為22.2/s的情況下——
①號裝置是正常的單帶滿速率 22.2/s;
②號將兩條傳送帶合併到一條傳送帶,然後交付,速率仍然是 11.1 × 2 = 22.2/s;
③號則合併兩條傳送帶後,直接交付,速率變為 13.3 × 2 = 26.6/s。
本來升級圖形的生產交付比為2:1:1,正好打滿16個交付口,預留的兩帶藍圖產線是用一個開關暫停的,只在需要時手動開啟,開啟後需要暫停兩帶的升級圖形轉而交付藍圖。有了超速率後就可以滿足16帶升級圖形和2帶藍圖的同時交付。當然藍圖在後期基本用不完,看需求吧。
不過,超速率並不是任何時候都有這麼明顯的效果,這跟升級等級有很大關係,具體可以參閱Steam社區一篇名為《超速率輸送及升級等級建議》的指南,為避免被BAN,就不貼鏈接了,需要的去社區搜索吧。
中心HUB總覽圖
中心實體層總覽
中心電路層總覽
交付模塊
交付速率的需求從第27關的4/S開始,每4關加1,直到第811關的200/s就不再增加。生產和傳送的效率升級到10倍後提升幅度就很小了,10倍效率的傳送帶滿速率為20,需要至少10座MAM才能滿足200/s的需求,由於遊戲本身的規模性能問題這不太現實(或許有更精簡的MAM我沒有想到)。
好在遊戲提供了存儲器,可以存儲最多5000個物品,每個存儲器有2個輸入和2個輸出,我們可以利用8個存儲器對圖形進行緩存,當積累到一定數量後,16個輸出口一次性同時交付,可以在短時間內打滿HUB的16個交付口,滿足交付的速率需求。
為了方便說明,我把交付模塊分為三個區域:交付區、攔截區、輸入區,你可以先下拉看看交付模塊總覽圖,我在上面做了標記。
交付區
交付區是交付模塊的核心區域,由①、②兩部分實體層以及A、B兩部分電路層組成。
①部分包含8個存儲器以及16個出口過濾器,結合A電路,實現關卡圖形的緩存,姑且稱為緩存機。
②部分包含1個存儲器和1個過濾器,負責控制緩存量並激活①部分的過濾器,姑且稱為計量機。
至於B電路,則是一個保障措施,沒有它的話交付模塊雖然也能運行,但效率會打很多折扣。
先將緩存機和計量機簡化一下做個機制說明,如下面動圖所示——
交付模擬
MAM生產的圖形從左上角經4個分離器,大部分進入上面的緩存機,少量進入下面的計量機。
存儲器電路層有2個輸出:當存滿時數字側輸出1,否則輸出0;圖形側則輸出當前存儲的圖形信號,只有存住圖形時才有信號,圖形途徑時是沒有信號的。
利用這個機制,再配合過濾器,就可以實現緩存機和計量機之間的互鎖和互激活。
可以看出來,緩存機在激活輸出之前能緩存多少圖形,取決於兩方面——
其一是計量機中存儲器與過濾器之間傳送帶的長度,這條傳送帶越長,計量機輸出圖形信號的間隔時間就越長。區域空間有限時可以走S型路線加長。
其二則是左上角分離器的數量,分離器越多,分發給計量機的圖形就越少,相應的計量機輸出圖形信號的間隔時間也會越長。
上圖示例中的緩存機只有一個存儲器,若有多個存儲器的話,就將它們的電路圖形側信號使用非門取反後再使用與門連接起來,這樣只有當所有存儲器都清空後,才會重置計量機。理論上講,連接多個存儲器的圖形信號可能會出現信號衝突,比如當多個存儲器存儲的圖形不一致時,但實際上有B電路的保障,再配合攔截區的“髒圖形”過濾是可以避免這種情況的。
關於B電路,還是以上面示例為基礎介紹,如下圖所示——
緩存機的過濾器不再是由計量機直接激活,而是由B電路的輸出來控制,下圖紅色箭頭指示的方向就是B電路的信號輸出,底部紅色圓圈標記的恆定信號是模擬中心HUB的信號。
交付保障電路
具體的電路邏輯就不廢話了,可以自己看,只說一下業務邏輯。B電路會有三種信號輸出:計量機的圖形信號、或無信號、以及0信號。
當緩存機中還沒有存儲圖形,或者存儲的圖形與HUB信號一致,那麼B電路的輸出取決於計量機,此時若計量機已經積累足夠的圖形則輸出圖形信號激活緩存機的過濾器進行交付,否則無信號輸出,鎖住緩存機。這種情況發生於MAM正在生產當前關卡的圖形。
當緩存機中存儲的圖形與HUB信號不一致,則B電路會忽略計量機的信號,直接向緩存機的過濾器輸出0信號,此時緩存機激活,但並不是交付,而是走過濾器的×廢棄端清空緩存。這種情況通常發生於剛過完一關,但緩存機還殘留了上一關卡的圖形。
因為在交付圖形時,HUB統計速率是需要時間的,這時HUB信號還沒有切換,MAM又生產了更多圖形,這些圖形應該在HUB完成速率統計切換信號後清理掉。當然,我們可以在交付期間切斷MAM的信號輸入使之停止生產,但一方面確實沒這個必要,更重要的是即便MAM停產,在傳送帶上也會有殘留。
存儲器同時只能存儲一種物品,不同的物品會堵在輸入口進不去。B電路可以保障緩存機在關卡切換時及時清理上一關的圖形,釋放緩存以接收新關卡的圖形。
攔截區
③攔截區沒太多可說的,就是使用16個過濾器,對應交付區8個存儲器共16個輸入口,這16個過濾器只接收中心HUB的信號,也就是隻放行當前關卡所需圖形,其他圖形統統廢棄。
攔截區可以避免交付區緩存“髒圖形”,保障交付區電路的正常運轉。
輸入區
④輸入區接入MAM生產的圖形,本方案接入了四座MAM,每座MAM的產出都使用多個分離器控制進入交付區計量機的圖形數量。
總覽圖中輸入區下部中間的那個形似沙漏的佈局,是為了平衡左右兩側MAM的產量輸入。
四座MAM分左右各兩座,雖然它們穩定狀態的產能是一樣的,但預熱所需時間不一樣,而且實際過關所需要的緩存量也不需要等到它們都進入穩定態,因此左右兩側的產量是有差別的。利用平衡器擺放這樣一個負載均衡裝置可以平衡交付區8個存儲器的輸入量。
交付模塊總覽圖
交付模塊總覽
萬能製造機
進入本方案的主體部分,MAM,全稱 Make Anything Machine,說是萬能,但其實並不萬能,畢竟還無法制造懸空圖形,不過對於遊戲本身的過關需求來講,確實可以稱得上萬能了。
一個關卡圖形最多需要堆疊四層,每一層由1~4個象限形狀構成,遊戲中共有四種象限形狀:圓形(Circle)、矩形(Rectangle)、星形(Star)、扇形(Windmill)。也就是說每一層的每一個象限都有五種可能,除了四種象限形狀外還可能是空。
此外,遊戲中有8種顏色:紅色(Red)、綠色(Green)、藍色(Blue)、黃色(Yellow)、紫色(Purple)、青色(Cyan)、白色(White)、無色(Uncolored),其中紅綠藍為基本色,可以直接採集到;黃紫青白需要使用混色器製作,而無色則是形狀的原始顏色。所以一個圖形的每一層的每一個象限有8種顏色可能性。
MAM需要兼顧上述的所有可能性,把問題拆分來看,只需要做出單層圖形的工廠,然後複製3次,將4座單層工廠的輸出按順序堆疊起來就是目標產出。所以下方的總覽圖只是其中一層的工廠,我在上面做了標記,可以先看看。
圖形分析電路
MAM要生產關卡圖形,首先得知道當前關卡需要的是什麼樣的圖形,中心HUB會輸出當前需求的圖形信號,遊戲提供了一系列電路層的模擬器件,可以用來分析這個圖形信號。在真正開始介紹本方案的MAM之前先看看具體如何分析圖形吧。
圖形是可以多層堆疊的,最多四層,那麼就需要至少3個模擬拆分器對圖形信號進行拆分,然後使用圖形分析器逐層分析。
模擬拆分器的機制是提取最上層的圖形信號從右側輸出,其餘的圖形信號從左側輸出,所以需要多個拆分器逐層提取。
圖形分析器的機制是分析圖形最底層的第一象限(右上),並從右側輸出其形狀信號,左側輸出其顏色信號,其中形狀信號是該象限形狀所組成的完整圖層形狀,而非僅僅象限形狀。所以需要對形狀進行旋轉,分別分析每個象限的信號。
MAM圖形分析電路
如上圖所示,從下到上使用四個模擬拆分器對圖形進行拆分,然後每一層分別使用四個模擬分析器分析四個象限的形狀。最下面的拆分器右側輸出的是圖形最頂層的形狀。
上例中使用了四個模擬拆分器,但其實三個就夠,最頂上的第四個是不需要的,因為第三個的左側輸出的就已經是最後一層形狀了,不需要再拆分。
生產區
生產區包含混色機和上色機兩部分。如下圖所示,這是負責一個象限形狀的生產區實體層和電路層,請暫時忽略電路層黑線覆蓋的部分。
所需原料是基礎的形狀和顏色,也就是圓形、矩形、星形、扇形四種完整的基礎形狀,以及紅、綠、藍三種基礎顏色。
MAM生產區
混色機包含兩個混色器和若干過濾器,一個混色器負責生產黃、紫、青三色,兩個混色器配合生產白色。混色機依據圖形分析器的顏色信號,經過一系列條件判斷和過濾,輸出目標顏色。也就是說混色機的輸入為紅綠藍三原色,輸出則是包含三原色在內的7種顏色,由於單層形狀的單一象限只可能是一種顏色,所以混色機同一時間也只需輸出一種顏色,合併到一條傳送帶即可。
上色機使用一個雙面上色器對形狀進行上色,雙面上色器的顏色入口處放了一個過濾器,這個過濾器也會接收圖形分析器的顏色信號,可以將上一關卡時殘留在傳送帶上的顏色快速廢棄,避免影響當前關卡的響應速度。
雙面上色器的形狀入口處也放了一個過濾器,這個過濾器接收的信號是一個表示當前顏色需求是否為無色的開關量,若顏色需求是無色,則形狀繞過混色器直接輸出。
最後,上完色的形狀進行四切,並旋轉到對應的象限,然後輸出到後面的堆疊機進行堆疊。
關於生產效率做一點說明——
如前所述,本方案是在所有升級選項同步升級的情況下設計實施的。
以此為前提,一個雙面上色器的效率,或者說對形狀的需求及產出是一帶的1/4,對顏色的需求則是一帶的1/8,因為一個顏色可以同時上色兩個形狀。
而一個混色器的效率是一帶的1/6,完全可以滿足一個雙面上色器的需求。
同時,一個完整形狀可以切割成四個象限形狀,切割效率也是一帶的1/4。
那麼,只要單位時間內生產一個完整形狀,然後一切為四後,剛好打滿一帶。
所以,只需要一個雙面上色器,配合一個可以生產白色的雙混色器串聯組 就可以滿足單層單象限的產能需求。
堆疊區
每一層都需要三套堆疊裝置:首先四個象限形狀兩兩堆疊為2個半形狀,然後2個半形狀堆疊為1個完成形狀。每套堆疊裝置簡化圖如下——
MAM堆疊區模擬
一套堆疊裝置需要兩個原料入口和三個產品出口。雖然HUB需求不會出現懸空圖形,但缺角的情況還是會出現的,而堆疊機只有當兩個輸入都有的時候才會輸出,因此如果遇到缺角的情況,應該繞過堆疊機直接輸出。
如上圖所示,兩個原料入口處放置兩組過濾器和讀取器,當右側沒有形狀輸入時,則左側形狀直接走①線輸出,反之右側形狀直接走②線輸出,只有當左右輸入都有形狀輸入時才會經堆疊機走③線輸出。
原料輸入的盡頭放置垃圾桶,將來不及進堆疊機的形狀銷燬,防止堆積後造成阻塞。
上圖只是一個用了4個堆疊機並聯組成的簡化裝置,一個堆疊機的效率是一帶的1/8,因此需要至少8個堆疊機並聯才能滿足一帶的速率。考慮到會有來不及進入堆疊機而被銷燬的形狀,可以讓堆疊機的數量更多一些,儘量提升堆疊效率,降低原料損耗,從而提升生產效率。如本方案的每套堆疊裝置都使用了14個堆疊機,雖然仍會有極少量的原料被銷燬,但其實已經可以說是沒有產能損失了。
進料區
進料區負責向MAM出入形狀和顏色原料。
MAMv4所需的原料都是基礎的形狀和顏色,但是完整的基礎形狀產地較少,且分佈比較分散,需要各種飛傳送帶,所以我乾脆直接使用隧道來代替傳送帶運輸。
官方社區有一個叫做 ShapeGenerator 的模組,這個模組是一個只佔一格面積的設施,可以生成任何指定的物品,用這個模組一方面可以代替原料產地,另一方面可以進一步減小設施規模。畢竟我們的核心玩法是MAM的建設和優化,原料方面可以簡略一下。
不過本方案暫時沒有引入任何模組,還是飛了不少進料用的隧道和傳送帶。因為這個原因,最初是打算接入四形混合形狀作為原料的,所以製作了下圖這樣的裝置——
原料加工裝置
這個裝置是將四形混合形狀四切後重組。但是這種四形混合形狀的產地同樣不多,通常與MAM之間存在一定的距離,該飛的線一點也不少。而且MAM的每一層都需要四個這樣的裝置,其本身也會增加存檔的設施規模,所以乾脆直接採集基礎形狀。當然由於原料產地的距離原因,以及不存在完整的扇形基礎形狀,有些原料還是需要在產地加工一下再飛過來。
在之前的版本中,還採用過這樣一種方案:先對四形混合形狀進行上色,然後四切後直接輸出。
其他方案
如上圖所示,這種方案直接輸出象限形狀,堆疊之前不需切割,但需要電路層多做一點事情,由於圖形分析器輸出的是完整的形狀信號,那麼要想用這個信號控制過濾器的輸出,需要先對其進行模擬切割和模擬旋轉。
之前的版本也嘗試過其他方案,最終都被淘汰,就不一一介紹了。
還是回到本方案的進料區,如下圖所示——
MAM進料區
基礎形狀和顏色的進料路線沒什麼可說的,就看你怎麼飛線了。
前面對生產效率做過說明,本方案使用的是雙面上色器,那麼一種基礎顏色的一帶產量可以支持8個象限工廠。一種基礎形狀的一帶產量可以支持4個象限工廠,而基礎形狀剛好有4種,也就是說,每種基礎形狀各1/4的產量合併為一條傳送帶剛好一帶,將這四形狀組成的一帶產量輸送給象限生產區,在進入雙面上色器之前用一個進料過濾器篩選出該象限當前需要的基礎形狀就可以了,這個過濾器接收的就是圖形分析器的形狀側信號。
值得注意的是,如上圖紅框標註的電路,進料過濾器並不是直接接收圖形分析器的信號,而是經過這個電路調製的信號。
由於關卡圖形的任意層都可能存在缺角的情況,那麼某個象限的圖形分析器就可能無任何信號輸出,這時進料過濾器無任何信號輸入的話會處於鎖定狀態,又由於本方案基礎形狀的進料存在共用的傳送帶路段,那麼一個象限進料阻塞就會導致其他象限進料擁堵,降低效率。
這個電路的作用就是將圖形分析器的無信號調製為0,讓形狀走過濾器×廢棄端銷燬。當然,如果各個象限的進料是完全獨立的,那就不需要這個電路。
單層總覽圖
MAM單層實體層總覽
MAM單層電路層總覽
其他工廠
其他的升級圖形和藍圖工廠就不多說了,簡單貼幾張圖吧。
其他工廠
升級圖形
升級圖形
升級圖形
藍圖
----------
Enjoy your Shapez!