比較バージョン

キー

  • この行は追加されました。
  • この行は削除されました。
  • 書式設定が変更されました。

To build an animation clip event, open the Atoms UI and make sure to have selected the "AnimationClipEvents" tab.

Click on "Add" and you will be prompted with a dialog asking if you want to edit your clip in GUI or script mode.

GUI mode

Give a name to your animation clip (i.e. robotWalk).

Select the FBX file you exported previously. As soon as you select a file Atoms will look for its preview file and will load it on the right side of the GUI.

Most of the GUI options were explained here already.

For this tutorial, we are going to change the "Loop Blend" to 4.

The preview will be very handy now to find the loop start and end frames. Move the mouse over the preview and find two poses that are similar to each other. Generally the first frame where a foot gets down on the ground will be a good choice.
In our case the start frame will be 21 and the end frame will be 50.

Set the "Direction Type" to static.
In the preview you will also see the "Clip direction". It tells you how your skeleton root travels in space from the beginning to the end of your clip. In this case it's easy to see that the major movement axis for this clip is the X axis.
For this reason, you can set the "Direction" field to (1, 0, 0).

Click the "Register" button or press CTRL+S.

 Your Animation Clip is now ready to be used.

Image Removed

Script mode

In case you selected the script mode, you should edit your script so it looks like the following.

Then hit CTRL+S or click on the "Register" button. アニメーションクリップイベントを作成するには、Atoms UIを開き、必ず

「AnimationClipEvents」タブを選択してください。

「Add」をクリックすると、GUIまたはScriptモードでクリップを編集するかどうかを尋ねるダイアログが表示されます。


GUI モード


ユーザーのAnimation Clipに名前を付けてください(つまりrobotWalk)。
以前に、エクスポートしたFBXファイルを選択します。ファイルを選択すると、すぐにAtomsは、そのプレビューファイルを検索して、GUIの右側にロードします。

大半のGUIオプションは、既にこちらで説明されています。
こちらのチュートリアルでは、 "Loop Blend"を4に変更します。


プレビューは、ループの開始フレームと終了フレームを確認する際に、とても便利です。プレビューの上にマウスを移動して、互いに似た2つのポーズを見つけます。

一般的に、フットがグラウンドに降りる最初のフレームを選択することは良い選択です。
今回の場合、開始フレームは21、終了フレームは50になります。


"Direction Type"をStaticに設定します。


プレビューでは、「Clip Direction」も表示されます。これは、スケルトンのルートがクリップの最初から最後のスペースをどのように移動するかを示しています。この場合、このクリップの主な移動軸はX軸です。
よって、「Direction」フィールドを(1、0、0)に設定することができます。

「Register」ボタンをクリックするか、Ctrl + Sを押します。

以上で、アニメーションクリップを使用する準備が整いました。

Image Added


Script モード

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

コード ブロック
languagepy
themeEclipse
firstline1
titleAnimation Clip
linenumberstrue

import os
import imathAtomsMath
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(imathAtomsMath.V3d(self.direction[0], self.direction[1], self.direction[2]))
        acPtr.setDirectionFromJoints(self.directionFromJoints[0], self.directionFromJoints[1])
        acPtr.setIdle(self.idle)