티스토리 뷰
결론은 항상 정해져 있다.
망할
Reference 모델의 경우 잘 정돈되어있다. 예외도 없고
그에 반해 유저 모델의 경우 항상 생각했던 범위를 뛰어넘는다
그 때문에 적당히 테스트를 해야한다
현재 발견된 문제는 3개다.
모델의 가슴이 뚤리는 현상.
물리 값이 발산하는 현상.
뼈 값이 음수가 나오는 현상.
Debug 모드시엔 nad 값이 나오면서 assert 가 걸린다.
그럼 이 값이 왜 나오는지 봐야하는데,
m_linearVelocity = {mVec128={m128_f32=0x000001eb7f39d0c0 {-6.81898034e+36, -8.55016639e+36, 7.02308856e+36, 0.000000000} ...} ...}
또 저 값이 어디서 결정되는지 바야하는데
저 값은
m_tmpSolverBodyPool[i].m_originalBody->setLinearVelocity(
m_tmpSolverBodyPool[i].m_linearVelocity+
m_tmpSolverBodyPool[i].m_externalForceImpulse);
또, 저값은
m_deltaLinearVelocity
로 부터 나온 값인데, step impulse solver 로 부터 나오고 있었다.
그럼 400개의 pool 을 다 비교해야하나?
bullet 이 강체끼리 겹치게 놓으면 밀어내긴해도 이 정도로 발산한 적은 없었다.
이유가 멀까?
버전을 2.75 까지 낮추니 먼가 약간 괜찮은거 같으면서도 머리는 날라갔다
999999 이건 머냐
그리고 강체의 Friction 은 또 0 이네
그러고나니 원작자의 코멘트가 기억이 났다.
물리 설정 잘안되서 힘들었다
먼가 원하는 느낌이 안나니 거대 값을 박은 것이다.
friction 을 강제로 주던가
아님
for (int i = 0; i < 3; i++)
{
const btScalar& value = m_AngularStiffness[i];
if (!btFuzzyZero( value ))
{
int index = i + 3;
pConstraint->enableSpring( index, true );
pConstraint->setStiffness( index, value );
pConstraint->setDamping( index, kDefaultDamping );
}
}
kDefaultDamping은 99999 를 감당할 만큼의 적은 값을 두니 정상 처럼 보이기 시작했다
그러고 나니 특정 상황에서 머리카락이 엿가락 처럼 늘어지기 시작했는데
joint 의 limit 은 -0.01 ~ 0.01 로 거의 딱 붙은 상태였다.
값은 제대로 올라가고 있고
그러고 나니 진짜 문제가 보였다.
pConstraint->setLinearUpperLimit( m_LinearLowerLimit );
pConstraint->setLinearLowerLimit( m_LinearUpperLimit );
reference 모델은 이상황에도 정상 작동한건 물리 값이 안정되서 그런듯
'Game > MMD' 카테고리의 다른 글
안정화 작업 (3) - 하얀색으로 뜬다 (0) | 2017.11.14 |
---|---|
안정화 작업 (2) - 모핑이 너무 과도하다 (0) | 2017.11.14 |
Vertex에 여러 Skinning model 지원하기 (0) | 2017.11.12 |
Stream Out - Skinned Data (0) | 2017.11.11 |
Stream Out 한 Skinned vertex 가 따로 놀 때 (0) | 2017.11.11 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크