이 글이 도움이 될 사람이 얼마냐 되겠느냐만은


자기가 UPS 최적화를 하고 싶은데

UPS는 관련 내용이 대부분 카더라 수준에

본인이 새로운 디자인을 만들었을 경우 그게 기존보다 얼마나 더 좋고 나쁜지를 판단할 객관적인 방법이 없는 것 같아서

직접 테스트 해보면서 도움이 될 만한 것들을 정리해봄.


이 글에서 소개할건 두가지임.


1.맵 에디터

2.벤치마크 명렁어


먼저 맵 에디터라는 좋은 툴이 있으니 그걸 소개해볼까 함.


0.17 오면서 맵 에디터가 좀 많이 바뀐것 같은데

0.17 이전에는 인터페이스도 게임 플레이 화면과는 많이 다르고

에디터로 들어가려면 맵을 저장하고 시나리오로 변환해서 다시 에디터로 열어야 하는 번거로움 때문에 거의 사용을 안해봤었음.


근데 이제 /editor 한번만 치면 바로 에디터로 넘어갈 수 있고,

원하면 버튼 한번으로 다시 원래 게임처럼 플레이하는거도 가능함.


공장 블루프린트 디자인 하면서 맵 에디터 지금까지 써본적 없다면 꼭 써보는거 추천함.

아이템 가져오고 놓고 하는데 제한이 없어서 샌드박스보다 훨씬 더 편하고

청크 통채로 복사도 되서 엄청나게 큰 공장 만드는거도 순식간에 할 수 있음.




기본이 되는 맵을 준비해야 되는데

아무 맵이나 만들되 바이터는 끄고 만들면 됨.

지금 할건 디자인에 따른 UPS 영향을 보는거라 제어할 수 없는 요인을 최소화 해야됨.




그리고 콘솔창 열고 /editor 치면 맵 에디터로 진입


지금 보이는 왼쪽 위 패널 여러개 중에서 몇개만 소개하겠음.


기본은 None 패널이고 이건 샌드박스랑 거의 같은데

한번 아이템 선택 해두면 아이템이 템창에 계속 리필되서 디자인할때 아주 편리함




디자인 시작하기 전에 필요없는 요인을 모두 제거하기 위해서 지면 패널로 간 뒤에

모든 개체 제거, 연구소 타일로 채우기 누르면 이렇게 깔끔하게 될거임.


그다음에 다시 None 패널로 돌아가서 디자인의 반복 가능한 최소 단위를 만들고

자원이나 다른게 필요하면 자원 패널 가서 브러쉬로 칠해서 만들면 됨.



여기서는 원래 기차가 있어야 할 자리에 대신 무한 상자를 이용해봤음.

지금은 기차 vs 벨트 이런걸 비교하는게 목적이 아니기 때문에

비교하려는 디자인 모두 공급 방법을 똑같이 해주면 큰 상관은 없을 거라고 봄.


그리고 시간 탭으로 가서 일시정지 풀고 제대로 작동하는걸 확인했으면




복제 탭으로 가서 드래그만 해주면 ctrl+c, ctrl+v 쓰듯이 바로 복붙할 수 있음

이건 맵의 영역 자체를 복사하는거라

블루프린트랑 다르게 상자 안의 아이템, 조립기계의 작동 상태, 자동차 등등까지 전부 복사 가능해서

이게 사실상 맵 에디터를 쓰는 핵심이라고 보면 됨.


공간에 맞추기를 체크하면 짤처럼 32 x 32 타일 청크 단위로 복사도 가능함.




이렇게 원하는 디자인을 실제로 메가메이스 스케일로 스케일업 했으면 이제 서로 비교해 봐야겠지?

안정적으로 생산하는지 보려면 최소 10분~1시간은 굴려야 되는데

켜놓고 1시간동안 기다릴수는 없으니 콘솔에 /c game.speed=100 을 쳐서 원하는 시간만큼 통계를 얻도록 하자.

대충 그래프가 안정화되면 다시 /c game.speed=1 로 원래 속도로 돌리면 됨.







그럼 이제 벤치마킹을 해볼 시간.



팩토리오는 자체적으로 벤치마크 명령어를 지원함.


factorio --benchmark "Save_Name.zip" --benchmark-ticks 100000


이 명령어를 쓰면 "Save_Name.zip" 이라는 이름의 맵을 헤드리스로 100000틱 동안 구동하는데 걸리는 시간을 출력해줌.

사용하려면 먼저 팩토리오 게임을 종료한 후

명령 프롬포트(cmd)를 열고

팩토리오 실팽 파일이 있는 폴더로 들어가서

벤치마크 하고 싶은 세이브 이름을 넣어서 위 명령어를 치면 됨.




그리고 기다리면 이런 결과창이 보이고 여기 나오는 16866.453 ms가 우리가 원하는 값임.

3번 정도 같은 맵을 테스트 해서 이 값을 평균내고 100000 tick 에서 나눠주면 평균 tick/ms 값을 구할 수 있고

1000을 곱하면 이게 바로 UPS = tick/s 로 환산됨.

결과적으로 다른 디자인끼리 직접적으로 성능 비교가 가능함.


비교를 위해 준비한 디자인은 2개임


a.보라팩 8비콘 vs 6비콘, 10k/min 생산




8비콘으로 이정도면 10k 생산 가능.



b.저밀도 구조물 10비콘 vs 4비콘, 20k/min 생산





위는 4비콘, 아래는 10비콘 디자인




영역 통째로 복사하니까 20k/min 만드는게 정말 쉽다


아무튼 앞서 쓴 글 중에 투입기 수가 UPS에 정비례한다는 가설을 검증하기 위해서 극단적인 예를 만들어 봤음.


링크 : https://gall.dcinside.com/mgallery/board/view/?id=factorio&no=15465&page=1


결과만 보자면 위 글 가설하고 반대 결과가 나옴.


표에서 ms 숫자가 작을수록 더 좋은거임.




이유를 생각해 보자면,

전자회로 처럼 기계 하나에서 생산/소비되는 아이템이 매우 많은 경우에는 투입기의 움직임이 기계 수에 비해 UPS 영향이 커지고

보라팩이나 저밀도 구조물처럼 느린 아이템은 투입기보다 조립기계와 전력인터페이스가 먹는 UPS 영향이 더 커지는게 아닌가 추정?

아무튼 이것만 봐서는 아쉽게도 벤치마킹 안돌리고 두 디자인의 UPS 영향을 간단히 비교하는건 어렵다는게 결론임.


시간날때 테스트 전용 맵에 만들어둔 용광로부터 하나씩 직접 벤치마크 해봐야 할 것 같다.



마지막으로 UPS에 영향을 준다고 알려져 있는 내용들을

이런 벤치마크 과정을 거쳐서 테스트 하고 결과들을 정리해둔 사이트를 소개함.

UPS 최적화에 관심 있는 사람이 보면 도움 될만한거 많음.


https://mulark.github.io/