데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      Physics Simulation과 Time Step

      Tkay 25.07.28
      1,240 2 1
      DEVOTEE 요약
      물리 시뮬레이션은 컴퓨터를 통해 뉴턴 역학 등의 물리 법칙을 구현하여 물체의 움직임과 상호작용을 계산하고 시각화하는 기술입니다. 이를 구현할 때 사용되는 time step은 결과의 정확성과 효율성에 큰 영향을 미치며, 너무 크면 시뮬레이션 실패로 이어지고 너무 작으면 비효율적이 됩니다. NVIDIA의 PhysX 등은 이러한 특징을 고려하여 실시간 시뮬레이션 환경에서도 효율성과 안정성을 최적화할 수 있도록 설계되어 있습니다.

      Physics Simulation

      실제 세계의 물리 법칙을 컴퓨터 프로그램으로 구현한 것을 말합니다. 주로 뉴턴 역학을 기반으로 하며, 물체의 질량, 속도, 가속도, 힘 등을 계산합니다.

      시간에 따른 물체의 움직임과 상호작용을 예측하고 시각화하는 것이 주요 활용처라고 할 수 있습니다.

      NVIDIA는 Physic simulation이 digital twin을 구현하는 핵심이라고 강조하고 있지요.


      Physics Sim 예제: 등가속도 운동

      간단한 등가속도 운동을 예제로 알아보겠습니다. 어떤 물체가 등가속도 운동을 한다고 할 때 속도는 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을 별도로 설정하는 항목을 마련해 두기도 했습니다.

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      Tkay 님의 최신 블로그

      더보기
      동영상 기고하기