ステート セット MAXScript アクセス

ステート セットのレンダリング パス管理システムは、3ds Max 2012 に対する Subscription Advantage Pack 拡張機能で初めて導入され、現在、3ds Max 2013 以降では欠かせない機能となっています。3ds Max 2018 以降では、コンポジティング エディタがノードベース システムになっています。

この機能は、DotNet オブジェクト、およびそのプロパティとメソッドを介して、MAXScript に公開されます。

次の例は、ステート セットへのアクセスおよび操作に関係する基本的な手順を示しています。

ステート セットへのアクセス

    stateSetsDotNetObject = dotNetObject "Autodesk.Max.StateSets.Plugin" --Get StateSets dotNet object.
    stateSets = stateSetsDotNetObject.Instance --Get the state sets instance from the dotNet object.

ステート セット ウィンドウを開く/閉じる

    stateSets.ShowMainFrame() --Open the State Sets window.
    stateSets.HideMainFrame() --Close the State Sets window.

マスター ステートへのアクセス

    masterState = stateSets.EntityManager.RootEntity.MasterStateSet

新規ステート セットの追加と名前変更

    stateSet = masterState.AddState()
    stateSet.Name = "MyStateSet"
    masterState.AssignUniqueName stateSet "MyMasterStateset" --Assigns a unique name to the state set

現在のステート セットの変更、記録の開始と終了

    previousCurrentStateSet = masterState.CurrentState.Items[0] --Record current state set.
    masterState.CurrentState = #(stateSet) --Assign current state set.
    stateSet.BeginRecording() --Begin recording state set.  
    stateSet.EndRecording() --End recording state set.
    masterState.CurrentState = #(previousCurrentStateSet) --Assign previous state set.

子サブステート セットの追加とレンダリング、および他の操作の実行

    subStateSet = stateSet.AddState()
    subStateSet = stateSet.Render #(stateSet) --Render state set, note that we specify a path because this state set could be located under multiple parents.

    scriptedState = stateSet.AddScriptedState(false) --Add a scripted state.
    scriptedState.ApplyScript = "-- MaxScript executed when applying state set" --Assign the apply script.
    scriptedState.RevertScript = "-- MaxScript executed when reverting state set" --Assign the revert script.
    stateSet.CreateTemplate() --Create a template for this state set  

ステート セットと最初の子の削除

    masterState.RemoveChild stateSet --Removes the state set
    masterState.RemoveChild masterState.Children.Item[0] --Removes the first child

コンポジタ ビューの追加

    masterState.CreateCompositingView true --Add compositor view with render elements
    masterState.CreateCompositingView false --Add compositor view without render elements

アクティブなコンポジタ ビューでのノード取得

    cViewNodes = stateSets.CompositingViewNodes

    for i in 0 to (cViewNodes.Count - 1 ) do (
        node = cViewNodes.Item(i)
        node.Collapsed = true
        print node.Tag.Name    
    )

シーン内のすべてのステート セットのレンダリング

    masterState.RenderAllStates()

オブジェクトのステート セットへのアクセス

    objectStateSet = masterState.ObjectStateSet

ステート セット システムによって実装されたすべての DotNet オブジェクトとクラスのすべてのプロパティおよびメソッドには、DotNet 検査関数を使用して MAXScript からアクセス可能です。

ステート セット プラグイン インスタンスの探索

    stateSetsDotNetObject = dotNetObject "Autodesk.Max.StateSets.Plugin"
    dotNetObject:Autodesk.Max.StateSets.Plugin

    stateSets = stateSetsDotNetObject.Instance
    dotNetObject:Autodesk.Max.StateSets.Plugin

    showProperties stateSets
      .AbsentLayerStatesWereRemovedOnLoad : <System.Boolean>
      .ActiveViewId : <System.UInt16>
      .BitmapInfos : <System.Collections.Generic.Dictionary`2[System.Int32,Autodesk.Max.IBitmapInfo]>, read-only
      .ClassDescManager : <Autodesk.Max.StateSets.ClassDescManager>, read-only
      .CompositingView : <Ephere.Gui.NodeViews.NodeView>, read-only
      .CompositingViewNodes : <System.Collections.Generic.IList`1[Ephere.Gui.NodeViews.NodeView+Node]>, read-only
      .CompositorLink : <Autodesk.Max.StateSets.CompositorLink.CompositorLinkSettingsController>, read-only
      .CompositorLinkTargetViewId : <System.UInt16>
      .Configuration : <Autodesk.Max.StateSets.Configuration>
      .EntityManager : <Autodesk.Max.StateSets.Entities.EntityManager>, read-only
      .Global : <Autodesk.Max.IGlobal>
      .GlobalStringFormat : <System.Drawing.StringFormat>, read-only
      .HasRenderPreviewNode : <System.Boolean>, read-only
      .Instance : <Autodesk.Max.StateSets.Plugin>, static
      .InvokeRequired : <System.Boolean>, read-only
      .IsInSequencerMode : <System.Boolean>
      .IsMainFrameInitialized : <System.Boolean>, read-only
      .IsMainFrameVisible : <System.Boolean>
      .LoadedVersion : <System.Version>
      .MainFrameBounds : <System.Drawing.Rectangle>
      .NodeEvents : <Autodesk.Max.StateSets.Plugin+NodeEventCallback>, read-only
      .OpenViewCount : <System.Int32>, read-only
      .PluginWasRegistered : <System.Boolean>
      .PreviewRenderNode : <Autodesk.Max.IINode>, read-only
      .SequencerTreeView : <Ephere.Gui.NodeViews.NodeView>, read-only
      .Skin : <Ephere.Gui.NodeViews.Skin>, read-only
      .Sync : <System.ComponentModel.ISynchronizeInvoke>
      .ToolbarTreeView : <Ephere.Gui.NodeViews.NodeView>, read-only
      .TreeView : <Ephere.Gui.NodeViews.NodeView>, read-only
      .TreeViews : <Ephere.Gui.NodeViews.NodeView[]>, read-only
      .accumCallbacks : <System.Int32[]>
    true

    showMethods stateSets
      .<System.Int32>AccumCallbackCount <Autodesk.Max.StateSets.Plugin+AccumCallbackType>type
      .AccumCallbackIncrement <Autodesk.Max.StateSets.Plugin+AccumCallbackType>type
      .AccumCallbackIncrement <Autodesk.Max.StateSets.Plugin+AccumCallbackType>type <System.Int32>n
      .AccumCallbackReset <Autodesk.Max.StateSets.Plugin+AccumCallbackType>type
    -- Added in 3ds Max 2018:
      .<Ephere.Gui.NodeViews.NodeView>AddTreeView()
      .<System.IAsyncResult>BeginInvoke <System.Delegate>method <System.Object[]>args
      .Cleanup()
      .<T>CreateInstance()
      .<System.Runtime.Remoting.ObjRef>CreateObjRef <System.Type>requestedType
      .<System.Object>EndInvoke <System.IAsyncResult>result
      .<System.Boolean>Equals <System.Object>obj
      .[static]<System.Boolean>Equals <System.Object>objA <System.Object>objB
      .<System.Int32>GetHashCode()
      .<System.Object>GetLifetimeService()
      .<System.Type>GetType()
      .<System.Int32>GetUniqueBitmapInfoId()
      .HideMainFrame()
      .Initialize <Autodesk.Max.IGlobal>global <System.ComponentModel.ISynchronizeInvoke>sync
      .<System.Object>InitializeLifetimeService()
      .<System.Object>Invoke <System.Delegate>method <System.Object[]>args
      .<Autodesk.Max.IValue>LaunchBlank <Autodesk.Max.IValue[]>args
      .[static]Log <Autodesk.Max.StateSets.Plugin+LogType>logType <System.String>message
      .[static]Log <System.String>message <System.Boolean>newLine
      .LogLocal <Autodesk.Max.StateSets.Plugin+LogType>logType <System.String>message
      .PreviewRenderNodeReset()
      .[static]<System.Boolean>ReferenceEquals <System.Object>objA <System.Object>objB
      .RegisterAnchorCallbacks()
      .ReloadConfiguration()
      .ResetAndDelete()
      .ResetConfiguration()
      .ResetNodeEventCallbackMessages()
      .ShowMainFrame()
      .<Autodesk.Max.StateSets.Entities.StateSets.SetupRenderOutputs>ShowSetupRenderOutputsPanel()
      .ToggleMainFrame()
      .<System.String>ToString()
      .TriggerNodeEventCallbackMessages()
      .UnRegisterAnchorCallbacks()true
    true

    showEvents stateSets
       CameraSequencerModeChanged <System.Boolean>obj = ( ... )
       CurrentLayerChanged <Autodesk.Max.IILayer>obj = ( ... )
       CurrentStateSetChanged <Autodesk.Max.StateSets.Entities.StateSets.StateSet>obj = ( ... )
       ScenePostSave = ( ... )
       StateApplied <Autodesk.Max.StateSets.Entities.StateSets.StateSet>arg1 <System.Boolean>arg2 = ( ... )
       StateRecording <Autodesk.Max.StateSets.Entities.StateSets.StateSet>arg1 <System.Boolean>arg2 = ( ... )
       StateSetAdded <Autodesk.Max.StateSets.Entities.StateSets.StateSet>obj = ( ... )
       StateSetChanged <Autodesk.Max.StateSets.Entities.StateSets.StateSet>obj = ( ... )
       StateSetRemoved <Autodesk.Max.StateSets.Entities.StateSets.StateSet>obj = ( ... )
       StateSetRenamed <Autodesk.Max.StateSets.Entities.StateSets.StateSet>obj = ( ... )
       TimeChange <System.Int32>obj = ( ... )
       TimeRangeChanged = ( ... )
    true

MasterStateSet の探索

     showProperties stateSets.EntityManager .RootEntity : <Autodesk.Max.StateSets.Entities.Root>
    true

    showProperties stateSets.EntityManager.RootEntity
      .AutomaticName : <System.String>
      .AutomaticTypeName : <System.String>
      .Children : <System.Collections.Generic.List`1[Autodesk.Max.StateSets.Entities.Entity]>
      .CustomAttributes : <System.Collections.Hashtable>, read-only
      .CustomChildren : <System.Collections.Generic.List`1[Autodesk.Max.StateSets.Entities.Entity]>
      .Description : <System.String>
      .DynamicInsertTarget : <System.Boolean>
      .HierarchyIndex : <System.Int32>, read-only
      .InternalName : <System.String>, read-only
      .MasterStateSet : <Autodesk.Max.StateSets.Entities.StateSets.Master>, read-only
      .Name : <System.String>
      .Parents : <Autodesk.Max.StateSets.Entities.Entity[]>, read-only
      .TypeName : <System.String>
      .UseNameForTypeName : <System.Boolean>, read-only
      .CustomChildrenToken : <System.String>, read-only, static
    true

    showProperties stateSets.EntityManager.RootEntity.MasterStateSet
      .AutomaticName : <System.String>, read-only
      .AutomaticTypeName : <System.String>
      .Children : <System.Collections.Generic.List`1[Autodesk.Max.StateSets.Entities.Entity]>
      .CompositorLinkFilePath : <System.String>
      .CurrentState : <Autodesk.Max.StateSets.Entities.StateSets.StateSet[]>
      .CustomAttributes : <System.Collections.Hashtable>, read-only
      .CustomChildren : <System.Collections.Generic.List`1[Autodesk.Max.StateSets.Entities.Entity]>
      .DefaultRenderOutputFilePattern : <System.String>, read-only, static
      .DescendantStateCount : <System.Int32>, read-only
      .Description : <System.String>, read-only
      .DynamicInsertTarget : <System.Boolean>
      .HierarchyIndex : <System.Int32>, read-only
      .InternalName : <System.String>, read-only
      .Name : <System.String>
      .ObjectStateSet : <Autodesk.Max.StateSets.Entities.StateSets.StateSet>, read-only
      .Parents : <Autodesk.Max.StateSets.Entities.Entity[]>, read-only
      .RenderOutputFilePattern : <System.String>
      .StatesWithErrors : <System.Collections.Generic.ICollection`1[Autodesk.Max.StateSets.Entities.StateSets.IState]>, read-only
      .TypeName : <System.String>
      .UseNameForTypeName : <System.Boolean>, read-only
      .CustomChildrenToken : <System.String>, read-only, static
      .StateNameToken : <System.String>, read-only, static
    true

    showMethods stateSets.EntityManager.RootEntity.MasterStateSet
      .<Autodesk.Max.StateSets.Entities.Entity>AddChild <Autodesk.Max.StateSets.Entities.Entity>entity <System.Boolean>wasAutoGenerated
      .<Autodesk.Max.StateSets.Entities.Entity>AddChild <Autodesk.Max.StateSets.Entities.Entity>entity <System.Boolean>wasAutoGenerated <System.Boolean>broadcastEvent
      .AddObjectState()
      .AddObjectState <System.Nullable`1[[System.UInt16, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]>targetViewId
      .<Autodesk.Max.StateSets.Entities.StateSets.StateSet>AddState()
      .<Autodesk.Max.StateSets.Entities.StateSets.StateSet>AddState <System.Nullable`1[[System.UInt16, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]>targetViewId <System.Boolean>addToCompositorView
      .AssignUniqueName <Autodesk.Max.StateSets.Entities.Entity>state <System.String>baseName
      .BeginRecordingStateSet <Autodesk.Max.StateSets.Entities.StateSets.StateSet>stateSet <Autodesk.Max.StateSets.Entities.StateSets.StateSet[]>path
      .CheckForStateErrors()
      .CollectDescendantStateSets <System.Collections.Generic.List`1[[Autodesk.Max.StateSets.Entities.StateSets.StateSet, Autodesk.Max.StateSets, Version=20.0.966.0, Culture=neutral, PublicKeyToken=null]]>destination
      .CollectDescendantsWithCustomAttribute <System.Object>customAttribute <System.Collections.Generic.List`1[[Autodesk.Max.StateSets.Entities.Entity, Autodesk.Max.StateSets, Version=20.0.966.0, Culture=neutral, PublicKeyToken=null]]>destination
      .CreateCompositingView <System.Boolean>includeRenderElements
      .<System.Runtime.Remoting.ObjRef>CreateObjRef <System.Type>requestedType
      .<Autodesk.Max.StateSets.Entities.StateSets.IParameter>CreateUserCreatableParameter <System.String>name
      .DefaultSetup()
      .Dispose()
      .<System.Boolean>Equals <System.Object>obj
      .[static]<System.Boolean>Equals <System.Object>objA <System.Object>objB
      .GenerateChildrenForTarget <Autodesk.Max.StateSets.Entities.Entity>target
      .<Autodesk.Max.StateSets.Entities.Entity>GetChild <System.String>name
      .<T>GetCustomAttribute <System.Object>key <T>defaultValue
      .<System.Boolean>GetCustomAttributeBoolean <System.Object>key
      .<Autodesk.Max.StateSets.Entities.Entity>GetDescendant <System.String>name
      .<Autodesk.Max.StateSets.Entities.Entity>GetDescendant <System.Collections.Generic.List`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]>hierarchyIndex
      .<System.Collections.Generic.IEnumerable`1[Autodesk.Max.StateSets.Entities.Entity]>GetDescendants()
      .<System.Int32>GetDescendantStateSetIndex <System.Collections.Generic.IEnumerable`1[[Autodesk.Max.StateSets.Entities.StateSets.StateSet, Autodesk.Max.StateSets, Version=20.0.966.0, Culture=neutral, PublicKeyToken=null]]>stateSetPath
      .<System.Collections.Generic.List`1[Autodesk.Max.StateSets.Entities.StateSets.StateSet[]]>GetDescendantStateSetPaths <System.Boolean>includeObjectStateSet
      .<System.Int32>GetHashCode()
      .<System.Collections.Generic.List`1[System.String]>GetHierarchyIndex <Autodesk.Max.StateSets.Entities.Entity>descendant
      .<System.Object>GetLifetimeService()
      .GetObjectData <System.Runtime.Serialization.SerializationInfo>info <System.Runtime.Serialization.StreamingContext>context
      .<Autodesk.Max.StateSets.Entities.StateSets.StateSet>GetStateById <System.Int32>id
      .<System.Type>GetType()
      .<System.String[]>GetUserCreatableParameterNames()
      .<System.Boolean>HasCustomAttribute <System.Object>key
      .<System.Boolean>HasDescendant <Autodesk.Max.StateSets.Entities.Entity>descendant <System.Collections.Generic.HashSet`1[[Autodesk.Max.StateSets.Entities.Entity, Autodesk.Max.StateSets, Version=20.0.966.0, Culture=neutral, PublicKeyToken=null]]>ignoreParents
      .<System.Boolean>HasDescendant <Autodesk.Max.StateSets.Entities.Entity>descendant <Autodesk.Max.StateSets.Entities.Entity[]>ignoreParents
      .<System.Object>InitializeLifetimeService()
      .<Autodesk.Max.StateSets.Entities.Entity>InsertChild <System.Int32>index <Autodesk.Max.StateSets.Entities.Entity>entity
      .<Autodesk.Max.StateSets.Entities.Entity>InsertChild <System.Int32>index <Autodesk.Max.StateSets.Entities.Entity>entity <System.Boolean>wasAutoGenerated <System.Boolean>broadcastEvent
      .InvalidateChildren()
      .<System.Boolean>IsDescendantOf <Autodesk.Max.StateSets.Entities.Entity>ancestor
      .[static]maxnrAssignStateSetJob <System.Int32[]>stateSetsHandles <System.Int32>numHandles
      .<System.Boolean>OnCreateChildForIndex <System.String>index <Autodesk.Max.IRepresentation>target
      .[static]<System.Boolean>ReferenceEquals <System.Object>objA <System.Object>objB
      .Refresh()
      .RemoveChild <Autodesk.Max.StateSets.Entities.Entity>entity
      .RemoveChild <Autodesk.Max.StateSets.Entities.Entity>entity <System.Boolean>entityChange
      .RemoveChild <Autodesk.Max.StateSets.Entities.Entity>entity <System.Boolean>entityChange <System.Boolean>broadcastEvent
      .RemoveCustomAttribute <System.Object>key
      .<System.Boolean>Rename <System.String>newName
      .RenderAllStates <System.Boolean>forceNetworkRender
      .RenderStates <System.Collections.Generic.IEnumerable`1[[System.Collections.Generic.IEnumerable`1[[Autodesk.Max.StateSets.Entities.StateSets.StateSet, Autodesk.Max.StateSets, Version=20.0.966.0, Culture=neutral, PublicKeyToken=null]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]>stateSetPaths <System.Boolean>useNetworkRender
      .Reset()
      .ResetCompositingView <System.Boolean>includeRenderElements
      .SetCurrentStateSet <Autodesk.Max.StateSets.Entities.StateSets.StateSet[]>path
      .SetCustomAttribute <System.Object>key <T>value
      .SetCustomAttributeBoolean <System.Object>key <System.Boolean>value
      .SetupRenderOutputsPath <System.String>value
      .<System.String>ToString()
      .UpdateHierarchyParents()
    true