행동 트리로
구현하는
인공지능
개발 3본부 김용하
발표자 소개
컴공 학부 졸업
대학원 인공 신경망 전공
샤이닝 로어 초기 AI [판타그램]
마비노기 초기 AI
기타 AI 코딩 경험 다수
미니맥스 알고리듬만 쓰면
AI가 나오는 줄 알았던 10년 전 사진
발표 순서
1. 종래 AI 구조의 문제
2. 그래서 나온 BT
3. BT 구현 요소
4. BT 구현 이슈
일반적인 AI 구조를
먼저 살펴 봅니다
WORLD
SENSOR ACTOR
Perception Animation
MEMORY
DECISION
LOGIC
AI
일반적인 AI
•센서를 통해 주변을 인지
•메모리에 타겟이나 제반 정보를 기록
•디시젼 로직에서 상황을 판단하고
일련의 커맨드를 실행
•캐릭터 액션을 수행
WORLD
SENSOR ACTOR
Perception Animation
MEMORY
DECISION
LOGIC
AI
FSM : Finite State Machine (유한 상태 기계)
오토마타 시간에 졸면서 배운 그 FSM
이거 왜 쓰는가?
책에 나오니까
다들 쓰고 있다고 하니까
디시젼 로직 With FSM
IDLE COMBAT
RETREAT
적 발견
퇴치
못당하겠다
사생결단도주 성공
대부분 이런 형태로 시작
어떻게 더 구체화 할 것인가
여기서 문제가 발생 !
State를 나누기가
Transition을 리와이어링 하기가
IDLE COMBAT
RETREAT
적 발견
퇴치
못당하겠다
사생결단도주 성공
오마이갓 -_-
매우 곤란
일반적인 해결책 #1 @ 한국
여기서부터는 하드 코딩 !
각 State, 각 Transition을
여러 가지 패턴으로 하드 코딩
패턴을 조합하는 식으로 AI 로직 구현
새로운 움직임이 필요하면 해당 패턴을 다시 하드 코딩
IDLE COMBAT
RETREAT
적 발견
퇴치
못당하겠다
사생결단도주 성공
ex) IDLE_SLIME, IDLE_ORC, COMBAT_REACTIVE, …
ex) ORC = IDLE_ORC + COMBAT_AGGRESSIVE + RETREAT_NEVER
일반적인 해결책 #2 @ 한국
스테이트 커맨드 부분을 모듈화
& 스크립트나 XML로 조합
기본적인 플로우 컨트롤
좀 더 코드 재활용도가 높음
Ex)
[IDLE]
LOOP
WAIT 10~20 sec
PATROL
LOOP_END
[ATTACK1]
TARGET near
APPROACH
ATTACK melee
WAIT 10 sec
[ATTACK2]
TARGET ranged
APPROACH
USE_SKILL A
WAIT 20 sec
[STRATEGY]
…
IF RANGED ATTACK2
ELSE ATTACK1
이것도 더 이상 FSM은 아님
일반적인 해결책 #2 @ 한국
이정도면 되지 않나요?
네. RPG 자코캐릭터 AI 만드는 데는 충분합니다
그러나..
보스몹의 다양한 패턴
생활하는 NPC
미리 정의된 스테이트 안에 갇혀 버림. 확장이 제한됨
이런 것은 구현하기 힘듭니다
일반적인 해결책 #3 @ 서양
PvE가 컨텐츠의 거의 전부인 콘솔에서는
온라인 게임보다 AI가 훨씬 중요한 요소
훨씬 복잡한 환경 요소
NPC가 생활도 하고 성장도 하고…
FABLE 2
SPORE
그래서 결국… ?
일반적인 해결책 #3 @ 서양
HFSM : Hierarchical Finite State Machines
적 발견
퇴치
못당하겠다
사생결단도주 성공
패트롤
HIDE SHOOT
RELOAD
보다 다양한 AI를 만들 수 있으나
유지 보수 코스트는 여전히 높다
Brute-Force 하게 나누는 대신
State를 적절히 모듈화해나감
State 모듈의 재활용
그래서 나온 것이 BT (Behavior Tree)
BT 개요
•사실은 HFSM을 보다 일반화한 것
– 계층적으로 State를
나누어가는데 집중
– 나누다보니 굳이 State가
아니라도 되게 되었음
– 트리 탐색형
명령 체계로 일반화됨
HALO 2 BT
melee
shoot
grenade
uncover
pursue
cover
sleep
fight
search
hide
idle
root
BT 개요
•구조적인 장점
– 단순한 하부 구조
(그래프 <> 트리) 구현 코스트도 적다
– Divide & Conquer 로
작업을 쪼개기 쉬움
– 모듈 재활용이 용이,
읽기도 쉽고, 유지 보수가 간편…
melee
shoot
grenade
uncover
pursue
cover
sleep
fight
search
hide
idle
root
HALO 2 BT
BT 개요
•최근 가장 HOT 한 AI 트렌드
– HALO 2 대성공 이후
– SPORE, GTA 등에서 Adapt
– 기존의 HFSM에서 BT로
이전해가는 추세
melee
shoot
grenade
uncover
pursue
cover
sleep
fight
search
hide
idle
root
HALO 2 BT
하지만 BT가 완전히 새로운 개념은 아니고
기존의 방법론을 일반화, 체계화한 것
Final Fantasy XII
Gambit System
MASK
ORDER CONDITOIN ACTION
Carnage Heart
UCC AI 게임
분기도 있고
센서/액션 커맨드도 다양
개념적으로
BT와 상당히 유사하다
동작 동영상
BT 구체적인 동작을 알아봅시다
Decider 기반 BT(HALO BT 1.5)
•보다 HFSM에 가까운 형태
•Spore에서 사용
•Decider 부분이 FSM과 유사
– 일종의 State Set
•Behavior는
개별 액션
ROOT
FLEE
GUARD
FIGHT
EAT
IDLE
YELL_FOR_HELP
FIGHT
PATROL
REST
FIND_FOOD
EAT_FOOD
PLAY
REST
FLIP
ROLL
DANCE
DECIDER
BEHAVIOR
Decider 탐색
매 틱마다 순서에 따라
Decider Function을 재평가
ROOT
FLEE
GUARD
FIGHT
EAT
IDLE
YELL_FOR_HELP
FIGHT
PATROL
REST
FIND_FOOD
EAT_FOOD
PLAY
REST
FLIP
ROLL
DANCE
Activated
Evaluation
Decider 탐색
Priority가 앞선 Decide Function이
Accept 되면
ROOT
FLEE
GUARD
FIGHT
EAT
IDLE
YELL_FOR_HELP
FIGHT
PATROL
REST
FIND_FOOD
EAT_FOOD
PLAY
REST
FLIP
ROLL
DANCE
Activated
Evaluation
Accepted !
Decider 탐색
Activate되었던 기존 노드를 클리어
ROOT
FLEE
GUARD
FIGHT
EAT
IDLE
YELL_FOR_HELP
FIGHT
PATROL
REST
FIND_FOOD
EAT_FOOD
PLAY
REST
FLIP
ROLL
DANCE
Activated
Evaluation
Accepted !
HALT
Decider 탐색
…한 뒤, Child를 탐색
ROOT
FLEE
GUARD
FIGHT
EAT
IDLE
YELL_FOR_HELP
FIGHT
PATROL
REST
FIND_FOOD
EAT_FOOD
PLAY
REST
FLIP
ROLL
DANCE
Activated
Evaluation
Accepted !
Parent Decide는 Child Decide의 부분집합
(Parent가 Accept하고 Child가 Reject 할 수 없음)
Decider 탐색
ROOT
FLEE
GUARD
FIGHT
EAT
IDLE
YELL_FOR_HELP
FIGHT
PATROL
REST
FIND_FOOD
EAT_FOOD
PLAY
REST
FLIP
ROLL
DANCE
Activated
Evaluation
Accepted !
State 사이에 Transition이 이뤄지는 FSM과 달리
우선 순위에 따라 State를 가로채는 방식
Decider 탐색
ROOT
FLEE
GUARD
FIGHT
EAT
IDLE
YELL_FOR_HELP
FIGHT
PATROL
REST
FIND_FOOD
EAT_FOOD
PLAY
REST
FLIP
ROLL
DANCE
Activated
Evaluation
Accepted !
Accepted !
Accept 된 노드들이
연쇄적으로 Activate 됨
Decider 탐색
Reject 되면 다음 Decide function계속 평가
ROOT
FLEE
GUARD
FIGHT
EAT
IDLE
YELL_FOR_HELP
FIGHT
PATROL
REST
FIND_FOOD
EAT_FOOD
PLAY
REST
FLIP
ROLL
DANCE
Activated
Evaluation
Decider 탐색
ROOT
FLEE
GUARD
FIGHT
EAT
IDLE
YELL_FOR_HELP
FIGHT
PATROL
REST
FIND_FOOD
EAT_FOOD
PLAY
REST
FLIP
ROLL
DANCE
Activated
Evaluation
Reject 되면 다음 Decide function계속 평가
Decider 탐색
ROOT
FLEE
GUARD
FIGHT
EAT
IDLE
YELL_FOR_HELP
FIGHT
PATROL
REST
FIND_FOOD
EAT_FOOD
PLAY
REST
FLIP
ROLL
DANCE
Activated
Evaluation
이미 Activate 상태인 노드는 평가하지 않고
Leaf 노드를 계속 수행
트리를 매 프레임 다 탐색?
Decider에 Pre-Condition을 두어 탐색을 가속
Time Check
DecisionFlag
Decide Function
매 00초 마다만 검사
Enable/Disable Mask
Alex’s BT
•Alex J. Champandard
RockStar 개발자 출신, AiGameDev 운영자
요즘 BT 제일 열심히 선전하고 있는 사람
•이 아저씨 모델은 Halo BT 1.5 보다 좀 더
BT를 일반화한 것
•매우 심플해서 바닥부터 구현할 때 용이
기본적으로 트리 탐색
patrol investigate attack
look aroundmove bite
재귀적으로 태스크를 분해
Halo BT와의 차이
Leaf는 Condition 혹은 Action
Condition도 Leaf node임
Condition
Action
액터 상태, 이벤트 체크
충돌 등등..
소리를 내거나
애니메이션을 틀거나…
Halo BT와의 차이
Parent Node는
Sequence 혹은 Selector
계속 진행
Fail 종료
Sequence
Child가 Success이면
순서 대로 진행
모두 S면 결과도 S
Halo BT와의 차이
Parent Node는
Sequence 혹은 Selector
Selector
Child가 Fail이면
순서 대로 진행
하나라도 S면 결과도 S
Success 종료
계속 시도
트리 탐색 과정의 예 Halo에서는 Decide에 따라
탐색할지 말지 결정되지만
여기서는 Leaf 까지
내려가서 조건을 판단
Alex 모델의 장점
•구현이 간단
S / F 의 리턴 값과 Tick만으로 구성된
기본 Node, Seq / Sel (compositor) 클래스만으로
AI 기반이 완성! (반나절이면 된다!)
•Decider와 Behavior가 전혀 다른
Halo 모델에 비해, 컨디션을 분해하기 용이
Alex 모델의 부가적인 패턴들
기능이 추가된 Seq / Sel
- 랜덤 Seq / Sel
Decorator
- 자식을 건드리지 않고
기능을 추가
Wait 멍!멍!
Timer 최대 n초간
Loop 여러번
Wrapper
Fail 무시
BT 구현시 이슈
직접 사용해 보니…
AI 작업의 리팩토링이 용이
•Tree의 노드로 분해하면 됨
SEQ
공격 상태이거나
타게팅할 적이 근처에 있으면
적을 타게팅하고
적에게 접근해서 공격
Condition Action
SEQ
공격 상태이면
타겟이 공격 범위
안에 있으면
SEQ
공격
SEL
타겟에 접근
AI 작업의 리팩토링이 용이
•SubTree나 Node를 재사용 가능
공격 상태이면
타겟이 공격 범위
안에 있으면
SEQ
공격
SEL
타겟에 접근
타겟이 공격 범위
안에 있으면
SEQ
공격
SubTree를 모듈 처럼 사용할 수 있다
코드 리뷰나 수정이 용이
•로직이 코드에 그대로 드러남
그 밖의 장점
•BT 구조를 그대로 플래닝에 활용할 수 있음
– Pre-Evaluation 펑션을 만들어
트리 탐색 / 결과 예측해볼 수 있음
•비쥬얼 툴 제작이 용이
Brainiac Designer 2.1
그 밖에 주의할 점
•BT 노드의 탐색 순서가 행동에 영향을 미친다
•BT 노드는 서로간에 의존성이 없어야 한다
•BT 노드는 Blackboard나 게임 옵젝트에서
정보를 얻어 와야 함
ex) <공격> 노드는 타겟 정보를
<타게팅> 노드에서 전달 받는 것이 아니라
게임 옵젝트의 ‘현재 타겟’ 값을 읽어와 처리
그 밖에 주의할 점
•FSM과 BT는 구조적인 방향성이 다르다
– FSM : ‘상태’를 정의하고 이벤트에 따라 다른 상태로 바뀌
는 과정을 구조화
– BT : AI가 달성할 소정의 목표를 정의하고 이것들을 서브
태스크로 나누어 운용
그 밖에 주의할 점
•BT에서의 이벤트 처리는 FSM과 다르다
– FSM 처럼 다른 상태로 ‘점프’ 하는 것 보다는
– 현재 노드로부터 발생한 상황을 처리하는 서브트리로 분
기해서 작업을 처리하는 쪽으로 작업
– 다른 브랜치의 서브 트리를 복사해와서 써도 무방!
Ex) 회피중에 공격을 받는 경우
•FSM : 회피 State에서 다른 State로 전이해서 처리…
•BT : [공격 받은 경우]를 처리하는 서브 트리를 회피 밑에 복사
해서 회피중 피격 상황에 대한 세부 처리…
결론 : 이제 FSM은 잊어버리고 BT로 가자!
•State를 고민하지 않아도
빠르게 동작을 구현해볼 수 있다
(State 비슷한 것이 필요하다면 나중에 묶어서 만들면 됨)
•코드를 다시 봐도 읽을 수 있다
•코드 리팩토링과 모듈화가 용이하다
•확장성이 높음
References
Spore Behavior Tree Docs, Chris Hecker
http://chrishecker.com/My_Liner_Notes_for_Spore
Handling Complexity in the Halo 2 AI, Damian Isla
http://www.gamasutra.com/gdc2005/features/20050311/isla_01.shtml
GAME::AI++ (Source Code)
http://aigamedev.com/premium/releases/gameai-06/
AIGameDev - Behavior Tree Related Articles
http://aigamedev.com/
Q & A

[NDC 2009] 행동 트리로 구현하는 인공지능

  • 1.
  • 2.
    발표자 소개 컴공 학부졸업 대학원 인공 신경망 전공 샤이닝 로어 초기 AI [판타그램] 마비노기 초기 AI 기타 AI 코딩 경험 다수 미니맥스 알고리듬만 쓰면 AI가 나오는 줄 알았던 10년 전 사진
  • 3.
    발표 순서 1. 종래AI 구조의 문제 2. 그래서 나온 BT 3. BT 구현 요소 4. BT 구현 이슈
  • 4.
  • 5.
  • 6.
    일반적인 AI •센서를 통해주변을 인지 •메모리에 타겟이나 제반 정보를 기록 •디시젼 로직에서 상황을 판단하고 일련의 커맨드를 실행 •캐릭터 액션을 수행 WORLD SENSOR ACTOR Perception Animation MEMORY DECISION LOGIC AI
  • 7.
    FSM : FiniteState Machine (유한 상태 기계) 오토마타 시간에 졸면서 배운 그 FSM 이거 왜 쓰는가? 책에 나오니까 다들 쓰고 있다고 하니까
  • 8.
    디시젼 로직 WithFSM IDLE COMBAT RETREAT 적 발견 퇴치 못당하겠다 사생결단도주 성공 대부분 이런 형태로 시작
  • 9.
    어떻게 더 구체화할 것인가 여기서 문제가 발생 ! State를 나누기가 Transition을 리와이어링 하기가 IDLE COMBAT RETREAT 적 발견 퇴치 못당하겠다 사생결단도주 성공 오마이갓 -_- 매우 곤란
  • 10.
    일반적인 해결책 #1@ 한국 여기서부터는 하드 코딩 ! 각 State, 각 Transition을 여러 가지 패턴으로 하드 코딩 패턴을 조합하는 식으로 AI 로직 구현 새로운 움직임이 필요하면 해당 패턴을 다시 하드 코딩 IDLE COMBAT RETREAT 적 발견 퇴치 못당하겠다 사생결단도주 성공 ex) IDLE_SLIME, IDLE_ORC, COMBAT_REACTIVE, … ex) ORC = IDLE_ORC + COMBAT_AGGRESSIVE + RETREAT_NEVER
  • 11.
    일반적인 해결책 #2@ 한국 스테이트 커맨드 부분을 모듈화 & 스크립트나 XML로 조합 기본적인 플로우 컨트롤 좀 더 코드 재활용도가 높음 Ex) [IDLE] LOOP WAIT 10~20 sec PATROL LOOP_END [ATTACK1] TARGET near APPROACH ATTACK melee WAIT 10 sec [ATTACK2] TARGET ranged APPROACH USE_SKILL A WAIT 20 sec [STRATEGY] … IF RANGED ATTACK2 ELSE ATTACK1 이것도 더 이상 FSM은 아님
  • 12.
    일반적인 해결책 #2@ 한국 이정도면 되지 않나요? 네. RPG 자코캐릭터 AI 만드는 데는 충분합니다 그러나.. 보스몹의 다양한 패턴 생활하는 NPC 미리 정의된 스테이트 안에 갇혀 버림. 확장이 제한됨 이런 것은 구현하기 힘듭니다
  • 13.
    일반적인 해결책 #3@ 서양 PvE가 컨텐츠의 거의 전부인 콘솔에서는 온라인 게임보다 AI가 훨씬 중요한 요소 훨씬 복잡한 환경 요소 NPC가 생활도 하고 성장도 하고… FABLE 2 SPORE 그래서 결국… ?
  • 14.
    일반적인 해결책 #3@ 서양 HFSM : Hierarchical Finite State Machines 적 발견 퇴치 못당하겠다 사생결단도주 성공 패트롤 HIDE SHOOT RELOAD 보다 다양한 AI를 만들 수 있으나 유지 보수 코스트는 여전히 높다 Brute-Force 하게 나누는 대신 State를 적절히 모듈화해나감 State 모듈의 재활용
  • 15.
    그래서 나온 것이BT (Behavior Tree)
  • 16.
    BT 개요 •사실은 HFSM을보다 일반화한 것 – 계층적으로 State를 나누어가는데 집중 – 나누다보니 굳이 State가 아니라도 되게 되었음 – 트리 탐색형 명령 체계로 일반화됨 HALO 2 BT melee shoot grenade uncover pursue cover sleep fight search hide idle root
  • 17.
    BT 개요 •구조적인 장점 –단순한 하부 구조 (그래프 <> 트리) 구현 코스트도 적다 – Divide & Conquer 로 작업을 쪼개기 쉬움 – 모듈 재활용이 용이, 읽기도 쉽고, 유지 보수가 간편… melee shoot grenade uncover pursue cover sleep fight search hide idle root HALO 2 BT
  • 18.
    BT 개요 •최근 가장HOT 한 AI 트렌드 – HALO 2 대성공 이후 – SPORE, GTA 등에서 Adapt – 기존의 HFSM에서 BT로 이전해가는 추세 melee shoot grenade uncover pursue cover sleep fight search hide idle root HALO 2 BT 하지만 BT가 완전히 새로운 개념은 아니고 기존의 방법론을 일반화, 체계화한 것
  • 19.
    Final Fantasy XII GambitSystem MASK ORDER CONDITOIN ACTION
  • 20.
    Carnage Heart UCC AI게임 분기도 있고 센서/액션 커맨드도 다양 개념적으로 BT와 상당히 유사하다 동작 동영상
  • 21.
  • 22.
    Decider 기반 BT(HALOBT 1.5) •보다 HFSM에 가까운 형태 •Spore에서 사용 •Decider 부분이 FSM과 유사 – 일종의 State Set •Behavior는 개별 액션 ROOT FLEE GUARD FIGHT EAT IDLE YELL_FOR_HELP FIGHT PATROL REST FIND_FOOD EAT_FOOD PLAY REST FLIP ROLL DANCE DECIDER BEHAVIOR
  • 23.
    Decider 탐색 매 틱마다순서에 따라 Decider Function을 재평가 ROOT FLEE GUARD FIGHT EAT IDLE YELL_FOR_HELP FIGHT PATROL REST FIND_FOOD EAT_FOOD PLAY REST FLIP ROLL DANCE Activated Evaluation
  • 24.
    Decider 탐색 Priority가 앞선Decide Function이 Accept 되면 ROOT FLEE GUARD FIGHT EAT IDLE YELL_FOR_HELP FIGHT PATROL REST FIND_FOOD EAT_FOOD PLAY REST FLIP ROLL DANCE Activated Evaluation Accepted !
  • 25.
    Decider 탐색 Activate되었던 기존노드를 클리어 ROOT FLEE GUARD FIGHT EAT IDLE YELL_FOR_HELP FIGHT PATROL REST FIND_FOOD EAT_FOOD PLAY REST FLIP ROLL DANCE Activated Evaluation Accepted ! HALT
  • 26.
    Decider 탐색 …한 뒤,Child를 탐색 ROOT FLEE GUARD FIGHT EAT IDLE YELL_FOR_HELP FIGHT PATROL REST FIND_FOOD EAT_FOOD PLAY REST FLIP ROLL DANCE Activated Evaluation Accepted ! Parent Decide는 Child Decide의 부분집합 (Parent가 Accept하고 Child가 Reject 할 수 없음)
  • 27.
  • 28.
  • 29.
    Decider 탐색 Reject 되면다음 Decide function계속 평가 ROOT FLEE GUARD FIGHT EAT IDLE YELL_FOR_HELP FIGHT PATROL REST FIND_FOOD EAT_FOOD PLAY REST FLIP ROLL DANCE Activated Evaluation
  • 30.
  • 31.
  • 32.
    트리를 매 프레임다 탐색? Decider에 Pre-Condition을 두어 탐색을 가속 Time Check DecisionFlag Decide Function 매 00초 마다만 검사 Enable/Disable Mask
  • 33.
    Alex’s BT •Alex J.Champandard RockStar 개발자 출신, AiGameDev 운영자 요즘 BT 제일 열심히 선전하고 있는 사람 •이 아저씨 모델은 Halo BT 1.5 보다 좀 더 BT를 일반화한 것 •매우 심플해서 바닥부터 구현할 때 용이
  • 34.
    기본적으로 트리 탐색 patrolinvestigate attack look aroundmove bite 재귀적으로 태스크를 분해
  • 35.
    Halo BT와의 차이 Leaf는Condition 혹은 Action Condition도 Leaf node임 Condition Action 액터 상태, 이벤트 체크 충돌 등등.. 소리를 내거나 애니메이션을 틀거나…
  • 36.
    Halo BT와의 차이 ParentNode는 Sequence 혹은 Selector 계속 진행 Fail 종료 Sequence Child가 Success이면 순서 대로 진행 모두 S면 결과도 S
  • 37.
    Halo BT와의 차이 ParentNode는 Sequence 혹은 Selector Selector Child가 Fail이면 순서 대로 진행 하나라도 S면 결과도 S Success 종료 계속 시도
  • 38.
    트리 탐색 과정의예 Halo에서는 Decide에 따라 탐색할지 말지 결정되지만 여기서는 Leaf 까지 내려가서 조건을 판단
  • 39.
    Alex 모델의 장점 •구현이간단 S / F 의 리턴 값과 Tick만으로 구성된 기본 Node, Seq / Sel (compositor) 클래스만으로 AI 기반이 완성! (반나절이면 된다!) •Decider와 Behavior가 전혀 다른 Halo 모델에 비해, 컨디션을 분해하기 용이
  • 40.
    Alex 모델의 부가적인패턴들 기능이 추가된 Seq / Sel - 랜덤 Seq / Sel Decorator - 자식을 건드리지 않고 기능을 추가 Wait 멍!멍! Timer 최대 n초간 Loop 여러번 Wrapper Fail 무시
  • 41.
    BT 구현시 이슈 직접사용해 보니…
  • 42.
    AI 작업의 리팩토링이용이 •Tree의 노드로 분해하면 됨 SEQ 공격 상태이거나 타게팅할 적이 근처에 있으면 적을 타게팅하고 적에게 접근해서 공격 Condition Action SEQ 공격 상태이면 타겟이 공격 범위 안에 있으면 SEQ 공격 SEL 타겟에 접근
  • 43.
    AI 작업의 리팩토링이용이 •SubTree나 Node를 재사용 가능 공격 상태이면 타겟이 공격 범위 안에 있으면 SEQ 공격 SEL 타겟에 접근 타겟이 공격 범위 안에 있으면 SEQ 공격 SubTree를 모듈 처럼 사용할 수 있다
  • 44.
    코드 리뷰나 수정이용이 •로직이 코드에 그대로 드러남
  • 45.
    그 밖의 장점 •BT구조를 그대로 플래닝에 활용할 수 있음 – Pre-Evaluation 펑션을 만들어 트리 탐색 / 결과 예측해볼 수 있음 •비쥬얼 툴 제작이 용이 Brainiac Designer 2.1
  • 46.
    그 밖에 주의할점 •BT 노드의 탐색 순서가 행동에 영향을 미친다 •BT 노드는 서로간에 의존성이 없어야 한다 •BT 노드는 Blackboard나 게임 옵젝트에서 정보를 얻어 와야 함 ex) <공격> 노드는 타겟 정보를 <타게팅> 노드에서 전달 받는 것이 아니라 게임 옵젝트의 ‘현재 타겟’ 값을 읽어와 처리
  • 47.
    그 밖에 주의할점 •FSM과 BT는 구조적인 방향성이 다르다 – FSM : ‘상태’를 정의하고 이벤트에 따라 다른 상태로 바뀌 는 과정을 구조화 – BT : AI가 달성할 소정의 목표를 정의하고 이것들을 서브 태스크로 나누어 운용
  • 48.
    그 밖에 주의할점 •BT에서의 이벤트 처리는 FSM과 다르다 – FSM 처럼 다른 상태로 ‘점프’ 하는 것 보다는 – 현재 노드로부터 발생한 상황을 처리하는 서브트리로 분 기해서 작업을 처리하는 쪽으로 작업 – 다른 브랜치의 서브 트리를 복사해와서 써도 무방! Ex) 회피중에 공격을 받는 경우 •FSM : 회피 State에서 다른 State로 전이해서 처리… •BT : [공격 받은 경우]를 처리하는 서브 트리를 회피 밑에 복사 해서 회피중 피격 상황에 대한 세부 처리…
  • 49.
    결론 : 이제FSM은 잊어버리고 BT로 가자! •State를 고민하지 않아도 빠르게 동작을 구현해볼 수 있다 (State 비슷한 것이 필요하다면 나중에 묶어서 만들면 됨) •코드를 다시 봐도 읽을 수 있다 •코드 리팩토링과 모듈화가 용이하다 •확장성이 높음
  • 50.
    References Spore Behavior TreeDocs, Chris Hecker http://chrishecker.com/My_Liner_Notes_for_Spore Handling Complexity in the Halo 2 AI, Damian Isla http://www.gamasutra.com/gdc2005/features/20050311/isla_01.shtml GAME::AI++ (Source Code) http://aigamedev.com/premium/releases/gameai-06/ AIGameDev - Behavior Tree Related Articles http://aigamedev.com/
  • 51.