シェイプ アニメーション

 
 
 

シェイプ アニメーションを使用すると、時間の経過に伴ってオブジェクトのシェイプを変化させることができます。 これを実行するには、オブジェクトのポイント クラスタの幾何学的シェイプ(デフォーメーション)に基づいて、ポーズごとにシェイプ キーを保存します(ポリゴンまたはエッジで作成されたクラスタはサポートされていません)。

シェイプ アニメーションは、リファレンス シェイプに相対的なポイント クラスタのシェイプ データをShapeKeys または ShapeKeys に保存します。 シェイプ アニメーションは、特定の種類の Source または Source オブジェクトであり、ActionSource または ActionSource オブジェクトと呼ばれています。

シェイプキーリファレンスモード

ShapeKey または ShapeKey オブジェクトは、特定の ClusterProperty または ClusterProperty を表現し、特定のジオメトリを格納するために使用します。 シェイプ キーは、クラスタ シェイプの絶対値(オブジェクト リファレンスに基づくオフセットまたは頂点のローカル リファレンス フレームに基づく値)を保存することで、クラスタ シェイプの変化に関する情報を提供します。 これらの値を使用する KeyType パラメータの値を取得することで、キーのリファレンス モードを調べることができます。

  • 0 = Absolute(シェイプは絶対値)

  • 1 = Local(シェイプはコントロール頂点のリファレンス フレームに対する相対値)

  • 2 = Object(シェイプはプリミティブ リファレンス フレームに対する相対値)

  • 3 = Result Object(ブレンド済みシェイプはプリミティブ リファレンス フレームに対する相対値)

  • 4 = Reference

  • 5 = Result Local(ブレンド済みシェイプはコントロール頂点のリファレンス フレームに対する相対値)

  • 6 = Result Absolute(ブレンド済みシェイプは絶対値)

  • 7 = Result Absolute Null

  • 8 = Unknown

重要:

KeyType パラメータによって使用される値が、siShapeReferenceMode 列挙型(Geometry.SaveShapeKey メソッド、CClusterPropertyBuilder::AddShapeKey メンバ関数、ConvertShapeReferenceMode コマンドなどの多くの関数で使用される)によって表現される値に対応しないことを認識することが重要です。

ヒント:

あるシェイプ キー リファレンス モードから別のモードに変換するには、ConvertShapeReferenceMode コマンドを使用します。

シェイプ アニメーションの作成

次のように、ポイント クラスタからシェイプ キーを作成できるスクリプト コマンドは多数存在します。

  • ApplyDeformKey: ポーズごとにデフォーメンション キーを保存します。

  • SaveDeformKey: ポーズごとのデフォーメンションのキーを保存します。

  • SelectShapeKey: オブジェクトのリストを別のオブジェクトのシェイプ キーとして選択します。

シェイプ キーは、シェイプ グループ(指定されたクラスタ内でシェイプ キーを意味的に整理するために使用)に割り当てることもできます。 シェイプ グループを CreateShapeGroup コマンドを使用して作成し、SetShapeGroup コマンドを使用してシェイプ キーをグループに割り当てることができます。

シェイプ アニメーションとミキサ

シェイプ キーは、ActionSource または ActionSource([ミキサ]の下に格納され、ShapeClip または ShapeClip としてインスタンス化される)にまとめることもできます。 ShapeClip オブジェクトは、アニメーション ミキサのシェイプ トラックのある特定位置における、シェイプ キー(ソース)のインスタンスです。 オブジェクト モデル(C++ API にはこのメソッドに相当する関数がありません)のGeometry.SaveShapeKey メソッドを使用するか、次のいずれかのスクリプト コマンドを使用します。

  • SaveShapeKey: 現在のシェイプのシェイプ キーを作成し、モデルのシェイプ ソース(Mixer>Sources>Shape フォルダ)のリストに追加します。

  • StoreShapeKey: シェイプ キーをモデルの Mixer>Sources>Shape フォルダに格納しますが、ミキサ内にシェイプ クリップを作成しません。

  • ApplyShapeKey: 指定されたシェイプ キーを現在のフレームのオブジェクトに適用し、アニメーション ミキサ内にシェイプクリップを作成します。

ActionSources に基づいた他のクリップ同様、ShapeClips には単純なクリップと(siClipShapeType)コンパウンド クリップ(siClipShapeCompoundType)があり、SIObject.Type または SIObject::GetType プロパティを持つクリップ オブジェクトに対してテストできます。

シェイプ キーを書き出す

シェイプ キーは、アニメーションに手を加えることなく、ジオメトリのシェイプにソロを適用することで、.obj ファイルに書き出すことができます。 ソロの適用では、次の 2 つの操作を実行します。

  1. clustershapecombinerのShowResultパラメータを false に設定します。

  2. SoloIndex パラメータを書き出すシェイプに設定します。

たとえば、次のコードは、ソロの適用方法を示した上で、次のスクリプト コマンドを使用してシェイプ キーを書き出します。

Pythonの例: シェイプ キーにソロを適用して書き出す

この例では、ほとんどのアクションの実行にスクリプト コマンドを使用しています。

# Setup a few Python-specific things
from win32com.client import constants as c# so we can use Softimage constants
app = Application			# use pointer since we are using so many commands

# Start by making a cone and deforming the topmost point
app.NewScene( "", 0 )
obj = app.CreatePrim( "Cone", "MeshSurface" )
app.SetValue( "Context.ConstructionMode", 1 )
app.ActivateVertexSelTool()
app.AddToSelection( "cone.pnt[1]", "ASITIS", 1 )
app.Translate( "cone.pnt[1]", -4.03443654541759, 4.44089209850063E-16, -3.46944695195361E-17, 
	c.siRelative, c.siView, c.siObj, c.siXYZ )

# Now save a shape key on the cone
app.SaveShapeKey( "cone.pnt[1]", "", "", 1, "", "", "", "", c.siShapeObjectReferenceMode )
app.SelectFilter( "object" )
app.SelectObj( "Mixer.Mixer_Shape_Track.Shape_ClusterClip" )
app.SetValue( "Mixer.Mixer_Shape_Track.Shape_ClusterClip.Mixer_Shape_Track1.ShapeKey_Clip.actionclip.weight", 0.52 )
app.SetKey( "Mixer.Mixer_Shape_Track.Shape_ClusterClip.Mixer_Shape_Track1.ShapeKey_Clip.actionclip.weight", 1, 0.52 )

# Solo the shape key 
app.Selection.SetAsText( obj.Name )
stack = obj.ActivePrimitive.ConstructionHistory
for op in stack :
	if op.Type == "clustershapecombiner" :
		op.Parameters("ShowResult").Value = 1 #true
		op.Parameters("SoloIndex").Value = 1  #solo shape key

# This is the equivalent using scripting commands:
#app.SelectObj( "cone.polymsh.clustershapecombiner" )
#app.SetValue( "cone.polymsh.clustershapecombiner.ShowResult", 0 )
#app.SetValue( "cone.polymsh.clustershapecombiner.SoloIndex", 1 )

# Export the soloed geometry in an OBJ file
sPath = XSIUtils.BuildPath( app.InstallationPath(c.siUserPath), "Data", "SoloExportDemo.obj" )
app.ObjExport( sPath )