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」ボタンをクリックしてください。
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.