ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [물리 기반 시뮬레이션/동역학] Particle system Dynamics
    그래픽스/물리 기반 시뮬레이션 2023. 7. 5. 22:48

    1. Particle System Dynamics이란?

    Particle은 입자로 물체를 구성하는 가장 기본적인 요소이고 질량, 위치 속도를 가진다. Particle의 동작을 시뮬레이션할 수 있으면 물체의 운동또한 기술할 수 있기 때문에 상호작용적인 시뮬레이션의 기본인 입자 역학을 다룬다.

    2. Phase Space(상태 공간)

    뉴턴의 운동 제 2법칙은 익숙한 f=ma로 표시된다. 이때 가속도는 시간에 대한 위치의 2차 미분이기 때문에 다음과 같이 표시된다.

    2차 미분 방정식을 푸는 방법은 여러가지가 있는데 지금은 시간에 대한 위치의 1차 미분인 속도를 도입하여 1차 미분 방정식 두개로 분리해서 풀어낼 수 있다.

    이를 3차원 공간으로 확장하면 위치, 속도에 대한 축 3개로 확장하여 6차원 미분 방정식으로 나타낼 수 있다.

    이를 n개의 입자로 확장하면 6n 차원의 벡터로 연결된다. 이를 1차원에서의 입자로 생각하면 Vector Field 형태로 시각화할 수 있다. 

    3. Basic Particle System

    Particle system을 구현할때는 입자는 ODE Solver 관점에서 고차원 공간에서의 한점으로 보여야 한다. 따라서 Particle과 Particle system은 다음과 같이 구조체로 정의될 수 있다.

    Particle Structure

    Particle 구조체는 질량, 위치, 속도, 받는 힘의 합을 가지고 있고 힘은 나머지 변수들에 영향을 준다.

    Particle System Structure

    Particle System 구조체는 각 파티클을 멤버 변수로 가지고 있고 Particle의 개수 그리고 시뮬레이션을 돌릴 시간을 가진다.

    그리고 Particle 시스템은 Dimension을 반환하는 함수, Get/Set 함수, 도함수를 계산하는 함수 그리고 Euler Solver를 가진다. 이는 다음과 같이 작성될 수 있다.

    Euler Solver의 구현 방식은 도함수를 먼저 구한 뒤 도함수를 Time Step에 대하여 Scaling해준다. 그리고 Particle system의 현재 상태를 get 하고 도함수와 더해주면 x + hx'의 형태를 띄게 되어서 Euler Method형태가 된다. 그리고 다시 Set 해주면 Euler Method를 이용해 Particle System ODE를 풀 수 있다. 이를 Interface로 시각화하면 다음과 같다.

    4. Force 

    힘을 Particle에 적용하기 위해서는 하나의 Particle에 다양한 힘들이 적용되기 때문에 각각의 힘에대한 힘 객체를 List로 관리하는 방법이 가장 효율적이다.

    이 힘 객체 리스트를 활용해서 도함수를 계산하는 과정은 각각의 입자에 대해서 Force를 초기화 한다. 그리고 각 힘 객체에 대해서 apply_force로 각각의 입자에 접근하여 force를 적용하는데 이때 개별 입자에 대해 계산하기 때문에 각 입자에 대해 독립적이다. 그리고 Solver에 v와 f/m을 넣으면 도함수를 계산할 수 있다.

    힘은 크게 세가지 범주로 나눌 수  있다. 

    ● 단항 힘은 각 입자에 독립적으로 작용하며 하나의 요인에 영향을 받는 힘이다. 예시로는 중력, 마찰력이 있다.

    ● n-항 힘은 여러개의 입자의 집함에 영향을 받아 발생하는 힘이고 쌍으로 작용하는 힘이다. 예시로는 mass-spring system이 있다.

    ● 상호 작용 힘은 여러개의 입자 쌍에 작용되는 힘이고 쌍이 아닌 여러개의 튜플로도 적용될 수 있다. 예시로는 인력, 척력 등이 있다.

    4-1 단항 힘

    단항 힘의 가장 대표적인 중력은 구현하기 매우 간단하다. 각 입자에 작용되는 중력은 f=mg로 표현될 수 있다. 이는 단순히 시스템의 입자에 힘을 누적하는 것으로 적용된다. 다음 예시로는 점성 마찰이 있다. 점성 마찰은 운동에 저항하여 속도를 느리게 하는 힘이다. 따라서 kd와 같은 마찰 계수에 따라 다음과 같이 간단하게 구현될 수 있다.

    4-2 n-항 힘

    n항 힘중에 이진 힘의 대표적인 예시로는 훅의 법칙 spring이 있다. 이는 mass-spring system의 한 종류이고 이때 위치 a, b의 두 입자간의 spring 힘은 다음과 같다.

    여기서 l은 a-b로 a와 b 사이를 잇는 벡터이고 r은 Rest Length 즉, 정지 상태일때 스프링의 길이이다. ks, kd는 각각 spring과 Damping에 대한 상수이다. 여기서 spring 힘은 현재 길이와 정지 상태일 때 길이의 차이에 비례하고 Damping 힘은 a와 b의 접근 속도에 비례한다. spring 힘을 구현하기 위해서는 두 입자를 가리키는 구조체로 구현할 수 있다. 위의 식에따라 힘을 계산하여 힘을 합산 함으로써 구현이 가능하다. 다음은 구현에 대한 예시 이다.

    4-3 상호 작용 힘

    상호 작용 힘은 공간에 대한 힘으로 입자에 작용한다. 공간적으로 상호 작용하는 예시로는 유체 역학이 있다. 이러한 대규모 입자 시뮬레이션에 널리 사용되며 이러한 경우 복잡성은 O(n^2)이다.

    5. User Interaction

    기본적인 mass-spring 시뮬레이션에서 주요한 요소는 모델 구축과 모델 조작이다. 사용자가 모델을 구축하고 조작하는데에는 여러가지 방식이 있는데 3가지 방법을 제시해보면

    ● Controlled Particles

    이는 입자를 힘에 의해 운동시키지 않고 위치와 속도를 직접 제어하는 방법이다. 이런 방식은 ODE. Solver가 업데이트 하지 못하도록 하면 구현할 수 있다. 그러나 이런 경우 위치와 속도를 정확한 값으로 유지해야한다는 점이다. 그렇지 않으면 입자가 이상하게 움직일 수 있다.

    Structure

    mass-spring 시스템은 여러 개의 스프링이 하나에 입자를 연결함으로써 조인트를 구성할 수 있고 이러한 입자들로 구성된 스프링 구조체를 만들 수 있다.

    ● Mouse

    mass-spring 모델을 조작하는 가장 간단한 방법은 마우스로 직접 입자의 위치를 이동하는 것이다. 그러나 이는 안정성의 문제가 있지 때문에 권장되지 않지만 간단하다.

    6. Energy Function & Behavior Function

    일반적으로 우리가 힘을 계산할때는 힘 법칙을 사용해왔다. 그러나 복잡한 힘 법칙은 적용하기엔 너무 복잡한 방정식이 사용된다. 힘 법칙은 우리가 원하는 조건을 유지하기 위해 설계되기도 한다. 예를 들어 스프링은 힘으로도 표시할 수 있지만 정지 상태의 길이를 유지하려는 성질 그 자체이다. 따라서 a와 b 입자가 동일한 위치에 있어야 한다는 Behavior 함수는 a-b로 표시될 수 있고 둘 사이의 거리가 r만큼 떨어져 있어야 한다면 이는 |a - b| - r 로 표시될 수 있다. 전체에 대한 Behavior 함수를 힘 법칙에 적용하려면 우선 에너지 함수를 정의해야 한다.

    이 에너지 함수의 의미는 spring에서 탄성력에 의한 위치에너지가 다음과 같이 정의 되므로 변화된 길이 x를 Behavior 함수 C(a, b) = |a - b| - r 로 치환하면 얻을 수 있다.

    여기서 힘은 에너지 Gradient의 음수 이므로 입자 xi의 힘은 다음과 같다.

    여기서 Damping이 없다면 시스템이 불안정하게 동작하기 때문에 Damping을 추가하여 다음과 같이 만든다.

    여기서 C는 위치에 대한 함수이기 때문에 C'은 시간에 대한 도함수 이기 때문에 속도에 대한 함수로 정의될 수 있다.  따라서 C = x1 - x2, C' = v1 - v2 로 정의된다. I를 항등 행렬이라고 정의하면 위치에 대한 미분은 다음과 같이 정의 된다.

    이를 위의 fi에 대한 식에 대입하여 두 입자에 대한 힘으로 정의하면

    다음과 같이 정의할 수 있고 따라서 f2 = - f1이 된다. 이때 Behavior 함수를 C = |l| - r로 정의하고 l = x1 - x2라 하면 도함수들이 다음과 같이 정의된다.

    여기서 함수 C의 시간에 대한 도함수를 구하면 

    다음과 같다. 이를 위의 fi에 대한 식에 대입하면 위의 이 식으로 유도된다.

    7. Particle - Plane Collision

    충돌 문제는 원래 굉장히 어려운 문제이지만 간단하게 평면과의 충돌로 가정하고 살펴보겠다. 그리고 간단하게 표시할 예정이다. 입자 X가 평면에 충돌한다고 가정하고 다음의 그림을 보자

    ● Detection

    충돌을 감지하기 위해서는 매우 복잡한 문제이지만 입자와 평면간의 충돌감지는 매우 간단하다. 입자 X가 있고 점 P가 평면위의 한점이고 이 점에서의 법선벡터를 N이라고 할 때 다음과 같이 식을 세울 수 있는데

    이 식의 결과 부호가 의미하는 것은 P에서 X로 가는 벡터와 N의 사잇각이 결과가 0보다 크면 90도 이하이고 작으면 90도 보다 크고 0이면 90도 라는 이야기 인데 이는 0보다 크면 평면 위에 있고 0보다 작으면 평면 아래에 있고 0이면 평면위에 위치하기 때문에 이를 이용하면 충돌을 감지할 수 있다.

     

    ● Response

    충돌이 일어나고 충돌에 대한 반응은 입자 X에 대한 수직과 수평 성분으로 분할하여 다음과 같이 정의될 수 있다. 이때 Xn은 수직 성분이고 Xt는 수평 성분이다.

    이때 수직 방향에 대한 속도를 정의할때 가장 간단한 것은 마찰이 없는 경우에 대한 탄성 충돌이다. 제시되는 식에서 r은 탄성계수이고 0~1의 값을 가진다. 1이면 탄성충돌이고 1보다 작으면 비탄성 충돌을 의미한다.

     

    ● Contact

    Contact는 입자가 평면위에 있는 접촉상태를 뜻한다. Contact에 대한 조건은 수직 방향에 대한 속도인 Vt가 0이고 평면위에 위치하면 Contact 상태이다. 만약 평면의 아래방향으로 입자가 힘을 받으면 접촉 힘이 작용하여 힘의 수직 성분을 완전히 상괘시킨다. 그러나 평면을 벗어나는 방향으로 힘이 작용하면 접촉 힘은 작용하지 않는다.

    접촉 힘

Designed by Tistory.