https://x.com/reduzio/status/1703049541254037651?s=20

Juan Linietsky라는 분이 유니티에서는 Brust와 ECS를 사용해 코드를 최적화하는 경우가 많은데, Godot에서는 어떻게 해야하는지 설명해주는 트윗 입니다.

(아래는 설명을 덧 붙인 번역)


고닷으로 마이그레이션하는 Unity 사용자들이 가장 많이 문의하는 또 다른 주제는 버스트/ECS를 사용하여 작성한 코드를 성능 측면에서 어떻게 처리할 것인가 하는 것입니다.

Godot에서는 이 문제를 다른 방법으로 처리합니다. 노드를 사용해도 괜찮지만 수만 개의 노드를 처리하면 성능이 저하되므로 어떻게 해야 할까요? 


 특히 대량의 엔티티가 있는 경우 Godot에서 훨씬 더 빠른 성능을 얻을 수 있는 두 가지 경로가 있습니다.

 - 네이티브(C++/Rust 등)로 스크립트 재작성 - 서버 API 사용. 


 이전에 언급한 대로, Godot은 범용 언어 어댑터 API를 사용합니다. 이것은 노드에 스크립트가 있는 경우 그것을 최적화해야 할 때, 단순히 빠른 언어로 다시 작성할 수 있다는 것을 의미합니다 (C++, Rust, 심지어 C#). 그리고 이 경우, 나머지 코드에 대해서는 어떤 영향도 미치지 않고 그대로 동작할 것입니다. 다시 말해, 특정 노드의 스크립트를 최적화하기 위해 빠른 언어로 재작성하면 전체 코드 기반의 동작이나 기능에는 아무런 눈에 띄는 차이나 영향이 없을 것입니다.


일반적으로 최적화가 필요한 부분은 작습니다 (전체 게임의 5%를 넘지 않음) 그 외에는 GDScript로 충분히 처리할 수 있습니다. 그러나 언급한 대로, 노드를 사용할 때, 수만 개의 엔티티를 처리할 때 문제가 발생할 수 있으며, 이 경우 서버(Servers)를 사용합니다.


Godot은 두 가지 추상화 수준을 제공합니다: Scene(장면)과 Servers(서버). 

장면과 그 안의 노드는 고수준의, 매우 유연한 추상화를 제공합니다. 그러나 Godot에서는 모든 낮은 수준의 작업은 서버 수준에서 수행됩니다. 


즉, 시각적인 콘텐츠 및 게임 로직은 주로 장면과 노드를 통해 다루지만, 실제 하드웨어와의 상호 작용, 성능 최적화, 네트워킹 및 다른 저수준 작업은 서버 수준에서 처리됩니다. Godot에서는 장면 레이어를 우회하고 서버를 직접 사용하는 것이 간단합니다. 이것은 특히 게임 개발자에게 서버와 상호 작용하거나 성능을 높이려는 경우에 유용합니다.

https://t.co/WWtJiPJjzP <- Godot Optimization using Servers 문서


네이티브 언어와 서버 API를 함께 사용하면 최대 성능을 얻을 수 있습니다. 이것은 게임 또는 애플리케이션의 중요한 부분을 더 빠른 언어로 작성하여 실행 속도와 효율성을 향상시키는 데 도움이 됩니다. 그런데 이 작업은 일반적으로 Godot에서 제공하는 고수준의 스크립팅 언어인 GDScript를 사용할 때와는 다소 다릅니다.


그럼에도 불구하고, Godot은 이러한 최적화 작업을 수행하면서도 이식성과 사용 편의성의 이점을 그대로 유지할 수 있게 해줍니다. 다시 말해, 네이티브 언어와 서버 API를 활용하여 작성한 코드는 여전히 Godot의 높은 수준의 게임 코드와 매끄럽게 상호 작용하며 함께 동작합니다. 이는 게임 개발자에게 최적의 성능을 제공하면서도 개발 및 유지 보수 작업을 더 효과적으로 관리할 수 있는 기회를 제공합니다.


한줄 요약 : Godot에서는 네이티브 언어와 서버 API로 최적화 가능