[Computer Animation] Dynamics

huijae0817·2020년 11월 26일
0

시작하며

  • 계층적인 모델 즉 사람을 시뮬레이션하기 위해서 표준화된 모델을 사용했다.
  • 해당 모델은 Joint와 Link로 구성되어있으며, Joint의 이동과 회전을 통해 Animation이 표현된다.
  • Animation은 MoCap또는 Key Frame을 통해 제작이 된다. 자연스럽고 빠른 제작을 위해 MoCap이 사용되곤한다.
  • 사람의 체형과 캐릭터의 체형의 차이로 인한 부자연스러움을 해결하기 위해서는 Retargeting이 진행된다.
  • Animation의 보간과정에서 FK, IK가 있다. FK는 아티스트의 영역. IK는 수학적인 영역이다.
  • IK에는 한계가 있다.
  • 보기에는 그럴듯해보이지만, 자세히 보면 이런 움직임은 불가능한데? 싶은 부자연스러움이 있다.
  • 이런 한계점을 해결해줄 방법은 실제 물리법칙에 기반하여 시뮬레이션(Physics Dynamics)을 해주는것 뿐이다.

Physics?

왜 필요할까?

  1. 리타게팅 과정에서 캐릭터의 질량에 따른 움직임이 달라질 수 있다.
  2. 장애물이 있을 경우, 피해가는 과정에서 무게중심을 맞춰 이동해야 자연스러운 움직임을 표현할 수 있다.

Dynamics?

왜 필요할까?

  • Kinematic이라면, 이동할 때 위치를 반드시 Key-Frame을 통해 잡아야한다.
  • 하지만 Dynamics를 이용하면, 물리적인 계산을 통해 key를 잡지않아도 시뮬레이션이 가능하다.

Simulation 되어야하는것

  • 힘!

    • External Forces(외부 힘): 중력, 바람과 같은 힘 등
    • Internal Froces(내부 힘): 땅을 딛는 힘, 앞으로 가능 힘 등
  • 공식은 뉴턴의 법칙을 주로 활용한다.(F = ma)

Force, Mass, Acceleration, Velocity, Position

  • v로 움직이고 있는 물체에 f의 힘을 주면, 바뀐 v'와 v의 평균으로 움직인다.
  • a = f/m
  • v' = v+ax시간변화량
  • p' = 총 움직인 거리

Gravity

  • 중력은 중력계수에 두 물체의 질량을 곱하고 거리의 제곱으로 나눠준다.
  • 지구에 대해 계산을 한다면, 지구의 무게, 물체와 지구 중심의 거리가 굉장히 크기 때문에 상수가 되고, 남는것은 상수x물체의 무게 = 중력

Other forces

마찰력

  • Static friction: 힘주면 중력에 의해 생기는 마찰력(힘을 줄수록 늘어난다)
  • Kinetic friction: 움직이기 시작하면서부터의 마찰력(힘을 줄수록 줄어들다 일정해진다)
  • Viscosity: 끈적임을 나타냄. 점성이 있을 경우, 천천히 움직이는것이 더 쉽게 움직일 수 있음.
  • Viscosity Shere: Sphere의 반지름에 비례한다.

Spring-damper

말 그대로 Spring

  • F = ks(Lcurrent - Lrest) - kd x Vspring
  • damping을 곱하면 속도가 커질수록 빨리 줄어들게 함. (IK방식 설명할때도 한번 나왔음)

Momentum

  • F = mv가 Momentum

Momentum보존이란?

  • 충돌시, 그 순간! 모든 힘이 보존된다.

Collisions

  • Elastic: 탄성 충돌

    • 변형되지 않음. 에너지의 손실이 없음
    • 당구공 모든 공 질량 같으면, 에너지 잃어버리지않음
    • 충돌순간, Momentum 보존됨
    • Kinetic Energy또한 보존됨.
  • Non-elastic: 비탄성 충돌

    • 변형되는 경우. 변형에 의해 에너지의 손실이 있음
    • 변형으로 인한 에너지 손실에 의해 튕기는 높이가 점점 낮아짐.(농구공)

Angular Physics(각속도)

  • 각속도는 어떻게 표현할까?

질량의 중심 구하기

  • 전체 지점에 대해서 질량 곱 거리의 평균을 구하여, 가장 최소인 부분이 중앙인것.

Linear vs Angular

  • Linear(직선) - Angular(각)

  • Position(위치) - Rotation, Orientation(회전, 방향)

  • Velocity(속도) - Rotation(angular) velocity(각속도)

  • Acceleration(가속도) - Rotation(angular) acceleration(각가속도)

  • Mass(질량) - Inertia tensor(질량. 묵직한지..)

  • Force(힘) - Torque(회전력)

  • Momentum - Angular momentum

  • 각속도를 활용하여, 나선형으로 움직이는 것 등의 Animation 표현이 가능

Intra-object Physics

물체 내에서 일어나는 일

  • 옷감의 경우, 주름을 만들거나 흩날리는것은 Spring을 통해 표현이 가능하다.

Spring

  • Flexible objects를 표현할 때.(옷과 같은)
  • Virtual Spring: 폭신한 땅, 이불을 표현할 때, 가상의 Spring을 이용하여 표현한다.
  • 압축되었다 늘어났다 하는 재미있는 움직임.
  • 정육면체 젤리를 표현한다면 각 꼭짓점에 대해 spring을 추가하고, 중앙을 지나는 대각선에 대해 Spring을 추가한다. 그렇게 되면, 중앙으로 찌그려졌다가 펴지는 형상을 구현할 수 있다.
  • Angular Spring: 각을 가지는 Spring으로, Spring이 늘어나면 각이 늘어난다.
  • Spring Mesh: 옷을 표현할 때 자주 사용. 한 쪽에 힘이 주어지면, 주변Spring으로 전파된다.
  • 따라서 움직이는 물체의 표현: 물체에 Spring을 연결하여 따라 움직이게 하고싶은 물체를 붙여준다.

Particle Physics

Particle?

  • 불꽃놀이같은 입자
  • 파티클끼리는 부딪힘, 가림, 반사가 되지 않는다.
  • 처음에는 밝은빛으로 시작하여, 흐린빛이 되고 수명이 지나면 사라진다.
  • 반복되는 파티클을 표현할 때는, 수명이 되어 사라진 후 새로 생성하면 된다.
  • 각 파티클에 대해 랜덤으로 온도(속도), 방향을 주곤 한다.

Fluid Animation

왜 필요?

  • 유체, 연기를 표현할 때 사용된다. 현실적인 표현을 위해 필요해!
  • 모델이 계속해서 변한다는 특징을 가짐. Rigid로 표현 불가

Fluids

  • Rigid는 표면 부딪히고, 변화가 일어남 => 표면기반의 계산을 진행하면 됨
  • Fluid는 표면이 너무 많이 변하고, 합쳐지고, 찰랑거리고, 빠르고,, 다양함 => 표면기반의 계산이 어려움!
  • 표면대신 부피를 따지자
  • 연기의 경우, 공간을 Particle이 채워간다. 열, 바람, 힘을 받아 움직
  • Fluid를 Particle로 표현할 수 있을 까? => 어렵다. 표면이 부드럽게 반사되기가 어려우니

Fluid types

  • Water
  • Smoke/Cloud: Particle로 충분히 표현 가능
  • Fire: Particle로 어려움

Fluid Modeling

  • Ridig는 질량과 Momentum, Kinetic보존을 알면 됨
  • Fluid는 밀도, 부피와 이동법칙, 밀도에 부피를 곱한 전체양이 보존됨
  • Viscous vs Nonviscous: 끈끈함이 있으면, 표면에 대한 마찰로 인해 손실이 생김. 안으로 모이게됨
  • Compressible vs Incompressible: 밀도가 변하거나(속도가 변함) 상수이거나(속도 그대로).
  • 변수: Density, Mass, Pressure, Velocity, Heat 등등..
  • Larmina flow(균일하게 흐름) vs Turbulent flow(부딪혀서 거품생김) vs Steady state flow(잔잔히 흐름)

Water

특징

  • Viscous함(낮긴하지만 표면장력등 약간 있음), Incompressible함(압축안됨)
  1. Ocean water: 바닷물
    • 단순화 쌉가능. 표면만 보여주면됨.
    • 반복적인 상하운동으로 표현(sin graph)
  2. Still water, Small waves: 작은물
    • 파도가 일어남. volume이 그대로라는 특성을 이용
    • 힘을 받은 부분은 들어가고 주위가 그만큼 올라옴. 또 올라온만큼 주위가 내려가고,, 시간에 대해 시뮬레이션.
    • 결과적으로보면, surface만 보여지는것.
  3. General water
    • 해안가라던지, 물을 따른다던지
    • 이제는 Dynamics가 필요.

Smoke, Fire

특징

  • Nonviscous함(끈적임 없이 잘 확산됨), Compressible(압축가능)
    움직임
  • Fire는 Heat에 의해 움직임
  • Smoke는 Density에 의해 움직임
  • 둘다 Particle에 의해 움직임

Fluid Dynamics

  • Navier-Stokes Equation: Viscous가 있는경우 가장 유명한 방정식.

  • Viscous가 없는경우엔, Particle을 이용.

  • 매우 복잡한 계산과정이 있음. 이것을 단순화 하자!

CFD: Computational Fluid Dynamics

  • Navior-stroke를 단순화한것.

  • 크게 3가지 방법이 존재

    • Grid based
      • 물의 시뮬레이션에 좋음
      • 특정 밀도를 갖는 grid로 나눠서 표현.
      • 한곳의 밀도가 높아지면, 낮은곳으로 퍼져나감
    • Particle based
      • 유체 전체를 파티클의 합으로 보기
      • 상수가 높아질수록 간단해짐
    • Hybrid
      • Grid와 Paticle의 조합

      • Particle을 cell단위로 풀어서 계산

  • Notation

    • Gradient:
    • Divergence: 모든방향으로 나가는 속도, 힘의 합
  • CFD를 통해 식이 단순화됨.

  • 압이 일정하기 때문에 t만큼 변화할 때, 압력변화를 합으로 나타낼 수 있음

  • 이를 통해 유체가 어디로 이동하는지 알 수 있음.

  • 정리해보자면, grid로 나누고 각 공간의 밀도의 차이를 이용함. 높은 밀도에서 낮은 밀도로 확산되는 힘을 계산하여 가속도를 알아냄.

Hair Animation

  • 참고자료로 Pixar 메리다의 곱슬머리 구현방법을 볼 수 있었다.
  • Spring으로 곱슬을 표현하는데, 모양은 곱슬을 유지하되, 흔들릴 때, 변형이 자유로웠으면 했다함
  • 그래서 그냥 Spring으로 표현하는것이 아니라 각 Sprig의 빈 공간을 또 다른 Spring으로 채우는 core spring을 개발했다함
  • 확실히 모양은 살아있고 자연스러운 움직임이 표현되더라.
  • Pixar의 디테일함을 볼 수 있었다.

0개의 댓글