23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
실제 세계의 물리 법칙을 컴퓨터 프로그램으로 구현한 것을 말합니다. 주로 뉴턴 역학을 기반으로 하며, 물체의 질량, 속도, 가속도, 힘 등을 계산합니다.
시간에 따른 물체의 움직임과 상호작용을 예측하고 시각화하는 것이 주요 활용처라고 할 수 있습니다.
NVIDIA는 Physic simulation이 digital twin을 구현하는 핵심이라고 강조하고 있지요.
간단한 등가속도 운동을 예제로 알아보겠습니다. 어떤 물체가 등가속도 운동을 한다고 할 때 속도는 v(t) = v0 + at로 얻을 수 있습니다.
위치는 x(t) = x0 + vt + 1/2at^2로 얻을 수 있지요. (수식이 입력이 안되어서 텍스트로 적었습니다만 대부분 이해하실 것으로 믿겠습니다)
수식을 좀 더 코드스럽게 바꿔보겠습니다.
v_new = v_current + a * delta_t
x_new = x_current + v_current * delta_t여기에서 delta_t에 대당되는 것이 time step입니다. 이 time step이 physics simulation에서 상당한 의미를 갖는데요.
다음 장면을 통해 알아보겠습니다.
공중에 하나의 공이 떠있다고 가정해 보겠습니다.
이 공은 중력에 의해 바닥에 떨어지게 될 겁니다. 바닥에 부딪히게 되면 충돌하여 다시 튀어오르게 되겠지요.
위의 수식에서 a에 중력 가속도 g(=9.81m/s^2)를 넣으면 공의 속도와 위치를 얻을 수 있겠죠.
만약 공의 움직임을 애니매이션이나 게임으로 연출하려면 연속적으로 실행하면 될겁니다.
여기에서 만약 time step이 너무 크면 어떻게 될까요? 바닥에 충돌하는 지점을 감지하지 못하고 뚫고 내려갈 가능성이 클 겁니다.
운 좋게 충돌했다고 하더라도, 결국 위로 솟아오른 공이 다시 바닥에 충돌하는 작업을 반복하게 되므로 점차 수치적으로 불안정 해집니다.
결국 원하는 정확한 결과를 도출하지 못하게 되거나 오류를 반복하게 되는데, 이를 시뮬레이션 실패라고 합니다. 흔히 시뮬레이션이 터졌다고 하지요.
이것이 걱정되어서 time step을 너무 작게 설정하면 어떻게 될까요? 바닥에 충돌하기 까지 몇 시간이 걸릴지 모를 일입니다.
게임에서 써먹을 수는 없겠죠.
즉, time step은 아래와 같은 특징을 가지게 됩니다.
time step이 작을수록 정확한 결과를 갖게 됩니다
time step이 너무 크면 업데이트가 부정확 -> 오차가 생깁니다
time step이 너무 작으면 시뮬레이션이 느림 -> 비효율적으로 계산하게 됩니다
time step이 작으면 시뮬레이션이 안정적으로 동작합니다
time step이 너무 크면 시뮬레이션 실패로 이어질 확율이 큽니다
즉, 효율성(적은 계산량)과 사실적인 표현(+안정성) 사이에는 일종의 trade off 관계가 형성되어 있는 것이죠.
참고로 nVidia의 isaac sim에서도 물리 시뮬레이션 라이브러리인 physX를 사용하고 있는데요.
시스템 시간과 물리 계산 timestep을 bind해서 사용한다고 알려져 있습니다.
이는 실시간으로 렌더링하고 시뮬레이션하는 isaac sim의 철학 때문인 것으로 생각됩니다.
하지만 실시간으로 소화하기 어려운 많은 계산이 필요한 경우에는 렌더링을 다소 희생하더라도 시뮬레이션에 더 많은 자원을 쓰거나,
이것으로 부족할 때를 대비하여 simulation time step을 별도로 설정하는 항목을 마련해 두기도 했습니다.
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.