안녕하세요,
이제 유체에 대해 이야기할 시간이니 최고의 윤활유를 준비하세요!
한계점에 도달하다
팩토리오의 유체 시스템이 예측할 수 없고 직관적이지 않으며 때때로 실망스럽다는 것은 잘 알려진 사실입니다. 파이프 처리량은 거리에 따라 일관되지 않은 속도로 감소하므로 파이프를 통해 얼마나 많은 유체를 밀어 넣을 수 있는지 확실하게 알 수 있는 유일한 방법은 위키의 표를 참조하는 것입니다. 게다가 파이프의 처리량은 파이프가 건설된 순서에 따라 달라질 수 있습니다. 재미를 느낄 수 있는 시스템이 아닙니다.
유체 시스템을 재설계하려는 시도는 여러 번 있었지만 모두 이런저런 이유로 실패로 끝났습니다. 기존 알고리즘도 꽤 빠르고 바닐라 게임플레이에서는 충분히 잘 작동하기 때문에 가능한 한 그대로 두려고 노력했습니다. 하지만 우주시대를 플레이 테스트하는 동안 기존 시스템으로는 더 이상 작동하지 않는다는 것이 분명해졌습니다. 새로운 건물이 제공하는 생산 규모와 품질 보너스로 인해 유체 알고리즘은 무릎을 꿇었습니다.
왜 작동하지 않는거지!?
저음부터 끝까지 유체 시스템을 다시 만드는 것을 피하기 위해 먼저 파이프 용량을 늘려 처리량을 늘리려고 시도했습니다. 이렇게 하면 버퍼 크기를 크게 늘리는 대신 처리량 감소라는 주요 문제를 '해결'할 수 있었습니다. 하지만 저장 탱크는 사실상 쓸모가 없어졌고, 화염방사포 포탑을 활용한 방어벽은 수만 단위의 유체를 버퍼로 쌓아 기지의 석유를 고갈시켰습니다. 결국 어떻게 진행해야 할지 합의에 이르지 못했고, 재설계는 너무 복잡하다고 판단되었지만 더 나은 아이디어가 없었습니다. 결국 이 문제는 "나중에 다시 논의"하기로 미뤄졌습니다.
저는 이 결론에 매우 불만족스러웠습니다. 파이프 용량을 늘리는 편법은 제대로 된 해결책이라기보다는 문제를 감추기 위한 임시방편에 불과했습니다. 때로는 허락을 구하는 것보다 용서를 구하는 것이 더 쉽기 때문에 저는 위험을 감수하고 유체 시스템을 다시 작성하기 시작했습니다.
새로운 알고리즘
유체 시스템에 대한 토론 중 하나에서 Rseding은 자신이 여러 번 사용해 본 알고리즘과 매우 유사한 알고리즘을 제안했는데, 바로 CoFH 팀의 Minecraft 모드인 Thermal Expansion의 알고리즘이었습니다:
- 파이프, 지하 파이프, 저장 탱크가 유체 '세그먼트'로 병합됩니다.
- 각 세그먼트는 이를 구성하는 유체 상자(역주: 파이프, 지하파이프, 저장 탱크)에 해당하는 부피를 가지며 하나의 유체만을 담을 수 있습니다.
- 기계는 유체를 세그먼트에 무제한으로 밀어 넣을 수 있고, 세그먼트에 유체가 찬 정도에 비례하는 속도로 세그먼트에서 유체를 끌어올 수 있습니다. 즉, 세그먼트가 반쯤 가득 차 있으면 끌어오는 속도는 최대 속도의 절반입니다.
- 예외로, 펌프가 저장 탱크에 직접 연결되어 있으면 더 빠른 속도로 유체를 끌어올수 있습니다.
- 더 이상 유체는 파이프로 "흐르지"않고, 세그먼트에 공급된 유체는 해당 세그먼트에 연결된 어느 지점에서든 즉시 사용할 수 있습니다. 이것이 바로 이전 FFF에서 논의되었던 "핵 전기 네트워크형 솔루션"입니다. 그 결과 파이프는 "그냥 작동"하며 처리량에 대해 걱정할 필요가 거의 없습니다.
그냥 작동합니다™.
데모
디버그 표시에 주목하세요:
녹색은 엔티티의 유체 양을 나타냅니다.
파란색은 해당 틱에서 엔티티에 흐르는 유체 양을 나타냅니다.
유체 흐름 애니메이션은 변경될 수 있습니다.
긴 파이프라인
기존 시스템에서는 파이프가 길어질수록 처리량이 낮아졌습니다. 문제는 이런 메커니즘의 존재 자체가 아니라, 처리량을 예측하는 것이 거의 불가능하다는 것이었습니다.
새 시스템에서는 세그먼트가 단일 개체로 취급되므로 더 이상 유체가 파이프라인을 가로질러 전파되지 않습니다. 파이프라인이 길수록 처리량은 증가하지만 완전히 비워지는 데에는 시간이 더 오래 걸립니다. 정확한 처리량 수치는 추가 플레이 테스트에 따라 변경될 수 있습니다.
분기점
기존 시스템은 직선 파이프라인에서는 비교적 정상적으로 작동했지만, 분기점이 만들어지는 순간 모든 것이 무너졌습니다. 분기점의 각 경로로 흐르는 유체의 양은 엔티티가 건설된 순서에 따라 달라집니다.
새로운 시스템에서는 분기점이 전혀 특별하지 않으며, 세그먼트는 연결된 건물만 고려합니다. 건물이 업데이트되면 연결된 세그먼트에 유체가 채워진 비율에 따라 유체를 끌어오는 최대 속도가 제한됩니다. 그 결과 훨씬 더 고른 분배가 이루어지며, 아직 완벽하게 고르지는 않지만 꽤 근접한 수준입니다.
입력 부족
기존 시스템에서는 건물에 입력 유체가 부족할 때 분기점에 큰 문제가 발생할 수 있었습니다. 연료 플랜트가 산화제 플랜트보다 훨씬 더 많은 양의 물을 공급받기 때문입니다.
새로운 시스템에서는 두 공장이 훨씬 더 동등한 비율로 유체를 분배받습니다.
펌프
기존 시스템에서는 더 높은 처리량을 유지하기 위해 펌프가 필요했습니다. 하지만 예상대로 작동하는 경우는 거의 없었습니다:
새로운 시스템에서는 더 이상 이러한 목적으로 펌프를 사용할 필요가 없습니다. 펌프는 여전히 흐름을 일방통행으로 고정하고, 회로 네트워크에서 조건부 밸브 역할을 하며, 열차를 적재/하역하는 데 유용하지만, 이전만큼 많은 펌프를 배치할 필요는 없을 것입니다.
최종 게임 설정
마지막으로 우리가 가장 좋아하는 화학 공장 설계로 돌아옵니다. 이 설계는 석유 가스가 출력 파이프의 처리량을 넘어섰기 때문에 작동하지 않습니다.
새로운 시스템에서 출력 세그먼트는 모든 화학 공장이 석유 가스를 뽑아낼 수 있을 만큼 충분한 용량을 확보하고 있습니다.
사실성 이상의 재미
새로운 유체 시스템은 팩토리오의 '사실성' 측면에서는 상당히 큰 퇴보입니다. 하지만 게임 디자이너는 항상 현실성과 재미 사이에서 타협해야 합니다. 조립 기계는 현실의 자동화에 들어가는 어마어마한 양의 작업을 모조리 추상화하여 작은 상자 하나로 단순화 시킵니다. 마찬가지로 새로운 유체 시스템은 현실의 유체가 따르는 복잡한 공식을 단순화하여 유저가 이해할 수 있는 시스템으로 만듭니다.
새로운 유체 시스템은 가지고 놀기에 매우 재밌습니다. 이 시스템에는 저희가 예측하지 못했던 흥미로운 가능성이 많이 있으며, 향후 FFF에서 그 중 일부를 공유할 예정입니다. 이 새로운 시스템의 구조와 코드 리팩터링의 접근 방법에 대해서도 다음 기회에 자세히 설명하려고 합니다.
몇 가지 세부 사항은 아직 작업 중이지만 전체적으로 새로운 시스템은 매우 잘 작동하고 있습니다. 여러분도 빨리 사용해보시길 기대합니다!
언제나 그렇듯이 평소와 다름없이 의견을 흘려보내주세요.
----------------------------------------------------------------------------------------
유체 수송이 OP가 된 것 같긴 한데 유체 처리 설계를 즐기던 사람이 과연 존재할까
아 뭐야 안올린대서 번역했는대 올렸네 ㅋㅋㅋㅋㅋㅋㅋ
느리구나...
제 기도를 들어주셨군요!
오쏘이
저거 위험한데...
하지만 게임 디자이너는 항상 현실성과 재미 사이에서 타협해야 합니다. ㅅㅂ 타르코프 세끼들아 보고있냐? 안보고있겟지
그러면 원자력은 더 ups가 좋아지는거겟지? 구조도 간단해지고
어우 얼마전에 물 끌어오는걸로 고민했는데 해결되겠구만
번토ㅋㅋㅋ - dc App
여기서 마크 써멀 익스펜션 원리를 알고가네
그리고 ㅅㅂ " 여러분도 빨리 사용해보시길 기대합니다!" 라고? 그럼 빨리 내주락고!!
시스템 하나로 퉁치는 건 생각해봤는데, 유속문제를 분모에 시스템 크기 때려넣어서 합의보네 깔끔하다