Animation Clipを作成する

animation clipイベントを作成するには、Atoms UIを開き、必ず

「AnimationClip Events」タブを選択してください。
「Add」をクリックすると、GUIまたはスクリプトモードでクリップを編集するかどうかを尋ねるダイアログが表示されます。


GUI モード


ユーザーのAnimation Clipに名前を付けて下さい(すなわちrobotWalk)。


以前に、エクスポートしたFBXファイルを選択します。ファイルを選択すると、直ちにAtomsは、そのプレビューファイルを検索し、GUIの右側にロードします。ほとんどのGUIオプションは既にこちらで説明されています。
チュートリアルでは、 "Loop Blend"を4に変更します。


プレビューは、ループの開始フレーム、終了フレームを見つける際に、とても便利な機能です。プレビュー上にマウスを移動して、互いに似た2つのポーズを見つけます。一般的に、フットが地面に降りる最初のフレームを選択することは良い選択です。今回の場合、開始フレームは21、終了フレームは50になります。


「Direction Type」をStaticに設定します。
プレビューでは、3D Axisも表示されます。スケルトンの動きを確認して、スケルトンのルートがクリップの最初から最後までの空間をどのように移動するかを確認できます。今回の場合、このクリップの主な移動軸はX軸です。
このため、「Direction」フィールドを(1、0、0)に設定することができます。


「Register」ボタンをクリックするか、Ctrl + Sを押します。
以上で、アニメーションクリップを使用する準備が整いました。


Script モード

Script モードを選択した場合は、次のようにスクリプトを編集する必要があります。
それからCtrl + Sを押すか、「Register」ボタンをクリックしてください。

Animation Clip
import os
import AtomsMath
import AtomsCore
import Atoms
from Atoms import GLOBAL_NAMES


class AnimClipEvent6(Atoms.SimulationEvent):
    eventName = 'robotWalk'
    clipPath = 'D:/projects/atomsDemo/clips/walk.fbx'
    blendFramesAfterFootUp = 4
    loop = True
    loopStart = 21
    loopEnd = 50
    loopBlend = 4
    idle = False
    direction = [1.0,0.0,0.0]
    directionType = 1
    directionFromJoints = [0,1]

    def __init__(self):
        Atoms.SimulationEvent.__init__(self)
        self.setName(self.eventName)

    def load(self):
        CLIP = GLOBAL_NAMES.CLIP
        
        aClips = Atoms.AnimationClips.instance()
        aClips.addAnimationClip(self.eventName, self.clipPath, True)
        acPtr = aClips.animationClip(self.eventName)
        if acPtr is None:
            return
        metadataMap = acPtr.metadata()

        metadataMap[CLIP.BLEND_FRAMES_AFTER_FOOT_UP] = AtomsCore.IntMetadata(self.blendFramesAfterFootUp)
        metadataMap[CLIP.LOOP] = AtomsCore.BoolMetadata(self.loop)
        metadataMap[CLIP.LOOP_START] = AtomsCore.IntMetadata(self.loopStart)
        metadataMap[CLIP.LOOP_END] = AtomsCore.IntMetadata(self.loopEnd)
        metadataMap[CLIP.LOOP_NUM_BLEND_FRAMES] = AtomsCore.IntMetadata(self.loopBlend)

        if self.directionType == 1:
            acPtr.setDirectionType(Atoms.AnimationClip.DirectionType.Static)
        elif self.directionType == 0:
            acPtr.setDirectionType(Atoms.AnimationClip.DirectionType.Pelvis)
        else:
            acPtr.setDirectionType(Atoms.AnimationClip.DirectionType.Joints)
        acPtr.setDirection(AtomsMath.V3d(self.direction[0], self.direction[1], self.direction[2]))
        acPtr.setDirectionFromJoints(self.directionFromJoints[0], self.directionFromJoints[1])
        acPtr.setIdle(self.idle)


Copyright © 2017, Toolchefs LTD.