Digital Twin Layers

 

실시간 시뮬레이션에서 가장 먼저 흔들리는 축은 물리 현상보다 시간인 경우가 많습니다. 시간이 흔들리면 데이터의 선후 관계가 흐려지고, 이는 시스템 신뢰도 저하로 직결됩니다. 본 글은 화려한 월드 구성보다 오차 발산을 제어하는 시간 모델을 최우선 전제로 두고, 각 레이어를 데이터 생산 관점으로 정렬하는 설계 관점을 정리합니다.


0. 근본 전제: 오차 발산을 제어하는 시간 모델

초기 설계에서는 엔진 기본 Tick에 의존하기 쉽습니다. 그러나 프레임레이트 변동성은 누적 오차를 만드는 주요 요인이며, 재현성을 떨어뜨립니다.

  • 프레임 기반(Variable Step): 환경에 따라 불안정하며 재현성이 확보되기 어렵습니다.
  • 고정/통제된 시간 모델(Controlled Timestep): 설계 난도는 높지만 수치적 안정성을 확보할 수 있으며, 장기 실행에서도 결과 발산을 억제하는 검증 가능한 기반이 됩니다.

이 전제가 잡혀야 시뮬레이터는 시각 도구를 넘어 데이터 생산 장치로서 의미를 갖습니다.


1. 월드 레이어: 시각적 재현이 아닌 측정 가능한 좌표계

월드는 배경이 아니라 기준 레퍼런스(Reference Frame)입니다.

  • 정밀도 우선: 외부 스캔/지도 데이터를 이식할 때 좌표계와 스케일의 일관성이 무너지면 센서 데이터의 물리적 설명력이 약해집니다.
  • 표준화: 원점, 축 방향, 단위를 명확히 규정하여 월드의 퀄리티가 아니라 측정의 정밀도에 집중합니다. 이를 통해 센서 레이어가 단순 렌더링이 아닌 계측 단계로 진입할 수 있습니다.

2. 센서 레이어: 화면 출력이 아닌 측정 장치(Measurement Device)

센서는 시각적 결과물이 아니라, 정의된 규칙에 따라 데이터를 추출하는 측정기로 취급해야 합니다.

  • 모델링 분리: 카메라, LiDAR 센서를 구현할 때 렌더링 파이프라인과 물리적 측정 규칙(필터, 노이즈, 왜곡 모델)을 분리합니다.
  • 인사이트: 그럴듯한 이미지를 생성하는 것보다, 데이터 생성 조건(Time-stamp, Noise Model)이 명확해야 검증 가능성이 확보됩니다. 조건이 불명확하면 재현성과 검증 가능성이 떨어집니다.

3. 에이전트 레이어: 알고리즘과 동역학의 분리

에이전트의 움직임을 구현할 때 경로 계획(Algorithm)과 물리적 거동(Dynamics)을 분리하여 설계합니다.

  • 디버깅 가시성: 의사결정의 문제인지, 제어 및 물리 모델의 한계인지를 구분할 수 있습니다.
  • 확장성: 알고리즘을 교체하더라도 물리적 신뢰성을 유지하며 트래픽 모델로 확장할 수 있습니다.

에이전트가 의도대로 움직이더라도, 실시간 시스템에서는 연산 지연과 통신 지연이 인과율을 흔들 수 있습니다.


4. 시스템 동역학 및 지연(Latency) 관리

실시간 시뮬레이션에서 연산 자원과 정확도는 트레이드오프 관계입니다.

  • 최적화 전략: 실시간성을 유지하면서 수치해석적 정확도를 유지할 수 있는 임계점을 정의합니다.
  • 지연 모델링: 네트워크 송수신/하드웨어 제어에서 발생하는 지연이 인과율에 미치는 영향을 설계 단계에서 고려합니다. 지연이 반영되지 않으면 실제 환경 적용에서 오차가 확대될 수 있습니다.

5. 데이터 레이어: 재현 가능성과 추적성(Traceability)

데이터의 가치는 양이 아니라 수집 조건의 명확성에서 결정됩니다.

  • 메타데이터 고정: 좌표계, 타임스탬프, 노이즈 규칙, 시나리오 ID를 결합합니다.
  • 구조화: 생성 데이터가 어떤 조건에서 도출되었는지 역추적 가능해야 데이터로서의 자격을 갖습니다.

6. 송수신 레이어: 시스템 인터페이스의 경계 정의

시뮬레이터는 단독 프로그램이 아니라 시스템의 구성 요소입니다.

  • 프로토콜 정리: TCP/UDP, gRPC, MQTT, CAN 등 통신 규격과 유실/동기화 규칙을 정의합니다.
  • 경계 정의: 입력과 출력의 경계가 잡혀야 검증 가능한 시스템으로 운영할 수 있습니다.

7. 검증 레이어: 폐쇄 루프(Closed-loop)의 완성

검증이 없는 데이터 생산은 반복될수록 왜곡될 수 있습니다.

  • 재현성 테스트: 동일 조건에서 동일 결과가 도출되는지(Determinism)를 모니터링합니다.
  • 표준 준수: OpenDRIVE, OpenSCENARIO 등 표준 규격을 고려하고 시나리오 기반 엣지 케이스를 검증합니다.

요약하면, 성공적인 디지털 트윈 시뮬레이션은 엔진 성능이 아니라 오차가 발산하지 않는 시간 모델 위에서 각 레이어를 데이터 생산 관점으로 정렬하는 설계 역량에 달려 있습니다. 발산하지 않는 시스템만이 개선과 확장을 허용합니다.


디지털 트윈은 단순한 구현을 넘어, 시간·센서·데이터·검증이 맞물리는 공학적 설계 문제로 확장됩니다.
본 글의 7단계 레이어 설계(시간 모델→월드→센서→에이전트→지연→데이터→연동/검증)를 실제 프로젝트에 적용하거나, 현재 구조의 발산이나 비재현 이슈를 정리하고 싶다면 연락 주시면 됩니다. 멘토링 및 기술 자문도 열어두었습니다.

'Notes > Tech History' 카테고리의 다른 글

Windows NTSTATUS 코드 전체 표 (STATUS_ 에러 코드 정리)  (0) 2019.01.02
grep 명령어  (0) 2015.03.20
command line에서 폴더 삭제  (0) 2015.03.20
zip 명령어  (0) 2015.03.20
프로그래밍 언어 순위  (0) 2012.02.02
Determinism은 기능이 아니라
파이프라인의 합의 속에서 드러난다.
Lockstep을 통해 오차 발산을 구조로 막는다.

개요

 언리얼엔진의 물리연산은 Determinism(결정론적 동작)을 보장하고 있지 않지만 Physics Divergence(물리 연산의 오차 발산)을 막기 위해 어느정도 고려하고 있습니다. 특히 네트워크 동기화에서는 매 Frame마다 물리 연산이 조금이라도 달라지면 짧게는 수 Frame, 길게는 수 초 후의 결과가 완전히 달라지기 때문에 여러 구조적 개선을 지속적으로 진행해왔습니다. 이 글은 그러한 언리얼 엔진의 Physics를 Determinism 관점으로 오차 최소화를 어떻게 달성하였는지에 대해 정리한 글입니다.

언리얼엔진의 물리, 각 스텝 정리

[1] PrePhysics

Actor Tick (PrePhysics Group)

  • 입력 처리 / 이동 요청 확정
  • 물리에 들어가기 전 게임 상태 정리(게임 로직 기반 상태 업데이트)
  • Determinism 관점
    • Lockstep에서 "동일한 입력"이 보장되어야 하므로 이 단계가 핵심입니다.
    • 모두 같은 프레임에서 같은 입력을 받고 동일한 초기 상태를 맞춰야 Physics Divergence를 방지할 수 있습니다.

▼  (Barrier: 모두 완료 시 다음 단계)

 

[2] StartPhysics

  • Chaos Physics 엔진에 Step 시작 명령
  • Substep 준비
  • Collision BroadPhase 준비
  • Determinism 관점
    • Substep 개수, Step 간격, BroadPhase(충돌 탐색 알고리즘 순서)가 플랫폼과 스레드에 영향을 받지 않게 유지될수록 Determinism이 향상된다.
    • UE5에서 이곳의 안정성을 강화하고 있습니다.

▼

 

[3] DuringPhysics

  • Substep 단위로 Physics Integration
  • 강체를 이동시킨 후, 충돌 감지, 반응 계산을 병렬로 수행
  • Solver 수행
  • Chaos Simulation 실행
  • Determinism 관점
    • 가장 Non-deterministic한 단계로 이 단계에서는 Divergence가 아래의 세가지 이유로 발생합니다.
      • Floating point차이
      • 멀티스레드 스케줄링 차이
      • Solver 순서 차이
    • 그렇기에 Lockstep 구현 시에는 Fixed Step, Fixed Seed, 동일 Substep을 강제로 통일합니다.

▼  (Barrier: 모든 물리 연산 완료 시 다음 단계)

 

[4] EndPhysics (PostPhysics)

  • Physics 결과를 게임 월드로 반영
  • Transform Sync
  • CharacterMovement / VehicleMovement 이동 보정(RootMotion/Prediction 보정)
  • PostPhysics Tick 실행
  • Determinism 관점
    • Physics가 만든 결과가 실제 게임 로직으로 흘러 들어가는 구간으로 Lockstep에서의 값들이 모든 클라이언트에 동일해야 이후 Prediction/Interpolation이 안정적으로 작동합니다.

▼

 

[5] PostUpdate

  • During Physics의 모든 병렬 스레드를 대기하여 정리
  • Rendering 준비
  • Determinism 관점
    • 물리 결과가 렌더링 이전에 완전히 확정되는 곳입니다. 즉 Lockstep에서는 Frame Boundary가 되는 지점입니다.

Solver란?

 물리 연산 과정에서 발생한 힘, 속도, 충돌 등을 정리하여 게임에 맞게 보정하는 단계입니다. Chaos에서는 충돌 후의 위치, 속도, 반응을 반복 계산(Iterative Solve)하여 안정적인 결과로 수렴시키며, 최종적으로는 게임 월드에 반영하기 적합한 형태로 물리 상태를 정제하는 역할을 합니다.

Substep이란?

 하나의 물리 Frame을 여러개의 더 작은 시간 단위로 나누어 여러 번 시뮬레이션을 수행하는 구조입니다. 그로 인해 PhysicsThread는 고정된 시간 간격(Fixed Step)으로 더 촘촘하게 물리를 계산할 수 있습니다. 기본적으로 GameThread의 Tick 속도와 관계없이 진행됩니다. 하지만 PrePhysics와 PostPhysics가 GameThread에 종속되어 있기 때문에 시작과 끝으로 동기화 된다고 보시면 됩니다.

 Substep은 다음 목적에서 사용됩니다.

  • 빠르게 움직이는 객체의 충돌 누락 방지
  • 폭발, 충돌 등 입출력이 빠르게 변하는 상황에서 안정적인 결과 유지
  • Lockstep에서 모든 클라이언트가 동일한 수의 Substep을 수행하도록 강제하여 Determinism을 향상시킴

실무 사례

 실제로 자율주행 시뮬레이터를 개발할 때, 여러 대의 차량 에이전트가 동일한 시나리오에서 항상 같은 결과를 내는 것은 매우 중요했습니다. 특정 센서 데이터의 타이밍이 미세하게 어긋나거나, 물리 연산의 비결정성으로 인해 차량의 궤적이 1cm만 달라져도 자율주행 알고리즘의 판단은 완전히 뒤바뀔 수 있기 때문입니다.

 이를 해결하기 위해 위에서 언급한 Fixed Timestep 설정과 Lockstep 기반의 동기화 구조를 설계했고, 덕분에 하드웨어 성능이 다른 환경에서도 동일한 테스트 케이스를 재현할 수 있는 기반을 마련할 수 있었습니다.

결론

 이처럼 물리 파이프라인의 각 단계를 통일된 방식으로 처리하여 Lockstep 구조에서 발생하는 Physics Divergence를 크게 줄일 수 있습니다. 또한 UE5가 지속적으로 강화하고 있는 Substep·Solver·Tick 구조는 Determinism을 향상시키는 방향으로 설계되어 있어 언리얼엔진에 있어 네트워크 게임에서의 물리 불일치 문제를 완화하는 핵심 축이 되었습니다.