1. 혹시 DLC를 샀니?




(해당 아이템은 팩토리오의 DLC인 팩토리오:우주시대 전용 아이템이며 DLC 미구매자들은 사용이 불가능하다.)


게임 내에서 ALT를 누른 채로 아무 물건이나 눌러보면 위와 같이 '팩토리오 백과'라는 게 뜰 거다. 팩토리오 백과는 DLC와는 상관 없는 팩토리오 기본 기능으로 DLC가 없어도 열 수 있으니 해당 기능을 모르고 있던 팩붕이들은 한 번 써보길 바란다. 이거저거 누르다 보면 이런저런 잡다한 정보들이 뜰 텐데, 그 중 DLC 전용 아이템인 추진기를 팩토리오 백과로 열어본 뒤 밑으로 쭉 내려보면 저런 그래프가 나올 거다.



추진기는 DLC의 테마인 우주여행을 가능하게 하는 건...물? 도구? 설비? 아무튼 설치형 아이템으로 연료와 산화제 두 종류의 유체를 넣어주면 그 둘을 소비해서 해당 추진기가 설치된 우주 플랫폼을 앞으로 나아가게 한다. 여기서 특이한 점은 추진기에 투입된 유체량에 따라 속도와 효율이 변화한다는 건데, 연료와 산화제를 많이 넣어주면 넣어줄 수록 연료 소모량은 높아지고 속도도 빨라지지만 효율은 줄어든다. 한 마디로 낭비가 많아진다는 거다. 연료를 10%만 채워넣고 추진기를 작동시킬 때와 100% 풀로 때려넣고 작동시킬 때를 비교하면 같은 거리를 이동했어도 100%로 작동시킨 추진기가 연료를 2배나 많이 사용했을 것이다.


그렇다고 무조건 10% 사용만을 고집할 필요는 없다. 연료 만드는 게 어려운 것도 아니고 우주는 넓고 광활한데 연비운행 해보겠다고 10% 속도로 느릿느릿 움직여서 언제 엔딩 보겠나. 팩토리오의 컨텐츠는 우주여행 자체가 아니라 그 여행으로 도착한 행성에서 뭔가 하는 게 메인이니 우주선 타고 돌아다니는 시간도 그렇게 크지 않다. 연료 낭비한다고 해봐야 거기서 거기고 한 번 행성에 정착하면 다음 출발까지 연료 모을 시간도 충분히 있을 테니 생산량이 좀 모자라도 저장탱크 한두개만 추가하면 아무 문제없이 다닐 수 있다.



근데 설령 실용성은 떨어지더라도, 팩토리오 같은 자동화 운영 게임에서 뭔가 낭비 없이 효율적으로 돌아가고 있다는 느낌이 들면 기분 좋잖어. 유인선 말고 행성간 무역선이나 운석 채집선 같은 무인선들은 자동으로 하루종일 추진기 써서 돌아다닐텐데 거기서 조금만 아껴도 절약되는 게 한가득일테고. 우주선 형태나 운용 방식에 따라선 극한의 절약이 필요할 수도 있고 말이다.


여태까지 갤에 올라온 추진기 관련 회로들은 전부 우주선의 속도를 조절하는 회로들이던데, 속도가 아니라 투입되는 연료량을 조절하고 싶은 입장에서는 좀 아쉬웠다. 우주선 형태에 따라 최대 속도가 달라지는 팩토리오 시스템에선 어느 정도 속도에서 어느 정도 소모량이 나오는 지 우주선 별로 다 다를텐데 소모량 자체를 제어하는 회로는 안 올라오더라고. 그래서 한 번 써봤다. 속도 조절 방식에 비하면 장점도 있고 단점도 있을텐데 일단 함 무봐라 추라이 추라이.



2. 들어가기 전에




이번에도 밑에 글을 읽기 전에 배경지식 조금만 쌓고 가도록 하자.



팩토리오에서 유체 시스템은


1. 연결된 모든 구성요소에

2. 무한대의 속도로

3. 동일한 '비율'로 분포된다.


예를 들어 용량이 100으로 꽉 찬 파이프 4개에 신규 파이프 하나를 연결하면 연결된 즉시 모든 파이프 5개가 용량 80으로 변화하는 식이다. 예전에는 유체에도 '흐르는 속도' 같은 게 있어서 파이프로 몇 칸 떨어진 곳에는 이만큼의 속도로 차오르고 몇 칸 더 떨어지면 속도가 얼만큼 줄어서 중간에 펌프를 몇 개 추가해줘야 하고 하는 식으로 복잡하게 돌아갔지만, DLC 추가와 함께 시스템이 변경되어 흐르는 속도 같은 건 다 삭제되고 그냥 파이프 전체에 동시에 동일한 '비율'로 분포되도록 바뀌었다.


계속 '비율' 부분에 강조를 하고 있는데, 이는 저장 탱크에도 같은 시스템이 적용되기 때문이다. 파이프는 용량이 100이지만 저장 탱크는 용량이 25000인데, 파이프가 100까지 찼다고 저장 탱크도 100까지만 차오르거나 반대로 저장 탱크가 25000까지 꽉 찼다고 파이프도 최대 용량을 뚫고 25000까지 차오르지는 않는다. 파이프가 50%까지 찼다면 연결된 탱크도 50%까지 차있다는 거고 탱크의 용량이 80%까지 찼다면 그 탱크와 연결된 파이프들도 80%가 차 있을 것이다. 탱크와 탱크가 연결되어 있다면 탱크끼리는 용량도 비율도 동일할 거고 말이다.




팩토리오 위키의 회로 관련 부분을 캡쳐했다. 굳이 눈 아프고 머리 아프게 영어 해석할 필요는 없고 저 파랗게 칠한 60 times 뭐시기 하는 부분만 보면 된다. 대충 번역하면 팩토리오는 1초에 60번 상태를 업데이트한다는 내용이다.


프로그램에서 내부 함수가 실행되는 최소 시간 단위를 틱(Tick)이라고 하는데, 팩토리오는 1초에 60번 상태를 업데이트하므로 팩토리오에서 1틱은 1/60초이고 다른 말로 팩토리오에서 1초는 60틱이다. 타이머 회로를 한 번이라도 만들어봤다면 이미 익숙한 내용일 것이다. 타이머가 뭔지도 모르고 틱이라는 개념도 잘 이해가 안 간다면 좀 길게 풀어서 유체가 됐든 온도가 됐든 체력이나 전기가 됐든 뭐든 '상태가 바뀌는데 필요한 최소 시간' 정도로 이해하면 될 거다.


예를 들어 발전소로 전기를 생산하고 거기에 축전지를 연결했다면 축전지는 1/60초마다 계속 저장된 전력이 차올라서 최대 전력을 저장할 거고, 적에게 공격을 받았다가 조금만 기다리면 체력이 1/60초마다 조금씩 차올라서 풀피를 찍을 것이며, 자동차나 기차에 연료를 넣고 움직이면 1/60초마다 연료를 조금씩 소모해서 이동할 것이다. 타이머 만드는 데에나 필요한 내용을 설명했는데 이번 주제에서는 타이머 같은 건 안 쓸 거다. 다만 타이머는 안 써도 '팩토리오의 1초는 60틱이다'라는 정보는 이번 주제에서 좀 중요한 내용이니 한 번 짚고 넘어갔다.



3. 존내 쉬운 유체역학




처음에 올린 추진기의 정보 사진에서 유체 소모량 부분만 떼어 왔다. 추진기는 1초마다 최소 6에서 최대 120까지 유체를 소모한다고 한다. 그런데 우리는 방금 팩토리오의 1초가 60틱이라는 걸 배웠다. 이를 바탕으로 저 소모량을 다시 보면 추진기는 1''마다 최소 0.1에서 최대 2 만큼의 유체를 소모한다는 내용으로 이해할 수 있다. 초단위로 계산하면 6에서 120이라는 애매한 숫자가 나오는데 틱단위로 계산하니 0.1에서 2라는 깔끔한 숫자가 나왔다.


그리고 또 방금 유체 시스템은 동일한 비율로 분포된다고 했는데, 그러다 유체가 필요한 설비를 만나면 다른 파이프로 퍼지는 것보다 그 설비로 투입되는 걸 우선하게 된다. 예를 들어 1.5만큼의 산화제가 들어있는 파이프 옆에 추진기를 설치하면, 1/60초 후 그 파이프에 있던 1.5 산화제가 추진기로 들어가고 해당 파이프는 연결된 다른 파이프들과 동일한 비율로 다시 채워진다. 그리고 다시 1/60초 후 채워진 산화제가 다시 추진기로 들어가고 파이프는 다른 파이프들과 동일 비율로 다시 채워진다. 이 과정을 추진기가 다 채워질 때까지 반복한다. 계속 1/60초라고 적기 힘든데 이제부터는 그냥 1틱이라고 통일하겠다.


따라서 추진기에 연결된 파이프에 연료가 0.1 들어가 있으면 초당 6의 속도로 채워질 것이고, 파이프에 연료가 0.5 들어가 있으면 초당 30의 속도로 채워질 것이며, 1 들어가 있으면 초당 60으로, 2 들어가 있으면 초당 120의 속도로 채워질 것이다. 용량이 100인 파이프에서 단 2%만큼만 채워져 있어도 추진기에 연료를 최대 속도로 채울 수 있다는 것이다.


마지막으로 파이프와 저장탱크는 같은 비율을 유지한다는 것을 떠올려보자. 조금 전 계산한 2%라는 비율을 용량이 25000인 저장 탱크에 적용하면 500이라는 수치가 나온다. 따라서 추진기에 연결된 파이프에 저장 탱크를 붙인 뒤, 탱크에 연료를 500이상 넣으면 추진기를 풀파워로 작동시킬 수 있고, 탱크에서 용량을 5씩 뺄 때마다 연료가 채워지는 속도가 1%씩 줄어든다는 결론이 나온다.



자, 여기까지 4문단만으로 설명이 가능한 초등학생도 이해할 수 있는 존내 쉬운 팩토리오 유체역학 이론을 마치겠다. 이론은 다 배웠으니 이제 실제로 적용시켜보자.



4. 실제로는 별 거 없다




이론을 적용하기 위한 실험용 우주선이다. 실제 인게임에서는 이런 거 저런 거 이것저것 많이 설치해야겠지만 여기서는 작동에 필요한 최소한의 장비를 제외하고는 다 빼버렸다. 사실 맨 위에 화학공장도 빼버려도 되지만 보는 사람이 이해하기 쉽게 화학공장은 남겨놨다. 글로 떠드는 건 위의 이론파트에서 많이 했으니 바로 시작해보자.




탱크와 펌프를 회로로 연결해준 뒤 원하는 투입량이 나올 수 있도록 탱크 안에 들어갈 유체량을 입력해준다. 여기서는 연료 충전율 25%를 목표로 잡아보겠다. 탱크 충전량 5 당 연료 충전율 1%이므로 5 X 25 = 125를 입력해준다. 이렇게 하면 추진기에 연료가 최대 소비량인 초당 120의 25%인 초당 30만큼 투입될 것이다. 한 번 결과를 보자.




음... 비슷하게 투입되기는 하는데... 원하던 양보다 조금 더 많이 투입되고 투입량도 일정하지 않고 약간씩 변화한다. 뭔가 오류가 있는 것 같다.




펌프는 초당 1200의 유체를 전달할 수 있다. 이를 틱당 속도로 변환하면 1틱당 20의 유체를 전달할 수 있다는 소리다. 이동하는 동안 저장 탱크의 용량을 보면 목표했던 125보다 더 높은 150이상까지 갑자기 치솟는 걸 볼 수 있는데, 이는 펌프가 한 번 작동할 때마다 뒤쪽에서 최초로 유체를 빨아들이는데 1틱, 빨아들인 유체를 앞으로 내보내고 그걸 인식하는데 1틱 총 2틱 동안 작동해서 한 번 작동할 때마다 40의 유체를 내보내서 그런 거다. 한 번에 1에서 2정도만 지속적으로 내보내야 안정적으로 소모량을 유지할텐데 한 번에 대뜸 40씩 때려박으니 유체량이 요동을 친다. 이 부분을 해결해보자.




펌프의 뒤쪽에 연결된 파이프가 20 이상 차 있다면 틱당 20 만큼의 유체를 공급해줄 수 있으므로 펌프가 최대 속도로 작동할 수 있다. 그러나 그보다 유체량이 작아진다면 펌프의 속도도 점점 줄어들게 된다. 허공에서 물을 뽑아내는 것도 아니고 뒤에서 파이프로 공급받는 건데, 파이프가 제대로 공급을 못해주면 펌프 입장에선 별 수 있나 주는 만큼만 내보내야지. 따라서 펌프에 연결된 파이프의 내용물을 20 이하로, 다른 말로는 20% 이하로 낮춰주면 펌프의 1틱당 공급 속도를 줄일 수 있을 것이다.





탱크와 펌프를 파이프로 저런 식으로 이어준 뒤 두 개를 연속으로 붙여서 배치한다. 반드시 저런 형태일 필요는 없고 그냥 '펌프에 연결된 탱크 두 개'이기만 하면 된다. 저 형태가 최소한의 공간 사용으로 펌프와 탱크를 연결할 수 있는 방식이라 여기선 저런 형태로 배치했다.





첫 번째 펌프는 탱크에 유체가 250 이상 들어가도록 설정해준다. 250이면 탱크 용량의 1%이고 거기서 40정도 더 추가된다 한들 0.2% 미만의 차이밖에 안 난다. 따라서 탱크와 연결된 파이프에는 1~1.2 사이의 유체만 들어갈 것이고 두 번째 펌프는 1틱당 1~1.2 만큼의 유체밖에 전송할 수 없을 것이다.


저 사진을 보면서 '근데 탱크가 아니라 파이프에 펌프가 연결됐는데 저러면 40만큼 그대로 늘었다 줄었다 하는 거 아님?' 하고 생각한 팩붕이들도 있을 거다. 눈썰미 좋게 잘 보긴 했는데, 겉으로 보기엔 용량 100짜리 파이프에 연결된 것처럼 보이지만 실제로는 탱크와 파이프가 합쳐진 '총 용량이 25100인 하나의 유체 시스템 덩어리'에 연결된 걸로 판정되기 때문에 유체가 들어가는 즉시 탱크와 파이프에 동일 비율로 퍼지게 된다. 헷갈린다면 2번 문단을 다시 한 번 보고 오자.




두 번째 펌프는 기존과 동일하게 유지한다. 처음과 똑같은 수치지만, 이번엔 한 번에 왕창 때려박는 게 아니라 조금씩 조금씩 넣어질테니 유체량이 요동치진 않을 것이다. 한 번 결과를 보자.




오오 좋다 이거다. 이번에는 확실하게 원하는 분량만큼만 넣어진 채로 일정하게 유지되는 모습이다. 이 상태라면 플레이어가 지정한 원하는 분량만큼의 연료만 정확하게 추진기로 전달될 것이다. 이 상태로 한 번 우주선을 운행해보겠다. 정확한 전달을 위해 출발부터 도착까지 전 과정을 촬영하였다.




(만족)


동영상 화질은 미안하다. 용량 때문에 좀 많이 줄였다. 그래도 대충 알아는 볼 수 있잖아. 여기 요약본으로 움짤도 올려놨고. 처음에는 원래 차있던 연료들 때문에 풀파워로 가동하지만 어느 정도 이동하고 나니 완벽하게 안정된 소모량으로 완벽하게 일정한 속도를 내면서 플레이어가 설정한 소모량에 맞게 연료를 태우며 우주를 여행하고 있다. 이 정도면 이번 주제의 목표는 충분히 달성한 것 같다.



5. 추가로 알아둬라




우주선 가운데 있는 플랫폼 허브에 회로를 연결하면 저런 창이 뜰 거다. 출발지와 도착지가 어디인지 회로 신호를 보내주는 항목인데, 출발지는 1로 도착지는 2로 보내준다. 만약 행성 위에 가만히 정박해있는 상태라면 회로는 출발지와 도착지가 같은 곳이라고 인식해서 현새 위치한 행성을 3으로 신호를 보내준다.




영상 처음 부분에서 추진기의 연료가 1000까지 꽉 차있는 상태에서 출발하는 걸 봤을 거다. 안 봤으면 말고. 우주선이 멈춰있으면 연료를 소모하지 않으니 연료를 보내줄 필요가 없지만, 추진기는 연료를 소모하지 않더라도 일단 최대 저장 용량인 1000까지는 계속 연료를 받아먹으려고 하기에 멈춰있는 동안에도 불필요한 연료가 추진기로 흘러 들어가게 된다.


따라서 이런 불필요한 소모를 막으려면 우주선이 행성에 정박해있는 동안에는 펌프를 멈춰줄 필요가 있다. 사진처럼 아무 행성이나 3의 신호를 보내면 연료 신호를 25000만큼 보내게 설정한 뒤 두 번째 펌프에 연결해주자. 이렇게 하면 펌프는 탱크 안에 연료가 꽉 차있는 것으로 인식해서 작동을 멈추게 된다. 탱크 안에 남아있는 잔여 연료 정도는 흘러 들어가겠지만, 그 이상으로 불필요한 연료가 새어나가는 건 막을 수 있다. 




본문에서는 추진기를 한 대만 썼지만, 여러 대를 쓸 경우 그에 맞춰 들어가는 용량을 곱해줄 필요가 있다. 예를 들어 본문과 같이 연료 충전율 25%를 목표로 하되 사진처럼 추진기를 6대를 운용한다면 탱크의 용량은 125 X 6 = 750을 맞춰줘야 한다. 10대를 운용한다면 125 X 10 = 1250을 맞춰야 할테고.


당연한 말인데 쟤는 왜 굳이 저런 것까지 설명하나 싶겠지만, 글 초반부터 틱이 어쩌내 동일 비율이 어쩌내 1/60초가 뭐시기내 사람 헷갈릴 수 있는 개념들 설명으로 시작하다보니 회로에 대해 잘 모르는 팩린이가 읽고 '함부로 수치 건드렸다가 제대로 작동 안 하면 어쩌지'하고 걱정하면서 그대로 따라할까봐 별도로 언급한다.



걱정마라. 겉포장지에는 질소 빵빵하게 넣어서 잔뜩 부풀려놨지만, 정작 알맹이는 펌프랑 탱크 연결한 거 두 개 붙여놨을 뿐인 간단한 빈 깡통 회로다. 원리 설명은 장황하게 해놨지만 실제로는 고장나려고 해도 고장날 것조차 없는 단순한 회로다. 저번에도 말했지만 원리만 알면 응용은 자유이니, 원하는 대로 바꿔보고, 바꾼 다음에도 시간이 남으면 아까 3번 문단에서 강의 도중에 도망친 팩린이들 좀 잡아와라. 설명만 듣고 더럽게 복잡할 것 같아서 읽던 중간에 뒤로 나가던데 야야 가지마 좀만 더 읽어봐 이거 별 거 아니야.




본문에서는 연료와 산화제 둘 다 조정하는 식으로 글을 썼지만 실제로는 둘 중 하나만 조절해도 된다. 연료와 산화제 둘 다 동시에 같은 양이 소모되면서 추진기가 작동하는 방식이기 때문에 연료가 모자라면 산화제를 아무리 많이 투입해도 연료의 투입량에 맞춰서 작동되고, 반대로 연료를 풀로 때려넣어도 산화제를 적게 투입하면 산화제에 맞춰서 작동된다. 둘 다 조절하나 한 종류만 조절하나 성능은 동일하니 가뜩이나 공간이 부족한 우주선 위에 저장탱크 우르르 짓지 말고 한 쪽만 정해서 조절하면 된다.


참고로 연료와 산화제 둘을 동일하게 투입했을 때와 어느 한 쪽만 많이 투입했을 때의 추진기 불꽃 색깔이 다르다. 링크는 아래에 적어둘테니 마음에 드는 색깔에 따라서 연료와 산화제 중 어떤 걸 조절할 지 정하면 되겠다.


https://gall.dcinside.com/mgallery/board/view/?id=factorio&no=89422&exception_mode=recommend&page=1

추진기 디테일 재밋네프로메튬 채굴선인데 귀찮아서 연료랑 산화제 둘중하나만 꺼가지고 속도 조절하는 방식인데꺼질때까지는 남아있는 유체 색깔이 찐해져서 추진하는게 새삼 디테일에 미친 변태게임이다라는걸 또 느낌gall.dcinside.com



6. 마치며



이번 편은 솔직히 쓸 지 말 지 고민 좀 했다. 방금 전에도 말했지만 가뜩이나 공간이 부족한 우주선 위에 3X3 저장탱크를 추진기까지 가는 경로 사이에 두 개씩이나 배치해야 하는 회로인데, 연료 효율 따지면서 지으려니 공간 효율이 곱창이 나버리니 실용적으로 쓸 사람이 몇이나 될까 싶더라고.


그래도 이런 내용 저런 내용 올리면서 공유하면 누군가는 재밌게 읽고 쓸만하게 써주지 않을까 싶어서 그냥 올려봤다. 이런 식으로 연료 아끼면서 돌아다니는 거 좋아하는 사람도 있을 거고, 기존에 올라온 속도를 제어하는 회로들에도 덧붙여서 개량할 수 있을 지도 모르고, 모드 중에 유체량을 정밀하게 조절해야 하는 모드 있으면 거기서 쓸만할 수도 있고 뭐 어딘가에는 쓰이겠지 뭐.


딱히 실용적인 회로는 아니니 굳이 써보겠다고 머리 아프게 고민하지 말고, 이런 식의 절약형 운영 말고 풍족하게 만들어서 풍족하게 쓰는 방식이 마음에 들면 그 방식대로 게임하면 된다. 내가 설명한 방식이든 다른 방식이든 아예 안 쓰든 뭐든 본인이 재밌게 즐길 수 있는 방식이 제일 좋은 방식이다. 그래도 써주면 기쁠 것 같으니 써볼 사람은 개추 한 번씩 누르고 가줘라. 다들 즐거운 팩토리오 하고.