Skip to content

Sphere CCD penerating limit is wrong. #70

@HuazyYang

Description

@HuazyYang

In NvCloth, the following implement is wrong:

// skip continuous collision if the (un-clamped) particle
// trajectory only touches the outer skin of the cone.
T4f rMin = prevRadius + halfB * minusA * (curRadius - prevRadius);
collisionMask = collisionMask & (discriminant > minusA * rMin * rMin * sSkeletonWidth);

Image

Image

The definition of quadratic polynomial $ y = at^2 + b^2 + c $ actually represent difference between relative distance $d'$ of particle and sphere radius $r(t)$:
$$
y(t) := d'^2 - r^2(t)
$$
where
$$
r(t) := r_0 + t\left( r_1 - r_0\right)
$$
The minimum of $y$:
$$
y_{\min} = y\left(-\frac{b}{2a}\right) = \frac{4ac - b^2}{4a} \doteq -\frac{d}{4a}
$$
where $\Delta := d = b^2 - 4ac$. We restrict $y_{\min}$ no less than $s r_{\min}$, where:

  • $s$ is a ratio of distance where particle penetrates cone of sphere trajectory. in NvCloth, it is $-0.36$:
    sSkeletonWidth = simd4f(cloth::sqr(1 - 0.2f) - 1);
    
  • $r_{\min}$ is radius of sphere at $t = -b / 2a$:
    $$
    r_{\min} = r\left(-\frac{b}{2a} \right) = r_0 -{\color{blue}\frac{b}{2a}}\left( r_1 - r_0 \right)
    $$

So the fact is
$$
\begin{align*}
& y_{\min} \ge s r^2_{\min} \
& \frac{d}{4} \ge -a r^2_{\min} s
\end{align*}
$$

Far from today, @lchut raise a question about this issue.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions