使用 MaxScript 将带有输出修饰符的纹理添加到 material
Add texture with output modifier to material with MaxScript
我有一个场景,其纹理连接到输出修改器,然后连接到 material (CoronaMtl) 的漫反射插槽。
我需要遍历一个文件夹中的多个纹理,将它们分配给 material (分配给一个对象),渲染它,然后保存图片。
一切正常,但我只是不明白如何应用输出修饰符。我当前的脚本已经搜索文件,创建数组,向右应用纹理 material,渲染并保存,但是,如果没有输出调整,这一切都是毫无意义的。
有人可以照亮它吗?
这是我的 material:
https://i.stack.imgur.com/AZe1r.png
这是目前的脚本:
carMake = "Chevy" -- Case Sensitive
liveriesFiles = "C:\Path\PaintSchemes\" + carMake as string + "\PAINT_*_PRIMARY.png"
glossFiles = "C:\Path\PaintSchemes\" + carMake as string + "\PAINT_*_PRIMARY_MAT_ID.png"
liveries = getFiles liveriesFiles
gloss = getFiles glossFiles
for livery in liveries do (
sceneMaterials["CHEVY"].texmapDiffuse = Bitmaptexture fileName: livery
index = findItem liveries livery
sceneMaterials["CHEVY"].texmapReflectGlossiness = Bitmaptexture fileName: gloss[index]
CoronaRenderer.CoronaFp.showvfb true
actionMan.executeAction 0 "50031" -- Render
splitString = filterString livery "\ ."
elementName = replace splitString[12] 1 6 ""
savePath = "C:\Path\PaintSchemes\" + carMake as string + "\renders\" + elementName as string + ".png"
CoronaRenderer.CoronaFp.saveAllElements savePath
)
要创建输出纹理,请使用 outputTex = Output map1:bitmapTex
,其中 bitmapTex 是一个包含您要分配的 BitmapTexture 的变量。输出纹理贴图的输出属性(此处重复使用该术语可能会造成混淆)将在 outputTex.output.
中
您可以使用 showproperties outputTex
和 showproperties outputTex.output
检查可用属性。例如,通过 outputTex.output.clamp = true
和 outputTex.output.invert = true
设置反转和钳位复选框。还有一点,您可以在字符串常量前面加上 @ 以指示忽略转义字符的文字路径字符串,或者使用 / 替换 MaxScript 路径字符串中的 \。
注意 - 如果输出纹理贴图尚不存在,则无法为其创建颜色曲线。曲线只能通过单击 "Enable Color Map" 通过 UI 创建。这是 MaxScript 的限制。但是,可以通过 C++ 解决该限制(更多详细信息应要求提供)。
使用标准 material 而不是 CoronaMtl 和 Corona 渲染器,这是一个示例脚本:
-- See available properties the Output map, assuming on the Diffuse slot of Standard material
showproperties (sceneMaterials["CHEVY"].diffusemap)
showproperties (sceneMaterials["CHEVY"].diffusemap.output)
-- Run the test
carMake = "Chevy" -- Case Sensitive
rootPath = @"D:\Temp\PaintSchemes" + carMake as string + @"\"
liveriesFiles = rootPath + @"Test_Map*A.png"
glossFiles = rootPath + @"Test_Map*B.png"
liveries = getFiles liveriesFiles
gloss = getFiles glossFiles
for livery in liveries do (
bitmap1 = Bitmaptexture fileName: livery
output1 = Output map1:bitmap1
output1.output.clamp = true
sceneMaterials["CHEVY"].diffuseMap = output1
index = findItem liveries livery
bitmap2 = Bitmaptexture fileName: gloss[index]
output2 = Output map1:bitmap2
output2.output.invert = true
sceneMaterials["CHEVY"].glossinessMap = output2
max quick render
splitString = filterString livery "\ ."
elementName = splitString[4]
r = getLastRenderedImage()
r.filename = rootPath + @"\renders\" + elementName as string + ".png"
save r
)
我有一个场景,其纹理连接到输出修改器,然后连接到 material (CoronaMtl) 的漫反射插槽。
我需要遍历一个文件夹中的多个纹理,将它们分配给 material (分配给一个对象),渲染它,然后保存图片。
一切正常,但我只是不明白如何应用输出修饰符。我当前的脚本已经搜索文件,创建数组,向右应用纹理 material,渲染并保存,但是,如果没有输出调整,这一切都是毫无意义的。
有人可以照亮它吗?
这是我的 material: https://i.stack.imgur.com/AZe1r.png
这是目前的脚本:
carMake = "Chevy" -- Case Sensitive
liveriesFiles = "C:\Path\PaintSchemes\" + carMake as string + "\PAINT_*_PRIMARY.png"
glossFiles = "C:\Path\PaintSchemes\" + carMake as string + "\PAINT_*_PRIMARY_MAT_ID.png"
liveries = getFiles liveriesFiles
gloss = getFiles glossFiles
for livery in liveries do (
sceneMaterials["CHEVY"].texmapDiffuse = Bitmaptexture fileName: livery
index = findItem liveries livery
sceneMaterials["CHEVY"].texmapReflectGlossiness = Bitmaptexture fileName: gloss[index]
CoronaRenderer.CoronaFp.showvfb true
actionMan.executeAction 0 "50031" -- Render
splitString = filterString livery "\ ."
elementName = replace splitString[12] 1 6 ""
savePath = "C:\Path\PaintSchemes\" + carMake as string + "\renders\" + elementName as string + ".png"
CoronaRenderer.CoronaFp.saveAllElements savePath
)
要创建输出纹理,请使用 outputTex = Output map1:bitmapTex
,其中 bitmapTex 是一个包含您要分配的 BitmapTexture 的变量。输出纹理贴图的输出属性(此处重复使用该术语可能会造成混淆)将在 outputTex.output.
您可以使用 showproperties outputTex
和 showproperties outputTex.output
检查可用属性。例如,通过 outputTex.output.clamp = true
和 outputTex.output.invert = true
设置反转和钳位复选框。还有一点,您可以在字符串常量前面加上 @ 以指示忽略转义字符的文字路径字符串,或者使用 / 替换 MaxScript 路径字符串中的 \。
注意 - 如果输出纹理贴图尚不存在,则无法为其创建颜色曲线。曲线只能通过单击 "Enable Color Map" 通过 UI 创建。这是 MaxScript 的限制。但是,可以通过 C++ 解决该限制(更多详细信息应要求提供)。
使用标准 material 而不是 CoronaMtl 和 Corona 渲染器,这是一个示例脚本:
-- See available properties the Output map, assuming on the Diffuse slot of Standard material
showproperties (sceneMaterials["CHEVY"].diffusemap)
showproperties (sceneMaterials["CHEVY"].diffusemap.output)
-- Run the test
carMake = "Chevy" -- Case Sensitive
rootPath = @"D:\Temp\PaintSchemes" + carMake as string + @"\"
liveriesFiles = rootPath + @"Test_Map*A.png"
glossFiles = rootPath + @"Test_Map*B.png"
liveries = getFiles liveriesFiles
gloss = getFiles glossFiles
for livery in liveries do (
bitmap1 = Bitmaptexture fileName: livery
output1 = Output map1:bitmap1
output1.output.clamp = true
sceneMaterials["CHEVY"].diffuseMap = output1
index = findItem liveries livery
bitmap2 = Bitmaptexture fileName: gloss[index]
output2 = Output map1:bitmap2
output2.output.invert = true
sceneMaterials["CHEVY"].glossinessMap = output2
max quick render
splitString = filterString livery "\ ."
elementName = splitString[4]
r = getLastRenderedImage()
r.filename = rootPath + @"\renders\" + elementName as string + ".png"
save r
)