シェイプ アニメーション

 
 
 

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

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

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

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 コマンドなど、多くの関数で使用されます。

ヒント:

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

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

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

  • ApplyDeformKey:ポーズベースのデフォーメーションキーを保存します。

  • SaveDeformKey:ポーズベースのデフォーメーションに対してキーを保存します。

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

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

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

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

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

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

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

ActionSource に基づく他のクリップと同じく、ShapeClip はシンプル(siClipShapeType)またはコンパウンド(siClipShapeCompoundType)のいずれかのタイプになります。どちらのタイプであるかは、SIObject.Type または SIObject::GetType プロパティで Clip オブジェクトをテストして確認できます。

シェイプ キーを書き出す

シェイプ キーは、アニメーションに手を加えることなく、ジオメトリのシェイプにソロを適用することで、.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 )