ジャンプ先: 概要. 戻り値. キーワード. 関連. フラグ. Python 例.

概要

skeletonEmbed([mergedMesh=boolean], [segmentationMethod=uint], [segmentationResolution=uint])

注: オブジェクトの名前と引数を表す文字列は、カンマで区切る必要があります。これはシノプシスに示されていません。

skeletonEmbed は、取り消し可能、照会可能、および編集不可能です。

このコマンドは、メッシュ内にスケルトンを埋め込むために使用されます。

戻り値

なし

照会モードでは、戻り値のタイプは照会されたフラグに基づきます。

キーワード

geomBind

関連

geomBind

フラグ

mergedMesh, segmentationMethod, segmentationResolution
ロング ネーム(ショート ネーム) 引数タイプ プロパティ
mergedMesh(mm) boolean query
指定すると、選択したメッシュがマージされて、マージされたメッシュを表す Python オブジェクトが返されます。
segmentationMethod(sm) uint create
メッシュの内側または外側を判別するために使用するセグメンテーション アルゴリズムを指定します。既定では、境界およびフィルおよび拡大ボクセル化(boundary-and-fill-and-grow voxelization)が使用されます。

使用可能なアルゴリズムは次のとおりです。

  • 0: 完全メッシュ(ボクセル化なし)。この方法は、「完全メッシュ」(つまり、閉じた、隙間のない、2 次元多様体で、自己交差または非表示の内部/非表示ジオメトリがないメッシュ)で機能します。この方法は、疑似正常テストを使用して、外部からメッシュの内部領域をセグメントします。ボクセル化は使用しません。メッシュの状態が考慮されない場合は、おそらくセグメンテーションに誤りがあります。これにより、セグメンテーション プロセスが大幅に長くなり、スケルトンを正常に埋め込むことができなくなります。
  • 1: 隙間のないメッシュ(塗りつぶし)。この方法は、「隙間のないメッシュ」(つまり、フェースがメッシュの内部領域を外部から完全に分離するメッシュ)で機能します。メッシュには、縮退したフェース、不正なフェース方向、自己交差を含めることができます。この方法は、サーフェスのボクセル化を使用して、内部領域の一部としてメッシュ フェースと交差するすべてのボクセルを分類します。次に、到達されるすべてのボクセルをモデルの外部領域の一部としてマークして、外側から塗りつぶしを実行します。最後に、到達されないすべてのボクセルを内部領域の一部としてマークします。この方法は、メッシュに隙間がない場合、つまり、ボクセル化の解像度に穴がない場合に機能します。それ以外の場合、塗りつぶしが内部領域に達し、不正確なセグメントが生成されます。
  • 2: 不完全メッシュ(塗りつぶし + 拡大)この方法は、穴によって塗りつぶしがメッシュの内部領域に到達しますが、フェース方向に一貫性があり塗りつぶしが可能な場合に機能します。まず、サーフェスのボクセル化を使用して、内部領域の一部としてメッシュ フェースと交差するすべてのボクセルを分類します。次に、塗りつぶしと拡大のステップを交互に実行します。塗りつぶしステップでは、外側からすべてのボクセルへの到達を試みて、到達しないボクセルは内部領域の一部としてマークします。拡大ステップでは、比較的処理負荷の高いプロセスを使用して、既に特定されているボクセルに対して、隣接するすべての内部ボクセルをチェックします。内部と識別されたボクセルは、穴を塗りつぶす可能性が高く、その後の塗りつぶしステップによってさらに内部ボクセルが識別されます。
  • 3: ポリゴン スープ(修理)この方法に多様体またはフェース方向の要件はありません。指定されたオフセット(ボクセル サイズの 3 倍)の入力メッシュをラップするメッシュを再構築し、この 2 次元多様体の完全メッシュを使用して、モデルの外部領域から内部領域をセグメントします。オフセットにより、詳細の一部が失われ、隣接する部分がマージされる可能性があります。ただし、ボディ パーツがそれほど相互に近接していない一般的なモデルでは、通常の場合、これは問題ではありません。
segmentationResolution(sr) uint create
ボクセル グリッドに使用するセグメンテーション解像度を指定します。既定では、256x256x256 ボクセルが使用されます。

フラグはコマンドの作成モードで表示できます フラグはコマンドの編集モードで表示できます
フラグはコマンドの照会モードで表示できます フラグに複数の引数を指定し、タプルまたはリストとして渡すことができます。

Python 例

import maya.cmds as cmds

# First select the shape, not the transform.
cmds.select( 'characterShape' , r=True )
# Embed skeleton using default parameter.
cmds.skeletonEmbed( )
# Result: u'{ [...] (A JSON dictionary with the description of the embedding. }' #
# For debugging: get the merged mesh that will be used
cmds.skeletonEmbed( query=True , mergedMesh=True )
# Result: u'{ [...] (A JSON dictionary with the description of the merged mesh. }' #
# Embed skeleton using polygon soup and 512 resolution.
cmds.skeletonEmbed( segmentationMethod=3 , segmentationResolution=512 )
# This method creates a few joints to see the embedding.
import json
def createJointsFromEmbedding( embeddingString ):
    embedding = json.loads( embeddingString )
    for name , position in embedding[ 'joints' ].iteritems( ):
        joint = cmds.createNode( 'joint' , name=name )
        cmds.xform( joint , worldSpace=True , translation=position )
result = cmds.skeletonEmbed( )
createJointsFromEmbedding( result )
# This method creates a mesh from the merged mesh to see it.
import json
import maya.OpenMaya as OpenMaya
def createMeshFromDescription( meshString ):
    mesh = json.loads( meshString )
    meshPoints = mesh[ 'points' ]
    meshFaces  = mesh[ 'faces' ]
    factor     = 1.0 / mesh[ 'conversionFactor' ]
    # Vertices
    vertexArray = OpenMaya.MFloatPointArray()
    for i in range( 0 , len( meshPoints ) , 3 ):
        vertex = OpenMaya.MFloatPoint( meshPoints[ i ] * factor , meshPoints[ i + 1 ] * factor , meshPoints[ i + 2 ] * factor )
        vertexArray.append( vertex )
    numVertices = vertexArray.length()
    # Faces
    polygonCounts   = OpenMaya.MIntArray()
    polygonConnects = OpenMaya.MIntArray()
    for face in meshFaces:
        for i in face:
            polygonConnects.append( i )
        polygonCounts.append( len( face ) )
    numPolygons = polygonCounts.length()
    fnMesh = OpenMaya.MFnMesh()
    newMesh = fnMesh.create( numVertices , numPolygons , vertexArray , polygonCounts , polygonConnects )
    fnMesh.updateSurface()
    # Assign new mesh to default shading group
    nodeName = fnMesh.name()
    cmds.sets( nodeName , e=True , fe='initialShadingGroup' )
    return nodeName
result = cmds.skeletonEmbed( query=True , mergedMesh=True )
createMeshFromDescription( result )