Ali’s Wedding | Superstore - s03e08 (2015) | ¡Kapow!!! Junio Vol.1 : Isla de Craperros !!!!

백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011

All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
 8
 
  1. M2프로젝트의 애니메이션 로딩 전략 ㈜넥슨 GTR팀 백승엽 2. 자기소개 신규개발3본부 1실 GTR팀 과장 프로그래머 14년차 넥슨…
Share
Transcript
  • 1. M2프로젝트의 애니메이션 로딩 전략 ㈜넥슨 GTR팀 백승엽
  • 2. 자기소개 신규개발3본부 1실 GTR팀 과장 프로그래머 14년차 넥슨 6년차
  • 3. 자기소개
  • 4. 리소스 현황 ????+ 모션 ????+ 클립 약 ???MB 이 PT의 모든 비교 수치는 현재의 리소스셋을 사용해서 테스트한 것입니다
  • 5. 처음에는 클라이언트 기동시에 모두 로드 엔진을 만들면서 게임을 만드는 상황 리소스 관리가 없었음 로딩랙은 피하고 싶었음 리소스 양이 아직 많지 않았다
  • 6. .Clip 텍스트 데이터 읽을 수 있는 포맷 디버깅에 도움
  • 7. 개발이 진행되면서 리소스가 증가 초기 기동시간의 압박이 먼저 왔다
  • 8. 바이너리 클립
  • 9. .bClip 클라이언트의 클립 구조체를 거의 그대로 덤프 파일 사이즈 감소 파싱 불요 로딩 속도 향상
  • 10. 클립 리덕션 두 프레임을 잡아서 선형보간 -> 그 사이 프레임들의 실제값과 비교 -> 오차가 최대가 되는 프레임을 골라냄 -> 모든 오차가 기준치 이하가 될 때까지 반복
  • 11. 0 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 클립 리덕션 0 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 0 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 0 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 0 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6
  • 12. 클립 리덕션 설정 기준치는 설정 파일에서 읽어옴 퀄리티를 손상시키지 않는 선에서 적절히 개별 모션 단위 설정도 가능
  • 13. 데이터 압축 32bit float를 16bit int로 저장 메모리 상에서도 압축된 상태 로드할 때가 아닌 참조할 때 해독
  • 14. 벡터 압축 트랜슬레이션/스케일(= 벡터) 트랙 최소값 트랙 최대값 트랙 중간값 INT_MIN INT_MAX 0
  • 15. 쿼터니온 압축 로테이션(= 쿼터니온) 회전값을 상대 회전으로 변환 쿼터니온 -> 벡터
  • 16. 바이너리 클립의 성과 로딩시간(초) 파일크기(MB) 클립 바이너리클립
  • 17. 인터미디엇 폴더
  • 18. 인터미디엇 폴더 익스포터에서는 클립을 익스포트 바이너리 클립은 빌드 서버가 빌드 클립의 장점을 유지하고 싶었음 그럼, 애니메이터의 동작 확인은?
  • 19. 인터미디엇 폴더 인터미디엇 폴더 중간 단계의 리소스가 위치하는 곳 리테일에는 포함되지 않는다 클립을 로드하는 설정이 존재 클립 로드시 실시간으로 리덕션 애니메이터가 리덕션 설정치 조정 가능
  • 20. 인터미디엇 폴더 클립과 바이너리 클립 어느 것을 로드? 무조건 클립 우선 어느 것을 로드할지 판정에 시간 소모 더 느려져 버린다 애니메이터 PC의 클립은 자신이 작업한 것
  • 21. 클립 번들
  • 22. 클립 번들 초기 기동시에 로드 모든 클립을 포함 각 클립은 격하게 리덕션 되어 있다 애니메이션 품질의 저하를 감수 오동작으로 보이지는 않는 선
  • 23. 클립 번들의 동작 처음으로 클립이 요청되면 번들에서 로드해 둔 클립을 재생하면서 백그라운드에서 클립을 로드한다 로드가 끝나면 그 때부터 로드한 클립을 재생
  • 24. 클립 번들의 리덕션 번들 리덕션 일반 리덕션
  • 25. 클립 번들의 리덕션 처음 n 프레임은 리덕션하지 않는다 처음 n 프레임 동안은 고품질 이 구간을 재생하는 동안 로딩되면 참 좋겠네 기대만큼 잘 안되더라
  • 26. 클립 번들의 성과 여전히 애니메이션 로드랙이 없다! 초기 기동시간(초) 초기 로드 양(MB) 번들 이전 번들 도입
  • 27. 개발이 진행되면서 리소스가 증가 이제는 메모리의 한계가 왔다
  • 28. 상식적인 접근 필요한 것만 로드한다 뭐가 필요한지 어떻게 알아낼 것인가 필요 없어진 것은 제거한다 뭐가 필요 없어졌는지 어떻게 알아낼까
  • 29. 어떻게 할 것인가 이 부근에는 A몬스터가 나타난다 이 몬스터의 모션을 로드하자! 몬스터 등장 전에 로딩이 끝날 것인가? 이 정보는 어떻게 얻을 수 있을까? 사람의 개입 없이 자동이면 좋겠다
  • 30. 여기서 아이디어 ex)몬스터 A가 맞은 다음에는 서 있는 자세로 돌아가거나 맞고 넘어지거나 맞고 날아갈 것이다 애니메이션 간의 순서 관계를 이용할 수 있다!
  • 31. 클립 로드 그룹
  • 32. 액티베이터 클립 연속동작의 시작점이 되는 클립들 클립 번들에 포함 기동시에 번들 버전이 로드되어 있음
  • 33. 클립로드그룹 액티베이터가 요청되면 같이 로드하는 클립들 클립번들에 포함되지 않음 필요할 때 로드되어 있다고 보장은 안됨 로드그룹 튜닝으로 괜찮은 수준으로 동작 중
  • 34. 클립로드그룹의 빌드 ActionSlot ActionSet Anim-Clip Table Slot-LoadSlot Table Anim-LoadAnim Table Clip-LoadClip Table
  • 35. 클립로드그룹의 성과 초기 기동시간(초) 초기 로드 양(MB) 번들 도입 로드그룹
  • 36. 클립 언로드
  • 37. 클립 언로드 클립 단위 레퍼런스 카운트 로드그룹 단위 레퍼런스 카운트 같은 로드 그룹 내의 다른 클립이 사용 중 -> 이 클립도 다시 사용될 가능성 높다
  • 38. 클립 언로드 모든 소속 클립의 레퍼런스 카운트가 0 로드그룹의 레퍼런스 카운트가 0 그룹이 언로드 가능한 상태 클립이 다른 그룹에도 속했을 수 있다 소속된 그룹 모두가 0이야 클립이 언로드 가능
  • 39. 클립언로드 레퍼런스 카운트가 0이 되면 바로 언로드하지는 않는다 현재 메모리 사용량에 따라서 언로드 상식적인 전략 M2에서는 아직 튜닝 필요한 부분
  • 40. Q&A
  • We Need Your Support
    Thank you for visiting our website and your interest in our free products and services. We are nonprofit website to share and download documents. To the running of this website, we need your help to support us.

    Thanks to everyone for your continued support.

    No, Thanks