threejs 관련

Untangling the ThreeJS animation structure

 https://github.com/mrdoob/three.js/issues/6881 의 번역입니다.

 


 

Been looking at modernizing/formalizing the ThreeJS animation framework to be more similar to Unity/Unreal Engine 4. There is a lot of great code in ThreeJS but there is a bit of missing top level organization of animation structures, rather there is a lot of duplication.

 

Here are the classes I've been studying today :

  • SkinnedMesh - Mesh 에서 파생되며 Bone 과 Skeleton 배열 지원을 추가합니다. 

 

The AnimationHandler / Animation pair :

  • AnimationHandler  -  애니메이션의 제작 및 전진을 위한 전역 객체
  • Animation  -  skinned mesh 의 bones 에 일반적으로 사용되는 키프레임 애니메이션 트랙 계층 ,AnimationHandler 와 밀접하게 연결

 

다음은 Animation / AnimationHandler 프레임 워크와 호환되지 않습니다.

  • KeyframeAnimation  -  AnimationHandler 독립 키프레임 트랙입니다. Collada 예제에서만 사용.
  • MorphAnimation  -  AnimationHandler 독립 MorphTarget 애니메이션입니다. morphtargets_horse.html 예제에서만 사용됩니다.

 

The following combine scheduling of animations with meshes / mesh hierarchied : 

( 다음은 meshes / mesh 계층과 애니메이션 스케줄링을 결합한 것입니다. )

 

  • BlendCharacter  -  SkinnedMesh + Animation Scheduler ( 때때로 webgl_animation_skinning_morph.html과 같이 수동으로 움직이는 모프 타겟과 함께 사용됨 )
  • MorphAnimMesh  -  단일 모프 타겟 애니메이션 ( 단순반복 )
  • MorphBlendMesh  -  다중 모프 타겟 애니메이션 블렌딩 ( 모프타겟 애니메이션 간에 변경되는 메시 ) 
  • UCSCharacter  -  SkinnedMesh + Animation ( webgl_morphtargets_human.html에서만 사용됨 )
  • MD2Character  -  MorphAnimMeshes의 묶음 ( webgl_morphtargets_md2.html에서만 사용됨 )
  • MD2Charactercomplex  -  MorphBlendMeshes의 묶음 ( webgl_morphtargets_md2_control.html에서만 사용됨 )

 

이 모든 클래스들을 더 명확한 구조로 축소하는 방법을 생각하려고 노력하고 있습니다.

 

I think a structure similar to this might be the way forward : 

 

  • Track  -  name ( time, value 로 구성된 keys ) 을 가진 키프레임 애니메이션 입니다. 키는 weights 혹은 pos / rot / scale 일 수 있습니다. track 의 이름은 morphTargets 또는 bones / nodes 또는 노드 내의 다른 값을 참조 할 수 있습니다. ( We could even abstract Track to not be keyframed, it could be equation based as well if we get the interface right. )
  • Clip  -  name, duration 을 가지는 트랙. blink, walk, jump 등과 같은 애니메이션 시퀀스입니다. Morph 또는 키프레임, 혹은 둘 모두일 수 있습니다. Unity 의 AnimationClip 클래스와 비슷합니다.
  • Action  -  재생중인 클립. 트랙 이름을 상대경로로 가질 root node 와 연관됩니다. blend weight 를 가지고 애니메이션 시스템에 대기시킬 수 있습니다. 선택적으로 반복 재생 속도를 가질 수 있습니다. ( Will likely require more parameters for various edge cases. ) Unity의 AnimationState 클래스와 비슷합니다.
  • Mixer  -  액션들의 컨테이너. 계층구조에 액션을 적용하는 책임을 갖습니다. ( AnimationHandler 와 비슷할 수 있습니다. 전역이 될 수도, 여러개가 될 수도 있습니다. ) i'm open on this case. 이것은 action 들 사이의 blending 을 책임질 것입니다.
  • Animator  -   a higher level structure on top of Mixer that would contain the logic to do things like walk, run, jump, it would do that by managing what actions are queued up and how they are blended between in order to create a smooth result. (Will have to be easy to extend to support new entity behaviors.) Similar to Unity's Animator class 

 

AnimationHandler, Animation ( Clip / Track으로 대체 ),
KeyframeAnimation ( Track으로 대체 ),
MorphAnimation ( Track으로 대체 ),
BlendCharacter ( Mixer / Clip / Track으로 대체 ),
MorphAnimMesh ( Mixer / Clip / Track으로 대체 됨 ),
MorphBlendMesh ( Animator / Mixer / Clip / Track으로 대체 ),
USCCharacter, MD2Character, MD2CharacterComplex ( Animator / Mixer / Clip / Track으로 대체 ),
적어도 트랙 / 클립 / 액션 / 믹서 / 애니메이터 이 디자인은 원한다면
Materials, Lights and Cameras를 포함한 ThreeJS의 모든 객체를 구동 할 수 있습니다.
 
기본적으로 이는보다 유연하고 사실 단순한 디자인입니다.
 
위는 Unity / Unreal Engine과 매우 비슷합니다.

댓글

댓글 본문
작성자
비밀번호
버전 관리
gamza
현재 버전
선택 버전
graphittie 자세히 보기