Utility AI
안녕하세요? 요새 날씨가 많이 덥습니다. 벌써 여름이 다가왔군요!
다들 수영장이나 계곡, 바다에 놀러가실 계획이 있으신가요?
오늘 포스팅에서는 NPC의 AI를 코딩하는 방법론에 대해서 간단하게 알아보겠습니다.
시작하겠습니다.
보통 게임에서 AI를 코딩할 때는 유한 상태 머신이나 행동트리를 많이 사용한다고 합니다. 그 이유는 개념이 상대적으로 다음에 설명드릴 방법론에 비해 간단하기 때문입니다. 따라서 코딩도 더 간단하다고 하네요. 단점은, 그 대신에 매우 복잡한 AI를 만드려고 하면 만들어야 되는 '상태(state)'가 많아야 하고 '트리(tree)'가 깊어야 합니다. 게다가 개념적으로 결정론적(decision), 즉 특정 트리거가 있으면 A, B, C 행동 중에 한 가지, 'B' 만 스위치가 켜지고 나머지는 꺼지는 if else문의 구조를 가지는 것이 행동트리입니다. 행동(확률) 로 나타내면 A(0), B(1), C(0)입니다.
반면에 시스템 자체는 코딩으로 구현하기는 좀 더 복잡하지만, 사용하기에는 더 편한 방법론이 있습니다. 바로 Utility AI입니다. Utility AI는 A, B, C의 행동 중 결과적으로 B를 고르더라도 결정론적으로 선택한 것이 아니라 확률적(possibility)으로 선택하는 것입니다. 행동(확률)로 나타내면 A(0.3), B(0.7), C(0.5) 일 때 가장 확률이 높은 B(0.7) 가 B(1) 로 간주되어 선택되는 셈입니다.
Utility AI에서는 Action을 결정할 때 NPC가 인지한 정보(시각, 청각, 기타 정보)로부터 if else 논리 대로 바로 행동으로 이어지는 것이 아니라, 이전에 한 단계를 더 거칩니다. 바로 그러한 인지 정보를 토대로 각 행동마다 점수(Score)를 메겨서 가장 점수가 높은(행동할 확률이 높은) 행동을 실행하는 원리입니다.
유투브에서 잘 설명하고 있는 영상이 있어서 가져와 보았습니다.
이번 포스팅은 여기까지입니다.
도움이 되셨다면 관련 후속 포스팅을 위해 공감을 눌러주세요.
감사합니다.
출처) https://youtu.be/ejKrvhusU1I
[영상]
https://anshuman-kumar.gitbook.io/nez-doc/ai-fsm-behavior-tree-goap-utility-ai






