Drivatar

덤프버전 :

1. 개요
2. 개념
3. 역사
3.1. 탄생
3.2. 드라이바타 1.0
3.3. 드라이바타 2.0
4. 구현
4.1. 레이어 설정
4.2. Drivatar 학습
4.2.1. 세그먼트와 턴 유형
4.2.2. chi 값
4.3. 업로드
5. 기술적 난제와 극복
5.1. 추론
5.2. 공격성 억제
5.3. 눈속임 기법
5.3.1. 고무줄 묶기
5.3.2. 선행 학습
5.3.3. 시야 제한
6. 내 Drivatar 훈련법
7. 네임드 AI
7.1. M. Rossi
7.2. The Stig
8. 여담


1. 개요[편집]


Driver + Avatar = Drivatar

레이싱 게임 포르자 시리즈에 등장하는 인공지능 레이서. 플레이어 모델링 기계학습 기술을 통해 실제 인간 플레이어의 운전 스타일과 개성을 지속해서 모방해 만들어낸 도플갱어 AI 레이서로, 나와 똑같은 스타일로 코너링을 돌고 똑같은 시점에 브레이크 제동을 걸고 똑같은 주행 실수를 하는 등 나를 완전히 빼닮은 AI 플레이어다.


2. 개념[편집]


다른 레이싱 게임들은 게임 제작사에서 오랜 기간 테스트를 거쳐 표준 인공지능을 제작해 트랙에 투입한다. 늘 그렇듯이 AI가 너무 멍청하다는 플레이어들의 불만이 많았다. 거의 같은 지점에서 속도를 줄이고 거의 같은 방식으로 회전하며 거의 같은 라인을 따라가 재미가 없다. 이러한 문제를 없애기 위해 더욱 다양한 개성의 AI 플레이어를 제작하지만, 이것조차도 주어진 게임에 점점 더 많은 시간을 투자해야 함에 따라 자원의 한계에 부딪히고, 약간의 무작위성으로 대응하려고 해도 다소 예측할 수 있는 수준으로 뻔한 행동에서 벗어나기가 힘들었다

포르자 시리즈는 실제 플레이어의 운전 데이터를 딥 러닝으로 인공지능에 그대로 학습시켜 이를 독립된 분신으로 창조해낸다.

플레이어의 플레이를 보고 학습한 데이터는 주행 아바타인 Drivatar에 저장된다. 그리고 내 드라이바타는 누군가의 게임에 내 닉네임을 대신 달고 나타나 마치 나처럼 운전대를 잡는다. 누군가는 일찍 브레이크를 밟고, 누군가는 더 급격하게 코너를 틀고, 일부는 속도를 유지하면서 더 넓은 반경으로 코너를 돌려 할 것인데, 플레이어마다 개성 넘치는 주행 특성은 그대로 드라이바타에 업데이트되어 드라이바타가 곧 내 분신처럼 행세한다.

드라이바타의 가장 큰 장점은 친구랑 만나지 않고도 친구와 경주를 벌일 수 있다는 점이다. 드라이바타 데이터의 용량은 무척 작은 편이다. 때문에 공유가 간편하다. 친구의 드라이바타를 일단 받아놓기만 하면 친구의 운전 습관을 그대로 따라 하는 AI와 게임을 할 수 있다. 오프라인 환경에서도 온라인 매치를 하는 듯한 착각을 불러일으킨다. 드라이바타는 경쟁 감각에 상당한 차이를 불러일으킨다. 단지 경주에서 이기고 싶은 것을 넘어 친구(친구의 운전을 보고 학습한 AI)를 짓밟고 싶을 것이다.

포르자 모터스포츠 5, 포르자 호라이즌 2포르자 호라이즌 3는 내 드라이바타가 다른 사람의 게임으로 넘어가 레이스 이벤트에 출전한다는 설정이 있어, 내 드라이바타가 출전 상금으로 크레딧을 벌어온다.


3. 역사[편집]



3.1. 탄생[편집]


마이크로소프트 사내 첨단 기술 연구소인 마이크로소프트 리서치(Microsoft Research)가 Turn 10 스튜디오를 찾아가 어떤 비밀 실험을 진행한다. 그 비밀 프로젝트는 베이지언 네트워크를 기반으로 인간의 행동을 기계학습 하는 AI였다. '마이크로소프트 리서치 케임브리지'[1]의 비밀 연구 지원으로 드라이바타가 탄생했다. 이 혁신적인 AI는 Xbox(2001)에 출시된 2005년 작 게임 포르자 모터스포츠에 최초로 적용되었다.

포르자 모터스포츠가 처음 나왔을 때, 게임의 AI가 너무 똑똑하다는 리뷰도 나올 만큼 사람들을 충격에 빠트린 것으로 유명하다.#

3.2. 드라이바타 1.0[편집]


Xbox(2001)는 동시대 콘솔 게임기인 닌텐도 게임큐브, PlayStation 2와 다르게 8GB 용량의 하드 디스크 드라이브를 장착하고 있었고, 덕분에 하드드라이브를 드라이바타의 학습에 사용할 수 있었다. 드라이바타 1.0은 콘솔의 로컬 HDD에서 학습되었다. 우선 Turn 10 스튜디오가 사전에 훈련시킨 몇몇 드라이바타가 게임 디스크에 들어가 있고, 나머지 드라이바타는 플레이어가 콘솔의 로컬 환경에서 스스로 학습시켰다.

드라이바타는 인공신경망 데이터 추론 방식을 사용했기 때문에, 훈련 데이터의 용량이 매우 작았고 덕분에 게임 디스크에도 드라이바타 데이터를 집어넣을 수 있었다. 그리고 플레이어는 내가 손수 학습시킨 드라이바타의 데이터를 복사해 다른 사람의 콘솔에 옮길 수도 있었다. 인공신경망 데이터 추론 방식은 학습에 오랜 시간이 걸리지만, 일단 훈련이 끝나면 선택의 가중치만을 기록해두기 때문에 학습 데이터의 용량이 매우 작다. 하지만 인공신경망 학습은 최선의 하나의 답만을 출력하기 때문에 다양성을 위해서는 새로운 해결책이 필요했다. 여기에서 베이지안 신경망이 등장한다.

파일:forza-Bayesian neural networks.webp
파일:forza-Bayesian neural networks_2.jpg
베이지안 신경망 방식으로 구현한 주행 다양성

베이지안 신경망은 베이즈 정리의 아이디어를 신경망에 적용한다. AI가 내릴 수 있는 모든 결정은 그 결과의 확률에 기반한다. 그리고 그 확률은 기록된 학습 데이터에 특정 행동이 나타나는 빈도의 영향을 받는다. 베이지안 신경망은 하나의 가중치 집합만 있는 것이 아니라 해당 컨트롤 입력의 확률 분포에 연결된 다양한 가중치 집합을 갖는다. 결과물 출력을 원할 때 다른 가중치 세트를 사용해 여러 번에 걸쳐 시뮬레이션을 실행한다. AI가 직면한 문제에 대한 답인지 여부를 판가름할 수 있는 신뢰 값도 있다.

결과적으로, 드라이바타는 코너링을 돌 때 하나 이상의 각도 및 추력 옵션을 제안할 수 있다. 그런 다음 신뢰도가 가장 높은 옵션을 선택해 결정한다. 드라이바타의 결정은 이전에 플레이어로부터 본 것과 가장 유사하기 때문에, 그 시점에서 드라이바타가 해야 할 선택이 된다.

드라이바타 1.0은 아직까진 초보적인 수준에 불과했다. 드라이바타 1.0은 훈련에서 얻을 수 있는 데이터에 크게 의존했다. AI가 새로운 트랙이나 이전에 본 적 없는 시나리오에 적응하기 어려웠다. 무엇보다 플레이어가 한 번이라도 운전한 자동차의 데이터가 필요했다.


3.3. 드라이바타 2.0[편집]


드라이바타 2.0의 작동 방식에 관한 대부분의 내용은 현재 기밀에 쌓여있다.

댄 그린왈트는 드라이바타 2.0이 딥 러닝의 한 형태를 사용한다고 밝혔다.

포르자 모터스포츠 5를 시작으로 이제 드라이바타는 Xbox Live 클라우드 서비스를 통해 다른 플레이어의 게임으로 이동할 수 있게 됐다. 이제 드라이바타는 클라우드에서 호스팅 된다. 인터넷에 연결된 콘솔 덕분에 모든 단일 플레이어의 데이터를 추적하고 공유할 수 있게 됐다. 다른 많은 사람들의 드라이바타 데이터를 내려받을 수 있게 됐고, 내 드라이바타 역시 다른 사람의 게임에 등장할 수 있게 됐다. 신경망 네트워크 가중치만 주고받으면 되기 때문에 여전히 드라이바타 데이터의 용량은 매우 작고, 아주 짧은 시간 만에 플레이어는 드라이바타 데이터를 주고받을 수 있다.

인터넷 연결이 끊긴 플레이어는 여전히 제한된 라인업의 Drivatar를 사용할 수 있다. 온라인 상태가 아닌 사람이 사용할 수 있는 일부 드라이바타 프로필이 디스크에 미리 로드되어 있다. 인터넷에 연결한 플레이어는 업데이트된 Drivatar를 언제든지 다운로드하여 매 경주마다 새롭고 신선한 경험을 얻을 수 있다. 오프라인 및 온라인 Drivatar는 동일하게 작동하지만, 오프라인 사용자는 다시 인터넷에 연결할 때까지 업데이트된 새 드라이바타들과 만날 수 없다.

Drivatar 2.0 시스템은 트랙의 턴 타입을 기반으로 사용률을 계산하려고 시도한다. 주어진 코너와 현재 물리 시스템 상태에서 Drivatar는 트랙의 이 부분을 차지하는 속도와 회전 각도, 그리고 운전 스타일을 반영해 허용 가능한 범위를 추측하고 현실 세계의 상식선 범위내에서 코너링을 한다.

클라우드 서버 기반 데이터 학습으로 전환된 이후 갑작스러운 데이터 유입으로 인해 드라이바타는 이상한 부정확성을 보이기 시작했다. 드라이바타가 클라우드화되기 이전에는 수십만 바퀴를 훈련시킨 드라이바타를 게임 디스크에 집어넣었다. 하지만 클라우드 서비스가 열리자 불과 일주일 사이에 그것의 배를 넘는 수백만 바퀴의 학습 데이터가 물밀듯이 쏟아져 들어왔다. 그리고 드라이바타의 학습 데이터가 오염되기 시작했다. 전염병처럼 드라이바타가 이상한 행동을 보이기 시작했다. 정보 과부하 문제를 수정하기 위해 개발진은 드라이바타 시스템이 학습한 데이터를 분류하고 정체하는 방법을 찾아야만 했다. 이 사건으로 인해 프로그래머가 전통적인 AI처럼 프로그래밍을 통해 AI를 보강하고 수정하는 방식을 도입했고 최종적으로 현행 드라이바타 시스템은 하이브리드 방식이 됐다.[2]

4. 구현[편집]



4.1. 레이어 설정[편집]


플레이어 컨트롤러
어시스트
AI 컨트롤러
버퍼 레이어
물리엔진

ForzaTech의 물리엔진은 360프레임으로 작동하지만, 게임의 나머지 부분은 60프레임으로 작동한다. 물리 엔진은 너무나도 민감하기 때문에 작은 변화에도 크게 반응하며, 물리 엔진의 변화와 게임 세계의 변화 사이를 완충하기 위해 버퍼 역할을 수행하는 많은 레이어가 엔진에 층층이 배치되어 있다. 이 버퍼 레이어의 차이 때문에 포르자 모터스포츠포르자 호라이즌은 같은 ForzaTech 게임 엔진을 사용함에도 불구하고, 서로 다른 물리 특성을 보인다.

플레이어 컨트롤러 영역에는 Xbox 컨트롤러의 트리거와 스틱이 자동차 운전에 매핑되는 레이어가 있다.

AI 컨트롤러 레이어는 현재 물리 시뮬레이션을 기반으로 주어진 상황에서 자동차를 가장 이상적으로 운전하는 방법을 정확히 알고 있다. 포르자 게임에선 화면에 주행선이 표시되며, 이것은 물리 시뮬레이션을 기반으로 트랙의 즉각적인 섹션에 대해 취할 수 있는 가장 효율적인 경로를 시각적으로 표현한 것이다. AI 컨트롤러 레이어는 이 정보를 채택하여 해당 도로에서 최대 효율성으로 차량 운용을 달성한다. AI 컨트롤러 레이어는 특정 커브에서 자동차를 운전하는 경우 자동차가 주행선을 최대한 효과적으로 따라가도록 자동차를 운전하는 데 필요한 속도와 조향을 이미 알고 있다.

어시스트는 플레이어 컨트롤러와 AI 컨트롤러의 간극을 메꾸며, 설정창에 들어가 플레이어가 세부적인 부분 하나까지 주행 어시스트 기능을 활성화하거나 비활성화할 수 있다. 주행 어시스트 기능을 활성화할 때마다 게임플레이 경험은 플레이어 컨트롤러 레이어 보다는 AI 컨트롤러 레이어에 가까워진다.


4.2. Drivatar 학습[편집]


모든 레이어가 제자리에 있으면 마지막 단계는 Drivatar의 영역이다. Drivatar는 AI 컨트롤러를 직접 조종한다. 그리고 이상적인 AI 컨트롤러 경로를 비틀어 인간을 모방한다.

드라이바타 2.0의 작동 방식에 관한 대부분의 내용은 기밀에 쌓여있다. 실제로는 여기 적힌 것보다 훨씬 더 복잡하고 비밀에 쌓여있는 기법이 사용되는 것으로 보인다.

4.2.1. 세그먼트와 턴 유형[편집]


학습 과정을 수행하기 위해 주행선을 개별 턴과 세그먼트로 나눈다. Drivatar는 모든 경주 트랙을 12개의 턴 유형을 가지고 쪼개 분류하고 코너링을 추적한다. 12가지 턴 유형은 다음과 같다.

  • Kink
  • Constant Radius
  • Increasing Radius
  • Decreasing Radius
  • Hairpin
  • Sweeper
  • Right Angle
  • Dual Apex
  • Chicane1
  • Chicane 2
  • Mild Bend
  • Hard Corner

파일:train-drivatar-ai.jpg
턴 유형 (드라이바타 1.0)

트랙의 주행선을 각 턴 유형으로 나누고 각 턴에서 플레이어 기량을 검사한다. 트랙을 직접 레이스할 때뿐만 아니라 드라이바타가 핸들을 잡을 때도 개별적인 검사가 이루어진다. Drivatar 시스템은 코너뿐만이 아니라 주행선의 나머지 부분 또한 고유한 트랙 세그먼트로 나눈다. 결과적으로 트랙의 코너보다 훨씬 많은 수의 세그먼트가 게임에 존재하게 된다.

드라이바타 시스템은 트랙을 경주할 때 차량의 위치, 속도 및 그 동작이 전체적으로 얼마나 일관된 지에 주의를 기울인다. 레이스 전체, 트랙의 주요 세그먼트 및 식별된 각 턴에 검사가 이루어져 그 판독값이 드라이바타 프로필과 엑스박스 클라우드 서버에 업로드된다.


4.2.2. chi 값[편집]


파일:forza-chi.jpg

chi 값을 계속 측정해, 플레이어가 코너를 돌 때 안쪽으로 파고드는 걸 선호하는지 바깥쪽으로 안정적으로 코너링하는 걸 선호하는지, 주행할 때 도로 경계석을 자주 밟고 다니는지 등을 확인한다. 선은 일련의 연속된 점으로 이루어져 있으며, 각 점에서의 위치값이 캡처된다.

chi 값만 가지고는 드라이바타가 제대로 주행을 하지 못한다. 도로 폭, 도로 경계석이나 갓길 유무도 계속 바뀌기 때문에 chi 값만 가지고 주행하면 드라이바타가 이상 행동을 보인다. 때문에 프로그래머가 트랙과 서킷의 상황에 맞게 보정을 한다.

4.3. 업로드[편집]


업로드된 데이터는 클라우드에서 드라이바타 학습 모델을 업데이트하는 데 사용된다. 데이터가 업로드될 때마다 타임스탬프가 기록된다. 따라서 운전 스타일에 대한 훈련 데이터가 쌓일수록 오래된 판독값은 경시되고, 드라이바타는 최신의 데이터에 가깝게 변화한다.

일단 모델이 업데이트되면 플레이 스타일의 정확성을 가다듬는 데 중점을 두지만, 일단 업데이트된 모델은 다른 조건에서 유사한 행동을 추론할 수도 있게 된다. 플레이어가 주행한 적 없는 트랙에서 플레이어가 몰아본 적 없는 자동차로도 드라이바타는 과거의 학습 데이터에 기반해 앞으로의 행동을 스스로 추론해 결정한 뒤 운전을 한다. 이제 드라이바타는 행동 추론을 포함해 두 가지 방법(모방 강화, 행동 추론) 중 하나로 작동한다.

플레이어가 이전에 그 트랙을 주행했다면, 플레이어의 드라이바타는 인간이 만들어놓은 주행선을 최대한 잘 모방하려고 시도할 것이다. 마찬가지로, 플레이어가 이전에 그 차를 운전해본 적이 있다면, 가능한 한 플레이어의 유틸리티를 모방하려 할 것이다. 요약하자면 친구가 당신이 경험한 트랙에서 경주를 하고 있고 당신의 드라이바타가 이전에 그 트랙에서 사용했던 차를 타고 있다면, 당신의 드라이바타는 당신이 주행할 당시의 상황과 최대한 일치하는 것을 목표로 운전을 할 것이다. 사실, 드라이바타는 주어진 트랙에서 당신이 어떤 차를 사용했는지 기억한다. 그래서 만약 그 차가 사용 가능하다면, 드라이바타는 운전할 차를 직접 고르는 것만이 아니라 당신이 선택했던 의상과 튜닝도 사용할 것이다.


5. 기술적 난제와 극복[편집]



5.1. 추론[편집]


사실 드라이바타는 플레이어를 모방만 하는 게 아니다. 플레이어를 모방만 하면, 플레이어가 운전대를 잡아보지 않은 자동차, 혹은 플레이어가 한 번도 주행한 적이 없는 트랙을 드라이바타가 주행해야 할 때 드라이바타는 아무것도 하지 못하게 된다. 드라이바타를 일반적인 AI 플레이어와 가장 크게 구별 짓게 만드는 것은 바로 ‘이 상황에서 이 차를 어떻게 운전할 것인가?’를 스스로 생각할 수 있다는 점에 있다. 때문에 내 드라이바타는 내가 한 번도 경험한 적 없는 트랙이나 운전한 적 없는 자동차를 타고도 어딘가에서 운전을 할 수 있다.

일반적인 게임은 다음과 같은 방식으로 AI를 구현한다. 게임은 AI에게 무엇을 해야 하는지 알려주는 규칙과 논리로 가득 차 있다. 모두 프로그래머와 디자이너가 AI에 필요한 규칙이 무엇인지 파악한 다음 하나하나 시스템에 적용한 것이다. 주어진 상황 규칙이 없는 경우 해당하는 상황에서 AI는 어리석은 행동을 하거나 망가진 것처럼 보일 수 있다.

이러한 방식으로 레이싱 게임에서 AI를 구현하려면 매우 많은 힘이 든다. 어느 정도 날카로운 각도로 자동차가 코너를 돌기를 원하지만, AI는 현재 방향과 속도를 기반으로 행동을 결정해야 한다. 날씨도 생각해야 한다. 날씨가 타이어의 접지력에 영향을 미치기 때문이다. 중량도 고려해야 한다. 차량 종류, 타이어 종류, 엔진 마력 모든 것을 고려해야 하고 규칙 중 하나라도 누락되면 AI가 해당 차량을 제대로 운전하지 못한다. 모든 코너, 모든 트랙 및 모든 차량의 온갖 규칙을 고려해야 한다.

자동차의 물리학을 모델링하고 레이스 주행선을 AI가 따르게 하는 방법은 한계가 있다. 트랙 수가 증가하고 레이스 조건과 차량이 추가되면 엄청나게 힘든 일이 된다. 포르자 호라이즌 4에는 100개에 가까운 레이싱 이벤트와 약 700대의 차량이 있다. 하지만 AI가 스스로 추론을 할 수 있으면 모든 일이 간편해진다.

경주 조건이 이전에 경험한 것과 같지 않다면, 드라이바타는 기존에 축적된 지식을 바탕으로 트랙 및 서킷 세그먼트와 특정 코너 타입을 처리할 평균적인 방법을 계산한다. 인공지능은 자동차 코너링을 어떻게 처리할지 근사치를 도출한다. 그래서 만약 플레이어가 이전에 특정 트랙을 주행한 적이 없다고 해도, 그 분신은 플레이어의 이전 경험에 의존해 스스로 운전 방법을 추론해낼 것이다. 처음 가보는 길도 이전의 운전 경험에 기반해 차를 몰고 지나갈 수 있는 것처럼. 인간이 실생활에서 운전하는 것과 똑같은 방식으로 AI는 새로운 환경변화에 대처한다.


5.2. 공격성 억제[편집]


왜 드라이바타는 오프로드 지름길을 사용하지 않는지, 코너를 돌 때 다른 차량을 세게 박아 대열에서 이탈시키고 나는 감속한 다음 유유히 빠져나가는 기술[3]을 사용하지 않는지 의문을 가질 만하다. 드라이바타는 엄연히 게임 AI이기 때문에, 플레이어의 행동을 100% 모방하면 안 된다. 드라이바타는 다른 누군가의 게임에 등장해야 하고, 인간 플레이어의 파워 판타지를 충족시켜줘야 한다. 그리고 운전 성향이 거칠고 폭력적인 플레이어로부터 운전 습관을 배운 드라이바타는 다른 사람의 게임 경험을 완전히 망칠 위험성이 있어 드라이바타의 공격성은 반드시 억압되어야만 한다.

AI 컨트롤러 레이어의 상부에는 사실 숨겨진 또 다른 계층이 있다. 게임 디자이너가 드라이바타의 작동 방식을 조정할 수 있는 추가 제어계층이다. 이 AI 통제 레이어는 드라이바타의 공격성을 억제하고, 드라이바타가 역주행을 하는 것을 막는다. 그리고 플레이어와 가까운 사이의 드라이바타는 공격성을 상대적으로 더 드러낼 수 있도록 공격성 억제를 완화해준다. 모르는 사람의 드라이바타가 내 차를 박으면 기분이 나쁜데, 내 친구나 내 클럽 사람의 드라이바타가 나를 도발하면 승부욕을 더 자극시킨다. 무엇보다 친구 드라이바타의 공격성을 억제하면, 사람들이 그 드라이바타가 진짜 친구처럼 행동하지 않는다고 느꼈다. 때문에 가까운 사이의 드라이바타는 날것에 가깝게 공격성을 조금 풀어줄 필요가 있었다.[4]

포르자 모터스포츠 6의 경우 아예 드라이바타가 내 자동차를 박지 못하도록 막는 설정을 제공한다. 별도 설정을 통해 드라이바타의 공격성 문제를 플레이어의 재량으로 넘기기도 한다.

5.3. 눈속임 기법[편집]



5.3.1. 고무줄 묶기[편집]


레이싱 게임은 AI 레이서의 기량을 플레이어의 주행에 묶는 고무줄 묶기(Rubber Banding) 기법을 사용한다. 플레이어가 너무 앞서 나가거나 선두를 차지하면 뒤처진 AI들은 갑자기 신과 같은 레이서가 되어 플레이어를 따라잡는다. 플레이어가 뒤처지면 AI들은 갑자기 느려지며 플레이어가 대열을 따라잡도록 해준다. 자동차들이 고무줄로 묶인 것 같아 이를 고무줄 묶기라 부른다.[5]

포르자 시리즈는 레이서를 고무줄로 묶는 게 아니라 자동차를 고무줄로 묶어 동적 게임 난이도 조절을 시도한다.

드라이바타가 너무 앞서 있으면 게임이 자동차를 조작해 선두 자동차의 성능을 떨어트린다. 게임 시스템은 자동차의 무게를 약간 증가시켜 움직이기 어렵게 하는 동시에 엔진의 토크나 타이어의 마찰력을 줄여 자동차를 더 통제하기 어렵게 만든다. 마찬가지로 뒤처진 플레이어는 반대 방향으로 시스템이 작동해 실제보다 약간 더 좋은 자동차로 선두 드라이바타를 따라잡게 만들어준다. 레이서를 고무줄로 이었을 때 가장 큰 문제점은, 결승선을 눈 앞에 두고 갑자기 뒤에서 엄청 빠른 자동차가 나를 추월한 뒤 막판에 1등을 가로채는 불쾌한 경험을 유발한다는 점이다. 포르자 처럼 자동차의 성능을 탄력적으로 조정하는 방식은 이런 불쾌한 경험을 유발하지 않는다.

물론 물리 시스템의 정확성을 유지해야 하는 만큼 이 방법도 한계가 있다. 하지만 자동차 물리 모델을 완전히 손상시키지 않는 충분한 범위 내에서 시스템은 잘 수행된다.


5.3.2. 선행 학습[편집]


차량 물리 특성이 특이해 AI가 조종하기 힘든 차량이 있으면, 로딩 중이거나 레이스 준비 애니메이션이나 카운트다운이 나오고 있을 때 게임은 플레이어 몰래 트랙에서 미리 시뮬레이션을 돌려본다. 몰래 돌린 시뮬레이션으로 정보 테이블을 캐시해 놓고 드라이바타가 데이터를 조회해 주행에 반영한다. AI가 어려운 시험에서 인간들 몰래 컨닝 페이퍼를 쓰는 셈이다.

자동차의 튜닝에 따라서도 똑같은 자동차임에도 주행 특성이 완전히 달라질 수 있는데, 인간이 잠깐 한눈판 사이에 미리 시뮬레이션을 안 돌리면 튜닝과 자동차 성능 변화 하나하나에 대응할 수 없으므로 게임의 실시간 성능 보장을 위해서도 선행 시뮬레이션을 돌린다. 서버에서 작업을 수행하더라도 양이 커 캐시할 수 없으므로 로드 시간에 미리 시뮬레이션을 돌려놔야 한다.


5.3.3. 시야 제한[편집]


드라이바타는 Xbox One 하드웨어 기준 동시에 1대의 차량만 인식할 수 있다. 이렇게 만든 이유는 인간 플레이어 대부분이 앞만 보고 달리기 때문에 뒤나 옆에서 오는 차량을 제대로 인지하지 못하기 때문이다. 실제 운전에서도 전문 드라이버가 아니면 대부분 사람이 전방위의 차량 흐름을 동시에 파악하지 못한다. 인간 플레이어는 16대의 차가 뒤엉키는 복잡한 차량 흐름에 대처할 수 없다. 때문에 인간 플레이어 차량을 인식하고 인간의 행동에 발맞추어 행동하는 드라이바타의 개체 수를 줄여 쾌적한 드라이빙 경험을 보장하려고 한다. 결과적으로 드라이바타는 최대 1대의 차량밖에 인식하지 못하도록 제한을 받는다.

가끔 내 차량을 가볍게 툭 치고 지나가는 드라이바타는 대부분 거기에 내 자동차가 있는지도 모르고 그냥 그 길로 나아가려 했다가 보이지 않는 무언가에 부딪힌 상황이다. 포르자 호라이즌의 자유주행 모드에서 난 가만히 서 있는데 가끔가다 드라이바타 차량이 차를 안 세우고 갑자기 와서 내 차를 박고, 내 차를 계속 밀고 나아가려는 특이한 녀석을 볼 수 있다. 그 차량은 시야 제한 때문에 내 차량이 보이지 않아 그런 행동을 하는 것이다. 그리고 드라이바타가 1대의 차량만 인식하면 연산량이 줄어 최적화에 도움이 된다.

6. 내 Drivatar 훈련법[편집]


내 드라이바타가 내 운전을 보고 배우기 때문에, 아예 작정하고 내 드라이바타를 트레이닝시켜 다른 사람의 게임에서 상위권을 차지하게 만들 수 있다.

되감기 기능을 사용하면 Drivatar 훈련이 무효화 된다. 코너를 잘못 돌고 되감기 기능을 사용하면 Drivatar는 트랙의 해당 세그먼트를 성공적으로 통과할 때까지 발생한 모든 일을 무시한다. 플레이어가 같은 코너를 계속 반복해 돌아 완벽한 Drivatar를 만드는 것을 방지하기 위함이다. 따라서 내 드라이바타가 나처럼 코너를 돌게 하려면 되감기 기능을 쓰지 않고 하나의 세그먼트를 처음부터 끝까지 주행해야 한다.

세그먼트마다 체킹이 이루어지는데, 맵의 어느 지점에서 세그먼트가 나뉘는지 알 수 없다. 확실한 건 코너마다 세그먼트가 나뉜다는 점. 그래서 드라이바타의 실력을 향상시키고 싶다면 일단 되감기 없이 코너를 완벽하게 도는 방법부터 연습 하는게 좋다.

주행선은 게임의 물리 엔진이 계산해낸 가장 이상적인 차량 최대 효율 경로이다. 하지만 주행선을 정확히 밟고 달리더라도 속도 조절에 미숙하면, 주행선에서 많이 벗어나도 막 밟고 빠르게 코너를 도는 것보다 못한 결과가 나올 수 있다. 차량 조향은 대략 주행선 보고 달리면 해결이 되기 때문에, 속도 조절 연습을 집중적으로 할 필요가 있다.


7. 네임드 AI[편집]



7.1. M. Rossi[편집]


게임 개발사가 드라이바타 자체 트레이닝을 진행하던 도중에 태어난 기묘한 드라이바타. 인간을 농락하는 공포스러운 운전 때문에 악의 화신으로 여겨진다. 컬트적인 인기 때문인지 포르자 모터스포츠 7에서는 아예 하나의 캐릭터로 재창조됐다. 로시 캐릭터의 세부 설정이 포르자 모터스포츠 7에서 공개되었는데 '마리아 로시'라는 여성 드라이버로 나온다.

특히나 빨간 차를 선호하며 게이머를 이기다 못해 사고로 죽이려고 작정한 듯한, 악명과 함께 컬트적인 인기를 누리고 있는 M. 로시(M. Rossi)라는 드라이바타는 Turn 10 스튜디오 마저 가르치지 않은 고급 테크닉을 알아서 터득하더니, 매우 공격적인 성향으로 스스로 성장하여 놀랐다고 할 정도. 단 로시도 뒤에서 바짝 추격하는 차에 대해서는 부담감을 많이 느끼는지, 정말 바싹 붙으면 실수를 하며 자폭한다. 로시는 호라이즌 시리즈에도 등장한다.

포르자 모터스포츠 5 이후부터는 플레이어의 플레이에 기반한 드라이바타가 플레이에 등장하는데 유저들의 공격적인 성향을 반영해서인지 시리즈를 거듭할수록 로시 이상으로 공격적인 드라이바타들이 많아져서 유저들의 짜증을 유발하는 경우가 많아졌다. 특히 포르자 모터스포츠 7 오픈 초창기에 자꾸 추돌을 시도하는 드라이바타들에 대한 혹평이 좀 많았다.




7.2. The Stig[편집]


드라이바타가 아닌 순수한 AI. 포르자 모터스포츠 5포르자 모터스포츠 6에서 등장한다.

탑기어에 출현하는 하얀 옷과 하얀 헬멧을 착용한 전속 마스코트로, The Stig 항목에 자세한 설명이 나와있다. 일반적인 드라이바타 같은 딥 러닝을 거치지 않고, 개발사가 직접 튜닝해가며 창조해낸 AI로 게임에서 유일하게 드라이바타가 아닌 전통적인 AI다. M. Rossi는 머신 러닝으로 단련된 드라이바타 출신 AI다.


8. 여담[편집]


How Forza's Racing AI Uses Neural Networks To Evolve
How Forza's Drivatar Actually Works

당연히 유명인의 드라이바타도 게임에서 만나볼 수 있다. 대표적인 인물이 Xbox 사업부 사장인 필 스펜서의 드라이바타다. 실제로 그의 드라이바타를 만나본 사람들의 평에 따르면, 상위권을 놓치지 않을 만큼 차를 잘 모는 편이라고 한다. 사실 이것도 필 스펜서가 자신의 드라이바타를 열심히 훈련시켜서 그런건데, 2017년에 자신의 트위터에 'I'll need to train my drivatar a bit more, maybe next time....'이라 쓰며 드라이바타 특훈을 예고한 적이 있다.

갈수록 사람들의 운전 행태가 공격적, 폭력적으로 변해가면서 드라이바타들도 그만큼 사악해져가고 있다. 사람들한테 나쁜 짓만 배워선지, 앞을 가로막고 브레이크를 밟았다 뗐다 양아치 운전을 하는 놈, 옆에 붙으면 차 머리를 내 자동차 옆구리에 계속 툭툭 갖다대는 놈, 낙사 지점에서 갑자기 방향을 꺾고 인간을 추락시켜버리는 놈도 있는 등 인간 뺨칠 악랄함을 보여준다.

드라이바타가 인간 플레이어의 행동을 캡처한다는 특성 덕분에, 이미 고인이 된 누군가와도 경주를 하는게 가능하다. 1시간 넘도록 죽은 여자친구의 드라이바타를 찾아다닌 끝에, 여자친구의 드라이바타를 만나게 됐다는 사연이 있다.# 죽은 친구의 드라이바타를 만나면 항상 1대1 경주 신청을 걸어 고인이 된 친구와 함께 논다는 사람의 사연도 있다.#

킬러 인스팅트(2013)에는 '그림자 AI(Shadow AI)'라는 이름의, 사례 기반 추론으로 플레이어의 행동을 학습하는 격투 게임판 드라이바타가 있다.

[1] 여담으로 마이크로소프트 리서치 케임브리지가 만들어낸 다른 기술적 역작으로 Kinect가 있다.[2] 이상 급제동 현상을 고치기 위해 브레이크를 밟아야 하는 순간에도 브레이크를 밟지 말라고 무시 명령을 도입했다.[3] 아이러니하게도 이 기술은 인간들의 필승 전략이다. 포르자 호라이즌 주간 과제를 깨려고 인간 vs 고난도 드라이바타전을 할 때 인간 팀은 차량 튜닝도 안 해 온 초보를 포함해 다들 실력이 들쭉날쭉하므로, 가속력 빠른 자동차를 탄 숙련자가 선두의 드라이바타들을 첫 번째 코너에서 꼬라박고 낙오시켜줘야 인간 팀이 이길 수 있다. 순수 사람들만 모이는 매치에서 다른 사람에게 당하면 혈압 오르는 기술 중 하나.[4] 클럽에 가입하고 난 뒤로 갑자기 드라이바타들의 운전이 더러워졌다면, 그건 내 클럽 사람들이 운전을 양아치같이 해서 드라이바타들이 따라보고 배운 것도 어느 정도 있긴 하지만 AI 제어 계층이 내 클럽 사람들의 드라이바타 공격성 억제를 완화해줘서가 가장 직접적인 이유다.[5] 이러한 기법은 눈속임이라 게이머에게 쉽게 안 들키게 구현해야 한다. 사이버펑크 2077이 고무줄 묶기를 미니맵 범위 내에 순간이동해서 따라오는게 다 보이고 너무 뒤쳐지면 대놓고 가만히 있는등 엉터리로 구현했다가 출시 초에 엄청난 놀림거리가 되었다.


파일:CC-white.svg 이 문서의 내용 중 전체 또는 일부는
문서의 r579 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}}에서 가져왔습니다. 이전 역사 보러 가기
파일:CC-white.svg 이 문서의 내용 중 전체 또는 일부는 다른 문서에서 가져왔습니다.
[ 펼치기 · 접기 ]
문서의 r579 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)
문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)




파일:크리에이티브 커먼즈 라이선스__CC.png 이 문서의 내용 중 전체 또는 일부는 2023-10-23 22:14:50에 나무위키 Drivatar 문서에서 가져왔습니다.