1294.38 Fallback 노드의 대안 명칭 (Selector)
1. Selector 명칭의 유래
Fallback 노드의 대안 명칭인 “Selector“는 “여러 자식 중 하나를 선택(select)한다“는 동작 의미에서 유래한다. Fallback이 자식 노드를 순차적으로 평가하며 첫 번째로 SUCCESS를 반환하는 자식을 “선택“하는 동작을 직관적으로 표현한 명칭이다. 이 명칭은 게임 AI 분야에서 행동 트리가 처음 대중화되었을 때 널리 사용되기 시작하였다(Champandard, 2007).
2. 명칭의 역사적 배경
2.1 게임 AI에서의 기원
행동 트리는 2000년대 초반 게임 AI 분야에서 실용적으로 발전하였다. Halo 2(2004)의 AI 시스템에서 행동 트리가 상용 게임에 적용되면서, “Selector“라는 명칭이 게임 개발 커뮤니티에서 표준적으로 사용되기 시작하였다. 이 맥락에서 Selector는 “어떤 행동을 선택할 것인가“라는 의사 결정의 의미를 강조한다.
2.2 로봇 공학에서의 Fallback 채택
로봇 공학 분야에서는 Colledanchise와 Ogren(2018)이 “Fallback“이라는 명칭을 공식적으로 채택하였다. “Fallback“은 “대안으로 되돌아감“이라는 의미를 강조하며, 로봇 시스템에서의 복구 전략과 대안 탐색의 맥락에 더 적합하다고 판단되었다.
3. 프레임워크별 명칭 사용 현황
| 프레임워크/문헌 | 사용 명칭 | 비고 |
|---|---|---|
| BehaviorTree.CPP v4 | Fallback | 공식 명칭 |
| Unreal Engine | Selector | UE Behavior Tree |
| Unity ML-Agents | Selector | Unity 생태계 |
| Colledanchise & Ogren (2018) | Fallback | 학술 표준 |
| Champandard (2007) | Selector | 게임 AI 문헌 |
| py_trees (Python) | Selector | Python 프레임워크 |
| ROS2 Nav2 | Fallback | BT.CPP 기반 |
게임 엔진 계열(Unreal Engine, Unity)에서는 Selector를, 로봇 공학 계열(BehaviorTree.CPP, Nav2)에서는 Fallback을 주로 사용하는 경향이 있다.
4. 두 명칭의 의미론적 차이
4.1 Selector의 강조점
“Selector“는 “선택“이라는 능동적 행위를 강조한다. 여러 후보 행동 중에서 가장 적합한 하나를 선택하는 의사 결정 메커니즘으로서의 성격을 부각시킨다.
<!-- Selector 관점: "어떤 행동을 할 것인가?" -->
<Selector>
<Action ID="AttackEnemy"/>
<Action ID="FleeFromEnemy"/>
<Action ID="Idle"/>
</Selector>
4.2 Fallback의 강조점
“Fallback“은 “대안으로 전환“이라는 반응적 행위를 강조한다. 선호 방안이 실패했을 때 차선책으로 되돌아가는 복구 메커니즘으로서의 성격을 부각시킨다.
<!-- Fallback 관점: "주 방안이 실패하면 대안은?" -->
<Fallback>
<Action ID="NavigatePrimaryPath"/>
<Action ID="NavigateDetour"/>
<Action ID="RequestAssistance"/>
</Fallback>
두 명칭은 동일한 노드의 서로 다른 측면을 강조하는 것이며, 기능적 차이는 전혀 없다.
5. 그래픽 표기법에서의 차이
행동 트리의 그래픽 표현에서 Fallback/Selector 노드의 표기 기호는 문헌에 따라 약간의 차이가 있다.
| 문헌 계열 | 기호 | 설명 |
|---|---|---|
| Colledanchise & Ogren (2018) | ? | 물음표 |
| 게임 AI 문헌 일부 | → (화살표 변형) | 선택 화살표 |
| BehaviorTree.CPP/Groot2 | ? | 물음표 |
현재 가장 널리 채택된 표기는 물음표(?) 기호이며, 이는 “어떤 자식이 성공할 것인가?“라는 질문을 시각적으로 표현한다.
6. Selector 변형의 명칭 대응
Fallback의 변형에 대응하는 Selector 계열 명칭은 다음과 같다.
| Fallback 계열 | Selector 계열 | BT.CPP v4 태그 |
|---|---|---|
| Fallback | Selector | <Fallback> |
| FallbackWithMemory | Selector with Memory | <Fallback> (기본) |
| ReactiveFallback | Reactive Selector | <ReactiveFallback> |
| Fallback* | Selector* | 해당 없음 (v3) |
BehaviorTree.CPP v4에서는 Fallback 명칭을 공식적으로 사용하므로, Selector라는 명칭은 태그명이나 클래스명에 나타나지 않는다(Faconti, 2022).
7. 문헌 참조 시의 주의사항
행동 트리 관련 문헌을 참조할 때, “Selector“와 “Fallback“이 동일한 노드를 지칭함을 인지해야 한다. 특히 다음 상황에서 혼동이 발생할 수 있다:
- 게임 AI 논문에서 로봇 공학으로의 지식 전이: 게임 AI 논문의 “Selector“는 로봇 공학의 “Fallback“과 동일하다.
- 프레임워크 간 비교: Unreal Engine의 “Selector“와 BehaviorTree.CPP의 “Fallback“은 동일한 동작을 수행한다.
- 교차 분야 학술 논문: 저자의 배경에 따라 두 명칭이 혼용될 수 있다.
참고 문헌
- Champandard, A. J. (2007). Understanding Behavior Trees. AiGameDev.com.
- Colledanchise, M., & Ogren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
- Faconti, D. (2022). BehaviorTree.CPP documentation and API reference. https://www.behaviortree.dev/