Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags more
Archives
Today
Total
관리 메뉴

테드옹의 VFX

Houdini Vellum 정리 본문

Houdini

Houdini Vellum 정리

Tedd_Kim 2023. 8. 17. 09:50

-정리 & 팩트체크 전혀 안된 상태 -

 

[들어가기 전에]

- xPBD : Extended Position Based Dynamic

- FEM은 더 현실세계에 맞는 수치를 가지고 있지만, vellum은 FEM보다 빠르고 여러가지의 Constraints type을 가질 수 있다

- Vellum에선 정말 Stiff한 물체는 만들기 힘들다(Metal bending같은). 따라서 이런 건 Bullet의 Soft Constraints로 해결해야한다

- Continuous Collision Detection을 사용한다

- Match Topology노드를 활용해야할 수도 있음

- Pscale은 되도록 높게 유지하되, Edge Length보다 크면 안됨(Self-Collision 방지)

- 적당한 Constraint Iteration이 없다면, 원래 형태로 돌아가지 못할 수도 있다. Substep을 늘려도 도움이 되지만 Constraints Iteration을 늘리는 것이 연산에 더 빠르다

 

간단히 정리해서, Constraint의 특징(stiffness, damping etc.)을 달성하며 rest 상태로 돌려놓는게 PBD의 핵심이다

 

[1st Order vs. 2nd Order]

수치적분(Numerical Intergration)의 공통적인 목표

- 현재 v를 이용해 P를 업데이트한다(explicit)

- Constraints와 Collision을 solve하여 P를 업데이트한다

(Stiffness, Plasticity 등을 만족할 때까지 constraint iteration을 진행)

- dP를 통해 Velocity를 업데이트한다(implicit)

- 보통은 오일러 적분(@P += @v * deltaT)을 통해서 시뮬레이션을 하지만, Verlet Intergration의 방법 또한 존재한다. (v@P += (@P - oldP) + accel * deltaT^2)

 

1st Order

- Linear step

- 보통 Constrained Particle들은 선형적으로 움직이지 않는데, 1st Order를 사용하면 부정확함이 생기고 그곳에서 Enery loss가 일어난다. 이것을 해결하기 위해서 substep을 늘려야하는데 시간이 더 오래걸림

- 즉, Constraints가 정상적으로 정렬(Coverage)될 때까지 많은 Iteration이 필요하다.

 

2nd Order

- Energey를 더 잘 보존함

- Non-Linear 다이나믹에 적합하다

- 데이터가 더 필요하다(vlast, plast...)

- 콜리전시 Bouncing이 있을 수 있다. (이 경우, 디폴트 값의 경우 1st Order로 Fallback한다)

 

[PBD vs. xPBD]

기존 PBD알고리즘은 Substep과 Constraints Iteration이 늘어나면 Stiffness가 무한으로 발산하는 경우가 있었지만, xPBD의 경우엔 그런 단점을 보안한 알고리즘이다.

PBD 수도코드

 

xPBD 수도코드

 

Vellum의 종류

- Cloth

- Hair

- Softbody(Strut, Tetrahedral, Balloon)

- Grains

- Pins/ Stitch/ Attach to Geometry

 

[Vellum은 iterative solver이다]

- 반복을 거듭하면서 Constraint의 에러 값을 줄여나가며 모션을 더 정확게 함

- 만약 반복이 적다면 스트레칭이 과하게 되거나 stiff한 모션이 나올 수 있다.

- Constraint Iterations, Collision Iterations, Smoothing Iterations

Smoothing iteration은 불가능한 시나리오(포지션이 고정된 constraint의 restlength를 강제로 x0.5배 해버리는 등..)의 constraints의 에러를 최대한 smoothing하는 것이다(Jacobi vs. Gauss-Seidel)

(*Jacobi는 모든 constraints를 solve한 후에 P업데이트를 진행하고, 반면 Gauss-Seidel은 하나의 Constraints를 solve할 때마다 즉시 P업데이트를 한다. 전자는 병렬로 진행이 가능하다는 특징이 있음)

 

Vellum Object(Geometry Data + ConstraintGeometry Data)

- Hard Pin 혹은 weld는, solver에게 발견되면 Constraints를 solver하는게 아니라 바로(Directly)포지션 업데이트를 한다. (파티클 어트리뷰트, $OBJID/Geometry Data), Auto-breakable이다.

- Soft pin 혹은 Stitch는, Constraints를 solve하여 포지션 업데이트를 한다(프리미티브 어트리뷰트, $OBJID/ConstraintGeometry Data)

- Pin type Permenat와 Stopped는 Hard Constraint이다.

- mass가 0이면 Infinite이란 의미 (이런 케이스엔, constraints가 Geometry 데이터의 파티클 P를 업데이트하지 못한다)

(**질량이 무한대인 물체는 물리적인 힘에 의해 움직이지 못하기 때문에, solver에 의해서 움직여지는게 아니라 animation에 따라서 움직여져야한다)

 

[Vellum Softbody]

Tetraheral Softbody(Distance Along Edges + Tetraheral Volume)

- Tet Softbody는 Distance Constraints와 Volume Constraints로 나눈다

Distance Constraints는 edge를 스프링처럼 만들어서 오브젝트의 전반적인 Shape을 유지하고, Volume Constraints는 각 tetrahedron의 볼륨을 유지하여 local volume preservation을 달성한다

- Tet Softbody는 인풋 지오메트리를 remeh, tet conform하여 새로운 지오메트리를 생성한 후, 시뮬레이션이 끝나면 원본 지오메트리를 point deform하는 방식이다

- Plasticity와 엮으면 밀대에 밀리는 밀가루 반죽등을 시뮬레이션하기 좋다

- 프록시 지오메트리가 너무 Low Resolution이면 Remesh의 Target size를 조금 낮춰주면 좋다

 

Strut Softbody(Cloth + Struts)

- 랜덤한 Strut을 형성하여 안과밖을 '이쑤시개(toothpick)'처럼 유지한다, 그래서 뾰족한 artifact들이 생길 수 있다 (굉장히 보기 안좋음..)

- Tet softbdy와는 다르게 원본 지오메트리를 사용하여 시뮬레이션한다 (Strut도 사실 remesh를 통해 일정한 subdivision을 가진 프록시를 만들어서 시뮬레이션한 후 point deform을 시키는게 더 낫다)

 

Strut는 다소 Rigid한 물체에 적합하고, Tetrahedral은 유기체적인 움직임에 더 적합하다(카더라)

 

[Constraints의 종류]

1. Stich & Slide

2. Plasticity

- 소성(Plasticity)는 힘을 받은 물체가 변형할 때, 특정 임계점을 넘어서 영구적으로 형태가 변하는 특성을 뜻한다.

- 캐릭터가 밟고 지나간 Grass들에 적합

3. Triangle & Tetrahedral Strectch Constraints

- ARAP(As Rigid As Possible)

- Preserve Volume옵션을 키면 추가적으로 더욱 볼륨을 유지시켜준다

4. Pressure

5. Dynamic

----------------------나중에 다시 정리 후디니 어트리뷰트 타입

A. distance

B. bend

C. pressure 

D. angle

E. bendtwist

F. branchstitch

G. stitch (glue) -> connectivity

H. shapematch

[Substeps & Constraint Iterations & Collision Pass]

- 빠르게 움직이는 물체를 solve하려면 Substep이 필요하지만, 적은 substep은 보통 더 나은 collision bound를 보여준다

- Constraint Iteration은 strectch와 bend를 가능하게 해준다. Stiff하고 non-stretching하고 non-bending하는 오브젝트를  시뮬레이션 하고 싶으면 Constraint Iteration을 늘려야한다. (안그러면 Constraint가 rest로 정렬되기전에 시뮬레이션이 끝날테니 부정확한 모션이 생김) 그리고 Constraint Iteration은 생각보다 연산이 빠르다

- Collision pass는 외부와 self collision을 둘 다 계산한다. 

- Post Collision pass는 모든 계산이 끝나고 한번 더 하는 개념이다. Constraints와 연계되지 않으며 제대로 해결되지 않은 충돌을 마지막으로 풀기 위한 수단이다.

 

[풀리지 않은 의문점]

1. 그래서 Solver 어디에서 포지션 업데이트, 벨로시티 업데이트를 하냐

2. Mass와 Pscale은 언제, 어떻게, 왜 쓰이냐

 

Vellum Attributes : https://www.sidefx.com/docs/houdini/vellum/vellumattributes.html

 

Vellum attributes

There are many types of constraints, so the meaning of these variables is often dependent on the constraint type. They usually live on the primitive. Dynamics: parameters Type Name Description float dampingratio (Prim) 0..1 damping ratio. Note Higher than

www.sidefx.com

 

위의 내용으로 해석한 Vellum Solver 내부의 대략적인 도식

'Houdini' 카테고리의 다른 글

Space Transformation  (1) 2023.10.05
Guide Deform Wrangle  (0) 2023.09.09
Gnomon workshop - Lookdev in Arnold Houdini  (0) 2023.07.30
PDG 정리  (0) 2023.05.22
파이썬 코드로 플립북 mp4 생성  (0) 2023.05.15