게임에서 차량 프로그래밍하기

13 hours ago 2

  • 게임에서 차량 구현은 진짜 물리 엔진 대신 플레이 경험을 중시함
  • 레이싱 및 시뮬레이터 게임마다 차량 조작 방식과 몰입감에 차이가 큼
  • 차량 시뮬레이션은 엔진/기어박스, 타이어, 섀시의 세 가지 구성 요소로 구성됨
  • 타이어 모델링과 슬립(스립) 개념이 현실적인 주행감을 구현하는 핵심임
  • 개발자는 게임 컨셉에 맞는 단순화 및 추상화 수준을 스스로 정의해야 함

차량이 게임에서 특별한 이유

게임 내 차량은 다양한 장르에서 중요한 경험적 요소로 활용됨
비현실적인 조작과 현실적인 운전 시뮬레이션 모두 “운전하는 느낌”을 전달함
예를 들어 Mario Kart와 Assetto Corsa는 근본적으로 다른 경험을 지향하지만, 모두 차량 프로그래밍의 본질은 동일함
실제의 물리 법칙을 정확히 구현하기보다, 유저가 기대하는 운전의 감각을 어떻게 전달할지에 중점을 둠
개발자의 목표는 ‘정확한 시뮬레이션’보다 의도한 경험을 설계하는 것임

초기 시도와 교훈: AV Racer

AV Racer 개발 초기에는 단순 뉴턴 역학 모델로 차량을 움직였으나, 실제 차량 같은 감각을 주지 못했음
회전, 드리프트, 각속도 등 다양한 하드코딩과 파라미터 튜닝을 반복
경험적인 “슬라이드” 감각을 연출했지만, 극단 상황이나 실제 운전자의 기대에는 미치지 못함
실제 차량 물리와 운전자 경험 이해가 부족하면, 근본적인 한계에 봉착함
결국 제대로 구현하기 위해선 현실의 차량 역학 원리를 연구하게 됨

게임용 차량 시뮬레이션의 구조

게임 내 차량은 엔진(및 기어박스), 휠/타이어, 섀시라는 세 가지 개념적 요소로 나눌 수 있음

엔진(기어박스 포함)

  • 스로틀, 기어 변경 등 입력을 받음
  • 토크와 RPM 산출, 기어비에 따라 변환
  • 바퀴와 상호 피드백 작용(즉, 엔진-바퀴 간 양방향 동기화)

타이어(휠 포함)

  • 엔진토크, 브레이크, 스티어링, 중량, 노면 마찰 등 다양한 입력 수용
  • 타이어-노면 접촉점에서 모든 힘이 발생
  • 타이어 모델링(예: Pacejka Magic Formula)로 현실적인 힘 구현

섀시

  • 물리 엔진의 단단한 바디 역할
  • 타이어의 힘, 공기 저항, 중력, 충돌 등 외부 영향에 반응
  • 차량 전체 움직임 결정 및 타이어 하중 변동에 영향
구성 요소 주요 입력 주요 출력
엔진/기어박스 스로틀, 변속기 입력, 바퀴 속도 회전 토크, RPM
타이어 엔진 토크, 브레이크, 스티어링, 하중, 마찰 섀시 힘, 엔진-휠 동기화
섀시 타이어 힘, 에어로다이내믹스 결과 휠 하중, 전체 이동

실제 차량처럼 모든 세부 물리를 100% 정확히 구현하는 것은 비현실적
실제 자동차 회사의 연구소가 아닌 한, 대부분의 게임 및 시뮬레이션은 블랙박스 모델과 공식, 단순화된 접근법을 사용함
따라서 핵심은 무엇을 생략하고 무엇을 강조할지 설계자가 결정하는 것임

엔진 및 드라이브트레인 설계

엔진(토크 산출 핵심)

  • 실제로는 매우 복잡하지만, 코드상으로는 입력(RPM, 스로틀) → 토크 출력의 단순한 블랙박스 모델로 구성 가능
  • 토크/출력 곡선은 수치나 그래프로 파라미터화하여, 다양한 성향의 엔진을 시뮬레이션 가능
  • 예시: Desmos 등으로 곡선 직접 설계, “엔진의 성격”을 조정할 수 있음

기어박스

  • 기어비 테이블을 사용하여 간단하게 구현
  • 기어 변속이 차량의 가속 특성, 최고 속도 등을 결정
  • 단순하지만 플레이 경험에 큰 영향을 미침
기어 비율
R -2.92
N 0
1 2.50
2 1.61
3 1.10
4 0.81
5 0.68

엔진 & 휠 RPM 동기화

  • 엔진 RPM구동 휠 각속도는 상호 연동
  • 두 상태 변수의 차이를 기반으로 미분방정식으로 수치적으로 계산
  • “목표치까지 쫓아가는” 형태로 프레임마다 점진적 일치 구현

이를 통해 아케이드형이나 시뮬레이터형 모두 확장 가능
플레이어가 엔진 각종 파라미터(예: 캠 프로필, 터보 등)를 조정할 때, 사운드나 출력 곡선 변화와 연결
실제 그대로의 엔진 운동을 흉내내지 않아도, 원인-결과의 명확성을 전달하며 상호작용 경험 강화

타이어 모델

타이어의 역할

  • 차량이 실제 도로와 접촉하는 유일한 부분
  • 가속, 제동, 코너링 등 모든 힘은 타이어 접지면에서 생성
  • 탄성 변형과 마찰 특성을 중심으로 힘 생성

롱기튜드(가속/제동) 힘 & 슬립 비(Slip Ratio)

  • 타이어는 정지 마찰 상태에서 최대 접지력 제공, 한계를 넘어서면 동적(슬립) 마찰로 전환
  • 슬립 비는 바퀴 회전 속도(구동/제동)와 지상 이동 속도 차이로 산정
    • 슬립 비 = (휠 각속도 - 자유 회전 각속도) / 자유 회전 각속도
  • 일반적으로 가속시 바퀴가 지상보다 빠를 때, 제동시 느릴 때 슬립이 발생
  • 슬립 비에 따른 접지력 변화는 그래프로 곡선을 그릴 수 있음
  • 특정 구간까지는 접지력 증가하다가 극대점 이후 접지력 급감

슬립 비를 반영한 힘 산출 공식 (Pacejka Magic Formula 등)

  • 슬립 비를 입력으로 받아 복잡한 곡선(파라미터화된 사인/아크탄젠트) 산출 공식 활용
  • 타이어별로 개별 계산 필요

레터럴(코너링) 힘 & 슬립 각(Slip Angle)

  • 코너링 중에는 접지면이 변형되면서 슬립 각이 발생
    • 슬립 각 = 타이어 실제 진행 방향과 바퀴가 가리키는 방향 간 각도 차이
  • 슬립 각이 커질수록 점차 더 많은 접지력이 발생했다가, 한계점을 넘으면 미끄러짐
  • 슬립 각-접지력 관계 역시 특유의 곡선을 그림
  • 하중, 마찰, 동적 변화 등 다수의 파라미터가 영향을 미침

언더스티어/오버스티어 등 현상

  • 언더스티어: 전륜 슬립 각이 후륜보다 클 때, 차가 의도보다 덜 돎
  • 오버스티어: 후륜 슬립 각이 더 커질 때, 차의 뒷부분이 바깥으로 미끄러짐
  • 올바른 타이어 모델만 있으면, 이러한 핸들링 특성은 자연적으로 발생

롱기튜드/레터럴 힘의 상호 제한 (Friction Circle)

  • 타이어가 가속/제동 및 코너링 두 방향에 동시에 힘을 사용할 때, 각 방향의 최대치가 서로 영향을 미침
  • 마찰원(circle/ellipse) : 두 힘 벡터의 합은 한도를 넘지 못함
    • (F_{x}^2 + F_{y}^2 \le (\mu F_{z})^2)
  • 예: 급브레이크+급조향 시 제어력을 잃기 쉬움
  • 현실의 타이어는 곡선/비선형이므로, 실제 데이터에 맞춰 파라미터 보정 필요

코드 내력

  • 각 타이어에서 롱기튜드/레터럴 힘을 개별 산출
  • 두 벡터를 합쳐 가상의 마찰원 내에 정규화(scaling)
  • 동적으로 파라미터를 조정하면, 고도의 핸들링 변화도 쉽게 실험 가능

전체 차량 물리엔진 통합

  • 타이어 힘 + 서스펜션 출력 + 외부 영향(중력, 드래그 등)을 섀시에 집계
  • 뉴턴의 운동 법칙에 의해 매 프레임 가속/속도 갱신

확장 가능한 추가 요소

  • 서스펜션 기하학: 캠버, 캐스터 등
  • 고급 타이어 역학: 온도, 마모, 팽창, 하중 변화 등
  • 에어로다이내믹스: 다운포스, 드래그, 자동 조절 스포일러
  • 구동계/차동장치, ABS, ESP, 조향 제한
  • 필요시 여러 책 참고: Race Car Vehicle Dynamics(Milliken), Mechanics of Pneumatic Tires(S.K. Clark)

결론

이상의 모델만으로도 실제 차량과 유사하게 동작하는 게임용 차량의 근간을 구현할 수 있음
추가적인 디테일은 개발 목표와 필요에 따라 확장 가능
핵심은, 현실에서 얻은 기본 원리의 단순화/추상화와 플레이 경험 중심의 설계 철학
궁금한 점이나 의견/수정 제안은 연락 바람

Read Entire Article