세줄요약:
허브 위쪽 좌우길이를 최대한 짧게 하고
추진기를 허브 좌우폭 수준만큼만 딱 꽉채워 달면 가장 효율적일것.
수직길이는 대세에 지장이 없다.
- 현실 vs 게임
현실에서야 물리법칙을 세밀하게 적용하면 되겠지만, 팩토리오는 게임임.
전반적으로 처리해야 할 숙제가 산더미같은데 너무 어렵게 만들어서도 안되고 직관적이어야 하며
유저가 계산을 통해 처리하고자 한다면 제곱과 제곱근 수준의 계산을 벗어나면 매우 어려워지고 복잡함
또한 현실적으로 물리법칙을 적용하면 렉에 쩔어서 대규모 물류를 구축할 수 없음.
따라서 적당히 현실적으로 느껴지게 하되 실제로는 게임내에서 매우 단순한 공식들로 처리할 수 있게 만들어야함.
- 에프는엠에이
이건 뭔 말이냐면 다들 알겠지만 물체에 힘이 조금이라도 가해지면 움직인다는 뜻임
문제는 실제 우주의 경우 공기저항도 없고 마찰도 없어서 한번 밀면 영원히 날아감
그래서 로켓을 한번 뿜!하고 다른 요소가 없다면 그냥 그 속도로 영원히 날아감
이게 실제 게임에 적용되면 어떤 골때리는 문제가 일어나는지 생각해보자.
1 일단 이륙한 로켓을 중력에 의해 떨어뜨리는 건 게임성을 헤친다. 그래서 중력의 영향을 빼면 마찰이 진짜 아예 없다.
2 로켓이 너무 빠르다고 행성을 지나치는 것도 이상하다. 그러나 빠른 로켓이 행성을 지나치지 않는 것은 더욱더 이상하다.
3 유저가 눈치채지 못하는 부자연스러움 속에서 렉 문제를 해결해야 하는데 우주선이 너무 빠르면 매우 부자연스러워 질 것이다.
4 연료를 1시간에 걸쳐 충전해야 한다고 해도 우주선 3600개를 띄워서 매 1초만에 왕복하는 시스템을 만드는게 이게임 유저들이다. 근데 이런건 별로 바람직하지 않다. (UPS등)
- 속도 제한
따라서 우주선의 최고속도를 제한해야지만 상기 문제들이 발생하지 않음.
그치만 팩토리오는 자원을 끌어모아서 한번에 쓸수도 있는 게임이고 특히 우주연료는 무한대로 축적이 가능함.
그래서 우주연료를 몽땅 써서 모든 추진기를 풀가동시키면 이론상 빛의 속도에 달할수도 있을거고.
이때 실제로 어떤 물체의 속도를 제한하려면 공기저항 개념이 들어가야지만 함. 근데 우주엔 공기가 없잖아?
따라서 유저가 이상함을 느끼지 않게 하려면 유저의 시선을 돌릴 제물이 필요한데 그게 우주선 무게임.
물리학 개념에서는 질량이 아무리커도 힘이 가해지면 일단 가속이 되기때문에 추진기 한개만으로도 왕복이 가능해야하고 추진기 많이 쓰면 극복이 되는 문제임.
물을 일부러 적게 만든것도 연료가 부족하다고 느끼게 해서 추력의 부족함이 느린속도의 원인이구나 하고 생각하게 만든게 아닌가 싶음
일부러 추진기 효율도 연료 조금쓸때 좋게 만들어서 고속이동을 할 유인을 억지로 줄인 느낌임
아무튼 그래서 우주선에는 숨겨진 공기저항이 있다고 생각함.
공기저항은 속도의 제곱에 비례하기 때문에 속도가 올라가면 올라갈수록 더 많은 추력을 퍼부어야 가속이 가능하고 완만한 최종속도 곡선을 유도할 수 있음.
행성 간 거리가 수만킬로미터라고 해도 초속 이동속도를 300~500키로미터로 잡아버리면 1분 내외면 앵간한 행성은 다 도착할거고 그럼 유저는 최종속도가 캐파가 걸려있어서 못 도달한게 아니라 그냥 목적지 도착해서 정지한거로 인식할 가능성이 높음.
- 에프는 엠에이?....
여기서 이제 개발진의 입장을 생각해보자.
원래대로라면 물리학적으로 가속도와 힘이 비례해야함. 그러면 속도는 1차 함수고 거리와 도착시간은 2차함수로 계산됨. 이는 컴퓨터의 연산을 존나 잡아먹음.
게다가 유저를 기만해야하는 파트에서 가속을 아주 정직하게 할 경우 유저가 속도제한을 눈치챌 가능성이 있음.
그래서 어떤식으로 하건간에 우주선이 0에서 특정한 어떤 속도까지 가속하는건 일부러 매우 빠르게 만들어둔 느낌이 있음.
즉 몇개의, 거의 대부분 1 차함수 팩터로만 계산되는 우주선의 속도가 있고,
그 속도를 0에서 그냥 수초 이내에 바로 도달하게 숫자만 바꿔주는거지.
그리고 연료가 일정하다면 그 속도를 계속 유지하게 하는거고.
애초에 100톤 짜리를 100MN으로 밀면 가속도가 1km/s인데 이걸로 언제 우주를 가 ㅋㅋㅋ
거꾸로, 중력에 의해 떨어지는-추진기가 멈추면 되돌아가는-설정은, 추진기가 멈출때 속도계숫자를 그냥 빠르게 떨어뜨리는 걸로 해결했을 거라고 보인다.
- 공기저항?
결국 질량, 운석 이런거 다 눈속임이고 공기저항을 이용해서 속도결정공식을 만들었다고 생각함.
추진기가 만들어내는 힘은 간단함. 효율이 어떻고 막 써있지만 결론적으로 그냥 공급되는 연료량과 추진기의 개수에 따라 자연스럽게 정해짐.
최대속도는 더이상의 가속도가 없어지는 시점, 즉 공기저항과 이 추진력이 동일해지는 시점일거임.
근데 원래대로라면 이 공기저항은 속도의 제곱에 비례하는데, 내 우주선(460톤 가량)을 가지고 실험해보니
추력 60에서 25km가 나오는데
추력 300에서 100km가 나옴.
속도가 4배 차이나는데 들어가는 힘은 16배가 아닌 5배인 거로 봤을때, 그리고 게임 내 계속 물체가 상호작용하는걸 고려한다면
실제로 공기저항은 속도에 1차 정비례 하는 함수에 뭔가 보정값을 더하거나 빼는 식으로 구성되었지 않나 추측해볼 수 있겠음.
최대속도에서는 공기저항이 추력과 동일, 즉 더 가속도가 안붙게 한다는 아이디어로 갔을때
F= 우주선 설계에서 정해진 추력 값 = kv + o(?) (k, o는 상수 v는 속도) 로 볼 수 있겠음. O 는 속도에 따라 아마 게단식으로 적용해서 뭐 너무 빨라지면 속도를 얼마 이상으로 못가게 하는 역할을 하지 않나 싶은데 일단 이건 넘어가고
- 우주선 질량 무시 문제
근데 저 공식에는 치명적인 문제가 있음. 지금 유저를 속이기 위해 실제 가속도를 뻥튀기시키고 최대속도를 기준으로 설정하려고 하다보니, 질량이 기본적으로 포함되지 않는 공식이라는 점임.
그러니까 매우 큰 우주선(=무겁다)과 매우 작은 우주선(=가볍다) 가 추진기 개수가 같으면 작은놈이 더 빨라야될텐데 실제로는 속도가 같다는거임.
그럼 다들 무조건 큰 우주선을 쓸거고 이런 방식은 팩토리오에 걸맞지 않음.
따라서 큰거에 패널티를 줘야하는데 뭘로? 그냥 크기 그 자체로.
애초에 단면적이 공기저항의 한 요소이기도 하다.
크기는 질량에 전반적으로 비례하는 특징이 있어서 마치 에프는 엠에이 공식을 따라가는 것 처럼 느끼게 하는 요소이기 때문에 더욱 적합함.
다만 유저가 기괴하게 구멍을 숭숭 뚫은 걸레형 우주선이라면 이 방식이 눈치까일 수도 있으니 "도넛 모양은 안돼요" 하고 토대를 중간에 비우는 거를 못하게 해놓은 느낌도 있다.
-크기측정
이때 이 크기, 즉 단면적을 뭘로 잡느냐가 관건인데
단면적 자체야 무식하게 좌우 끝 길이로 할 수도 있지만
현실에서는 또 유선형 구조니 공기저항이니 뭐니 하면서 어느 부분이 좌우로 길고 어디는 좁으냐에 따라 더욱 복잡해진다.
그래서 여기서 핵심은 특정 구조물의 좌우 길이를 잡았을 때 그게 속도를 저하시키는 요소로 작용하는 의미있는 좌우폭이어야 한다는 거임.
애초에 좌우폭 긴거로만 따지면 추진기 많이 박을수록 따라서 바로 공기저항이 올라가니까 이상하잖아?
-유선형 구조와 대가리
그럼 심플하게 대가리 크기로 정하는 거지. 대가리가 좁으면 유선형=공기저항이 적다,혹은 쌈뽕한 우주선 이쁜 모양임=빠름.
대가리를 잘 정하면 되는데 여기서 플랫폼 허브와 소행성 메카닉이 맞물린다.
소행성 잘 보면 대부분 앞에서 날아옴. 당연하지만 우주선이 앞으로 가니까 그렇게 되나? 싶지만 실제로 우주에서는 뒤로 날아드는 소행성도 있고 옆에서 날아드는 놈도 있다.
플랫폼 허브를 부수면 우주선이 정지되기 때문에, 플레이어는 필연적으로 포탑을 앞에 배치할 수 밖에 없음.
또한 부순 소행성을 먹기 위한 수집기도 앞에 달아야 하는데 이 수집기가 연료와 탄약의 수급을 결정하므로
앞쪽에서부터 수집기-포탑-허브 순서의 구조가 될 수밖에 없고,
게임플레이 메카닉에서 플랫폼 허브 상단을 감싸는 반원형태로 앞에서 날아오는 소행성 배치를 할테니,
유저가 시행착오를 거치며 머리쪽이 커브가 되는 우주선이 튀어나오게 될 것임(네모나면 양 끝에 부분이 과도한 소행성 인카운터로 탄약이 빠르게 소진되서 으스러짐)
세로 길이를 고려한 가중치까지 넣기엔 너무 빡빡할테니 결국 공기 저항을 결정하는 요소는 허브 상단의 좌우 최대폭에 연관이 있을 것으로 보인다.
이렇게하면 시행착으롤 거치며 우주선을 손본 유저가 더 빠른 우주선을 굴리는 쾌감을 느낀다는 장점도 있고. 암튼
돌아와서 다시 계산을 해봅시다.
F=추진기의 숫자로 정해진 추력 = 우주플랫폼 상단 좌우 최대 길이 X 모종의 상수 X 최대속도 + 상수(?)
어라 근데 그러면 다시 문제가?
- 추진기 플랫폼
추진기는 무조건 남쪽 하단에만 달게 되어있는데 사실 우리가 좌우 날개 밑에 비행기처럼 달아도 되잖음?
상기의 공기저항 계산 요소때문에 일부러 막아놓은 합리적 의심을 해볼 수 있고
유저가 비효율적인 배치로 인해 추진기를 좌우로 다소 길게 설치할 수는 있겠지만 그걸 패널티 요소로 넣었을 거 같지는 않음.
거꾸로 말하면 모든 생산시설을 우주선 하부쪽에 배치하는게 속도상으로 이득이 발생할 것으로 보인다.
근데 위에서 해결 못한 문제 즉 추진기가 존나 많으면 최대속도가 무한대로 발산하는 문제가 있잖아?
그럼 추진기를 많이 박을수록 늘어나는 어떤 요소를 감지해서 그거에 따라 증감하는 상수값을 넣어주면 해결되겠네.
즉 남부의 추진기 플랫폼의 좌우 길이는, 일정 수치 이상을 넘어가면 저 상수를 마구 올려서 추력을 깎아먹는 요소로 거꾸로 작용할거라고 봄.
유저가 추진기의 비효율적 배치로 공간을 소모하면 속도에 패널티를 주고, 이후 좋은 배치를 만들면 속도가 더 올리는 것도 좋은 게임적 요소.
그럼, 정리하면
최대속도 = (추진기 숫자로 정해진 추력-남부플랫폼 좌우길이[에 기하급수적으로 증가?]) / 수집플랫폼 좌우길이
라는 공식이 나온다.
우주선 자체의 형상에 따라 결정되는 좌우길이는 거의 고정이고(상시 리페어를 하니까)
결국은 추진기에 들어가는 유체량만 정확히 읽으면 속도가 1차원적으로 튀어나오니 ups에 부담을 제일 덜 주는 형태다.
그럼 얼마나 직관적인지 살펴보자
1. 대가리 존나 큰 경우
느려진다.
2. 대가리가 작은 경우
빨라진다.
3. 플랫폼보다 많이 크지 않은 소형 우주선에서 추진기가 늘어나면
빨라진다.
4. 플랫폼보다 존나 큰 대형 우주선에서 추진기가 늘어나면
빨라지지만 많이 늘어나면 증가폭이 크게 감소한다.
무거워져서 느려젔다고 생각하기 좋다.
그리고 큰 우주선은 결국 한번에 많은 물체를 나르기 위한 효율중시의 목적일텐데
추진기를 풀 가동하지 않고 효율모드에서 가동할거고 그럼 추력은 속도중시형 우주선보다 훨씬 낮을거라 유저가 이상한 의문이 들 가능성도 떨어질거임.
아마도 추진기 늘려서 늘어나는 속도는 허브 좌우폭 딱맞추는 순간까지가 제일 높지 싶은데,
화학공정에 분쇄기 탄약 전기용광로 등 고려하면 그거보단 넓어지다보니 어떨라나 모르겠음.
즉 유저가 어떤 경우건 에프는 엠에이를 만족하는 것 같다! 고 느끼게 만들게 된다.
실제로는 전혀 관련이 없지만.
- 그럼 질량은 뭐임?
아마도 너무 무거운 우주선을 아주 적은 숫자의 추진기로 쏠려고 하면, 지구궤도 중력에 잡혀있다는 느낌처럼 걍 시동을 꺼버리지 않을까 싶은데....
념글에 있는 소형 우주선도 1추진기 100키로 찍히는거보면 크게 의미 없는거 같기도 하고.
역피라미드형 대형 로켓 쏴보신분 있으면 제보좀
걍 내 뇌피셜인데 질량이랑 추력, 현재 속도를 넣으면 현재의 가속도가 튀어나오는 어떤 간단한 식을 사용할거라고 본다. 우주선의 모양이 영향을 주는 것 같지는 않았음
우주엔 공기가없어서 공기저항이없다구 친구 - dc App
양옆으로 한 4천칸짜리고 높이는 열칸짜리인 우주선 만들고 테스트해보면 될듯
속도제한은 운석으로 줬을수도 있고
가속도가 1km/s^2 인게 머가 느림?