BakeToTexture : UtilityPlugin

[テクスチャにベイク処理](Bake To Texture)ダイアログとその機能にアクセスできます。3ds Max 2021 以降 で使用可能です。注: 以下に示すように、3ds Max 2021.1 Update にはいくつかの新しい追加機能があります。

コンストラクタ:

class instances not creatable by MAXScript

インタフェース: BakeToTexture

このインタフェースは、出力ファイル オプション、ファイル タイプとサイズ、ベイク処理など、[テクスチャにベイク処理] (Bake to Texture)ダイアログの機能へのアクセスを提供します。BakeToTextureMap インタフェース(以下を参照)は、個々のベイク処理マップ自体の機能を公開します。

これらの API の一部の使用方法を示す図については、このトピックの最後にあるサンプルを参照してください。

プロパティ:

BakeToTexture.outputPath : string : Read|Write

ベイク処理済みマップ ファイルの出力パスを取得または設定します。

BakeToTexture.autoCloseProgressDialog : boolean : Read|Write

キュー内のすべてのマップがベイク処理された直後に、進行状況ダイアログを閉じるかどうかを取得または設定します。false に設定すると、処理の完了後もダイアログは開いたままになります。

BakeToTexture.showFrameBuffer : boolean : Read|Write

ベイク処理中にフレーム バッファ ウィンドウを表示するかどうかを指定します。

BakeToTexture.alwaysOverwriteExistingFiles : boolean : Read|Write

既存のマップ ファイルを上書きするかどうかを指定します。

true の場合、ベイク処理中に新しいファイルが生成されると、既存のファイルは置き換えられ、alwaysSkipExistingFiles プロパティは false に設定されます。

false の場合、既存のファイルは置き換えられません。このプロパティと alwaysSkipExistingFiles プロパティが両方とも false の場合は、警告が表示され、ユーザは各ファイルを上書きするのか、それともスキップするのかを決定する必要があります。

BakeToTexture.alwaysSkipExistingFiles : boolean : Read|Write

既存のマップ ファイルをスキップするかどうかを指定します。3ds Max 2021.1 Update 以降で使用可能です。 true** の場合、既存のファイルはベイク処理中に再度ベイク処理されません。** alwaysOverwriteExistingFiles プロパティも false に設定されます。

false の場合、既存のファイルはスキップされません。したがって、このプロパティと alwaysOverwriteExistingFiles プロパティが両方とも false の場合は、警告が表示され、ユーザは各ファイルを上書きするのか、それともスキップするのかを決定する必要があります。

メソッド:

<integer>BakeToTexture.getMapsCount <node>object

指定されたオブジェクトに設定されたマップの総数を返します。

<node by value array>BakeToTexture.getObjects()

関連付けられたテクスチャ マップにベイク処理するすべてのシーン オブジェクトを含む配列を返します。

<Interface by value array>BakeToTexture.getAllMaps()

[テクスチャにベイク処理] (Bake to Texture)ダイアログで、オブジェクトに対して設定されたすべてのマップの配列を返します。

<Interface by value array>BakeToTexture.getMaps <node>object

指定されたオブジェクトに設定されたすべてのマップの配列を返します。

<boolean>BakeToTexture.bakeableMapsAreValid()

レンダリング可能として設定されたすべてのマップが有効な場合は true を返します。つまり、これらのマップは警告を生成せず、現在設定されているレンダラーと互換性があります。

<boolean>BakeToTexture.bake onMapBakedCallback:<value>

ベイク処理を開始します。各マップ ファイルが保存された後、onMapBakedCallback コールバック関数が呼び出されます。

マップは単一のファイルまたは複数のファイル(UDIM タイルやアニメートされたフレームの場合と同様)になり、各ファイルの後でコールバックが呼び出されます。3ds Max 2021.1 Update 以降で使用可能です。 コールバック関数は、次の 2 つのパラメータを受け取ります。

  1. successfulBake: マップ ファイルが正常にベイク処理されて保存されたかどうかを示すブール値。
  2. bakeFilePath: ベイク処理されたマップのイメージ ファイルの絶対ファイルパスを含む文字列。

コールバック関数は、キュー内の次のマップ ファイル(複数ファイルのマップの場合)またはマップでベイク処理を続行するかどうかを示すブール値を返します。true の場合は処理が続行されることを示し、false の場合は処理を停止します。

たとえば、次のように使用されます。

fn onMapBaked successfulBake MapFileString =
(
     if successfulBake and doesFileExist(MapFileString) then
     (
          print MapFileString
          return true
     ) else return false
)
BakeSuccess = BakeToTexture.bake onMapBakedCallback:onMapBaked
<Interface>BakeToTexture.addMap <node>object <enum>mapTypeEnum
mapTypeEnum enums: {#AlphaMap|#BlendMap|#CavityMap|#CompleteMap|#DensityMap|#DiffuseMap|#DustMap|
#HeightMap|#LightMap|#NormalMap|#OcclusionMap|#ShadowMap|#SpecularMap|#SubSurfaceMap|#OverrideMap}

mapTypeEnum で指定されたタイプのマップを、指定されたオブジェクトに追加します。この関数は、作成および追加されたマップを返します。このマップは、BakeToTextureMap インタフェース(以下を参照)を実装します。

注: すべてのマップ タイプがすべてのレンダラーと互換性があるとは限りません。現在のレンダラーと互換性のあるマップ タイプのリストを取得するには、以下に説明する getCompatibleMapTypes() を使用します。
<Interface>BakeToTexture.addMapByClassID <node>object <integer64 array>classID

classID で指定されたタイプのマップを、指定されたオブジェクトに追加します。この関数は、作成および追加されたマップを返します。このマップは、BakeToTextureMap インタフェース(以下を参照)を実装します。

注: すべてのマップ タイプがすべてのレンダラーと互換性があるとは限りません。現在のレンダラーと互換性のあるマップ タイプのリストを取得するには、以下に説明する getCompatibleMapTypes() を使用します。
<Interface>BakeToTexture.getMapById <integer>mapID

指定された mapID のマップを返します。このマップは、BakeToTextureMap インタフェース(以下を参照)を実装します。

<void>BakeToTexture.deleteMapById <integer>mapID

指定された mapID のマップを[テクスチャにベイク処理] (Bake to Texture)リストから除去します。

<void>BakeToTexture.deleteAllMaps()

[テクスチャにベイク処理] (Bake to Texture)リストからすべてのマップを除去します。

<void>BakeToTexture.openOutputLocation()

Windows ファイル エクスプローラで、[テクスチャにベイク処理] (Bake to Texture)出力ディレクトリを開きます。

<string array>BakeToTexture.getCompatibleMapTypes()

現在のレンダラーと互換性のあるすべてのマップ タイプのリストを返します。リストは文字列の配列で、各文字列にはマップの名前と classID が含まれます。

注: [テクスチャにベイク処理] (Bake to Texture)ユーティリティを初期化すると、現在のレンダラーに対して互換性のあるマップのリストが入力されます。この関数の呼び出しが他の呼び出し(BakeToTexture.showDialog() など)の前に行われた場合、このリストは不完全になります。
<void>BakeToTexture.showDialog()

[テクスチャにベイク処理](Bake to Texture)ダイアログを開きます。

<void>BakeToTexture.hideDialog()

[テクスチャにベイク処理](Bake to Texture)ダイアログを閉じます。

<enum>getOutputTo <node>object
       getOutputTo enums: {#FilesOnly|#OriginalMaterial|#DuplicateOriginalMaterial|#CreateNewMaterial|#InvalidType

指定したオブジェクトの「出力先」モードを取得します。3ds Max 2021.1 Update 以降で使用可能です。

    <boolean>setOutputTo <node>object <enum>output material:<material>
       output enums: {#FilesOnly|#OriginalMaterial|#DuplicateOriginalMaterial|#CreateNewMaterial|#InvalidType}
       material default value: undefined

指定したオブジェクトの「出力先」モードを設定します。モードが #CreateNewMaterial に設定されている場合は、material:<material> 引数とともにマテリアルも指定する必要があります。 3ds Max 2021.1 Update 以降で使用可能です。 マテリアルのコンストラクタを渡して、コマンド内でマテリアルを直接作成する場合は、マテリアル コンストラクタを括弧で囲む必要があります。たとえば、次のように使用されます。

BakeToTexture.SetOutputTo $Teapot001 #CreateNewMaterial material:(Physical_Material())
<material>getNewMaterial <node>object

#CreateNewMaterial が「出力先」モードとして選択されている場合は、新しいマテリアルに設定されるマテリアルを返します。3ds Max 2021.1 Update 以降で使用可能です。

<string array>getTargetMaterialSlots <node>object

オブジェクトのマップのターゲットとして使用できるすべてのマテリアル入力スロットのリストを取得します。この関数は、マップの「出力先」関数のターゲット定義として使用できる文字列の配列を返します。 3ds Max 2021.1 Update 以降で使用可能です。

<void>clearShellKeepBaked nodes:<&node array>
       nodes default value: #()
       nodes is In and Out parameter

シーン内、またはノードの特定の配列内のすべてのシェル マテリアルをクリアし、オブジェクトのマテリアルを、シェル マテリアルに接続されているベイク処理済みのマテリアルで置き換えます。こうすることで、シェル マテリアルではなく、ベイク処理済みのマテリアルがオブジェクトに直接割り当てられるようになります。この方法を使用すると、シーンの書き出し準備をすばやく実行できます。 3ds Max 2021.1 Update 以降で使用可能です。 ノードの配列が指定されていない場合は、シーン全体のシェル マテリアルがクリアされます。ノードの配列が指定されている場合は、これらのノードに割り当てられているシェル マテリアルのみがクリアされます。

<void>clearShellKeepOriginal nodes:<&node array>
       nodes default value: #()
       nodes is In and Out parameter

シーン内、またはノードの特定の配列内のすべてのシェル マテリアルをクリアし、オブジェクトのマテリアルを、シェル マテリアルに接続されているオリジナルのマテリアルで置き換えます。こうすることで、シェル マテリアルではなく、オリジナルのマテリアルがオブジェクトに直接割り当てられるようになります。この方法を使用すると、シーンの書き出し準備をすばやく実行できます。 3ds Max 2021.1 Update 以降で使用可能です。 ノードの配列が指定されていない場合は、シーン全体のシェル マテリアルがクリアされます。ノードの配列が指定されている場合は、これらのノードに割り当てられているシェル マテリアルのみがクリアされます。

インタフェース: BakeToTextureMap

このインタフェースは、[テクスチャにベイク処理](Bake to Texture)ダイアログのオブジェクト上に作成された各種のテクスチャ マップによって実装されます。たとえば、BakeToTexture.addMap()BakeToTexture.getMaps() によって返されるマップでは、このインタフェースが実装されます。

プロパティ:

BakeToTextureMap.sceneObject : node : Read

マップに関連付けられたオブジェクトを返します。

BakeToTextureMap.id : integer : Read

マップの一意の ID。

BakeToTextureMap.mapTypeID : integer64 array : Read

マップの classID。

BakeToTextureMap.mapTypeName : string : Read

マップのタイプ名(文字列)。これは、[テクスチャにベイク処理] (Bake to Texture)ダイアログに表示される名前と同じです。

BakeToTextureMap.renderable : boolean : Read|Write

マップがベイク処理キュー内にあるかどうかを取得または設定します。

BakeToTextureMap.frozen : boolean : Read

マップのサポート ステータス。マップが現在のレンダラーでサポートされていない場合、このプロパティは true になり、サポートされている場合は false になります。このプロパティが true の場合、ベイク処理中にマップはベイク処理されません。

BakeToTextureMap.bakeable : boolean : Read

マップをベイク処理できるかどうかを取得します。つまり、マップのすべてのプロパティとパラメータが有効であり、マップ タイプが現在のレンダラーと互換性があることを意味します。false の場合、ベイク処理中にマップはベイク処理されません。

BakeToTextureMap.fileName : filename : Read|Write

このマップに関連付けられているファイルの名前。既定では、これは「[オブジェクト名]_[マップ名]」です(「Teapot001_normals」など)。

BakeToTextureMap.fileType : string : Read|Write

マップに関連付けられたイメージ ファイル タイプの拡張子。

BakeToTextureMap.uvChannel : integer : Read|Write

マップの UV チャネル。

BakeToTextureMap.imageWidth : integer : Read|Write|Validated by Range: 1 to 65535

マップの出力イメージの幅(ピクセル単位)。

BakeToTextureMap.imageHeight : integer : Read|Write|Validated by Range: 1 to 65535

マップの出力イメージの高さ(ピクセル単位)。

BakeToTextureMap.edgePadding : integer : Read|Write|Validated by Range: 0 to 128

マップの出力イメージの両端パディング(ピクセル単位)。

BakeToTextureMap.backgroundColor : color : Read|Write

マップの出力イメージのバックグラウンド カラー。

注: サーフェス マップのバックグラウンド カラーは変更できません。
BakeToTextureMap.projectionModifierIndex : integer : Read|Write

マップで使用される投影モディファイヤのインデックス。投影モディファイヤ スタックの下から上の順に指定します。インデックス 0 は「セルフ(Self)」を示します。

BakeToTextureMap.projectionModifierName : string : Read

マップで使用される投影モディファイヤの名前(文字列)。

BakeToTextureMap.projectionMethod : integer : Read|Write|Validated by Range: 0 to 2

マップの投影方法。値は次のとおりです。

注: このプロパティにアクセスする前に、マップの投影方法が「セルフ(Self)」でないことを確認する必要があります。これにより、MAXScript ランタイムエラーが発生するためです。
BakeToTextureMap.projectionMaxRayDistance : float : Read|Write|Validated by Range: 0.0 to 10000.0

レイの最大距離。

BakeToTextureMap.projectionResolveHitType : integer : Read|Write|Validated by Range: 0 to 1

マップの投影の[ヒット解決] (Resolve Hit)タイプです。値は次のとおりです。

BakeToTextureMap.projectionHitOnlyMatchingMatID : boolean : Read|Write

[マテリアル ID が一致した時のみヒット] (Hit Only Matching Material ID)設定を有効にするかどうかを指定します。

BakeToTextureMap.projectionRayMissColorType : integer : Read|Write|Validated by Range: 0 to 2

投影の[レイ ミス カラー] (Ray Miss Color)設定。値は次のとおりです。

BakeToTextureMap.projectionDiagnosticColor : color : Read|Write

projectionRayMissColorType が 2 ([診断にカラーを使用](Use Color for Diagnostic))に設定されている場合に、カラー診断設定に使用される色。

BakeToTextureMap.UDIMEnabled : boolean : Read|Write

マップに対して UDIM タイルのベイク処理が有効になっているかどうかを指定します。

BakeToTextureMap.UDIMFilePattern : enum : Read|Write
       UDIMFilePattern enums: {#UDIM|#ZBrush|#Mudbox}

マップの UDIM ファイルが保存されている場合に、UDIM ファイルのファイル名の形式を指定します。ファイル形式は次のとおりです。3ds Max 2021.1 Update 以降で使用可能です。

<void>BakeToTextureMap.setImageSize <integer>width <integer>height
 width Validated by Range: 1 to 65535
 height Validated by Range: 1 to 65535

マップの幅と高さを設定します。

<boolean>BakeToTextureMap.applyImageTypeSettings()

現在の BitmapIO クラス設定を、このマップに定義された一致するイメージ タイプに適用します。成功した場合は true、エラーがある場合は false を返します。

たとえば、既存のマップ map1 を png 出力に変更し、いくつかの png 設定を行います。

map1.setImageType "png"
map1.setFilename "Map1"
-- Enable Alpha and use 48bit color
pngio.setAlpha(true)
pngio.SetType(#true48)
map1.applyImageTypeSettings()    

イメージ形式の設定を保持するクラスのリストについては、BitmapIO : MAXWrapper を参照してください。

<integer>BakeToTextureMap.getProjectionModifiersCount()

マップに使用できる投影モディファイヤの総数を返します。

<integer>BakeToTextureMap.getOptionsCount()

このマップ タイプで使用可能なオプションの総数を返します。

<string>BakeToTextureMap.getOptionName <index>index

インデックスで指定されたマップ オプションの名前を文字列で返します。

<integer>BakeToTextureMap.getOptionType <index>index

インデックスで指定されたオプションのタイプを返します。値は次のとおりです。

<boolean>BakeToTextureMap.isOptionReadOnly <index>index

インデックスで指定されたマップ オプションが読み取り専用の場合は true、変更できる場合は false を返します。

<value>BakeToTextureMap.getOptionValue <index>index

インデックスで指定されたマップ オプションの現在の値を返します。

<boolean>BakeToTextureMap.setOptionValue <index>index <value>value

インデックスで指定されたマップ オプションの値を設定し、値が正常に設定された場合は true、それ以外の場合は false を返します。

<string>BakeToTextureMap.getTargetMapSlot()

オブジェクトのマテリアル上のターゲット スロットの名前を取得します。マップがベイク処理されている場合は、マップがこのスロットに接続されています。 3ds Max 2021.1 Update 以降で使用可能です。

<boolean>BakeToTextureMap.setTargetMapSlot <string>slot

オブジェクトのマテリアル上のターゲット スロットを設定します。これにより、マップがベイク処理されている場合のマップの接続場所が定義されます。ターゲット マップ スロットは文字列として定義されます。親オブジェクトの有効なターゲット マップ スロットは、BakeToTexture.getTargetMaterialSlots() を使用して取得できます。 3ds Max 2021.1 Update 以降で使用可能です。

完全な例

次の例では、いくつかのオブジェクトを作成し、そのオブジェクトのテクスチャ マップへのベイク処理を作成します。マップのオプションをいくつか設定し、ベイク処理を開始します。

-- Bake to texture example
resetMaxFile #noprompt

-- set up our object:
t = Teapot()
s = Sphere pos:[40,40,0]
pm = PhysicalMaterial()
cm = OSL_Checker()
pm.base_color_map = cm
t.material = pm

-- need uvw for baking maps
u = uvwmap()
addModifier t u

-- open the dialog:
BakeToTexture.showDialog()                   
-- set up some maps:
-- first, let's see what's compatible with the current renderer
-- this example assumes Arnold is the current renderer
compatible_maps = BakeToTexture.getCompatibleMapTypes()
compatible_map_names = for s in compatible_maps collect ((filterString s " :")[1])

-- we can get a map from addMap() for native 3ds Max maps
if findItem compatible_map_names "Lighting" > 0 do
    ( light_map = BakeToTexture.addMap t #LightMap )

-- we can also get it later by index and add from a class ID for non native 3ds max maps:
if findItem compatible_map_names "Arnold_albedo" > 0 do
    (
        BakeToTexture.addMapByClassID t #(1236154164, -1994915067)
        albedo_map = (BakeToTexture.getMaps t)[2]
    )  

-- let's change some settings on the maps
albedo_map.fileType = "jpg"
albedo_map.setImageSize 512 512
light_map.setImageSize 512 512

-- turn off shadows option if it is present
for i = 1 to light_map.getOptionsCount() do
    (
        if light_map.getOptionName i == "Shadows" do
        ( light_map.setOptionValue i 0 )
    )

BakeToTexture.showDialog()

-- start bake process, without a callback:
bake_success = BakeToTexture.bake()

投影マップの例:

-- Add projection modifier maps
-- Create two objects
-- Note, this is not a real-world example, the map will be "flat"
-- we are just illustrating how to set things up
myBoxLowRes = Box mapCoords:True name:"Low Res"
myBoxHighRes= Box mapCoords:true name:"High Res"

-- Add Projection Modifier to one
modPanel.addModToSelection (Projection name:"My Projection 1") ui:on
addPModObjects  myBoxLowRes false true objList:myBoxHighRes

-- Add a normal map:
map =    BakeToTexture.addMap myBoxLowRes #NormalMap

-- Get various Projection properties
map.projectionModifierName -- should return #(Projection:Projection)
map.projectionModifierIndex -- should return 1
map.projectionMethod -- should return 0
map.projectionMaxRayDistance -- should return 10.0
map.projectionResolveHitType -- should return 1
map.projectionHitOnlyMatchingMatID -- should return false
map.projectionRayMissColorType -- should return 0
map.projectionDiagnosticColor -- should return (color 255 0 0)