5.4 게임애니메이션샘플 4 [AO/Leanin]
점프가 Far만 출력이 되서 만들면서 놓친부분을 찾았다.
If CloorCollisionsOffset >0,vertical collision will be performed to every sample of trajectory to have the samples float over the geometry(by FloorCollisionsOffset).
FloorCollisionsOffset >0인 경우, 샘플이 지오메트리 위에 떠 있도록(FloorCollisionsOffset에 의해) 모든 궤적 샘플에 수직 충돌이 수행됩니다.
기본값이 0.0 이다.기본값을 사용하면 Time to land 값이 1.5정도로 고정된다.
솔직히...무슨 말인지 모르겠고,의미 있는 float값을 얻으려면 0보다 커야 된다만 기억 해야겠다.
4개의 함수를 추가 해 준다.
함수를 추가 하며 필요한 변수가 있다면 변수도 생성 해 준다.
AO부터 한다.
ㅇDeadBlending
데드 블렌딩 노드
데드 블렌딩은 시간상 앞으로 전환되는 애니메이션을 추정한 다음 이 추정된 애니메이션과 전환되는 새 애니메이션 간에 일반적인 크로스페이드 블렌드를 수행하는 대체 관성화 방법입니다.
자세한 배경 정보는 https://theorangeduck.com/page/dead-blending을 참조하세요.
이 노드는 전환 시점의 애니메이션 속도를 사용하여 전환 중인 애니메이션을 앞으로 추정하는 방식으로 작동하며, 포즈가 무효화되는 것을 방지하기 위해 시간이 지남에 따라 해당 속도를 줄이는 기하급수적인 감소를 사용합니다.
이 감소 속도는 전환되는 애니메이션의 속도가 전환되는 애니메이션의 포즈를 향해 얼마나 이동하는지에 따라 자동으로 설정됩니다. 잘못된 방향으로 움직이거나 너무 빠르게 움직이면 붕괴율은 더 커지며, 올바른 방향으로 차이에 비해 천천히 움직이면 붕괴율은 낮아집니다.
이러한 감쇠율은 대략적인 평균, 최소 및 최대 감쇠 기간을 지정하는 ExtrapolationHalfLife , ExtrapolationHalfLifeMin 및 ExtrapolationHalfLifeMax 매개변수로 제어할 수 있습니다. 보다 구체적으로 그들은 "반감기", 즉 속도가 절반으로 감소하는 데 걸리는 방법을 지정합니다
이너셜라이제이션 노드와 데드 블렌딩 노드는 모션과 애니메이션 곡선 내의 변경 사항을 추적하여, 이너셜 블렌딩이 활성화되었을 때 모션이 대상 애니메이션 쪽으로 계속 이동할 수 있도록 합니다. 이 노드들은 소스 입력 포즈 핀에 연결된 이너셜 블렌딩 요청에 의해 활성화됩니다. 상태 기계 전환, 블렌딩 노드, 연결된 애니메이션 그래프 및 연결된 애니메이션 레이어는 모두 이너셜 블렌딩을 트리거할 수 있습니다. 이너셜라이제이션 또는 데드 블렌딩 노드는 이너셜 블렌딩 요청의 소스 뒤에 연결되어야하지만 바로 옆에 있을 필요는 없습니다. 이너셜라이제이션 또는 데드 블렌딩 노드를 출력 포즈 노드에 더 가깝게 연기함으로써 그래프 내의 표준 블렌딩을 줄이거나 제거하여 애니메이션 시스템의 성능을 향상시킬 수 있습니다. 단일 이너셜라이제이션 또는 데드 블렌딩 노드는 여러 이너셜 블렌딩 요청을 처리할 수 있습니다. 여러 이너셜 블렌딩 요청을 처리할 때 최소 요청 블렌딩 기간이 사용됩니다.
함수 이름만 보고 당연히 aimoffset이라 생각해 AO로 만들고 있었는데 여기선 Blendspace로 만들었다.
그러고 보니 난 둘의 차이에 대해 생각 해 본적이 없다, 그냥 통상적으로 사용 하는 방식으로 그때 그때 사용 했었는데 이렇게 비교 해 보니 그냥 이정도의 차이가 있다는걸 알았다. 여기선 어떤걸 써도 상과 없지만 BS로 진행 한다.
deadblending은 추가 하지 않았다.
차이점을 못느껴서 불필요 하다고 판단했다.
블랜드 프로파일을 달아주고(이거 너무 좋다)
이렇게 완성.
이제 Leanin
두개의 함수를 만들어 준다.
진행중인 방향의 변화를 체크한다.
반대방향으로 전환되면 false
최대 속도를 현재 속도로 나눠줘서 최대 값을 1로 고정한다.
가속중에는 0이 아닌 값을 가져서 좌우 린인이 만들어 진다. 가속이 끝나 최대 속도에 도달하면 velocity acceleration은 0이 된다.(현재속도에서 이전속도를 빼주고 시간으로 나눠준 값이라 최대에 도달 하면 0)
해당 값을 캐릭터의 로테이션에서 빼준다. 그래서 얻는 값은 -1에서 1
이게 이제 만들 BS의 lean 값이다. -1좌 1우
방향이 전환될때는 최대 가속도 대신 감속값을 사용 한다.
(두 값이 비슷해 큰 차이는 없다.)
이렇게 보면 쉬운데...아무것도 없는 상태에서 나는 이런 함수를 만들어 낼수 있을까?
그리고 총량함수를 만들어 준다.
좌우 이동만 체크 하니 Y값을 가져오고 걷기와 달리기에 따라 기울기가 달라야 하니
리맵 해주고 두 값을 곱해 amount값을 만든다.
BS는 원디렉션이고 뭐...이건 뭐 그냥 하면된다.
잘 작동한다.
댓글
댓글 쓰기