[テクスチャにベイク処理](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 つのパラメータを受け取ります。
successfulBake: マップ ファイルが正常にベイク処理されて保存されたかどうかを示すブール値。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>classIDclassID で指定されたタイプのマップを、指定されたオブジェクトに追加します。この関数は、作成および追加されたマップを返します。このマップは、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 が含まれます。
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マップの投影方法。値は次のとおりです。
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)設定。値は次のとおりです。
projectionDiagnosticColor プロパティを使用します(以下を参照)。BakeToTextureMap.projectionDiagnosticColor : color : Read|WriteprojectionRayMissColorType が 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 以降で使用可能です。
#UDIM: ファイルのサフィックスは UDIM 番号、ファイル名のパターンは Map.1001.png、Map.1002.png、Map.0103.13 などです。#ZBrush: ファイルのサフィックスは u0_v0 (基底は 0)、ファイル名のパターンは Map.u0_v0.png、Map.u1_v1.png、Map.u2_v2.png などです。#Mudbox: ファイルのサフィックスは u1_v1 (基底は 1)、ファイル名のパターンは Map.u1_v1.png、Map.u2_v2.png、Map.u3_v3.png などです。 <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:
albedo_map = undefined
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)