Skip to content

Analyze

W298 edited this page Jan 31, 2024 · 1 revision

Volumetric Approximate Convex Decomposition

Pre-Frature 방법의 경우, Impact Point 나 상황에 상관없이 항상 일정한 방법으로 쪼개지기 때문에 Reality 가 낮다.
Real-Time 에서 작동하면서도 Impact Point 에 따라 Dynamic 하게 오브젝트를 Fraturing 하는 방법으로 제안된 것이 VACD 이다.

VACD 는 미리 Visual Mesh 를 사용자가 지정한 노드를 기준으로 Convex 로 Decomposition 하는
Mesh Preparation 작업을 거친다. 물론 이는 Fully Automatic 하게 적용할 수도 있다.

Collision Handling, 실제 Fracturing 작업을 직접 Visual Mesh 에 적용하는 것이 아닌,
Convex Decomposition 으로 만들어진 Convex 들을 기준으로 동작한다.

Non-Convex 한 Visual Mesh 를 Convex 로 Decomposition 하여 계산하기 때문에
훨씬 효율적인 연산이 가능해지고, 부분 파괴, 재귀적 파괴에 대한 구현이 가능해진다.

-> Impact Point 에서 일정 거리 밖에 있는 Convex 에 대해서는 하나의 Rigidbody 로 처리한다.

Off-line Mesh Preparation

Convex Decomposition 은

VHACD (Voxelized Hierarchical Convex Decomposition) CoACD (Approximate Convex Decomposition for 3D Meshes with Collision-Aware Concavity and Tree Search)

와 같이 여러 Method 들이 제시되었으나, 결국 특정 파라미터를 이용하여 자동으로 쪼개지기 때문에
Fracture 를 표현하는 작업에서는 불리하다.

VACD 는 사용자가 노드를 두고, 그 노드를 기준으로 Decomposition 하기 때문에 더 유리하다.

1. Approximate Convex Hull

  • 전체 Mesh Vertex 들을 포함하는 Convex Hull 을 생성한다.
  • Incremental Convex Hull Algorithm 을 조건에 맞게 응용한 알고리즘을 사용한다.

2. Voronoi Decomposition

  • 사용자가 지정한 Node 를 기반으로 Voronoi Cell 을 생성한다.
    • 이때 Bounding Box 를 사용한다.
    • Convex Hull 내부에 생성할 수도 있으나, 결국 이후 Convex Fitting 단계에서 다시 계산하므로 불필요할 수도 있겠다.
  • 3D Voronoi Cell 들을 생성해야 한다.

3. Mesh Clipping

  • 위에서 생성한 Voronoi Cell 을 하나의 Convex 로 보고서, 이를 기준으로 Mesh 를 Clipping 한다
    • 이 과정에서 새로운 Triangle 들이 생길 것으로 보인다.
  • 만일 한 Cell 내부에 연결되지 않은 Mesh 들이 존재할 경우, Convex 를 분리하는 작업을 수행한다. (Island Detection)

4. Convex Fitting

  • 위에서 생성한 Convex 들은 아직 완벽하게 Mesh 에 맞춰져 있지 않으므로, 1번에서 사용한 알고리즘을 바탕으로 Fitting 을 진행한다.

위 과정을 통해 Voronoi Cell 기반의 Convex Decomposition 이 수행된다.

Real-time fracturing

1. Define Fracture Pattern

  • 런타임 이전에 적용할 Fracture Pattern 을 Voronoi Cell 을 이용하여 생성해 둔다.
  • 3D Voronoi 또는 2D Voronoi 둘 다 사용이 가능할 것으로 보인다.

2. Alignment, Intersection

  • Impact 가 발생하게 되면, Impact Point 에 맞추어 위에서 정의한 패턴을 맞춰준다.
  • 이후 이전에 생성해 두었던 Convex 들과, Fracture Pattern 을 Intersection 하여 더 작은 조각으로 쪼개지게 된다.
  • 이때 부분 파괴를 적용하려면, Impact Point 를 기준으로 구 내부에 있는 조각만 쪼개고, 나머지는 형태를 유지시킨다.