SlideShare a Scribd company logo
1 of 43
Download to read offline
행 동 트 리
2019.09.28 데브루키 발표자 이석우
게임 AI
• 게임 속 유저가 컨트롤 하지 않는 존재들은 그 용도에 따라 인공지능이 있어야한다.
FINITE STATE MACHINE
• 게임의 전통적인 AI 구현은 유한 상태 기계(FSM)을 이용했다.
Patrol Chase
Shoot
적 발견
사격 가능 범위적 놓침/사살
FSM을 이용한 AI 구현
• 먼저 캐릭터에 필요한 각각의 상태를 정의한다.
Patrol
Chase
Shoot적을 발견할 때까지 주변을 정찰한다.
발견한 적을 추적한다.
공격 범위 안에 있는 적을 쏜다.
FSM을 이용한 AI 구현
• 그 다음 정의한 상태들을 알맞게 연결시키면 된다.
Patrol Chase
Shoot
Patrol Chase
Shoot
적 발견
사격 가능 범위적 놓침/사살
FSM의 장점
• 단순한 로직을 쉽게 구현할 수 있다.
• 직관적이다.
Patrol Chase
Shoot
적 발견
사격 가능 범위적 놓침/사살
유저들의 요구
• 그러나 유저들은 게임의 재미와 몰입도를 높여주는 정교한 AI를 원한다.
Interaction with Allies Monster PatternNPC with Communication
FSM의 단점
• FSM의 상태를 추가시키다 보면 다시 연결시키기 머리가 아프다…
Patrol Chase
Shoot
적 발견
사격 가능 범위적 놓침/사살
계층형 FSM
• 상태를 그룹으로 나눠 계층화 하여 복잡도를 줄이고 그룹 내 상태들은 재사용이 가능하다.
적 발견
사격 가능 범위적 놓침/사살
Patrol
엄
폐
장
전
발
사
이
동
탐
색
계층형 FSM
• 그러나 다른 계층의 상태를 마음대로 가져와 재사용하기에는 여전히 제약이 따른다.
계층 간의 특성에 따라 애초에 복사가 불가능한 경우도 있다.
??
복사
새로 추가된 상태와 기존 상태를
연결시켜야 한다.
행동 트리
• AI가 달성할 소정의 목표를 정의하고 이것들을 서브 태스크로 나누어 운용하는 구조
Goals
Tasks
AI
Patrol
GoToA GoToB
Fight
Approach Aim Shoot
언리얼 엔진의 행동 트리
• UE4 행동 트리의 구조와 특징을 설명하고 왜 FSM 대신 AI에 사용되는 지 알아본다.
행동 트리의 구조
• 행동 트리는 Blackboard와 Behavior Tree의 조합으로 이루어 진다.
BLACKBOARD
• 블랙보드는 AI가 판단을 내리는 데 필요한 데이터들을 저장한다.
타격 위치
목표 위치
테니스에서 AI는 타격 위치와 목표 위치를 등을 알고 있어야 공격할 수 있다.
게임 속 몬스터도 유저의 위치를 알아야 추적한다.
행동 트리의 노드
TASK
• 행동 트리의 Leaf 노드로 정의한 Task를 실행한다.
• Task 노드는 자식을 보유하지 않는다.
Sequence
Idle Move Attack
Task nodes
COMPOSITE NODE
• 특정 작업을 실행하지 않는 대신 자식 노드를 보유한 노드이다.
• 자식 노드의 실행 방법에 따라 시퀀스와 셀렉터로 나뉜다.
Composite
Action 1 Action 2 Action 3
SEQUENCE
• Sequence는 자식 노드를 순서대로 실행하는 노드이다.
• 자식 노드를 왼쪽에서 오른쪽의 순서로 깊이 우선 탐색 방식으로 순회한다.
Sequence 1
Action 1 Sequence 2 Action 4
1 4
Action 2 Action 3
2 3
SEQUENCE
• Sequence는 자식 노드가 failure를 반환할 때까지 순회한다.
Sequence
Patrol Chase Shoot
1 2 3
적 발견 성공! 추격 성공!
Root
적 사살 성공!
SEQUENCE
• 만약 순회하는 도중 failure를 반환하면 Sequence는 종료 된다.
Sequence
Patrol Chase Shoot
1 2
적 발견 성공! 추격 실패!
Root
Sequence 실패 반환
SEQUENCE
• 반면 failure를 반환하지 않으면 모든 노드를 순회하고 Sequence를 종료한다.
Sequence
Patrol Chase Shoot
1 2 3
적 발견 성공! 추격 성공!
Root
적 사살 성공!
Sequence 성공 반환
SEQUENCE
• 왜 이런 구조로 되어있는 걸까
• 어떤 목표를 이루기 위해선 일련의 연속적인 행동이 필요한 경우가 있다.
Final
Fusion!
SEQUENCE
• 배드민턴의 스매싱을 예로 들어보자.
• 스매싱을 하기 위해선 아래의 동작들을 순서대로 해야한다.
SEQUENCE
• 만약 한 동작이라도 실수한다면 스매싱을 제대로 할 수 없을 것이다.
• Sequence는 이런 용도로 사용한다.
SELECTOR
• Selector는 자식 노드 가운데 하나를 실행하기 위한 노드이다.
• 왼쪽에서 오른쪽으로 순서로 깊이 우선 탐색 방식으로 순회한다.
Selector
Action 1 Sequence Action 4
1 4
Action 2 Action 3
2 3
SELECTOR
• 자식 노드가 success를 반환할 때까지 순회한다.
Selector
Sqeuence
A pattern
Sqeuence
B pattern
Sqeuence
C pattern
1 2
A 선택 안함
B 선택!
Root
Selector 성공 반환
SELECTOR
• 모든 자식 노드가 실패하면 실패를 반환하고 종료한다.
Selector
Sqeuence
A pattern
Sqeuence
B pattern
Sqeuence
C pattern
1 2 3
A 패턴 실패 B 패턴 실패
Root
C 패턴 실패
Selector 실패 반환
SELECTOR
• Selector는 복수의 행동 패턴 중 하나를 선택해야 할 때 사용한다.
SELECTOR
예를 들어, 보스의 공격 패턴을 임의로 선택할 때 사용할 수 있다.
내 공격
패턴은
무한이다
X밥
유저야
오호호
DECORATOR
• Decorator는 노드를 실행할 조건을 정의한 노드이다.
• Composite 혹은 Task 노드에 붙여 해당 노드를 실행할 것인지 결정한다.
Selector
Peace~! 넌 뒤졌다
받은돈 > 500
SERVICE
• Composite 혹은 Task 노드에 붙여 그 노드가 실행되는 동안 정해진 빈도에 따라 실
행된다.
• 보통 검사를 하고 그 검사를 바탕으로 블랙보드의 데이터를 업데이트한다.
적 감지 범위
Target
적 감지 범위
Target
타겟 위치 업데이트
SERVICE
초록색이 Selector 노드에 붙힌 Service 노드이다.
Interval : 해당 시간마다 서비스 실행
Random Deviation : Interval 값에 랜덤하게 더함
실제 구현
• 언리얼 엔진4 행동트리 퀵스타트 가이드
https://docs.unrealengine.com/ko/Engine/AI/BehaviorTrees/QuickStart/index.html
행동 트리의 장점
• 최상위 노드를 통해 AI 로직을 쉽게 파악할 수 있다.
AI
Idle Chase Combat
행동 트리의 장점
• 트리를 통해 확장하여 정교한 AI를 구현할 수 있다.
AI
Idle Chase Combat
Smoke Patrol Melee Shoot
Grenade Weapon
행동 트리의 장점
• 필요에 따라 언제든지 Task를 재사용할 수 있다.
• 이때 FSM처럼 상태 전이를 위한 연결을 고려할 필요가 없다.
AI
A B C
1 2 3 4 5 3 5
특정 위치에 삽입되는 순간 주위
노드와의 관계와 역할이 정해짐
행동 트리의 장점
• Task 뿐만 아니라 하나의 분기를 이루는 노드의 집합도 재사용 가능하다.
AI
A B C
1 2 3 4 5
A
1 2 3
B
4 5
행동 트리의 장점• 시각화 툴 제작이 용이하다.
주의할 점
• 행동 트리의 탐색 순서가 행동에 영향을 미친다.
Sequence
Idle Move Attack
Sequence
Attack Move Idle
실수로 노드의 위치가 바뀌면 몬스터는 엉뚱
한 행동을 할 수 있다.
주의할 점
• Selector의 자식 노드가 많을수록 AI의 의사결정이 지연될 수 있다.
Selector
1 2 n
시간 복잡도 : O(n)
주의할 점
• 노드 간에 의존성이 없고 필요한 정보는 Blackboard나 게임 오브젝트에서 얻어온다.
Blackboard
Data
Sequence
Idle Move Attack
Objects
결론
• 트리의 확장을 통하여 간단한 AI 뿐만 아니라 정교한 AI도 구현 가능하다.
• 트리 노드가 아무리 많아도 상태 전이에 따른 연결을 고민할 필요가 없다.
• 코드의 가독성이 좋고 시각화 툴을 만들기 용이한 구조이다.
• 모듈화가 가능한 구조로 코드 재사용과 확장성이 좋다.
참고자료
• [NDC 2009] 행동 트리로 구현하는 인공지능, 김용하
• https://lifeisforu.tistory.com/327
• https://engineering.linecorp.com/ko/blog/behavior-tree/

More Related Content

What's hot

[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기Yongha Kim
 
NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지
NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지
NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지Kwangyoung Lee
 
쩌는게임기획서 이렇게 쓴다
쩌는게임기획서 이렇게 쓴다쩌는게임기획서 이렇게 쓴다
쩌는게임기획서 이렇게 쓴다Jinho Jung
 
NDC 2013 - 초심자를 배려하는 레벨 디자인
NDC 2013 - 초심자를 배려하는 레벨 디자인NDC 2013 - 초심자를 배려하는 레벨 디자인
NDC 2013 - 초심자를 배려하는 레벨 디자인용태 이
 
리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션QooJuice
 
[IGC 2017] 넥슨코리아 심재근 - 시스템 기획자에 대한 기본 지식과 준비과정
[IGC 2017] 넥슨코리아 심재근 - 시스템 기획자에 대한 기본 지식과 준비과정[IGC 2017] 넥슨코리아 심재근 - 시스템 기획자에 대한 기본 지식과 준비과정
[IGC 2017] 넥슨코리아 심재근 - 시스템 기획자에 대한 기본 지식과 준비과정강 민우
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012devCAT Studio, NEXON
 
프로그래머에게 사랑받는 게임 기획서 작성법
프로그래머에게 사랑받는 게임 기획서 작성법프로그래머에게 사랑받는 게임 기획서 작성법
프로그래머에게 사랑받는 게임 기획서 작성법Lee Sangkyoon (Kay)
 
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013영욱 오
 
[NDC_16] 캐릭터 한 달에 하나씩 업데이트 하기 : '최강의 군단' 스킬 개발 툴 포스트 모템과 차기작 '건파이트 맨션' 툴 프리뷰
[NDC_16] 캐릭터 한 달에 하나씩 업데이트 하기 : '최강의 군단' 스킬 개발 툴 포스트 모템과 차기작 '건파이트 맨션' 툴 프리뷰[NDC_16] 캐릭터 한 달에 하나씩 업데이트 하기 : '최강의 군단' 스킬 개발 툴 포스트 모템과 차기작 '건파이트 맨션' 툴 프리뷰
[NDC_16] 캐릭터 한 달에 하나씩 업데이트 하기 : '최강의 군단' 스킬 개발 툴 포스트 모템과 차기작 '건파이트 맨션' 툴 프리뷰승민 백
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019devCAT Studio, NEXON
 
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기강 민우
 
쩌는 게임 기획서, 이렇게 쓴다(How to write great design documents) from GDC 2008 (Korean)
쩌는 게임 기획서, 이렇게 쓴다(How to write great design documents) from GDC 2008 (Korean)쩌는 게임 기획서, 이렇게 쓴다(How to write great design documents) from GDC 2008 (Korean)
쩌는 게임 기획서, 이렇게 쓴다(How to write great design documents) from GDC 2008 (Korean)Kay Kim
 
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템Chaeone Son
 
게임제작개론: #1 게임 구성 요소의 이해
게임제작개론: #1 게임 구성 요소의 이해게임제작개론: #1 게임 구성 요소의 이해
게임제작개론: #1 게임 구성 요소의 이해Seungmo Koo
 
NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계
NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계
NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계Imseong Kang
 
게임제작개론 : #6 게임 시스템 구조에 대한 이해
게임제작개론 : #6 게임 시스템 구조에 대한 이해게임제작개론 : #6 게임 시스템 구조에 대한 이해
게임제작개론 : #6 게임 시스템 구조에 대한 이해Seungmo Koo
 
게임제작개론 : #4 게임 밸런싱
게임제작개론 : #4 게임 밸런싱게임제작개론 : #4 게임 밸런싱
게임제작개론 : #4 게임 밸런싱Seungmo Koo
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012devCAT Studio, NEXON
 
UE4 Garbage Collection
UE4 Garbage CollectionUE4 Garbage Collection
UE4 Garbage CollectionQooJuice
 

What's hot (20)

[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
 
NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지
NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지
NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지
 
쩌는게임기획서 이렇게 쓴다
쩌는게임기획서 이렇게 쓴다쩌는게임기획서 이렇게 쓴다
쩌는게임기획서 이렇게 쓴다
 
NDC 2013 - 초심자를 배려하는 레벨 디자인
NDC 2013 - 초심자를 배려하는 레벨 디자인NDC 2013 - 초심자를 배려하는 레벨 디자인
NDC 2013 - 초심자를 배려하는 레벨 디자인
 
리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션
 
[IGC 2017] 넥슨코리아 심재근 - 시스템 기획자에 대한 기본 지식과 준비과정
[IGC 2017] 넥슨코리아 심재근 - 시스템 기획자에 대한 기본 지식과 준비과정[IGC 2017] 넥슨코리아 심재근 - 시스템 기획자에 대한 기본 지식과 준비과정
[IGC 2017] 넥슨코리아 심재근 - 시스템 기획자에 대한 기본 지식과 준비과정
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
프로그래머에게 사랑받는 게임 기획서 작성법
프로그래머에게 사랑받는 게임 기획서 작성법프로그래머에게 사랑받는 게임 기획서 작성법
프로그래머에게 사랑받는 게임 기획서 작성법
 
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
 
[NDC_16] 캐릭터 한 달에 하나씩 업데이트 하기 : '최강의 군단' 스킬 개발 툴 포스트 모템과 차기작 '건파이트 맨션' 툴 프리뷰
[NDC_16] 캐릭터 한 달에 하나씩 업데이트 하기 : '최강의 군단' 스킬 개발 툴 포스트 모템과 차기작 '건파이트 맨션' 툴 프리뷰[NDC_16] 캐릭터 한 달에 하나씩 업데이트 하기 : '최강의 군단' 스킬 개발 툴 포스트 모템과 차기작 '건파이트 맨션' 툴 프리뷰
[NDC_16] 캐릭터 한 달에 하나씩 업데이트 하기 : '최강의 군단' 스킬 개발 툴 포스트 모템과 차기작 '건파이트 맨션' 툴 프리뷰
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
 
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
 
쩌는 게임 기획서, 이렇게 쓴다(How to write great design documents) from GDC 2008 (Korean)
쩌는 게임 기획서, 이렇게 쓴다(How to write great design documents) from GDC 2008 (Korean)쩌는 게임 기획서, 이렇게 쓴다(How to write great design documents) from GDC 2008 (Korean)
쩌는 게임 기획서, 이렇게 쓴다(How to write great design documents) from GDC 2008 (Korean)
 
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템
 
게임제작개론: #1 게임 구성 요소의 이해
게임제작개론: #1 게임 구성 요소의 이해게임제작개론: #1 게임 구성 요소의 이해
게임제작개론: #1 게임 구성 요소의 이해
 
NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계
NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계
NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계
 
게임제작개론 : #6 게임 시스템 구조에 대한 이해
게임제작개론 : #6 게임 시스템 구조에 대한 이해게임제작개론 : #6 게임 시스템 구조에 대한 이해
게임제작개론 : #6 게임 시스템 구조에 대한 이해
 
게임제작개론 : #4 게임 밸런싱
게임제작개론 : #4 게임 밸런싱게임제작개론 : #4 게임 밸런싱
게임제작개론 : #4 게임 밸런싱
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
 
UE4 Garbage Collection
UE4 Garbage CollectionUE4 Garbage Collection
UE4 Garbage Collection
 

More from Sukwoo Lee

진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전Sukwoo Lee
 
Data-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSData-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSSukwoo Lee
 
Cascade Shadow Mapping
Cascade Shadow MappingCascade Shadow Mapping
Cascade Shadow MappingSukwoo Lee
 
포인트 셰도우
포인트 셰도우포인트 셰도우
포인트 셰도우Sukwoo Lee
 
2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑Sukwoo Lee
 
2018.02.03 이미지 텍스처링
2018.02.03 이미지 텍스처링2018.02.03 이미지 텍스처링
2018.02.03 이미지 텍스처링Sukwoo Lee
 
리얼타임 렌더링 - 조명 입문편 -
리얼타임 렌더링 - 조명  입문편 -리얼타임 렌더링 - 조명  입문편 -
리얼타임 렌더링 - 조명 입문편 -Sukwoo Lee
 
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)Sukwoo Lee
 
Component-Based Entity System과 Data-oriented Design
Component-Based Entity System과 Data-oriented DesignComponent-Based Entity System과 Data-oriented Design
Component-Based Entity System과 Data-oriented DesignSukwoo Lee
 

More from Sukwoo Lee (10)

진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
 
Data-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSData-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTS
 
Cascade Shadow Mapping
Cascade Shadow MappingCascade Shadow Mapping
Cascade Shadow Mapping
 
Bump Mapping
Bump MappingBump Mapping
Bump Mapping
 
포인트 셰도우
포인트 셰도우포인트 셰도우
포인트 셰도우
 
2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑
 
2018.02.03 이미지 텍스처링
2018.02.03 이미지 텍스처링2018.02.03 이미지 텍스처링
2018.02.03 이미지 텍스처링
 
리얼타임 렌더링 - 조명 입문편 -
리얼타임 렌더링 - 조명  입문편 -리얼타임 렌더링 - 조명  입문편 -
리얼타임 렌더링 - 조명 입문편 -
 
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
 
Component-Based Entity System과 Data-oriented Design
Component-Based Entity System과 Data-oriented DesignComponent-Based Entity System과 Data-oriented Design
Component-Based Entity System과 Data-oriented Design
 

행동 트리

  • 1. 행 동 트 리 2019.09.28 데브루키 발표자 이석우
  • 2. 게임 AI • 게임 속 유저가 컨트롤 하지 않는 존재들은 그 용도에 따라 인공지능이 있어야한다.
  • 3. FINITE STATE MACHINE • 게임의 전통적인 AI 구현은 유한 상태 기계(FSM)을 이용했다. Patrol Chase Shoot 적 발견 사격 가능 범위적 놓침/사살
  • 4. FSM을 이용한 AI 구현 • 먼저 캐릭터에 필요한 각각의 상태를 정의한다. Patrol Chase Shoot적을 발견할 때까지 주변을 정찰한다. 발견한 적을 추적한다. 공격 범위 안에 있는 적을 쏜다.
  • 5. FSM을 이용한 AI 구현 • 그 다음 정의한 상태들을 알맞게 연결시키면 된다. Patrol Chase Shoot Patrol Chase Shoot 적 발견 사격 가능 범위적 놓침/사살
  • 6. FSM의 장점 • 단순한 로직을 쉽게 구현할 수 있다. • 직관적이다. Patrol Chase Shoot 적 발견 사격 가능 범위적 놓침/사살
  • 7. 유저들의 요구 • 그러나 유저들은 게임의 재미와 몰입도를 높여주는 정교한 AI를 원한다. Interaction with Allies Monster PatternNPC with Communication
  • 8. FSM의 단점 • FSM의 상태를 추가시키다 보면 다시 연결시키기 머리가 아프다… Patrol Chase Shoot 적 발견 사격 가능 범위적 놓침/사살
  • 9. 계층형 FSM • 상태를 그룹으로 나눠 계층화 하여 복잡도를 줄이고 그룹 내 상태들은 재사용이 가능하다. 적 발견 사격 가능 범위적 놓침/사살 Patrol 엄 폐 장 전 발 사 이 동 탐 색
  • 10. 계층형 FSM • 그러나 다른 계층의 상태를 마음대로 가져와 재사용하기에는 여전히 제약이 따른다. 계층 간의 특성에 따라 애초에 복사가 불가능한 경우도 있다. ?? 복사 새로 추가된 상태와 기존 상태를 연결시켜야 한다.
  • 11. 행동 트리 • AI가 달성할 소정의 목표를 정의하고 이것들을 서브 태스크로 나누어 운용하는 구조 Goals Tasks AI Patrol GoToA GoToB Fight Approach Aim Shoot
  • 12. 언리얼 엔진의 행동 트리 • UE4 행동 트리의 구조와 특징을 설명하고 왜 FSM 대신 AI에 사용되는 지 알아본다.
  • 13. 행동 트리의 구조 • 행동 트리는 Blackboard와 Behavior Tree의 조합으로 이루어 진다.
  • 14. BLACKBOARD • 블랙보드는 AI가 판단을 내리는 데 필요한 데이터들을 저장한다. 타격 위치 목표 위치 테니스에서 AI는 타격 위치와 목표 위치를 등을 알고 있어야 공격할 수 있다. 게임 속 몬스터도 유저의 위치를 알아야 추적한다.
  • 16. TASK • 행동 트리의 Leaf 노드로 정의한 Task를 실행한다. • Task 노드는 자식을 보유하지 않는다. Sequence Idle Move Attack Task nodes
  • 17. COMPOSITE NODE • 특정 작업을 실행하지 않는 대신 자식 노드를 보유한 노드이다. • 자식 노드의 실행 방법에 따라 시퀀스와 셀렉터로 나뉜다. Composite Action 1 Action 2 Action 3
  • 18. SEQUENCE • Sequence는 자식 노드를 순서대로 실행하는 노드이다. • 자식 노드를 왼쪽에서 오른쪽의 순서로 깊이 우선 탐색 방식으로 순회한다. Sequence 1 Action 1 Sequence 2 Action 4 1 4 Action 2 Action 3 2 3
  • 19. SEQUENCE • Sequence는 자식 노드가 failure를 반환할 때까지 순회한다. Sequence Patrol Chase Shoot 1 2 3 적 발견 성공! 추격 성공! Root 적 사살 성공!
  • 20. SEQUENCE • 만약 순회하는 도중 failure를 반환하면 Sequence는 종료 된다. Sequence Patrol Chase Shoot 1 2 적 발견 성공! 추격 실패! Root Sequence 실패 반환
  • 21. SEQUENCE • 반면 failure를 반환하지 않으면 모든 노드를 순회하고 Sequence를 종료한다. Sequence Patrol Chase Shoot 1 2 3 적 발견 성공! 추격 성공! Root 적 사살 성공! Sequence 성공 반환
  • 22. SEQUENCE • 왜 이런 구조로 되어있는 걸까 • 어떤 목표를 이루기 위해선 일련의 연속적인 행동이 필요한 경우가 있다. Final Fusion!
  • 23. SEQUENCE • 배드민턴의 스매싱을 예로 들어보자. • 스매싱을 하기 위해선 아래의 동작들을 순서대로 해야한다.
  • 24. SEQUENCE • 만약 한 동작이라도 실수한다면 스매싱을 제대로 할 수 없을 것이다. • Sequence는 이런 용도로 사용한다.
  • 25. SELECTOR • Selector는 자식 노드 가운데 하나를 실행하기 위한 노드이다. • 왼쪽에서 오른쪽으로 순서로 깊이 우선 탐색 방식으로 순회한다. Selector Action 1 Sequence Action 4 1 4 Action 2 Action 3 2 3
  • 26. SELECTOR • 자식 노드가 success를 반환할 때까지 순회한다. Selector Sqeuence A pattern Sqeuence B pattern Sqeuence C pattern 1 2 A 선택 안함 B 선택! Root Selector 성공 반환
  • 27. SELECTOR • 모든 자식 노드가 실패하면 실패를 반환하고 종료한다. Selector Sqeuence A pattern Sqeuence B pattern Sqeuence C pattern 1 2 3 A 패턴 실패 B 패턴 실패 Root C 패턴 실패 Selector 실패 반환
  • 28. SELECTOR • Selector는 복수의 행동 패턴 중 하나를 선택해야 할 때 사용한다.
  • 29. SELECTOR 예를 들어, 보스의 공격 패턴을 임의로 선택할 때 사용할 수 있다. 내 공격 패턴은 무한이다 X밥 유저야 오호호
  • 30. DECORATOR • Decorator는 노드를 실행할 조건을 정의한 노드이다. • Composite 혹은 Task 노드에 붙여 해당 노드를 실행할 것인지 결정한다. Selector Peace~! 넌 뒤졌다 받은돈 > 500
  • 31. SERVICE • Composite 혹은 Task 노드에 붙여 그 노드가 실행되는 동안 정해진 빈도에 따라 실 행된다. • 보통 검사를 하고 그 검사를 바탕으로 블랙보드의 데이터를 업데이트한다. 적 감지 범위 Target 적 감지 범위 Target 타겟 위치 업데이트
  • 32. SERVICE 초록색이 Selector 노드에 붙힌 Service 노드이다. Interval : 해당 시간마다 서비스 실행 Random Deviation : Interval 값에 랜덤하게 더함
  • 33. 실제 구현 • 언리얼 엔진4 행동트리 퀵스타트 가이드 https://docs.unrealengine.com/ko/Engine/AI/BehaviorTrees/QuickStart/index.html
  • 34. 행동 트리의 장점 • 최상위 노드를 통해 AI 로직을 쉽게 파악할 수 있다. AI Idle Chase Combat
  • 35. 행동 트리의 장점 • 트리를 통해 확장하여 정교한 AI를 구현할 수 있다. AI Idle Chase Combat Smoke Patrol Melee Shoot Grenade Weapon
  • 36. 행동 트리의 장점 • 필요에 따라 언제든지 Task를 재사용할 수 있다. • 이때 FSM처럼 상태 전이를 위한 연결을 고려할 필요가 없다. AI A B C 1 2 3 4 5 3 5 특정 위치에 삽입되는 순간 주위 노드와의 관계와 역할이 정해짐
  • 37. 행동 트리의 장점 • Task 뿐만 아니라 하나의 분기를 이루는 노드의 집합도 재사용 가능하다. AI A B C 1 2 3 4 5 A 1 2 3 B 4 5
  • 38. 행동 트리의 장점• 시각화 툴 제작이 용이하다.
  • 39. 주의할 점 • 행동 트리의 탐색 순서가 행동에 영향을 미친다. Sequence Idle Move Attack Sequence Attack Move Idle 실수로 노드의 위치가 바뀌면 몬스터는 엉뚱 한 행동을 할 수 있다.
  • 40. 주의할 점 • Selector의 자식 노드가 많을수록 AI의 의사결정이 지연될 수 있다. Selector 1 2 n 시간 복잡도 : O(n)
  • 41. 주의할 점 • 노드 간에 의존성이 없고 필요한 정보는 Blackboard나 게임 오브젝트에서 얻어온다. Blackboard Data Sequence Idle Move Attack Objects
  • 42. 결론 • 트리의 확장을 통하여 간단한 AI 뿐만 아니라 정교한 AI도 구현 가능하다. • 트리 노드가 아무리 많아도 상태 전이에 따른 연결을 고민할 필요가 없다. • 코드의 가독성이 좋고 시각화 툴을 만들기 용이한 구조이다. • 모듈화가 가능한 구조로 코드 재사용과 확장성이 좋다.
  • 43. 참고자료 • [NDC 2009] 행동 트리로 구현하는 인공지능, 김용하 • https://lifeisforu.tistory.com/327 • https://engineering.linecorp.com/ko/blog/behavior-tree/