prev frame
cur frame
Pawn · Movement System
Pawn Movement
Job System 기반 이동 연산 — Broad Phase 스케줄러 · 솔버 · 컨슈머 파이프라인
scroll

Pawn Movement

Pawn 엔티티의 이동 로직이 정의된 방식과 구조를 기술합니다. 월드 데이터 샘플링부터 충돌·미끄러짐 계산, 결과 적용까지의 전체 파이프라인을 정의합니다.

01
스케줄러
Broad Phase
쌍 수집
02
솔버
충돌·미끄러짐
연산
03
컨슈머
결과 적용
이벤트 발송

Job System

이동 가능 영역은 임의 개수의 삼각형으로 정의되어 연산 부하가 높습니다. 메인 쓰레드 대신 Job System을 사용하여 비동기·병렬로 처리합니다.

실행 쓰레드
Job System
메인 쓰레드 부하 회피. 비동기 병렬 처리.
컴파일 타겟
Burst 호환
mathematics 패키지 최대 활용. 선형 기하 연산 최적화.
월드 데이터 구조
Native Volume Octree
Pawn은 Broad Phase에서 IHasVolume으로 필터링 가능해야 합니다.

접근 제한

Job System 호환성과 스케줄러 예측 가능성을 보장하기 위해, Pawn의 시스템 프로퍼티는 Pawn 자체가 아닌 시스템 내부에 Struct of Arrays 형식으로 관리됩니다.

모든 프로퍼티는 Main Thread와 Worker Thread 각각에 대해 명시적인 접근 제한이 정의됩니다.

쓰레드 Read Write 비고
Main Thread 허용 직접 불가 Write가 필요한 경우 반드시 header에 명시된 함수를 통해 요청
Worker Thread 허용 허용 각 Job 내에서 읽기·쓰기 타이밍이 명시적으로 제한됨

처리 단계

월드 플레이 데이터 샘플링은 모든 Pawn에서 공통으로 수행됩니다. Pawn-to-Pawn, Pawn-to-Block 충돌 및 미끄러짐 계산은 단계를 분리하여 처리합니다.

── AABB sweep ──
cur
Broad Phase 입력
이전 프레임 → 현재 프레임 shape sweep AABB
역할
후보 쌍 1차 필터링 (Volume 교차 여부)
스케줄러
스케줄러
Scheduler — Broad Phase
실제 솔버가 동작할 쌍을 수집하는 Broad Phase 단계입니다. Pawn의 shape 종류에 따라 쌍을 분리하여 수집합니다.
솔버
솔버
Solver — Narrow Phase
수집된 쌍에 대해 실제 필요한 연산을 최대 해상도로 실행합니다. 충돌 판정 및 미끄러짐 계산이 이 단계에서 수행됩니다.
컨슈머
컨슈머
Consumer — Result Application
솔버의 연산 결과를 응용 레이어로 전달합니다. 이벤트 발송, 트랜스폼 업데이트 등 외부 시스템과의 연계를 담당합니다.