📄 macro_baketextures.mcr
字号:
-- Close Button pressed
--
on bClose pressed do
(
-- format "close button\n"
-- & close the dialog, save handled by on ... close event
destroydialog gTextureBakeDialog
)
-------------------------------------------------------------
--
-- Cancel Button pressed
--
on bCancel pressed do
(
-- format "cancel button\n"
-- just set the cancel flag, cleanup handled by on ... close
isCancel = true
destroydialog gTextureBakeDialog
)
on gTextureBakeDialog resized newSz do
(
--format "resize to %, % \n" newSz.x newSz.y
if newSz == undefined then newSz = [350,483]
if (gTextureBakeDialog.width != 350) then gTextureBakeDialog.width = 350
pDialogHeight = newSz.y
-- adjust the dialog layout
rollouts.height = newSz.y - 43
bRender.pos = [7, newSz.y - 33]
bUpdateLast.pos = [80, newSz.y - 33]
bClose.pos = [227, newSz.y - 33]
bCancel.pos = [284, newSz.y - 33]
)
) -- end, Bake to texture shell
fn getINIConfigData filename section key default =
(
local res = getINISetting filename section key
if res == "" then default
else readValue (stringStream res)
)
fn setINIConfigData filename section key value =
(
setINISetting filename section key (value as string)
)
fn readDialogConfig =
(
pDialogHeight = getINIConfigData iniFile "Dialog" "DialogHeight " 526
pDialogPos = getINIConfigData iniFile "Dialog" "DialogPos" [120,100]
pCommonRolledUp = getINIConfigData iniFile "Dialog" "CommonRolledUp" false
pSelectedRolledUp = getINIConfigData iniFile "Dialog" "SelectedRolledUp" true
pUniqueRolledUp = getINIConfigData iniFile "Dialog" "UniqueRolledUp" false
)
fn readConfigData =
(
-- format "load state\n"
--gTextureBakeOverwriteFilesOk = getINIConfigData iniFile "Files" "OverwriteOk" 0
commonBakeProps.cAutoFlattenOn.checked = getINIConfigData iniFile "AutoFlatten" "On" true
commonBakeProps.sSpacing.value = getINIConfigData iniFile "AutoFlatten" "Spacing" 0.03
commonBakeProps.sThresholdAngle.value = getINIConfigData iniFile "AutoFlatten" "ThresholdAngle" 45.0
-- commonBakeProps.cNormalize.checked = getINIConfigData iniFile "AutoFlatten" "Normalize" true
commonBakeProps.cRotate.checked = getINIConfigData iniFile "AutoFlatten" "Rotate" true
commonBakeProps.cFillHoles .checked = getINIConfigData iniFile "AutoFlatten" "FillHoles" true
commonBakeProps.rDraftOrProduction.state = getINIConfigData iniFile "Renderer" "UseRenderer" 1
commonBakeProps.cBakedInVP.checked = getINIConfigData iniFile "Materials" "BakedInVP" true
commonBakeProps.cDisplayFB.checked = getINIConfigData iniFile "Materials" "DisplayFB" true
commonBakeProps.cShellMaterials.checked = getINIConfigData iniFile "Materials" "ShellMaterials" true
commonBakeProps.dUseShader.selection = getINIConfigData iniFile "Materials" "UseShader" 1
commonBakeProps.sSizeMin.value = getINIConfigData iniFile "AutoSize" "SizeMin" 32
commonBakeProps.sSizeMax.value = getINIConfigData iniFile "AutoSize" "SizeMax" 2048
commonBakeProps.sSizeScale.value = getINIConfigData iniFile "AutoSize" "SizeScale" 0.01
commonBakeProps.cSizePowersOf2.checked = getINIConfigData iniFile "AutoSize" "SizePowersOf2" false
local res = getINISetting iniFile "FileOutput" "FilePath"
if res == "" then res = (getdir #image)
commonBakeProps.eFilePath.text = res
res = getINISetting iniFile "FileOutput" "FileType"
if res == "" then res = ".tga"
defaultFileType = res
--format "set file type = % \n" res
)
fn writeConfigData =
(
-- format "save state\n"
-- setINIConfigData iniFile "Files" "OverwriteOk" gTextureBakeOverwriteFilesOk
setINIConfigData iniFile "AutoFlatten" "On" commonBakeProps.cAutoFlattenOn.checked
setINIConfigData iniFile "AutoFlatten" "Spacing" commonBakeProps.sSpacing.value
setINIConfigData iniFile "AutoFlatten" "ThresholdAngle" commonBakeProps.sThresholdAngle.value
--setINIConfigData iniFile "AutoFlatten" "Normalize" commonBakeProps.cNormalize.checked
setINIConfigData iniFile "AutoFlatten" "Rotate" commonBakeProps.cRotate.checked
setINIConfigData iniFile "AutoFlatten" "FillHoles" commonBakeProps.cFillHoles.checked
setINIConfigData iniFile "Renderer" "UseRenderer" commonBakeProps.rDraftOrProduction.state
setINIConfigData iniFile "Materials" "BakedInVP" commonBakeProps.cBakedInVP.checked
setINIConfigData iniFile "Materials" "DisplayFB" commonBakeProps.cDisplayFB.checked
setINIConfigData iniFile "Materials" "ShellMaterials" commonBakeProps.cShellMaterials.checked
setINIConfigData iniFile "Materials" "UseShader" commonBakeProps.dUseShader.selection
-- setINIConfigData iniFile "Materials" "UseD3D" commonBakeProps.cUseD3D.checked
setINIConfigData iniFile "FileOutput" "FilePath" commonBakeProps.eFilePath.text
setINIConfigData iniFile "FileOutput" "FileType" defaultFileType
setINIConfigData iniFile "AutoSize" "SizeMin" commonBakeProps.sSizeMin.value
setINIConfigData iniFile "AutoSize" "SizeMax" commonBakeProps.sSizeMax.value
setINIConfigData iniFile "AutoSize" "SizeScale" commonBakeProps.sSizeScale.value
setINIConfigData iniFile "AutoSize" "SizePowersOf2" commonBakeProps.cSizePowersOf2.checked
--format "write dialog height = % \n" pDialogHeight
setINIConfigData iniFile "Dialog" "DialogHeight" pDialogHeight
setINIConfigData iniFile "Dialog" "DialogPos" pDialogPos
setINIConfigData iniFile "Dialog" "CommonRolledUp" false -- pCommonRolledUp
setINIConfigData iniFile "Dialog" "SelectedRolledUp" true -- pSelectedRolledUp
setINIConfigData iniFile "Dialog" "UniqueRolledUp" false -- pUniqueRolledUp
) -- end, write config
------------------------------------------------------------------
--
-- Common Settings Rollout - these apply to the whole scene
--
rollout commonBakeProps "General Settings" width:328 height:402
(
-- first the options group
GroupBox gOptions "Objects to Bake" pos:[6,3] width:317 height:41
radiobuttons rSceneType "" pos:[19,21] width:299 height:16 enabled:true labels:#("Selected Objects ", "All Prepared Objects") default:1 columns:2
-- the auto flatten group
GroupBox grp1 "Automatic Unwrap Mapping" pos:[7,52] width:317 height:86
checkbox cAutoFlattenOn "On" pos:[102,70] width:48 height:16 checked:true
spinner sThresholdAngle "Threshold Angle:" pos:[28,92] width:126 height:16 range:[1,100,45] type:#float fieldwidth:40
spinner sSpacing "Spacing" pos:[69,114] width:84 height:16 range:[0,1,0.02] type:#float scale:0.001 fieldwidth:40
-- checkbox cNormalize "Normalize Clusters" pos:[184,64] width:120 height:18 checked:true
checkbox cRotate "Rotate Clusters" pos:[184,69] width:120 height:18 checked:true
checkbox cFillHoles "Fill Holes" pos:[184,90] width:120 height:18 checked:true
button bClearUnwrap "Clear Unwrappers" pos:[184,111] width:123 height:20
-- Render Setting group
GroupBox gRenderSettings "Use Render Settings" pos:[3,147] width:320 height:47
radiobuttons rDraftOrProduction "" pos:[35,167] width:146 height:16 labels:#("Production", "Draft") columns:2
button setupRenderSettingsButton "Setup..." pos:[246,166] width:60 height:20
-- Display & materials group
GroupBox gMaterial "Display and Materials" pos:[6,197] width:317 height:83
checkbox cBakedInVP "Show Baked in Viewport" pos:[24,235] width:159 height:16 checked:true
checkbox cDisplayFB "Display Frame Buffer" pos:[23,257] width:125 height:16 checked:true
checkbox cShellMaterials "Create Baked Materials:" pos:[24,214] width:137 height:16 checked:true
dropdownList dUseShader "" pos:[162,210] width:146 height:21
button bClearBakeMtls "Clear Shell Materials" pos:[184,254] width:124 height:20 enabled:true
-- autosize group
GroupBox gAutoSize "Automatic Map Size" pos:[6,283] width:318 height:63
checkbox cSizePowersOf2 "Nearest power of 2" pos:[28,322] width:110 height:19
spinner sSizeScale "Scale" pos:[36,302] width:97 height:16 range:[0,1,0.01] type:#float scale:0.001
spinner sSizeMin "Min" pos:[236,302] width:73 height:16 range:[1,2048,32] type:#integer
spinner sSizeMax "Max" pos:[236,325] width:73 height:16 range:[1,2048,1024] type:#integer
-- path group
GroupBox gPath "File Output Path" pos:[7,348] width:317 height:49
edittext eFilePath "" pos:[13,367] width:220 height:20
button bPathSelect "..." pos:[246,367] width:62 height:20
-- return the effective file path
function GetFilePath =
(
path = eFilePath.text
if path == "" then
(
-- path = ".\\" -- make it the current directory
path = getdir #image -- image directory is the default
)
if path[ path.count ] != "\\" then
path += "\\"
-- format " file path: % \n" path
return path
)
-- enable/disable auto-flatten controls
function updateFlattenEnables _enable =
(
sThresholdAngle.enabled = _enable
sSpacing.enabled = _enable
--cNormalize.enabled = _enable
cRotate.enabled = _enable
cFillHoles.enabled = _enable
)
function setupShaderDropdown =
(
readBakeMtlMappings()
theList = #()
append theList "Default" -- always first is the list
-- then add the stdmtl mappings if they exist
for i = 2 to (fileMappings.count+1) do
append theList ("StdMtl." + fileMappings[ i - 1 ])
-- & last the available hardware shaders
getHWShaderList()
for i = 1 to hwShaders.count do
append( theList )( hwShaders[ i ] )
-- & last set the list into the items of the dropdown
dUseShader.items = theList
)
function UpdateUseShader _nSelected =
(
--format "select output shader # = %\n" _nSelected
useHWShader = 0
if _nSelected> dUseShader.items.count then
_nSelected= 1
-- if greater than default
if _nSelected > 1 then
(
if _nSelected<= (fileMappings.count + 1) then
(
-- its a file mapping, select it
mappingName = fileMappings[ _nSelected- 1 ]
selectBakeMtlMapping( mappingName )
--format "select stdmtl file mapping = % \n" mappingName
) else (
useHWShader = _nSelected- (fileMappings.count + 1)
--format "select hw shader = % \n" useHWShader
)
)
)
on commonBakeProps open do
(
useHWShader = 0
setupShaderDropdown()
readConfigData()
updateUseShader( dUseShader.selection )
cBakedInVP.enabled = dUseShader.enabled = cShellMaterials.checked
updateFlattenEnables( cAutoFlattenOn.checked )
)
on commonBakeProps close do
(
if isCancel == false then
(
-- save the persistent state
writeConfigData()
)
)
on rSceneType changed _newState do
(
--format "objectProps = %, eleList = % \n" selectedObjectProps (selectedObjectProps.lvElements)
gTextureBakeDialog.bRender.enabled = if (commonBakeProps.rSceneType.state == 1) \
and (SelectedObjects.count == 1) and (selectedObjectProps.lvElements.listItems.count == 0) then
false else true
)
on cAutoFlattenOn changed _newState do
(
-- enable auto flatten controls
updateFlattenEnables( _newState )
)
on bClearUnwrap pressed do
(
removeFlatteners()
)
on rDraftOrProduction changed _newState do
(
renderer = if (_newState == 1) then #production else #draft
)
on setupRenderSettingsButton pressed do
(
-- select the settings to use
renderer = if (commonBakeProps.rDraftOrProduction.state == 1) then #production else #draft
max render scene
)
on cShellMaterials changed _newState do
(
cBakedInVP.enabled = _newState
dUseShader.enabled = _newState
)
on dUseShader selected _nSel do
(
UpdateUseShader( _nSel )
)
on bClearBakeMtls pressed do
(
removeBakeMaterials()
)
on cSizePowersOf2 changed _newVal do
(
selectedObjectProps.UpdateAutoSize()
)
on sSizeScale changed _newVal do
(
selectedObjectProps.UpdateAutoSize()
)
on sSizeMin changed _newVal do
(
selectedObjectProps.UpdateAutoSize()
)
on sSizeMax changed _newVal do
(
selectedObjectProps.UpdateAutoSize()
)
on eFilePath changed _newPath do
(
if _newPath == "" then
eFilePath.text = getdir #image
)
on bPathSelect pressed do
(
path = GetSavePath caption:"Select Output Path"
if path != undefined then
eFilePath.text = path
)
)
------------------------------------------------------------------
--
-- add bake elements popup dialog
--
rollout addElementsDialog "Add Texture Elements"
width:177 height:239
(
local elementClasses -- List of all available bake element plug-ins
multiListBox mlAvailableElements "Available Elements"
pos:[9,8] width:154 height:10 -- height is measured in Lines, not pixels
button bCancel "Cancel"
pos:[102,201] width:52 height:24
button bAddSelectedElements "Add Elements"
pos:[14,201] width:79 height:24
on mlAvailableElements doubleClicked nClicked do
(
bAddSelectedElements.pressed()
)
-- prepare the class list
on addElementsDialog open do
(
elementsName = #()
elementClasses = BakeElement.classes
for i in elementClasses do
(
-- eliminate the standin
if i.creatable then
(
tmpEle = i()
s = tmpEle.elementName
append( elementsName )( s )
)
)
mlAvailableElements.items = elementsName
-- no selection to begin
mlAvailableElements.selection = #{}
)
-- Cancel handler
on bCancel pressed do
(
-- just destroy the dialog
destroydialog addElementsDialog
)
-- Add the elements to the bake properties
on bAddSelectedElements pressed do
(
--format "add selected: % \n" mlAvailableElements.selection
-- save current edited params
selectedObjectProps.CloseSelectedElement()
-- add the selected elements
for i in mlAvailableElements.selection do
(
--format "%\n" mlAvailableElements.items[ i ]
-- search the class list
for j = 1 to elementClasses.count do
(
if (elementClasses[j]).creatable then
(
-- this creates an instance of the class j
tmpEle = (elementClasses[j])()
s = tmpEle.elementName
if mlAvailableElements.items[ i ] == s then
(
-- found it, create an instance of the elementClass j
-- add it to the node's bake properties
--format "bake element: %\n" (elementClasses[ j ] as string)
-- for each object in the selection
for obj in selectedObjects do
(
--format "superClass = %, class = % \n" (superclassof obj)(classof obj)
-- if (super
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -