드릴과 분배기를 보기전에 우선 벨트위에 아이템 좌표에 대해 먼저 보고가자
터보벨트위에 아이템을 올리고 1틱씩 이동할때마다 아이템의 좌표를 찍어보았다
1틱당 0.125 = 1/8칸씩 이동을 하고 있어서 1칸이동에 8틱이 소요되는 모습을 볼 수 있다
참고로 노란벨트 위에서는 이렇다
1틱에 1/32= 0.03125만 이동해서 한칸 이동에 32틱이나 소요되고 있는 모습
그런데 내가 녹벨에서는 철판을 0위치에 정렬시키고 출발시켰지만 노란벨트는 정렬안시키고 찍었다 보니 좌표가 지저분한 것을 볼 수 있다
이는 벨트위에서의 좌표 정밀도가 1/32수준이 아니라는 뜻
간단한 테스트를 해보니 벨트 위 아이템의 양자화 단위는
0.46875-0.46484375=0.00390625=1/256
아이템은 벨트위에서 256개의 좌표를 가질 수 있다
본론으로 들어가보자
철광석은 스프라이트가 계속 변화하면서 보기가 힘들기 때문에 철판을 캐도록 개조를 좀 해두었다
풀벨트로 잘만 동작하던게 벨트한번 막혔었다고 왜 반벨트로 동작하게 된 것일까?
그 비밀을 파헤치기 위해 분배기를 벗겨보았다
https://gall.dcinside.com/mgallery/board/view/?id=factorio&no=47082
분배기와 지하벨트가 투명하다면?갑자기 궁금해서 스프라이트 투명하게 바꾸면 뒤에서 무슨 일이 생기나 구경해봤음투명 지하벨트투명 분배기투명 레인 밸런서빨간 네모 친 부분이 분배기에 해당하는 영역임초록 네모 친부분 잘 보면 아이템 두개가 겹쳐있는 걸 볼gall.dcinside.com4년전에 했던 짓을 이제와서 또 해보게 될줄이야
이건 정상 동작할때의 모습이다(1/15 배속)
둘 다 풀벨트로 잘 나가는 모습
이건 왼쪽 드릴이 비정상 동작할때의 모습이다(1/15 배속)
딱봐도 드릴이 아이템을 내려놓은 위치가 다른것을 볼 수 있다
가동 직후의 드릴은 바닥에 놓인템이 아무도 없는 상태에서는 최대한 가운데에 아이템을 내려둔다
2틱동안 아이템의 좌표를 출력해보았다
Line1은 분배기의 왼쪽입력라인
Line5는 분배기의 출력왼쪽라인
Line7는 분배기의 출력오른쪽라인
드릴은 Line1의 0.07421875 위치에 아이템을 내려놓는다
아까 녹벨은 틱당 0.125씩 이동한다고 했던것을 기억하고 있는가?
0.07421875-0.125 = -0.05078125
0보다 작아지기 때문에 분배기 건너편으로 넘어가게 된다
분배기 건너간 직후의 좌표는 0.25로 고정되는듯한 모습이다
드릴에서 중앙에 내려놓은 아이템은 1틱만에 분배기 건너편으로 넘어가기 때문에 자리 점유하던것을 바로 풀어버리게 되고, 드릴은 그 빈자리에 바로바로 새 아이템을 내려놓을 수 있다
내려놓은 아이템은 1틱은 위로 가고 1틱은 아래로 가고를 반복한다
한가지 짚고 넘어가는 것을 잊었다
벨트 반줄 위에는 아이템이 4스택까지 올라갈 수 있고 따라서 아이템사이의 간격은 1/4 = 0.25다
녹벨은 한틱당 1/8씩 이동하기 때문에 1틱은 위로 아이템을 보내고, 1틱은 아래로 아이템을 보내서 2틱주기로 템을 내보낸다 하더라도 풀벨트를 딱코로 맞출수 있다
이제 막힌 벨트 케이스를 다시 보자
Line5,7의 출력이 막혀있기 때문에
Line1에도 2개의 템이 있는 것을 볼 수 있다
하나는 Line5,7의 출력을 기다리며 딱 0좌표에 있고, 두번째 아이템은 0.25위치에 있는 모습
이제 벨트를 풀고 다음틱의 모습을 보면
Line1의 0좌표에 있던 아이템은 Line5의 0.43359375로 넘어갔고,
드릴은 새로운 아이템을 내려놓았다
기존처럼 0.07421875에 내려놓는 것이 아닌, 0.375에 내려놓았다
한틱이 더 지나간 모습
0.125, 0.375에 있던게 0, 0.25로 이동했지만 이 시점에 분배기를 건너간 아이템은 없다
드릴은 추가 아이템을 둘 공간이 확보되지 않았기 때문에 추가 아이템을 내려놓지 못한다
그렇기에 펑크가 난다
문제가 생긴 드릴은 껏다가 키면 바로앞 공간이 다시 비기 때문에 다시 0.07421875에 내려놓을것이고, 이 아이템은 다시 1틱만에 분배기를 건너갈 것이다.
그렇기에 복구가 된다.
참고로 터보분배기 말고 다른 분배기를 사용할 경우는 내려놓는 위치가 조금 다르다
녹벨 : 0.07421875=19/256 (벨트속도 32/256)
파벨 : 0.10546875=27/256 (벨트속도 24/256)
빨벨 : 0.13671875=35/256 (벨트속도 16/256)
노벨 : 0.16796875=43/256 (벨트속도 8/256)
티어가 낮아질수록 내려놓는 위치가 점점 분배기 중앙포지션에서 멀어진다
가뜩이나 속도도 더 느린데 내려놓는 위치가 저렇게 멀어져버리니 다른 티어로는 풀벨트를 만들래야 만들 수 없다
내려놓는 위치 자체가 바뀌는 원인은 뭘까?
이건 진짜 코바렉스가 와서 알려주지 않는 이상 모를 것 같다
혹여라도 벨트위 좌표를 직접 확인하고 싶은 사람이 있다면 벨트나 분배기에 커서를 올린 상태에서 아래의 커맨드를 쓰면 확인할 수 있다
| /c local selected=game.player.selected local m=selected.get_max_transport_line_index() for i=1,m do local cs=selected.get_transport_line(i).get_detailed_contents() for _,c in pairs(cs) do game.print("Line "..i..": ".. c.position) end end |
---------------------------------------------------------------------------------------------------
깔끔한 해결책이 생각나서 추가로 공유하고자한다
분배기의 입력쪽에 벨트를 하나 떠 깔아주고 내용물 읽기(모든벨트)를 체크한다
이러면 분배기의 입력쪽에 걸려있는 아이템을 회로로 얻을수 있기 때문
그리고 드릴은 동작조건을 모두<=4 일때 동작하도록 한다
이러면 출력이 막히더라도 분배기 입력쪽에 아이템을 과하게 내려 놓는것을 막을 수 있다
1배속
틱단위 재생
상당히 깔끔해서 마음에 든다
와 이걸 분석해내네
그러니까 병목당하기 전에는 드릴이 분배기 분배위치 직전위치 출력하니 다음틱에 바로 옆벨트로 옮겨져서 드릴이 다시 출력할 수 있고 병목 이후엔 분배위치 이전으로 밀려서 줄이 길어진다였구나
이거네 ㅋㅋ
GOSU
1짤 보면 벨트 좌표는 시작지점이 1, 끝지점이 0인거같은데 분배기는 분배시점 전후로 좌표가 따로매겨지나? 드릴이 중간에 내려놓으면 0.5여야할거같은데 0.07이라니 좀헷갈리네
ㅇㅇ 딱 경계선에서 다시 0부터 시작으로 봐야함
분배기는 분배 전(라인1-4, 좌표 0.5-0), 분배 후(라인 5-8, 좌표 0.5-0) 이렇게 두개로 쪼개지고 라인 1의 0.07위치는 벨트로 치면 0.57 즉 중간보다 살짝 왼쪽이라고 보면 되는건가. 1/256단위로 쪼개지는것도 재밌네. 노벨 속도가 틱당 1/32 = 8/256이니 1.87/s 미만 속도의 벨트는 모드로도 구현 못할거같고.
@고속도로
https://lua-api.factorio.com/latest/prototypes/TransportBeltConnectablePrototype.html#speed
지금 문서보니까 1/256단위라고 아예 대놓고 써있었네 ㅋㅋ
@고속도로
https://wiki.factorio.com/Transport_belts/Physics#Belt_positions_and_lengths
여기도 정보가 있었네 분배기의 분배전라인(1~4)의 길이는 0.5가아니라 179/256이라는듯
곡선의안쪽은 106/256, 바깥쪽은 295/256
녹벨에서 아이템이 스스로의 길이만큼 움직이는데 2틱이 걸리니, 한번 꽉 찬 상태에서 다시 돌아가면 왼쪽 끝에 넣고 그게 계속 반복되니 벨트반줄에 넣는거랑 다름없는 상태가 되서 병목생긴다는거고? 뜯어보니 간단한 이유였네 내려놓는 위치는 진짜 미스터리다.. 이거뭐 분배기트릭 안되게 하려고 녹벨43 파벨35 이런식으로 하려그랬는데 반대로 적용된건 아니겠지. 하필 차이가 8/256이라서 벨트속도 차이랑 동일한데..ㅋㅋ
@고속도로 8씩차이난다는 점이 진짜 실수로밖에 안보여서 괴상하긴함 모드로 더 빠른분배기랑 더 느린 분배기들 추가해서 확인해볼까
@이파 맞네 위치가 양자화가 되어있으니 곡선도 무리수가 아니겠구나 분배기 길이는 사실 한칸이 아니라 분배전 0.7 + 분배후 0.5칸 해서 1.2칸이었고, 건너갈때 최대 0.25칸 점프하는걸 보정하려고 0.2칸을 추가로 준거같네
상당히 깔끔해서 마음에 든다 까지 이해했음
근데 이거 왜 다들 분배기 합류로 만드는 거임? 그냥 분배기 양쪽에 드릴 붙여서 두 줄로 뽑아도 되는 거 아님?
@EZV 드릴 2개마다 벨트 한줄을 바깥으로 빼내는거보다 가로로 된 드릴 2개마다 벨트 한줄을 바깥으로 빼내는게 공간상에 이점이 있어서?
@ㅇㅌ(59.7) 왜 1줄임 드릴 1개당 반줄 2개씩 해서 총 2줄 나오는 거 아님?
@EZV 아니아니 그런 말이 아니라 자원 패치가 넓게 있는 상황에서 드릴을 한 50개 정도 박았는데 거따가 저렇게 속도모듈 풀로 박아서 25벨트 풀벨트로 밖으로 꺼내려고 한다고 생각해보셈 그럼 바깥쪽에 있는 애들은 걍 밖으로 벨트를 빼면 되는데 안에 있는 애들을 밖으로 꺼내려면 공간이 필요할거 아님?
@EZV 아아 ㅈㅅㅈㅅ 내가 모바일로 보느라 글을 잘못 봤네 드릴 2개당 1줄로 잘못 봤음 ㄷㄷ
@EZV 실전은 이렇게 하는게 낫긴 할듯
이토록 완벽하게 분석하다니;
와우... 믿고 있었다구! ㅠㅠ 드릴이 내려놓는 자리기 기존 점유에따라 미세하게 달라지는게 원인이었네. 그래서 한번 고장나면 연쇄적으로 복구가 안되는거였어. 공간을 비워주고 다시 내려놓게 하면 고쳐지는것도 그런 이유였군 분배기 뒤쪽 라인의 개수 체크해서 제어하는것도 천재적이네
분배기 내부를 못읽는다 생각해서 제어할방법을 밖에서 찾았던건데 뒤에 한칸 늘리고 전체로 체크하면 되는구나.. ㄹㅇ깔끔하네 감탄밖에안나온다
와 이게 뭐야
여긴 진짜 무서운곳인거같아ㄷㄷ
진짜 팩갤 연구원들은 미친자들인거같아. 결국 제기된 의문들 원인 다 밝혔고 해결책도 다 마련했네 ㅋㅋ
진짜 미친거 아니냐고요 ㅋㅋㅋㅋ 여긴 올때마다 감탄하게 되네
미친 ㅋㅋㅋㅋㅋ
미친 존나 엔지니어적이야
이거 진짜 미스터리긴 한게 채굴 생산성 11500 넘기기 시작하면 다시 풀밸 안 나오는 듯? 점점 오를수록 오히려 더 줄어들더라 물론 11500넘기면 이거 쓸 이유가 없어서 순수히 이론적인 상황이긴 한데
????!
@이파 ㅇㅇ 초당 생산량이 2880개를 넘기면 벨트 아이템 개수가 28~32로 요동치는 듯...