使用MaxScript将具有输出修改器的纹理添加到材质

时间:2018-04-12 01:26:55

标签: 3dsmax maxscript

我有一个纹理连接到输出修改器然后连接到材质的漫反射插槽(CoronaMtl)。

我需要在文件夹中循环多个纹理,将它们分配给素材(分配给对象),渲染它,然后保存图像。

一切正常,但输出修饰符我无法理解如何应用。我当前的脚本已经搜索文件,创建数组,将纹理应用到正确的材质,渲染和保存,但是,如果没有输出调整,它就毫无意义。

任何人都能发光吗?

这是我的材料: 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
)

1 个答案:

答案 0 :(得分:0)

要创建输出纹理,请使用outputTex = Output map1:bitmapTex,其中bitmapTex是包含您要分配的BitmapTexture的变量。输出纹理贴图的输出属性(术语的双重用法可能会令人困惑)将在outputTex.output中。

您可以使用showproperties outputTexshowproperties outputTex.output检查可用的属性。例如,通过outputTex.output.clamp = trueoutputTex.output.invert = true设置反转和钳位复选框。另一点,您可以使用@前缀一个字符串常量来表示忽略转义字符的文字路径字符串,或者在MaxScript路径字符串中使用/作为\的替换。

注意 - 如果尚未存在输出纹理贴图,则无法为其创建颜色曲线。只有通过单击"启用颜色映射"才能通过UI创建曲线。这是MaxScript的限制。但是,这个限制可以通过C ++解决(有关请求的更多细节)。

使用标准材质代替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
)