CLoSD: Closing the Loop between Simulation and Diffusion for Multi-Task Character Control
Guy Tevet, Sigal Raab, Setareh Cohan, Daniele Reda, Zhengyi Luo, Xue Bin Peng, Amit H. Bermano, Michiel van de Panne
Tel-Aviv University | University of British Columbia | Carnegie Mellon University | Simon Fraser University | NVIDIA
Introduction
Motion Diffusion과 Physics-Based Control의 상보적 강점
Motion diffusion 모델(MDM, MotionDiffuse 등)과 RL 기반 physics-based control(AMP, SuperPADL 등)은 인간 동작 생성에서 각각 상보적인 강점을 갖고 있습니다.
Motion diffusion 모델은 텍스트와 같은 직관적인 인터페이스로 다양한 동작을 생성할 수 있으며, supervised learning 기반이므로 대규모 데이터셋으로의 확장이 용이합니다. 하지만 물리 시뮬레이션이 아니기 때문에 물리 법칙을 위반하는 아티팩트(발이 바닥을 뚫는 penetration, 발이 미끄러지는 sliding, 캐릭터가 공중에 뜨는 floating)가 발생할 수 있으며, 물체와의 물리적 상호작용(접촉, 충돌 반응)이 불가능합니다.
반면 RL 기반 physics-based controller는 물리 엔진 안에서 동작하므로 물리적으로 타당한 동작과 환경 상호작용을 제공합니다. 발이 바닥을 뚫을 수 없고, 물체를 밀면 물리적으로 반응합니다. 하지만 개별 task마다 reward function을 사람이 설계해야 하며("의자에 앉으면 +1점") 이 reward engineering이 복잡하고 노동 집약적입니다. 또한 RL은 대규모 motion 데이터셋으로의 확장이 어렵습니다.
Kinematic text2motion 모델과 tracking controller를 단순히 조합하는 기존 방법도 있지만, offline 생성 방식이라 물리 환경의 피드백을 반영하지 못합니다. 예를 들어 소파에 앉는 동작을 kinematic 모델이 미리 계획했는데, 실제 물리 시뮬레이션에서 캐릭터가 약간 다른 위치에 도달했다면, 원래 계획을 수정할 수 없어 동작이 어긋나게 됩니다.

CLoSD의 핵심 아이디어
본 논문의 핵심 아이디어는 motion diffusion 모델을 실시간 범용 planner로, RL tracking controller를 물리적 executor로 사용하고, 둘 사이에 closed-loop feedback을 형성하는 것입니다. Diffusion 모델이 "어떻게 움직일지" 계획하고, tracking controller가 물리 시뮬레이션에서 실행한 뒤, 실행 결과를 다시 diffusion 모델에 피드백하여 현재 실제 상태에 기반한 다음 계획을 생성합니다.
이를 통해 CLoSD는 단일 시스템으로 목표 위치 도달, 물체 치기(손 또는 발), 소파에 앉기, 일어나기 등의 다양한 task를 수행합니다. 이 각각의 task는 기존에 개별 policy와 상당한 reward engineering을 필요로 했던 것들입니다. CLoSD의 핵심 구성 요소인 Diffusion Planner(DiP)는 40프레임 계획을 3500fps로 생성하여 175배 실시간 속도를 달성합니다.
Preliminaries
두 가지 Motion Representation
CLoSD에서는 DiP와 tracking controller가 서로 다른 좌표 체계를 사용합니다.
HumanML3D 표현 (DiP가 사용) — 상대 좌표: 각 프레임이 이전 프레임 기준으로 표현됩니다. "이번 프레임에서 골반이 오른쪽으로 3cm 이동하고 5도 회전했다" 같은 변화량을 기록합니다. 구체적으로 각 프레임은 root 각속도, root 선속도(XZ 평면), root 높이, 관절 위치/회전/속도(root 기준), 발 접촉 여부를 포함합니다. 상대 표현을 사용하면 캐릭터가 세계 어느 위치에 있든 같은 "걷기" 동작이 같은 값으로 표현되므로, diffusion model 학습에 유리합니다.
PHC 표현 (Tracking controller가 사용) — 전역 좌표: 각 프레임이 세계(world) 좌표계 기준의 절대 위치로 표현됩니다. 물리 시뮬레이션은 전역 좌표에서 작동하기 때문입니다. 중력은 항상 아래 방향이고, 바닥과 물체는 특정 전역 좌표에 있으므로, tracker가 참조 포즈와 현재 포즈의 차이를 계산하려면 둘 다 같은 전역 좌표에 있어야 합니다.
두 표현 사이의 변환을 위해 \(R2G\)(relative-to-global)와 \(G2R\)(global-to-relative) 함수를 사용합니다. \(R2G\)는 상대 변화량을 누적하여 절대 위치로 변환하고, \(G2R\)은 절대 위치 사이의 차이를 계산하여 상대 변화량으로 변환합니다. 회전은 first-order inverse kinematics로, 발 접촉은 높이 휴리스틱(발이 바닥에 가까우면 접촉)으로 변환됩니다.
Denoising Diffusion의 기본 원리
CLoSD의 DiP는 DDPM(Denoising Diffusion Probabilistic Model) 프레임워크에 기반합니다. Diffusion model의 핵심 아이디어는, 깨끗한 데이터에 점진적으로 noise를 추가하는 forward process를 정의하고, 이를 역으로 수행하는 reverse process를 neural network로 학습하는 것입니다.
Forward process (noise 추가): 깨끗한 동작 데이터 \(x_0\)에 T번의 step을 거쳐 점진적으로 noise를 추가합니다.
\[q(x_t | x_{t-1}) = \mathcal{N}(\sqrt{\alpha_t} x_{t-1}, (1-\alpha_t)I)\]
이 식은 "이전 값 \(x_{t-1}\)을 \(\sqrt{\alpha_t}\)배로 축소하고(신호 감소), \((1-\alpha_t)\) 크기의 가우시안 noise를 추가하는" 규칙입니다. \(\alpha_t \in (0, 1)\)는 noise schedule이라 불리는 미리 정해진 상수로, step이 진행될수록 noise 비중이 커지고 원래 신호의 비중이 줄어듭니다. 충분한 step을 거치면 \(x_T\)는 원래 데이터의 정보가 거의 사라진 순수 가우시안 noise에 근사하게 됩니다.
Reverse process (noise 제거 = 생성): 순수 noise \(x_T\)에서 시작하여 neural network가 점진적으로 noise를 제거합니다. 원래 DDPM(Ho et al. 2020)에서는 네트워크가 noise \(\epsilon_t\)를 예측하도록 학습하지만, DiP는 MDM(Tevet et al. 2023)을 따라 깨끗한 동작 \(\hat{x}_0\)를 직접 예측합니다. 두 방식은 수학적으로 동치이며, 같은 네트워크 구조에서 학습 목표(loss)만 다르게 설정한 것입니다. Motion 데이터에서는 \(\hat{x}_0\) 직접 예측이 더 좋은 결과를 내며, 무엇보다 \(\hat{x}_0\)를 직접 얻을 수 있으므로 매 denoising step에서 target loss를 바로 계산할 수 있다는 실용적 장점이 있습니다.
학습에 사용되는 simple loss는 다음과 같습니다.
\[\mathcal{L}_{\text{simple}} = \mathbb{E}_{x_0 \sim p(x_0|c), t \sim [1,T]} [\| x_0 - \hat{x}_0 \|^2_2]\]
데이터셋에서 조건 \(c\)(텍스트)에 해당하는 깨끗한 동작 \(x_0\)와 랜덤 timestep \(t\)를 샘플링하고, \(x_0\)에 \(t\) 수준의 noise를 추가하여 \(x_t\)를 만든 뒤, 네트워크가 \(x_t\)로부터 \(\hat{x}_0\)를 예측합니다. 예측과 ground truth 사이의 L2 거리 제곱이 loss가 됩니다. 다양한 noise level(\(t\))에서 원본을 복원하는 능력을 반복적으로 학습하는 것입니다.
Diffusion Planner (DiP)
기존 MDM의 한계와 DiP의 설계
기존 MDM은 CLoSD의 planner로 사용하기에 두 가지 한계가 있습니다. 첫째, MDM은 전체 동작을 offline으로 한 번에 생성하므로 느리고, 물리 시뮬레이션과의 실시간 상호작용에 부적합합니다. 둘째, MDM의 학습 데이터(HumanML3D)에는 환경에 대한 정보가 없어 "소파가 어디에 있다"는 공간적 인식이 불가능합니다.
이를 극복하기 위해 설계된 DiP는 MDM과 세 가지 점에서 다릅니다. 첫째, autoregressive 구조를 채택하여 이전 동작을 prefix로 받고 이어지는 동작만 생성합니다. 이를 통해 "지금 캐릭터가 어떤 상태인지"를 인식합니다. 둘째, 텍스트 외에 관절 목표 좌표를 추가 조건으로 받아 환경의 특정 물리적 위치에 grounding합니다. 셋째, diffusion step을 50에서 10으로 줄여 175배 실시간 속도를 달성합니다. Autoregressive 구조에서는 prefix가 이미 강한 조건으로 작용하므로 적은 step으로도 충분한 품질이 나옵니다.
DiP의 입력과 내부 동작
DiP는 transformer decoder(8층, 512차원, 4 attention head) 기반의 autoregressive diffusion 모델입니다. 한 번의 denoising step에서 DiP가 받는 입력은 총 4가지입니다.
(1) 깨끗한 prefix motion \(\mathbf{x}^{\text{prefix}}\) (20프레임): 이전에 실행된 동작의 마지막 20프레임으로, "지금 캐릭터가 어떤 상태인지"를 알려줍니다.
(2) noisy prediction \(\mathbf{x}^{\text{pred}}_t\) (40프레임): denoising할 향후 동작 예측으로, 맨 처음(\(t = T\))에는 완전한 랜덤 noise이고 step이 진행될수록 점점 깨끗해집니다.
(3) 텍스트 프롬프트: DistilBERT(frozen)로 인코딩됩니다.
(4) 목표 위치 + validity signal: 특정 관절의 목표 좌표와 해당 관절을 조건으로 사용할지 여부입니다.
내부 동작 과정은 다음과 같습니다. 먼저 prefix 20프레임과 noisy prediction 40프레임을 이어붙여 총 60프레임의 시퀀스를 만들고, positional embedding을 더해 각 프레임의 위치 정보를 알려줍니다. 각 프레임이 하나의 token이 됩니다.
조건은 별도로 구성됩니다. 텍스트는 DistilBERT를 거쳐 토큰 시퀀스 \(C_{\text{text}} \in \mathbb{R}^{N_{\text{tokens}} \times d}\)가 되고, diffusion step \(t\)와 target 좌표는 각각의 shallow FC network를 거쳐 \(C_t\)와 \(C_{\text{target}}\)가 됩니다. \(C_t\)와 \(C_{\text{target}}\)를 element-wise로 더한 뒤 \(C_{\text{text}}\)와 concatenate하여 최종 조건 시퀀스 \((C_t + C_{\text{target}}, C_{\text{text}}) \in \mathbb{R}^{(N_{\text{tokens}}+1) \times d}\)를 구성합니다.
60개 token이 transformer decoder에 입력되면, 각 층에서 self-attention(프레임끼리 시간적 관계 학습)과 cross-attention(조건 시퀀스를 참조하여 텍스트와 목표에 맞는 동작 생성)이 수행됩니다. Transformer 출력에서 앞 20개(prefix 해당)는 버리고 뒤 40개만 사용하여 깨끗한 동작 예측 \(\hat{\mathbf{x}}^{\text{pred}}_0\)를 얻습니다.

Denoising 반복 과정
위의 transformer forward pass가 한 번의 denoising step이며, 이를 10번 반복합니다.
Step T(첫 번째): prefix(깨끗) + \(\mathbf{x}^{\text{pred}}_T\)(완전 noise) → transformer → \(\hat{\mathbf{x}}^{\text{pred}}_0\) 예측 → 이 예측에 다시 noise를 추가하여 \(\mathbf{x}^{\text{pred}}_{T-1}\) 생성.
Step T-1: prefix(깨끗) + \(\mathbf{x}^{\text{pred}}_{T-1}\)(덜 noisy) → 같은 transformer → 더 정확한 \(\hat{\mathbf{x}}^{\text{pred}}_0\) 예측 → 다시 noise 추가하여 \(\mathbf{x}^{\text{pred}}_{T-2}\) 생성.
이 과정을 반복하며, Step 1(마지막)에서는 noise를 추가하지 않고 \(\hat{\mathbf{x}}^{\text{pred}}_0\)를 최종 동작 계획으로 사용합니다.
예측한 뒤 다시 noise를 추가하는 이유는, 초기 step에서의 예측이 부정확하기 때문입니다. 완전 noise에서 한 번에 정확한 동작을 맞추는 것은 어려우므로, 대략적인 예측에 적절한 수준의 noise를 섞어서 다음 step이 수정할 여지를 줍니다. Noise의 양은 noise schedule \(\bar{\alpha}_t\)에 의해 결정되며, step이 진행될수록 줄어들어 최종 결과에 가까워집니다. 매 step에서 동일한 transformer를 사용하되, diffusion step \(t\)가 조건으로 함께 입력되므로 transformer는 현재 noise level에 맞는 처리를 수행합니다.
Adaptive Target Conditioning
각 task마다 목표를 지정해야 하는 관절이 다릅니다. "앉기"는 골반 위치, "펀치"는 손 위치, "킥"은 발 위치가 목표가 됩니다. 이를 유연하게 처리하기 위해 DiP는 각 end-effector 관절(양손, 양발)과 골반에 대해 목표 좌표 \(c_j \in \mathbb{R}^3\)와 validity signal \(v_j\)(해당 관절을 현재 조건으로 사용할지 나타내는 boolean)를 함께 입력받습니다.
예를 들어 "오른손으로 펀치" task에서는 오른손의 \(v_j = 1\)이고 나머지 관절은 \(v_j = 0\)입니다. 이는 나머지 관절의 목표 위치를 명시적으로 지정하지 않아도 DiP가 텍스트 조건에 맞춰 자연스럽게 나머지 관절의 동작을 생성한다는 뜻입니다. 모든 관절에 항상 목표를 지정하면 오히려 동작의 자연스러움을 해칠 수 있습니다.
전체 target condition은 모든 관절의 목표 좌표, validity signal, heading 각도 \(c_\theta\), heading validity \(v_\theta\)를 concatenate한 것입니다: \((\{c_j\}_{j \in J}, \{v_j\}_{j \in J}, c_\theta, v_\theta)\). Task가 바뀌면 validity signal만 변경하면 되므로, 하나의 모델로 다양한 task를 처리할 수 있습니다.
Target Loss
DiP가 \(\hat{x}_0\)를 직접 예측하기 때문에, 매 denoising step에서 예측된 동작의 마지막 프레임이 목표에 도달했는지를 geometric loss로 바로 계산할 수 있습니다.
\[\mathcal{L}_{\text{target}} = \sum_{j \in J} v_j \| R2G(\hat{x}_0)_j[N_g] - c_j \|^2_2 + v_\theta \| R2G(\hat{x}_0)_\theta[N_g] \ominus c_\theta \|^2_2\]
왼쪽 항은 관절 위치에 대한 loss입니다. \(R2G(\hat{x}_0)_j[N_g]\)는 예측된 동작을 전역 좌표로 변환한 뒤 마지막 프레임(\(N_g\)번째)에서의 j번 관절 위치이며, \(c_j\)는 해당 관절의 목표 위치입니다. \(v_j = 0\)인 관절은 항 전체가 0이 되어 loss에 영향을 주지 않습니다. \(R2G\) 변환이 필요한 이유는, DiP가 사용하는 HumanML3D 표현은 상대 좌표인데 목표 좌표 \(c_j\)는 전역 좌표이기 때문입니다.
오른쪽 항은 heading(몸의 방향) 각도에 대한 loss입니다. \(\ominus\)는 각도 차이 연산으로, 일반 뺄셈 대신 사용합니다. 각도는 0도와 360도가 같은 값이라는 원형(circular) 특성이 있어, 일반 뺄셈으로는 350도와 10도의 차이가 340도로 계산되지만, 실제로는 20도만 돌면 됩니다. \(\ominus\)는 \(\text{atan2}(\sin(\theta_1 - \theta_2), \cos(\theta_1 - \theta_2))\)로 구현되어 항상 \(-\pi\)에서 \(\pi\) 사이의 실제 최소 회전량을 반환합니다.
Target loss는 마지막 프레임만 비교합니다. 중간 과정의 관절 위치를 프레임별로 지정하는 것은 불필요하고 동작을 부자연스럽게 만들 수 있으므로, 중간 과정은 \(\mathcal{L}_{\text{simple}}\)이 "자연스러운 동작 분포"에 맞추도록 담당하고 target loss는 최종 도달만 보장하는 역할 분담입니다. 전체 학습 loss는 \(\mathcal{L} = \mathcal{L}_{\text{simple}} + \lambda_{\text{target}} \mathcal{L}_{\text{target}}\)입니다.
학습 과정
DiP는 HumanML3D 데이터셋의 (동작, 텍스트) 쌍으로 학습됩니다. 매 iteration마다: (1) 랜덤으로 (동작, 텍스트) 쌍과 timestep \(t\)를 샘플링합니다. (2) 동작을 60프레임으로 랜덤 crop하여 앞 20프레임을 prefix, 뒤 40프레임을 prediction ground truth로 분리합니다. (3) Ground truth prediction에 \(t\) 수준의 noise를 추가하여 noisy prediction을 만듭니다. (4) Ground truth의 마지막 프레임에서 랜덤 관절을 선택하여 그 위치를 target으로 설정합니다. 매번 다른 관절을 선택하므로 다양한 관절에 대한 target conditioning을 자연스럽게 학습합니다. (5) DiP가 \(\hat{\mathbf{x}}^{\text{pred}}_0\)를 예측하고, \(\mathcal{L}_{\text{simple}} + \lambda_{\text{target}} \mathcal{L}_{\text{target}}\)로 가중치를 업데이트합니다.
학습은 단일 RTX 3090에서 600K diffusion step으로 수행되며, 200K checkpoint가 최적으로 사용되었습니다.
Tracking Controller
PHC 기반 범용 Tracker
DiP가 생성한 kinematic 동작 계획을 물리 시뮬레이션에서 실행하기 위해, PHC(Perpetual Humanoid Control, Luo et al. 2023)를 tracking controller로 사용합니다. PHC는 AMASS 데이터셋 전체에서 99% 성공률로 motion tracking이 가능한 범용 imitator입니다.
매 시뮬레이션 프레임 \(n\)에서 PHC는 현재 캐릭터 상태 \(\mathbf{x}^{\text{sim}}[n]\)과 참조 포즈 \(\mathbf{x}^{\text{ref}}[n]\)을 관찰합니다. 관찰의 구체적 형태는 \(s[n] = (\mathbf{x}^{\text{ref}}[n] - \mathbf{x}^{\text{sim}}[n], \mathbf{x}^{\text{ref}}[n])\)으로, 참조와 현재의 차이 및 참조 자체를 포함합니다. PHC는 이 관찰을 기반으로 각 관절의 PD target(목표 각도)을 출력합니다.
PHC의 출력은 토크가 아니라 목표 각도라는 점이 중요합니다. 실제 토크는 물리 시뮬레이션 환경 내부의 PD controller가 계산합니다. PD controller는 목표 각도와 현재 각도의 차이에 비례하는 힘(\(K_p\) 항)과, 현재 각속도에 비례하는 감쇠력(\(K_d\) 항)을 계산하여 토크를 생성합니다.
PHC가 토크를 직접 출력하지 않고 PD target을 출력하는 이유는, 토크를 직접 제어하는 것이 neural network에게 훨씬 어렵기 때문입니다. "무릎에 3.7N·m의 토크를 가해라"보다 "무릎을 40도로 보내라"가 학습하기 쉬우며, 세밀한 힘 계산은 PD controller라는 검증된 수학 공식에 맡기는 역할 분담입니다.

Fine-tuning의 필요성
PHC는 MoCap 데이터를 tracking하도록 학습되었지만, CLoSD에서는 두 가지가 다릅니다. 첫째, DiP가 생성하는 동작은 MoCap이 아니라 diffusion model의 출력이므로 물리적으로 부정확한 부분(floating, sliding 등)이 있을 수 있습니다. 둘째, PHC는 물체가 없는 빈 공간에서 학습되었으므로 물체와의 접촉 상황에서의 제어를 경험한 적이 없습니다.
이를 해결하기 위해 DiP를 loop에 포함시킨 상태로 PPO를 사용하여 PHC를 fine-tuning합니다. 핵심적으로 별도의 reward engineering이 필요하지 않습니다. 원래 PHC의 tracking reward(참조와 실행 결과의 거리 기반 보상 + AMP adversarial reward + 에너지 penalty)를 그대로 사용하되, tracking 대상이 DiP의 출력(물체 상호작용 포함)으로 바뀔 뿐입니다. DiP와 tracking controller가 모두 범용 구성 요소이므로 여러 task를 동시에 fine-tuning할 수 있습니다. 학습 시 각 에피소드마다 랜덤으로 task를 선택하고 해당 물체, 텍스트, 목표 위치를 설정합니다.
PHC의 사전학습은 AMASS 데이터셋으로 62K PPO epoch, CLoSD용 fine-tuning은 4K epoch이 추가로 소요됩니다. 학습은 Isaac Gym 시뮬레이터에서 3072개 병렬 환경을 사용하여 단일 A100 GPU에서 수행됩니다.
Closing the Loop
Planning-Execution Loop
DiP가 생성한 동작 계획은 \(\mathbf{x}^{\text{ref}} = R2G(\mathbf{x}^{\text{pred}})\)로 전역 좌표로 변환된 후 tracking controller에 전달됩니다. Tracker는 이 40프레임을 한 프레임씩 실행합니다. 매 프레임 \(n\)에서 tracker가 \(\mathbf{x}^{\text{ref}}[n]\)과 \(\mathbf{x}^{\text{sim}}[n]\)을 관찰하고 PD target을 출력하면, 물리 엔진이 토크를 계산 및 적용하여 다음 상태 \(\mathbf{x}^{\text{sim}}[n+1]\)을 결정합니다.
40프레임의 실행이 완료되면, 실행 결과 \(\mathbf{x}^{\text{sim}}\)의 마지막 20프레임을 잘라서 DiP의 새로운 prefix로 사용합니다: \(\mathbf{x}^{\text{prefix}} = G2R(\mathbf{x}^{\text{sim}}[-N_p:])\). 이 prefix는 DiP가 계획했던 동작이 아니라 물리 엔진에서 실제로 실행된 결과입니다. 만약 물체와의 접촉으로 캐릭터가 예상과 다른 위치에 도달했다면, 그 상태가 그대로 prefix에 반영됩니다.

Open Loop vs Closed Loop
Open loop에서는 DiP가 자신의 이전 예측을 prefix로 사용하여 전체 동작을 offline으로 생성하고, tracker가 이 고정된 궤적을 따라갑니다. 문제는 tracker가 물리 시뮬레이션에서 참조와 벗어나면 이 gap이 누적되어 점점 커진다는 것입니다. 특히 물체 상호작용에서는 캐릭터의 실제 위치와 계획된 위치가 달라지므로 동작이 완전히 어긋납니다.
Closed loop에서는 매번 실제 실행 결과가 피드백되므로, tracker가 벗어나더라도 다음 계획이 "벗어난 현재 상태"에서 시작하여 자동으로 보정됩니다. 실험에서 소파에 앉기 task의 성공률이 open loop 19%에서 closed loop 88%로 급등하는 것이 이를 명확히 보여줍니다.
State Machine을 통한 Multi-Task 전환
CLoSD는 multi-task agent이며, 각 task는 (텍스트 프롬프트, 목표 위치) 쌍으로 정의됩니다. 이 두 입력은 실행 중에 변경할 수 있으므로, 사용자가 인터랙티브하게 제어하거나 state machine으로 자동 전환할 수 있습니다. 각 task가 완료 조건을 감지하고(앉기 = 골반이 소파 위, 치기 = 타겟이 넘어짐), 완료되면 다음 task의 텍스트와 목표를 설정합니다. DiP가 계획 부담을 전부 처리하므로 high-level planning은 이 수준의 단순함으로 충분합니다.

Object Interaction
CLoSD에는 물체 상호작용을 위한 별도의 모듈이 존재하지 않습니다. 대신 네 가지 구성 요소의 조합으로 물체 상호작용이 가능해집니다.
DiP의 target conditioning이 물체 방향으로의 동작을 계획합니다. 물체의 좌표를 target으로 입력하면 DiP가 해당 관절을 그 위치로 보내는 동작을 생성합니다. 다만 DiP가 물체의 존재를 직접 인식하는 것이 아니라, 외부(state machine 또는 사용자)가 물체 좌표를 target으로 지정해주어야 합니다.
Physics Simulator가 접촉 시 물리적 반응을 처리합니다. 캐릭터의 발이 킥복싱 백에 닿으면 물리 엔진이 충돌력을 계산하고 백이 넘어집니다. 물체의 물리적 특성(질량, 마찰, 반발 계수 등)은 시뮬레이션 환경 설정 시 사람이 미리 정의해놓는 것이며, CLoSD가 물체의 특성을 자동으로 추정하는 것은 아닙니다.
Fine-tuning이 물체 접촉 상황에서의 제어를 학습합니다. PHC는 원래 빈 공간에서만 학습되었으므로, DiP-in-the-loop fine-tuning을 통해 소파와의 접촉이나 킥복싱 백의 반발력에 대응하는 제어를 학습합니다.
Closed-loop feedback이 접촉 후 보정을 가능하게 합니다. 물체와의 상호작용으로 캐릭터가 예상과 다른 위치에 도달하면, 다음 DiP 호출에서 이 실제 상태가 반영되어 계획이 자동으로 수정됩니다.
Results

Task 성공률
CLoSD의 성공률은 goal reaching 100%, object striking 90%, sitting 88%, getting up 98%입니다. 비교 대상인 UniHSI(Xiao et al. 2024)는 contact point 거리 최소화 방식이므로 타겟을 "치는" 대신 "만지기"를 하고, "일어나기" 대신 골반을 들어올리는 동작을 수행하여 striking 2%, getting up 8%에 그칩니다. Semantic한 task 이해 없이 기하학적 목표만 추구하는 방식의 한계를 보여줍니다.

Closed Loop vs Open Loop
Open loop baseline에서는 sitting 19%, getting up 23%로 물체 상호작용 task에서 크게 실패합니다. 반면 closed loop에서는 sitting 88%, getting up 98%로 급등합니다. Goal reaching(100% vs 100%)에서는 차이가 없는데, 이는 빈 공간에서의 이동은 물체 접촉이 없으므로 re-planning의 필요성이 낮기 때문으로 보입니다.
Fine-tuning 효과
Fine-tuning 전 sitting 66% → 후 88%, getting up 53% → 후 98%로 향상됩니다. PHC가 원래 물체 상호작용을 경험하지 않았으므로, DiP와의 closed-loop fine-tuning이 이 gap을 메워줍니다. 특히 getting up에서의 향상이 큰 것은, 소파에서 일어나는 동작이 소파와의 복잡한 접촉력 관리를 요구하기 때문으로 보입니다.

Text-to-Motion 품질
HumanML3D 벤치마크에서 물리 기반 메트릭이 kinematic 모델 대비 크게 개선됩니다. MDM 대비 ground penetration 0.147mm → 0.021mm, skating 330×10⁻³mm → 1.2×10⁻³mm. R-precision(top-3)은 MDM 0.719 대비 CLoSD 0.693으로 약간 낮지만, 이는 physics-based 방법이 데이터 분포를 직접 모델링하지 않기 때문에 예상되는 trade-off입니다. 물리 기반 방법인 MoConVQ(0.614) 대비 모든 지표에서 우수합니다.

Discussion and Limitations
CLoSD는 diffusion 모델의 유연한 계획 능력과 physics-based simulation의 물리적 타당성을 closed-loop feedback으로 결합하여, reward engineering 없이 다양한 물체 상호작용 task를 수행하는 시스템을 제시하였습니다.
그러나 몇 가지 한계가 있습니다. 첫째, 현재 DiP는 목표 좌표만 입력으로 받으며 시각 정보나 높이 맵은 사용하지 않습니다. 물체의 위치는 외부에서 수동으로 지정해주어야 하며, 캐릭터가 스스로 물체를 인식하거나 장애물을 회피하는 것은 불가능합니다. 복잡한 씬(가구가 여러 개, 장애물 사이 이동 등)에서의 작동에는 scene awareness의 추가가 필요합니다.
둘째, 2초 단위의 mid/low-level planning만 수행하며 장기적 계획(long-horizon planning)은 다루지 않습니다. 셋째, 물체의 물리적 특성(질량, 마찰, 반발 등)은 시뮬레이션 환경 설정 시 사전에 정의되며, 알려지지 않은 새로운 물체에 자동으로 적응하는 능력은 없습니다. 넷째, 빠른 동작에서는 더 짧은 feedback 주기가, 느린 동작에서는 더 긴 tracking horizon이 유리할 수 있지만, 현재는 loop 주기가 40프레임으로 고정되어 있습니다.
'개인공부 > CV' 카테고리의 다른 글
| VAE (Variational autoencoder) (0) | 2026.05.18 |
|---|---|
| SuperPADL: Scaling Language-Directed Physics-Based Control with Progressive Supervised Distillation (0) | 2026.05.14 |
| AMP: Adversarial Motion Priors for Stylized Physics-Based CharacterControl (0) | 2026.04.15 |
| PointNet++ 논문 정리 (0) | 2024.11.10 |