Maxscript netrender 文件名 - 尝试在不附加帧号的情况下保存

Posted

技术标签:

【中文标题】Maxscript netrender 文件名 - 尝试在不附加帧号的情况下保存【英文标题】:Maxscript netrender file name - trying to save without appended frame number 【发布时间】:2020-10-31 10:22:23 【问题描述】:

我正在制作一个批处理提交者脚本,用于在我的 3d 场景中渲染一系列相机。这些相机有它们自己需要渲染的单帧编号。我希望能够根据我提供脚本的名称保存文件,但在最后省略帧号。 (例如:fileName0004.tif 改为 fileName.tif) 使用 3dsmax 2018 和 vray 3.0。

这似乎是一个自动功能,但我似乎找不到任何地方谈论禁用它。到目前为止,我看到的唯一提及是它是 v-ray 5.0 中的一个选项。很遗憾,我无法很快升级。

这可能吗?有人知道怎么做吗?

谢谢

function fn_netSubmit =
(
    local arr_camTEST = #("cam1", "cam2", "cam3")
    local arr_renderSeatSide =#("side1", "side2", "side3")
    local arr_renderSeat = #("seat1", "seat2", "seat3")
    local arr_renderFrames = #("1", "3", "7")
    local appendDate = "200707"
    local outputLocation = "some\\location\\"
        
    --connect
    nm.connect #manual "mtlwarml401.ca.aero.bombardier.net" platform:#64
    if nm.QueryControl #wait do 
    (
        nm.GetControl()
        exit
    )
    
    if nm.getControl() == true then
    (
        for i = 1 to arr_camTEST.count do 
        (       
            job = nm.newJob()
            job.outputWidth = 3600
            job.outputHeight = 3600
            job.name = ("filename" + " " + arr_renderSeat[i] + " " + arr_renderSeatSide[i] + " " + "S" + "-" + appendDate)
            job.nonSeqFrames = true
            job.frames = arr_renderFrames[i]
            job.renderCamera  = arr_camTEST[i]
            job.frameOutputName = (outputLocation + "/" + ("filename"  + " " + arr_renderSeat[i] + " " + arr_renderSeatSide[i] + " " + "S") + ".tif")
            job.submit()
        )
    )
    
    nm.Disconnect()
)

fn_netSubmit()

【问题讨论】:

我不知道网络渲染,但通常 3ds Max 会附加帧数,除非您在单帧渲染模式下渲染。在 MAXScript 中,您可以通过设置 rendTimeType = 1 来确保您处于单帧模式 谢谢稻田。我想我可以在网络接口之外设置我的渲染设置,但是,我认为这会导致在第 0 帧而不是脚本中的指定帧进行渲染。 你也可以设置帧数以同样的方式渲染。几乎所有的渲染设置都可以在脚本中修改。 【参考方案1】:

过去我在渲染后使用了一个脚本来解析目录中的文件名并重命名它们。事实证明,这比尝试使用渲染后回调或尝试强制文件名输出更改中间渲染更容易且错误更少:

newSuffixes=#("one","two","three")
--get folder
dirToProcess = getSavePath caption:"Select folder to rename" initialDir:"\\\\SERVER\\Path\\Path\\"

--sort functions for file list
fn numFromName str =
(
--returns the frame number from a max rendered filename, e.g. 0002 from file_0002.tga.  Filename MUST use an underscore.
local parts = filterstring str "\._"
return (parts[parts.count-1] as integer)
)   

fn compareFN v1 v2 =
(
--sort function copy-pasted from MXS help for filename numeric ordering
local d = (numFromName v1) - (numFromName v2)
case of
    (
    (d < 0.): -1
    (d > 0.): 1
    default: 0
    )
)

if dirToProcess != undefined do
(
local filesToProcess = getFiles (dirToProcess + "\\*.png")
--sort files array ito ordered list of frames in case they're collected out-of-order
qsort filesToProcess compareFN

for f in 1 to filesToProcess.count do
(
    --replace the underscore and frame number suffix of foo_####.png with the corresponding memebr of the suffixes array
    local newSuffix = newSuffixes[f]
    local fileToProcess = filesToProcess[f] as string
    local idx = (fileToProcess.count) - 7
    newFileName = replace fileToProcess idx 4 newSuffix --string function
    --debug
    --format "New file name: %\n" newFileName
    if not (copyfile fileToProcess newFileName) do format "Failed copying % to %" filetoProcess newFileName
)

)

(原始脚本使用从动画控制器中提取的数据以编程方式为数千张图像生成 newsuffixes 数组)

【讨论】:

以上是关于Maxscript netrender 文件名 - 尝试在不附加帧号的情况下保存的主要内容,如果未能解决你的问题,请参考以下文章

3D MAXScript

MaxScript重启3dsMax的重新思考

转MaxScript.Net接收本地端口的消息执行

MaxScript 计算执行时间差

Maxscript Protector 2.1 解密思路

MaxScript 一些结构的记录