
Godot 4.5 출시, 꿈을 현실로 만드는 Godot Engine
요약
Godot 4.5 버전이 출시되어 스텐실 버퍼를 통한 새로운 시각 효과 구현과 AccessKit 기반의 스크린 리더 지원 등 접근성 기능이 강화되었습니다. 또한 스크립트 백트레이싱과 커스텀 로거를 통해 디버깅 능력이 향상되었으며, 셰이더 베이커를 도입하여 셰이더 컴파일로 인한 게임 실행 시의 끊김 현상을 줄였습니다.
핵심 포인트
- 스텐실 버퍼(Stencil Buffer) 도입으로 벽 너머를 보는 효과 등 정교한 시각적 연출 가능
- AccessKit을 통한 Control 노드의 스크린 리더 지원으로 게임 접근성 향상
- 릴리스 빌드에서도 정확한 오류 위치를 파악할 수 있는 스크립트 백트레이싱 및 커스텀 로거 기능 추가
- 셰이더 베이커(Shader baker)를 통한 셰이더 컴파일 최적화 및 실행 시 끊김 현상 완화
Godot 4.5 출시
꿈을 현실로 만들기
스텐실 버퍼 (stencil buffer)를 통해 이제 가능해진 놀라운 효과부터, 장애가 있는 사람들도 게임을 플레이할 수 있는 가능성을 열어주는 GUI 요소의 접근 가능한 설명까지 — 우리는 여러분께 Godot 4.5를 선보이게 되어 자랑스럽습니다. 이번 새로운 출시를 통해, 우리는 게임 플레이와 게임 개발을 모두를 위한 것으로 만들겠다는 목표에 따라 우리 엔진으로 할 수 있는 일을 확장하기 위해 세심한 노력을 기울였습니다.
새로운 효과를 위한 눈을 뜨세요
반대편에 있는 플레이어를 훔쳐보기 위해 벽에 시각적으로 어떻게 "구멍을 뚫을" 수 있을까요?
이제 스텐실 버퍼 (stencil buffers)로 그것을 할 수 있습니다! 캐릭터를 둘러싸고 있는 보이지 않는 구체를 상상해 보세요. 기하 구조 (geometry)가 화면에 렌더링되지 않더라도, 우리는 그 형태를 스텐실 버퍼에 삽입합니다. 그런 다음, 대상 픽셀이 스텐실에 의해 가려지지 않은 경우에만 벽 셰이더 (wall shaders)가 렌더링되도록 만듭니다. 짜잔.
스텐실 버퍼 (stencil buffer)는 메쉬 (mesh)가 나중에 비교하기 위해 쓸 수 있는 특별한 버퍼입니다. 이는 기존의 깊이 버퍼 (depth buffer)와 유사하지만, 임의의 값을 쓸 수 있고 비교 작업에 대해 더 많은 제어권을 가질 수 있다는 점이 다릅니다.
말하지 말고, 보여주세요
컴퓨터 소프트웨어에서 필수적이지만 종종 간과되는 기능은 스크린 리더 (screen reader) 지원입니다. 이러한 리더는 시각 장애가 있거나, 문해력이 낮거나, 학습 장애가 있는 사람들에게 필수적인 도구입니다.
AccessKit 덕분에 우리는 Control 노드에 스크린 리더 지원을 추가했으며, 모든 유형의 노드의 동작을 사용자 정의할 수 있도록 스크린 리더 바인딩 (screen reader bindings)도 추가했습니다.
이 기능은 상당히 새롭기 때문에, 통합 과정이 아직 실험 단계에 있다는 점에 유의해 주세요. 또한 Godot 에디터 자체에 대한 스크린 리더 지원은 아직 완전하지 않습니다. 현재는 프로젝트 매니저 (Project Manager), 표준 UI 노드, 그리고 인스펙터 (inspector)에 대해서만 구현되어 있습니다. 향후 업데이트에서 후속 조치를 기대해 주세요.
토끼 굴 속으로 (Down the rabbit hole)
스크립트 백트레이싱 (Script backtracing)은 개발자에게 코드의 어느 부분에서 문제가 발생했는지에 대한 정확한 세부 정보를 제공합니다. 심지어 "릴리스 (Release)" 빌드에서도 말이죠.
커스텀 로거 (Custom loggers)를 통해 개발자는 로그 메시지와 오류를 가로챌 수 있습니다. 이를 통해 게임 내에서 버그를 보고할 수 있는 도구를 만드는 것이 가능해집니다.
이제 개발자와 플레이어 모두 문제의 발생 근원지에 대한 더욱 정확한 정보를 포함하여 이슈를 보고할 수 있게 됩니다.
오븐을 예열하세요
현대적인 게임, 특히 PC 게임을 플레이하는 사람이라면 누구나 셰이더 컴파일 (Shader compilation)을 기다려 본 경험이 있을 것입니다. 보통 두 가지 형태로 나타나는데, 게임이 처음 실행될 때 기다리게 하거나, 한창 액션이 진행되는 도중에 기다리게 만드는 방식입니다.
그 이유는 셰이더 (Shaders)가 현재 장면을 그리는 GPU를 위한 작은 프로그램이기 때문입니다. 그리고 이를 사용하기 위해서는 반드시 컴파일 (Compile)되어야 합니다.
파이프라인 컴파일 (Pipeline compilation)은 여전히 피할 수 없는 필수 사항이지만, 이제 Godot는 에디터에서 할 수 있는 모든 작업을 사전에 수행할 수 있는 방법을 제공하여 이러한 대기 시간을 크게 줄여줍니다.
우버셰이더 (Ubershaders)가 파이프라인 컴파일을 최적화하고 컴파일로 인한 끊김 현상을 제거하는 데 큰 진전을 이루었다면, *셰이더 베이커 (Shader baker)*는 긴 시작 시간을 해결합니다.
내보내기 (Export) 설정에서 활성화하면, 셰이더 베이커가 리소스와 장면을 스캔하여 셰이더를 찾아내고, 대상 플랫폼의 드라이버에서 사용하는 적절한 형식으로 사전 컴파일합니다.
Apple과 Windows 기기를 대상으로 각각 Metal과 D3D12를 사용할 때, 저희의 TPS 데모에서 로딩 시간이 20배 감소하는 것을 확인했습니다. 정말 빠르죠!
안녕하세요
이 새로운 기능은 게임을 모든 사람이 쉽게 즐길 수 있도록 만들겠다는 저희의 이상을 실현하는 핵심입니다.
이제부터 개발자는 에디터 뷰포트 (Viewport)에서 번역을 직접 미리 볼 수 있습니다. 이는 여러 언어로 GUI (그래픽 사용자 인터페이스)를 테스트해야 하는 부담을 완화해 줄 것입니다.
새로운 UI가 프랑스어나 네덜란드어로 표시될 때 어떻게 반응하나요? 혹은 간체나 번체 중국어, 심지어 힌디어로는 어떻게 보일까요?
퓨전(Fusion)… 하! (HA!)
2D 타일맵 (Tilemap)이 처음 구현된 이후로, 물리 (Physics)는 항상 "하나의 타일, 하나의 바디 (one tile, one body)"라는 개념에 의존해 왔습니다. 이는 대부분의 게임에서는 잘 작동하지만, 물리 엔진에 의존하는 2D 장면에서는 바디의 수가 극도로 낭비되기 때문에 성능 문제로 쉽게 이어질 수 있습니다.
이 시스템은 바닥부터 완전히 재설계되었습니다. 이제 TileMapLayer 물리는 가능한 경우 셀 (Cell) 모양을 더 큰 충돌 모양 (Collision shapes)으로 병합합니다.
원하는 만큼 깊게
오랫동안 Resource.duplicate()에 deep 파라미터가 있었음에도 불구하고, 사람들은 이를 true로 설정하는 것이 항상 신뢰할 수 있고 예측 가능한 방식으로 작동하지 않는다는 것을 깨달았습니다. 특히, Array 또는 Dictionary 속성 내에 저장된 하위 리소스 (Subresources)를 복제하지 않습니다. Array.duplicate()와 Dictionary.duplicate()에서도 동일한 현상이 발생합니다.
이 클래스들을 위한 새로운 duplicate_deep() 메서드는 이제 사용자에게 무엇을 복제할지 또는 복제하지 않을지에 대한 완전한 제어권을 제공합니다.
이 새로운 기능은 배열 (Array), 딕셔너리 (Dictionary), 그리고 리소스 (Resource)의 복제 로직을 전면 개편한 결과입니다. 개발자들을 위해, 우리는 기존에 잘 작동하고 일관성 있게 유지되던 부분은 그대로 유지하도록 했습니다. 더 자세한 정보가 필요하다면, 복제 사양에 관한 새로운 상세 문서를 자유롭게 참조하십시오.1
Godot 4.01부터 사용자는 Project > Customize Engine Build Configuration을 열어 “Edit Build Configuration Profile” 창에 접근할 수 있습니다. 이 유틸리티는 현재 열려 있는 프로젝트에 실제로 필요한 클래스(즉, 어떤 노드 (Nodes), 리소스 (Resources), 서버 (Servers))를 선택하고 심지어 감지하는 데 도움을 줍니다. 핵심 아이디어는 실제로 필요한 기능만으로 축소함으로써, 사용자가 자신의 게임에 맞춤화된 자신만의 Godot 템플릿을 빌드할 수 있도록 하는 것입니다.
4.5 버전은 감지되는 범위를 확장합니다. 이제 클래스를 감지할 뿐만 아니라 올바른 빌드 옵션 (Build options)을 설정할 수도 있습니다. 또한 프로젝트의 GDExtensions에 의해 사용되는 클래스들도 고려합니다.
디버깅 (Debugging)은 특히 개발자가 동일한 음악을 반복해서 들어야 할 때 매우 지루할 수 있습니다. 스피커를 아예 꺼버릴 수도 있겠지만, 그건 그리 실용적인 방법은 아니겠죠?
모두의 정신 건강을 지키기 위해, 게임 뷰 (Game view)에 새로운 게임 음소거 (mute game) 토글을 도입했습니다.
여러분의 귀가 이 새로운 정적의 기회들을 만끽할 수 있기를 바랍니다.
Godot 4.4에서는 경로가 깨지는 것을 방지하기 위해 UID 지원을 더 많은 리소스 (resource) 유형으로 확장했습니다.
이제 스크립트 (Scripts)에서 UID를 통해 리소스를 프리로드 (preload)함으로써 이 기능을 활용할 수 있습니다. 리소스를 드래그할 때 Ctrl (macOS에서는 Cmd) 키를 누르기만 하면 됩니다.
프리로드 시 경로 대신 UID를 사용함으로써, 프리로드하는 리소스가 프로젝트 내 어디에 있더라도 스크립트가 더욱 탄력적으로 작동하게 됩니다.
4.4에서 도입된 새로운 임베디드 게임 창 (embedded game window)은 에디터가 수년 동안 겪어온 문제 하나를 부각시켰습니다. 바로 원격 노드 리스트 (remote node list)에서 항목을 하나 이상 선택할 수 없다는 점이었습니다.
이제 이는 과거의 일이 되었습니다. 개발자들은 이제 여러 노드를 선택할 수 있으며, 공통 속성 (common properties)을 편집할 수도 있습니다.
에디터 언어를 변경할 때 더 이상 에디터를 재시작할 필요가 없습니다.
이 기능은 번역을 테스트하는 에디터 플러그인 (editor plugin) 개발자들에게 매우 유용할 수 있습니다.
그 외의 모든 사용자들도 이제 에디터가 지원하는 모든 언어로 에디터를 테스트할 수 있습니다!
인스펙터 (Inspector) 섹션으로 가봅시다!
사용자 경험 (UX) 업그레이드의 일환으로, 그룹 내의 활성화 (enabled) 속성을 섹션 이름 옆의 직관적인 체크박스로 교체했습니다. 이제 접혀 있는 섹션을 포함하여 어떤 섹션이 활성화되어 있는지 쉽게 확인할 수 있습니다.
플러그인 개발자들은 새로운 PROPERTY_HINT_GROUP_ENABLE을 사용하여 자신의 프로젝트에서 이 기능을 사용할 수 있습니다.
이번 새로운 업데이트를 통해 변수를 Variant로 내보낼 (export) 수 있게 되었습니다.
이전에는 변수에 초기화된 값이 있는 경우에만 Variant로 내보낼 수 있었습니다. 또한, 에디터가 해당 값의 실제 타입에 고정되어 있어, 값을 String이나 Color와 같은 다른 지원되는 Variant 타입으로 변경하는 것이 불가능했습니다.
이제 내보내기(exported)된 변수가 Variant 타입인 경우, 에디터가 그에 맞춰 반응하여 사용자가 호환 가능한 모든 Variant 값을 할당할 수 있도록 허용합니다. 심지어 입력 위젯을 그에 따라 변경해 주는 유용한 타입 선택기(type selector)도 추가되었습니다.
모든 사람이 색상을 읽을 수 있는 것은 아닙니다. 그래서 모든 Color 값 옆에 작은 색상 미리보기(color preview)를 추가했습니다.
우리는 여기서 한 발 더 나아갔습니다. 해당 미리보기 아이콘을 클릭하면 컬러 피커(color picker)를 사용하여 즉석에서 값을 편집할 수 있습니다.
에디터 인스펙터(inspector) 슬롯에서 리소스를 복사한 후 붙여넣으면, 보통은 복사된 리소스에 대한 참조(reference)가 붙여넣어집니다. 만약 고유한 복사본(unique copy)을 원했다면, 이후에 수동으로 “Make Unique”를 클릭해야 했습니다.
이제 리소스 피커 드롭다운에서 사용할 수 있는 새로운 “Paste as Unique” 옵션 덕분에 이 작업이 훨씬 덜 번거로워졌습니다.
이제 프로젝트 매니저(Project manager)에 전용 “Duplicate” 버튼이 있어, 기존 프로젝트를 백업하거나 새로운 프로젝트를 포크(fork)하기가 쉬워졌습니다.
또한 개발 중에 엔진 버전을 업데이트할 때 발생할 수 있는 손실을 방지하기 위한 훌륭한 도구가 될 것이라고 판단했습니다. 업데이트로 인해 되돌릴 수 없는 변경 사항이 발생할 것으로 감지되면, 먼저 프로젝트를 백업할 것인지 묻게 됩니다.
이는 시그널(signal)을 소스(source)로부터 분리하는 데 정말 큰 도움이 될 것이며, 코드 재사용을 훨씬 더 쉽게 만들어 줄 것입니다.
에디터에서 시그널을 연결할 때, 고급 설정(advanced settings)에서 새로운 “Append Source” 옵션을 확인할 수 있습니다. 이 체크박스를 활성화하면, 소스 객체가 시그널의 원래 인자(arguments) 바로 뒤에 추가됩니다.
애니메이션 플레이어(Animation player)가 꼭 필요했던 개선 사항들을 대거 적용받았습니다!
- 선택 상자(selection box)를 사용하여 베지에(Bézier) 에디터 포인트를 선택하고 크기를 조절할 수 있습니다. 이제 일괄 변경(batch changes)을 수행하는 것이 매우 쉬워졌습니다.
- 베지에 포인트를 생성할 때, 새로운 포인트를 균형 잡힌 방식(balanced)이나 대칭 방식(mirrored)으로 자동 탄젠트(auto-tangent)할 수 있습니다.
- 애니메이션 플레이어의 애니메이션을 알파벳 순으로 정렬할 수 있습니다.
- 이름으로 애니메이션을 필터링하는 것도 가능합니다!
아이콘이 그 어느 때보다 더 선명해졌습니다.
기본 컨트롤 (Controls)과 에디터 UI (Editor UI)는 HiDPI 화면에서 흐릿하게 보이는 경향이 있었습니다. 우리는 모든 화면에서 선명하게 보이도록 이러한 구성 요소들의 렌더링 (Rendering) 방식을 재작업했습니다.
새로운 FoldableContainer 노드는 사용자의 재량에 따라 많은 세부 정보를 "아코디언 (Accordion)" 뷰로 표시할 수 있는 쉬운 방법을 제공합니다.
심지어 그룹화 (Grouping)도 지원하여, 한 번에 하나의 접이식 컨테이너 (Foldable container)만 열려 있도록 보장합니다.
Godot 4.5와 함께 원하는 만큼 스타일 라벨 (Style labels)을 꾸며보세요. 효과의 중첩 레이어 (Stacked layers of effects) 지원을 추가하여, 더 이상 번거로운 우회 방법을 사용할 필요가 없습니다.
복잡한 그림자가 포함된 외곽선을 원하시나요? 완료되었습니다.
더 이상 끈적거리는 GUI (Gooey GUI)는 없습니다.
이제 Control 노드의 마우스 (Mouse) 및 포커스 (Focus) 동작을 재귀적 (Recursively)으로 변경할 수 있습니다. 이는 힘들이지 않고 복잡한 GUI를 만드는 데 큰 도움이 됩니다.
예를 들어 보겠습니다. 게임을 위한 인벤토리 화면을 만든다고 가정해 봅시다. 왼쪽에는 영웅이 소지한 아이템을 보여주는 그리드 (Grid)가 있습니다. 오른쪽에는 왼쪽에서 선택한 아이템에 대한 상세 정보가 표시됩니다. 여기에는 모든 세부 사항을 조사할 수 있도록 아이템을 3D로 보여주는 회전 가능한 디스플레이, 스크롤 가능한 설명을 포함하는 섹션, 스탯 (Stats)과 수정치 (Modifiers)를 포함하는 박스 (기술 용어에 대한 하이퍼링크 포함), 그리고 아이템으로 수행 가능한 동작을 나타내는 버튼 목록이 포함됩니다.
여기서 문제는 오른쪽 뷰가 왼쪽에서 아이템이 선택되는 것에 의존한다는 점입니다. 사용자는 아이템이 선택될 때까지 상세 뷰와 상호작용할 수 없어야 합니다.
아이템이 선택될 때까지 상세 뷰 컨테이너의 Control.focus_behavior_recursive 및 Control.mouse_behavior_recursive를 비활성화 값으로 변경하면, 모든 자식 노드에 대해 포커스 및 마우스 이벤트가 비활성화됩니다. 이제 Control 그룹의 동작을 관리하기 위해 복잡한 메시지 방식을 사용할 필요가 없습니다.
하지만 반드시 해야 합니다!
확장될 때, 일부 클래스는 작동을 위해 특정 가상 메서드 (Virtual methods)를 오버라이드 (Override)해야 합니다. 하지만 이전에는 문서에서 이것이 항상 명확하지 않았습니다.
이제 적용 가능한 경우 새로운 필수 한정자 (Required qualifier)가 virtual 바로 뒤에 표시되므로, 앞으로는 문제가 되지 않을 것입니다.
가상 키보드(Virtual keyboard) 사용자들은 에디터 UI가 데스크톱 지향적이라는 점에 동의할 것입니다. 실행 취소(undoing)나 저장(saving)과 같은 일반적인 작업들은 매번 메뉴 바를 열어 해당 동작을 찾아야 하므로 실행하기가 번거롭습니다.
새로운 TouchActionsPanel을 통해, 이제 태블릿 및 휴대폰 사용자들도 일반적인 동작 버튼에 직접 접근할 수 있습니다.
이 기능은 현재 Android 전용이지만, 가능한 한 빨리 다른 플랫폼으로 이식할 계획입니다.
컴퓨터에는 수 기가바이트(GB)의 메모리를 처리하기 위한 몇 가지 비결이 있습니다. 그중 하나는 메모리를 개별 블록 단위로 "페이징 (paging)"하는 것으로, 이를 통해 시스템이 특정 주소를 찾을 때 빠르게 점프할 수 있습니다.
페이지(Pages)는 플랫폼에 따라 여러 크기로 제공될 수 있습니다. Android는 시작 단계부터 4KB 페이지만을 지원해 왔으나, Android 팀은 최근 Android 15부터 16KB 페이지와의 호환성을 발표했습니다. 다만 개발자들은 2025년 11월 1일부터 Google Play가 Android 15를 타겟팅하여 새로 제출되는 모든 앱에 대해 16KB 페이지 지원을 요구할 것이라는 점에 유의해야 합니다.
다행히 저희가 도와드리겠습니다. Godot 4.5는 이 기능을 별도의 설정 없이 즉시 지원(out of the box)합니다.1
AI 자동 생성 콘텐츠
본 콘텐츠는 HN Game Dev의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기