게임 개발 로그

행동 트리(Behavior Tree)와 블랙보드 본문

Ect

행동 트리(Behavior Tree)와 블랙보드

03:00am 2024. 11. 22. 00:17

1. 행동 트리란?

행동 트리(Behavior Tree)는 기존의 FSM, HFSM의 확장성 문제를 보완하고, 보다 다양한 AI 패턴을 구현하는 데 최적화된 방법이다. 확장성과 유지보수가 용이하여 AI를 구현할 때 많이 사용된다.

 

이름에서 알 수 있듯이 행동 트리는 트리를 사용하여 동작을 코드화하는 방법이다. Behavior Tree는 AI Entity의 의사 결정 흐름을 제어하는 계층적 노드 트리라고 할 수 있다. 적에 대한 AI의 행동과 보스 전투 순서 등을 제어하는 데 사용할 수 있다. Tree를 이루는 Node들에 ‘행동’에 해당되는 코드 조각을 저장해 두어 DFS 순서에 따라 노드들을 실행시킨다.

 

Behavior Tree에서 노드들은 방문 시 무조건 저장된 코드 블럭을 실행한다. 그리고 실행 시 반환값이 존재하며 이에 따라 우선순위, 혹은 건너뛸 노드를 변경할 수 있다. 또, Behavior Tree에서 노드들은 코드 블럭의 역할에 따라 Composite Node, Task(Action) Node, Decorator Node의 카테고리로 나누어진다.

 

 

 

2. 행동 트리의 카테고리

 

 

2-1. Composite Node

하나 이상의 자식을 가질 수 있는 노드로, 자식 노드는 첫 번째에서 마지막 순서로 또는 무작위 순서로 처리된다. 부모 노드는 자식 노드의 결과를 처리하며, 성패를 부모 노드에게 전달한다. 자식 노드의 결과를 처리하는 동안 자식 노드는 계속해서 부모에게 Running을 반환한다. 종류로는 Sequence Node, Selector가 있다.

 

2-2. Decorator Node

하나의 자식 노드만 가질 수 있는 노드로, 자식 노드의 결과를 변형하거나 처리를 반복하는 기능을 제공한다. Decorator가 지정하는 조건을 만족할 경우 자식을 실행하고, 만족하지 못할 경우 false를 반환한다.

 

2-3. Action Node

가장 낮은 수준의 노드로, 자식을 가질 수 없다. 게임의 특정한 행동을 실행하고, 결과에 따라 성패를 반환한다. 예를 들어 Walk 액션 노드는 캐릭터가 지정된 위치까지 걸어가는 행동을 수행하도록 한다. 행동 트리의 가장 강력한 부분으로, 게임의 기능을 정의하고 구현하는 데 사용된다. 행동 트리를 모듈화하고 재사용할 수 있게 해 주며, 게임의 흐름을 정의하는 데 필수적이다.

 

2-4. 카테고리별 노드 정리

 

Composition Node와 Decorator Node, Action Node가 표시된 예시 이미지다. 자식을 순회하며 행동을 변경하거나 조건을 확인하는 Composition Node 중 Sequence Node가 사용되고 있으며, 의자에서 일어나거나 자판기로 이동, 무언가를 사는 둥의 행동을 하는 Action Node가 가장 낮은 수준에 위치하고 있다. 또한 조건을 달아둔 Decorator Node가 Action2로 가기 전에 조건을 확인하고 있다.

 

 

Behavior Tree 적용 시 고려할 점

게임 속에서 행동 트리를 적용할 때는 매 ‘Tick’마다 업데이트 처리를 하고, 이때마다 행동 트리를 평가한다. 이 점을 감안해서 원할하게 돌아가거나 불필요하게 선택된 행동이 수습되지 않도록 구성을 짜야 한다. 위의 그림처럼 행동 트리가 단순한 경우 가진 돈이 0원이면 의자에서 일어나는 동작에서 벗어나지 못하게 된다. 게임 AI로 사용할 것이라면 업데이트 처리가 프레임마다 이루어져야 함으로 반드시 running 상태가 되어야 한다.

대화 시스템에 적용할 때는 한 마디 진행 시에 한 번 업데이트면 충분하다고 본다. 또한 대화 중에 태스크가 줄곧 running 상태를 유지하면 대화가 멈추니 어느 정도의 시간이 경과한 running 상태의 태스크는 정지해야 할 것이다.

 

 

블랙보드(Blackboard)

블랙보드는 프로퍼티를 관리할 수 있는 비주얼 이펙트 그래프 창의 유틸리티 패널이다. 이곳에서 프로퍼티를 정의, 정렬, 분류할 수 있다. 그래프 외부에서 액세스할 수 있도록 노출시킬 수도 있다. 블랙보드에서 정의하는 프로퍼티는 그래프 전체에서 사용할 수 있는 전역 변수며, 여러 시스템에서 사용할 수 있게 된다.

 

 

💡 정리

  1. 행동 트리(Behavior Tree)는 AI entity의 의사 결정 흐름을 제어하는 계층적 노드 트리다.
  2. Behavior Tree는 DFS 순서에 따라 노트를 실행시킨다.
  3. Behavior Tree에서 노드 방문 시 무조건 저장된 코드 블럭을 실행하고, 반환값에 따라 우선순위나 건너뛸 노드를 변경할 수 있다.
  4. 행동 트리에는 Composition Node, Decorator Node, Action Node 등의 노드가 존재한다.
  5. 블랙보드는 프로퍼티를 관리할 수 있는 비주얼 이펙트 그래프 창의 유틸리티 패널이다.

 

 

참고 및 출처

https://engineering.linecorp.com/ko/blog/behavior-tree