푸아송 비와 애니메이션
푸아송 비는 어떠한 물체가 위에서 아래로 짓눌려져 높이가 작아질 때 가로폭과 세로폭의 변화량에 대한 비율을 의미합니다.
푸아송 비에 대해서는 애니메이션의 12가지 기본 원칙 중 찌그러짐과 늘어남 항목을 읽다가 알게되었습니다.
평소 2D 젤리 효과를 내기 위해 가로 크기를 N배 늘리면 넓이를 유지하기 위해 세로 크기를 \frac{1}{N}로 줄이곤 했습니다.
// TODO: JELLY EFFECT 2D SPRITE
푸아송 비를 보고는 이 젤리 효과를 물리적으로 자연스럽게 일반화시킬 수 있지 않을까란 생각이 들어서 좀 더 파고들게 되었습니다. 푸아송 비는 실험에 의하여 도출되는 값으로 일반적으로 알려진 재료들의 푸아송 비는 다음과 같습니다.
재료 | 푸아송 비 |
---|---|
고무 | 0.4999 |
금 | 0.42–0.44 |
구리 | 0.33 |
알루미늄 | 0.32 |
점토 | 0.30–0.45 |
강철 | 0.27–0.30 |
콘크리트 | 0.1–0.2 |
유리 | 0.18–0.3 |
코르크 | 0 |
푸아송 비의 이론적 범위는 [{0, 0.5}]입니다. 즉, 고무는 짓누르면 눌리는만큼 가로 세로로 넓어져 거의 99.9% 부피가 유지되며 코르크는 아무리 짓눌러도 가로 세로로는 늘어나지 않다고 볼 수 있습니다.
처음에 글을 읽고, 푸아송 비의 최대 값이 0.5라는 것에 의문이 생겼습니다. 기존에 사용하던 2D 젤리 효과는 넓이를 100% 유지하기 때문에 푸아송 비로 치면 0.5가 될텐데 N과 \frac{1}{N}의 관계에서는 0.5가 들어갈 구석이 없었기 때문입니다.
조금 고민해보니 2D와 3D의 차이라고 생각이 나서 계산을 해보니 문제 없다는 결론이 나왔습니다.
객체의 한 축을 x배로 늘렸을 때 부피를 유지하기 위해 나머지 축에 일률적으로 늘려야할 배율 y는 다음과 같습니다. $$ y = {x}^{-\frac{1}{N-1}} $$
유도
N차원 공간에 같은 부피를 가진 물체 P와 Q가 있다고 가정합시다. (N이 2이면 사각형, N이 3이면 육면체)
P의 모서리 길이는 각각 (a_1, a_2, a_3, ..., a_N)입니다.
P의 부피는 \prod_{i=1}^{N} a_i=a_1 \times a_2 \times a_3 \times ... \times a_N입니다.
Q의 모서리 길이는 (xa_1, ya_2, ya_3, ..., ya_N)입니다.
$$ \prod_{i=1}^{N} a_i=xa_1 \times (\prod_{i=2}^{N} ya_i) $$ y를 밖으로 빼내고 a_1를 \prod 안으로 집어 넣어 다음과 같은 식을 만들 수 있습니다. $$ \prod_{i=1}^{N} a_i=x \times y^{N-1} \times \prod_{i=1}^{N} a_i $$ 양변을 약분하고 y에 관한 식을 다음과 같이 유도할 수 있습니다. $$ y^{N-1} = \frac{1}{x} $$ $$ y = \frac{1}{x}^{\frac{1}{N-1}} = {x}^{-\frac{1}{N-1}} $$
여기서 \frac{1}{N - 1}부분이 푸아송비를 나타내는 것을 알 수 있습니다. 3D 공간에서 푸아송 비의 최대 값은 0.5이며 2D 공간에서 푸아송 비의 최대 값은 1입니다. 이를 이용하여 재질에 따라 물리적으로 좀 더 자연스러운 모션이 가능해집니다.
// TODO: 2D 공간에서 각 재료별 사각형 객체의 점프 애니메이션
// TODO: 3D 공간에서 각 재료별 육면체 객체의 점프 애니메이션