언리얼

[언리얼, AI] 공부 정리 - [공식 튜토리얼] 블루프린트를 사용한 AI 소개

Esunn 2022. 8. 10. 01:17

https://learn.unrealengine.com/course/3420822

 

Epic Games

 

www.unrealengine.com

블루프린트를 사용한 AI 소개

 

ai 강좌 공부 정리

감지, 처리, 동작의 범주로 나눔

이를 이용해 ai 제작

 

키보드 End키 - 바닥에 붙게 위치 조절 가능.

장애물을 제작해줌.

 

 

AI 이론

Sense, Think, Act 3과정으로 분류됨 + 루프

 

감지의 의도는 ai의 현재 상태를 스냅샷으로 취하는 것. 시각 촉각같은 실질적인 정보도 있지만

다른 ai로 부터 전송된 보이지 않는 정보를 감지하는 등 추상적일 수 있다.

 

생각은 더 큰 그림의 일부다. 생각 과정에서 수지한 정보로 현재 월드의 모스을 만들어낼 수도 있다.

어떤 행동을 취할지 결정.

 

행동, 달리기나 점프같은 시각적인 행동을 할 수도 있지만 ai와의 교류나 경로를 설정하는 등의 

보이지 않는 행동도 있다.

 

루프, 행동을 취한 뒤 루프를 타고가 감지를 하고 생각을 하는걸 반복 서로 상호 의존적이다.

 

목표 설정과 목표 달성을 위한 단계 설정, 목표의 완수 여부 파악이 중요.

 

AI 캐릭터 생성

2개의 블루프린트, 캐릭터, AI컨트롤러 필요

그리고 ai컨트롤러가 ai 캐릭터에 빙의하도록 구성해야함.

 

ai 캐릭터

기존의 3인칭 캐릭터 bp를 복제해 이용해 만든다.

입력에 관련된 부분을 지워줌. 카메라도 지워준다.

 

클래스 디폴트에서 만든 컨트롤러를 설정해줌

 

 

ai 컨트롤러

새 블루프린트 제작 모든 클래스 - AI 컨트로러

접두사는 AIC_ 이다.

 

 

네비게이션 이론

네비게이션 메시 : ai가 돌아다닐 수 있는 영역

 

NavMeshBoundsVolume 사용, 브러시 세팅을 통해 레벨 만한 크기로 키워줌.

뷰포트 표시 - 네비게이션 or P 단축키로 영역 표시

 

자동으로 업데이트를 하게 되는데 이를 끄려면

편집 - 에디터 개인설정 - 레벨 에디터 - 기타 - 내비게이션 자동업데이트 해제

 

월드 아웃라이너에 recast를 검색하면 내비 메시가 나오는데 

여기서 오프셋 그리기 값을 변경해주면 시각적 부분을 위치 조절 가능하다.

 

내비 메시 모디파이어 볼륨 : 이를 통해 지나기 어려운 경로를 설정 가능하다. 여기서는 다루지는 않음.

 

내비메시 에이전트

에이전트 : 환경 내에 존재하는 모든 형태의 자율 주체 - ai캐릭터 같은거

recast 내비메시에 

생성 - 에이전트 매뉴들이 있다.

 

에이전트 반경 ( Agent Radius ) : ai캐릭터의 캡슐컴포넌트의 반경과 같게 해줌.

이에 맞춰 캡슐 높이에 맞춰서 에이전트 높이를 조절해준다.

 

이는 프로젝트 세팅창에서도 설정 가능하다.

엔진 - 내비게이션 시스테 - 에이전트 

 

지원 에이전트 : 엘리먼트 추가 가 능한 배열 에이전트 유형 설정 가능. 여기서는 하나만

 

메시 네비게이션

이동 가능한 영역 무작위로 이동하게 하기

 

커스텀 이벤트 제작 

Simple Move to Location : 노드 사용, 컨트롤러, 벡터 필요

Get Controller : 컨트롤러 불러옴

GetRandomReachablePointInRadius : origin - 시작 radius - 범위

Set Timer by Event 

 

게임플레이 디버거

엔진 - 게임플레이 디버거 - 바인딩 여부 확인

게임 시작 후 바인딩 키를 눌러 활성화.

 

디버그 창 오른쪽 위 : 서택된 디버그 엑터 강조

ai 캐릭터 위 아이콘이 표시됨

왼쪽 위 : 키를 눌러 특정 기능 활성화 가능. 그 아래 다양한 정보 확인가능

tab : 관전자 모드 가능 뷰포트 처럼 카메라 움직이기 가능.

숫자패드 1 : ai 카테고리 

 

ai 퍼셉션 이론

감지 가능한 요소를 제어해줌.

다양한 감각 중 어떤 것을 보거나 들을지 선택 가능 - 컴포넌트

ai 인지 자극 소스 : 어떤 감각을 들을지 결정

 

관련문서

https://docs.unrealengine.com/5.0/en-US/ai-perception-in-unreal-engine/

 

AI Perception

Documents the AI Perception Component and how it is used to generate awareness for AI.

docs.unrealengine.com

 On Target Perception Updated 이벤트 : 퍼셉션 시스템이 감지된 액터로 부터 업데이트를 받았을 때 실행됨.

 

AI 퍼셉션 구성

ai 캐릭터에서 ai 인지 컴포넌트 추가디테일 패널에서 감지환경을 시야로 하나 추가해줌.

 

시야정말 많은 게 구현이 되어있다.시야각도, 얼마나 보이는지부터적, 중립, 아군으로 나누어 무엇을 탐지할지

수명이 있었는데 이를써서 얼마나 기억할지 설정 가능했다.

 

플레이어 블루프린트에 ai 인지 자극 소스 컴포넌트를 추가해줌.

스스로 자동 등록 활성화 여기서도 시야에 대해 활성화를 해줌.

 

프로젝트 세팅 - 렌더링 - 안티 에일리어싱 메서드 

를 none으로 바꿔줌 예제에서는 TAA였고 내 프로젝트에서는 TSR이였는데 

바꿔야하는지 헷갈려서 그냥 바꾸고 했다.

 

게임플레이 디버거를 활성화 후 숫자패드 4를 눌러 퍼셉션 할성화

봤던 정보에 age가 남는다.

쭉 올려보면 범위가 초록색과 분홍색이 있는데

테스트 영역보다 커 이를 sense에서 줄여주면 된다.

sight radius와 lose sight radius를 조절

 

AI 퍼셉션 이벤트 사용

타깃 퍼셉션 업데이트 시 노드 이용

감지한 액터를 저장하고 stimulus라는

ai 자극 구조체 중 Successfully Sensed라는 값에 대해 이벤트를 만들었다.

타깃 액터가 인식되고 있는지 여부로 참과 거짓값

인지가 됐으면 액터를 저장하고 안보여지게 되면 그 액터를 지운다.

 

비헤이비어 트리 이론

비헤이비어 트리 : ai가 실행하는 의사 결정의 시각적 모델링 방식이다.

위에서 아래, 왼쪽에서 오른쪽으로 실행된다.

 

태스크 노드 : 태스크 노드 밑에 노드를 둘 수 없다. 리프노드, 나뭇잎 노드등으로도 불림.

성공, 실패, 실행 중 

이 3가지 상태가 될 수 있다. 성공과 실패는 다음 노드로 넘어감. 실행중은 결과를 기다림

 

컴포짓 : ai 실행 분기의 루트이다. 태스크 노드처럼 작업을 실행하지는 않음.

구조체를 만들고 실행 제어

 

  셀렉터 컴포짓 : 아무 노드에서나 성공을 반환하면 성공으로 고려됨. 모든 노드에서 실패를 반환하면 실패. 

  왼쪽부터 실행되니 선호하는 행동은 왼쪽에 배치하자.

 

  시퀀스 컴포짓 : 모든 서브 노드가 성공했을때만 성공을 반환함. 한 단계라도 실패 시 실패 반환.

 

초기 비헤이비어 트리 빌드

비헤이비어 트리의 접두사는 BT, 블랙보드도 만들어줌 접두사는 BB

ai 컨트롤러 이벤트 그래프에서 Event On Possess 노드에 Run Behavior Tree노드를 이용해 연결해줌.

비헤이비어 트리에서도 블랙보드가 연동이 되어있는지 확인해줌.

 

블랙보드에서 타깃위치를 나타낼 벡터 변수를 만들어줌.

비헤이비어 트리 태스크 접두사 BTT를 만들어줌.

저장할 폴더를 따로 만들어줌.

태스크의 값은 날라가기에 블랙보드에 저장해줌.

비헤이비어 트리 제작 부분이 생략되서 비슷하게 만들었는데 잘 안됐다.

 

플레이어 추격

전 과정에서 무작위로 움직이는 과정을 플레이어를 따라오도록 비헤이비어를 짰다.

데코레이터라는 기능을 썼다.

이 부분은 내용이 길어 자주 복습해줘야겠다.

ai가 인지한 정보를 블랙보드 키로 전달해주고 이 키를 기준으로 판단을 내리게 했다.

 

비헤이비어 트리 테스트

플레이 후 비헤이비어 트리를 열어 일시정지 시킬 수도 있다. 

블랙보드 키의 값도 표시된다.

앞과정을 돌려보거나 할 수도 있다.

 

게임플레이 디버거도 유용하다.

여기서 어떤 노드를 통해 행동을 했는지 볼 수 있다.

 

 

첫 번째 EQS 쿼리 생성

인바이런먼트 쿼리 시스템

레벨에서 원하는 오브젝트를 찾는 것을 도와줌.

에디터 개인설정에서 기능을 활성화 해줘야 함.

언리얼 5에서는 자동으로 활성화 되어 있는 것 같다.

 

플레이어를 따라오는 것을 우선으로 하고 그렇지 않으면 특정 액터를 찾게 ai가 만들어졌다.

 

허기 기반 결정 내리기

비헤이비어 트리 서비스라는 새로운 기능을 사용. 접두사는 BTS

셀렉터에 서비스 추가 허기가 높아지면 음식 액터를 찾는것을 시도하는 기능을 추가함.

 

 

두 번째 EQS 쿼리 생성

플레이어에게 보이지 않는 상태를 유지하며 다가가는 것을 목표로 함. 장애물 이용.

EQS 컨텍스트 블루프린트를 사용. 접두사는 EQSC

기존 함수 오버라이드 필요. Provide Single Actor

이 영상은 일단 따라하긴 했는데 자세히 이해가 되진 않았다. 

나중에 비슷한 기능을 구현하면서 언리얼 문서를 읽어봐야 겠다.

 

EQS 테스트 폰 사용

이걸 통해서 디버깅 작업이나 ai가 판단하는걸 쉽게 알 수 있었다.

 

EQS도 게임플레이 디버거에서 확인 가능하다.

 

 

다음 단계

ai에 다른 센서 추가해보기 우선순위 조정

처리 개선 판단을 더 복잡하게 하는식으로

행동 개선 탐색루틴, 지점

 


강의가 매우 길고 그 만큼 내용도 어려웠다.

AI의 기본적인 부분을 거의 전부 다루는 강좌였다.

기초를 잡기에 매우 좋았지만 넓은 범위를 다루다 보니 그만큼 어려운 강의였다.

복습을 계속 해줘야 할 것 같다.