확장팩 FFF 모음 정리 링크



개발 심층 과정

+ 모딩에 도움을 주는 툴에 대한 기술적인 이야기임

관심없으면 굳이 안봐도됨



https://www.factorio.com/blog/post/fff-437



FFF #437 - 화물 포드 심층 분석

게시자 Hrusa

2024-11-15



안녕하세요, 이번 주에는 화물 포드의 작동 원리와 원활한 비행 애니메이션에 대해 자세히 알아보겠습니다. 확장팩을 플레이하시는 분들 대부분은 이미 게임에서 보셨을 겁니다. 긍정적인 반응에 저희도 매우 기쁩니다.







나우비스 궤도의 플랫폼으로 날아가는 화물 포드의 모습.







시각 디자인


클램프에 물려있다가 풀려나는 포드의 초기 초안은 Earendel에게서 나왔습니다. 개발 과정 내내 그 본질은 비교적 변함없이 유지되었음을 알 수 있습니다. 첫 번째 버전에서는 플레이어가 로켓에 캡슐 아이템을 직접 넣어야만 이동이 가능했습니다. 쓸데없는 번거로운 작업이었기 때문에 폐기되었습니다. 하지만 그 아이템은 메카 아머의 재료 중 하나였기 때문에 시각적으로 유사성이 있었습니다. 초안을 바탕으로 Jerzy는 클로 로켓과 포드의 3D 버전을 모델링했습니다.


그 후 핵심 게임플레이 코딩이 완료되고 멋진 비행 애니메이션과 같이 덜 중요한 기능에 대한 작업이 재개될 때까지 해당 작업물들은 오랫동안 휴면 상태에 놓여 있었습니다. 저는 허브, 패드, 착륙 해치에 대한 모델링 작업을 막 끝낸 Jaroslaw의 도움을 요청했습니다. 그의 모델링과 볼륨 클라우드 시뮬레이션, 제 코딩과 셰이더 작업, Ian의 오디오 작업과 함께 메인 발매까지를 위한 모든 것을 다듬었습니다.




Earendel의 포드 및 로켓 분리 콘셉트 아트







이 포드들은 어디로 향하고 있을까요?


그래픽 작업을 시작하기 전에 아이템이 한 표면에서 다른 표면으로 어떻게 이동하는지에 대한 매커니즘을 개발해야 했습니다. 그 당시에는 물류 요청이 제대로 작동했지만 아이템을 즉시 순간이동시키는 데 그쳤습니다.


저는 인벤토리가 있고 물품을 운반할 수 있는 로켓에서 영감을 얻어 화물 포드를 새로운 독립체로 만들기로 결정했습니다. 로켓이 격납고에서 발사되어 비행하는 동안에는 원래의 표면에서 움직이고 포드에는 다른 표면으로 이동하는 기능이 추가될 것입니다.


방정식의 두 번째(그리고 더 까다로운) 부분은 목적지였습니다. "바닐라?"/"스트라차텔라?" 우주 시대에서 포드는 격납고에서 허브로, 허브에서 착륙 패드로 이동합니다. 이 중 두 개는 화물칸으로 더 확장되어 해치를 더 추가할 수 있지만 목적지 자체는 아닙니다.




스테이션으로!


해결책은 궤도 물류와 관련된 모든 건물이 그 세력(포스)을 등록하고 고유 ID를 부여받는 추상적인 개념인 스테이션을 도입하는 것이었습니다. 착륙 패드의 모든 해치는 기존 스테이션에 연결되기만 하면 됩니다.


그런 다음 다른 표면으로 물품을 보내려면 표면, 세력, 스테이션, 해치만 있으면 됩니다. 용도에 따라 이 중 일부는 선택 사항입니다. 스타터 팩 로켓은 목적지가 필요하지 않습니다. 이동 중인 플레이어는 행성을 향해 발사하고 목표가 지상인지 궤도에 있는 착륙 패드인지만 확인할 수 있습니다. 물류 주문은 해당 위치를 미리 알 수 있습니다.


일반 로직의 좋은 점은 기술적으로 게임 내 두 표면 사이를 이동할 수 있고 스테이션의 수에 상관없이 배송이 가능하다는 것입니다. 심지어 기본 게임에서 로켓 격납고가 우주 과학으로 자신의 착륙 패드를 목표로 삼을 수 있고 바로 작동할 때 유용했습니다. 모든 것을 행성과 플랫폼으로만 하드코딩하여 잠재력을 제한하고 싶지 않았죠.




스테이션 개념을 한 단계 더 발전시켜 격납고, 허브, 패드용 GUI를 하나로 통합하려고 할 때의 메모입니다. 하지만 결국 요구 사항이 너무 달랐습니다.







컷씬 퍼즐 조립하기


정거장 시스템과 마찬가지로 애니메이션도 하드코딩하고 싶지 않았습니다. 커스텀 행성은 가장 먼저 수정해야 할 부분 중 하나이기 때문에 가능한 한 많은 커스터마이징을 허용하는 것을 우선순위로 삼았습니다.


비행 애니메이션의 모든 세부 사항은 완전히 개조 가능한 행렬 시스템에서 제공합니다. 각 우주에서의 위치는 행성 자체와 궤도에 있는 모든 우주 플랫폼에 고유한 출발 및 도착 애니메이션 세트를 제공합니다.


예를 들어, 불카누스 주변의 플랫폼에서 불카누스 표면으로 비행하도록 포드가 발령되면 스타일이 일치하는 "불카누스-플랫폼-출발" 및 "불카누스-행성-도착" 애니메이션을 가져와서 서로 연결합니다. 때로는 포드가 이동 중에 해치가 열릴 때까지 기다려야 할 때도 있습니다. 이러한 경우 "불카누스 스타일 인터메조" 반복 애니메이션을 중간에 삽입하여 시간을 지체할 수 있습니다.








블록 조립


더 확대하면 각 행렬에는 다양한 수의 레이어로 구성된 타임라인이 있습니다. 이러한 레이어는 애니메이션의 다양한 측면을 제어하거나 그래픽을 그립니다. 많은 측면이 1D, 2D 및 4D 베지어 곡선과 정규화된 변형에 의해 구동됩니다.




팩토리오 스플라인 에디터에서 편집중인 행성 착륙 애니메이션 커브.



모더의 편의를 위해 제가 만든 커스텀 팩토리오 스플라인 에디터를 온라인에 게시했습니다. 이 기능이 없으면 모양을 제대로 만들기가 상당히 어렵습니다. 보너스로 커브를 원하는 형식으로 직접 내보낼 수도 있습니다.






궤도에 있는 플랫폼에서 나우비스로 하강하는 모습.





플랫폼에서 표면으로 내려가는 과정을 단순화한 타임라인으로, 각 행렬 레이어가 활성화되어 최종 모습을 구성하는 시점을 강조 표시합니다.





클라우드 기술


이제 애니메이션이 매끄럽게 보이도록 하는 것은 커버 레이어입니다. 포드가 한 표면에서 다른 표면으로 순간이동할 때 환영을 유지하려면 화면 전체를 가려야 합니다. 평면 이미지를 화면에서 스와이프하는 것만으로도 충분했을 것입니다. 사실 앨버트는 좀 더 양식화된 미학에 기대는 것을 선호했습니다.


제 의견은 아주 적은 작업으로 매우 인상적인 애니메이션 가장자리를 얻을 수 있다는 것이었습니다. 저는 Jaroslaw에게 구름의 뎁스 텍스처를 생성해 달라고 요청하기만 했습니다. 가장자리가 희미해지면 플랫 값을 곱하는 대신 특정 깊이에서 구름을 잘라냅니다. 이렇게 하면 구름이 화면에 뭉쳐서 나타나고 두꺼운 벽을 형성하지 않고 자연스럽게 번집니다.





커버 레이어의 소프트 마스킹 셰이더를 수동으로 시연하는 모습.






모드와의 충돌


이 모든 기능은 이미 매우 강력하게 들리지만, 우주 시대의 마지막 컷씬을 만들기 시작하면서 모드를 이렇게 조화롭게 만들 수 없다는 것이 분명해졌습니다. 애니메이션의 모든 측면이 이 타임라인 안에 존재한다면 새로운 포드, 행성 또는 정거장이 기존의 모든 행렬에 통합되기 위해 견딜 수 없을 정도로 많은 작업을 수행해야 하고, 몇 개의 스프라이트만 다른 수많은 복제본을 만들어야 할 것입니다.


다행히도 한 가지 트릭이 더 있습니다. 현재 버전에서 행성들은 실제로 모두 동일한 비행 애니메이션 프로토타입을 사용합니다. 적절한 변형을 도입하는 방법은 카탈로그를 사용하는 것입니다. 카탈로그는 기본적으로 행렬 애니메이션이 참조할 수 있는 이미지 또는 사운드의 목록입니다. 행렬은 미리 정의된 에셋 대신 카탈로그ID를 참조하여 해당 에셋을 찾을 위치를 지정합니다.


- 우주 위치 카탈로그는 현지 구름이나 안개가 어떻게 보이는지 알려줄 수 있습니다.

- 포드 카탈로그는 태양 전지판을 여는 것과 같은 특수 애니메이션이나 재진입 불꽃 및 추진기 소리와 같은 오버레이 텍스처를 제공할 수 있습니다.

- 해치 카탈로그는 포드 추진기가 가까워질 때 조명을 위한 그래픽을 제공할 수 있습니다.


누락된 그래픽이나 사운드는 그냥 건너뛰게 됩니다. 새 행성은 구름 정의를 잊어버린 경우에도 최소한의 애니메이션이 재생됩니다. 새 포드는 적절한 타이밍에 재생되는 자체 불꽃 스프라이트를 제공할 수 있습니다. 새로운 화물창이나 허브는 조명이 다르게 보이도록 설정할 수 있으며 행렬 데이터는 전혀 건드리지 않아도 됩니다.


더 멋지게 만들고 싶다면 행성에 완전히 새로운 타임라인을 부여하되 기본 우주 시대 카탈로그 ID의 포드 애니메이션과 행성 스프라이트를 그대로 활용할 수 있습니다. 간단한 예로, 낙하산 스프라이트를 포드 카탈로그에 추가하면 비행 속도가 크게 느려질 수 있습니다. 새로운 포드 유형을 추가하는 독립적인 모드는 낙하산 그래픽만 정의하면 행성을 지원할 수 있는 옵션을 갖게 됩니다.




항상 그렇듯이, 여러분의 생각을 평소와 같이 궤도에 전달하세요.