Animation Clipの作成 - Houdini

アニメーションクリップイベントを作成するには、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を押します。

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


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.