deadine怎么修改服务器,Deadline 5.2如何“添加”高版本软件支持(高逼格乱搞)...

Deadline 5.2是唯一”流出”的有”Blue Pill”的版本,可是因为是很久以前出的,里面预设Maya等软件的版本显示不是最新,看起来不爽(话说回来,你把2013的那设置直接改成2015的路径,还不是一样可以用),想改成2015只是强迫症而已

如果你装的就是 5.2.49424 原版,那 monitor 里的 Configure Plugins 看起来会是这样:

3897a6a05a5219cfbafc3a3d435e0fad.png

最大只到2013(lz觉得你把2015的路径填到2013的里面也一样可以用)

方法1 “低逼格”

如果你去官网的 Deadline Miscellaneous Downloads 那儿下载了增加2014支持的”升级”文件,并和你已有的repo里的文件比较,你会发现其实就是改了几个配置文件而已.

跑题:把cygwin里的~/.bash_profile里加了一行改prompt,不想显示用户名

# 之前是 PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$' 改成

PS1='\[\e]0;\w\a\]\n\[\e[32m\]fucker@ilmvfx \[\e[33m\]\w\[\e[0m\]\n\$'

下面是此”升级包”里Maya的相关部分

ff346de5554c941373c3182c383d5c5d.png

你打开那几个新文件看看,猜也猜得到,只要自己手动修改下如下3个文件,你就有新版本的Maya出现在界面里了

MayaCmd.dlinit里多了一行

RenderExecutable2014_0=C:\Program Files\Autodesk\Maya2014\bin\MayaBatch.exe;C:\Program Files (x86)\Autodesk\Maya2014\bin\MayaBatch.exe;/usr/autodesk/maya2014/bin/maya;/Applications/Autodesk/maya2014/Maya.app/Contents/bin/maya

MayaBatch.param里多了一段

[RenderExecutable2014_0]

Type=multilinemultifilename

Category=Render Executables

CategoryOrder=0

Index=9

Label=Maya 2014 Render Executable

Default=C:\Program Files\Autodesk\Maya2014\bin\MayaBatch.exe;C:\Program Files (x86)\Autodesk\Maya2014\bin\MayaBatch.exe;/usr/autodesk/maya2014/bin/maya;/Applications/Autodesk/maya2014/Maya.app/Contents/bin/maya

Description=The path to the Maya 2014 executable file used for rendering. Enter alternative paths on separate lines.

MayaSubmission.py只有这一行不一样

scriptDialog.AddComboControl( "VersionBox", "ComboControl", "2012", ("7.0","8.0","8.5","2008","2009","2010","2011","2012","2013","2014"), 120, -1 )

至于为何是这样,显然repo里plugin目录下的文件夹里的配置文件们对应monitor的configure plugins里的各个软件有哪些版本, scripts\submission\下的文件夹里的.py文件,就是当你选择monitor的Submit菜单下的各种软件后弹出来的ui. (5.2里使用的还是IronPython,虽然不知道他使用的是什么gui toolkit)

根据官网的说明,dlinit文件才是最终被用来找你的renderer可执行文件在哪里的配置(必须有),param文件可有可无,只是用来在你选菜单configure plugins的弹出的窗口里配置路径用的,也就是说你如果不需要配置的界面,你直接改dlinit就行了. 此外dlinit会根据你param文件的配置自动更新,不信你这样试试,只改param 文件,加个maya 2033,然后打开configure plugins 的ui,然后点ok,此时你去看看你的dlinit文件,是不是自动加了个2033?

综上所述,你只要改这3处地方,只要软件渲染的命令行没大变(一般来说不会),你愿意改多大就改多大,你加到Maya 2020都可以…… 因为Deadline的所谓”网络渲染”,无非就是把命令行渲染的那行命令发到每台电脑让他们运行而已,又不是什么把n个cpu拼成个大cpu渲染的高科技(况且这种高科技还不存在,也许存在,请恕lz孤陋寡闻)

但是此种”手动”方法逼格甚低, 所以请继续往下看

方法2 “高逼格”

先来张图

6402cfbde69db832856664c3b0795f48.png

这是个初步”概念设计”,以及尝试看看这样乱搞是不是可行,结果是可行… orz

e202d2fe473c7ff56766ddf2bb85b991.png

这方法就是去读plugins目录下的配置文件们,然后把他们显示在ui上,然后你可以加勾你想要的版本,然后点apply,想加多大版本就加多大版本.(script后台去帮你改那几个文件 orz).

此实验完成的部分是用regex读取到已有的版本号,显示在了界面上(同理去修改也不难)

目测需要的科技”要点”有

把ui和执行的code分离,我没看到ironPython.exe,只有个dll, 现在每次debug执行要去菜单下选ver++菜单,好麻烦

把读写配置文件的部分写成package,这样好unittest,而且如果想被外部的工具用也方便(假设你有另外一个不在monitor里运行的普通的Python script想用他修改配置的话)

如果”generalize” code,不要手动的去hardcode每种软件的版本号

以上,lz觉得这纯粹吃饱了撑的,不过这可以当成练习写脚本

跑题 regex(Regular Expression又称”正则表达式”是无敌的),比如你想选到MayaBatch.dlinit里所有的已有版本号,那你可以用

re.findall('(?<=\nRenderExecutable)(\d+_\d)',MayaBatchDlinitFileContent)

在线版实例见regex101(这是个在线测试regex的网站,这种网站多如牛毛,如果你搜下regex python online的话)

54d4ee643c08ec554e99d5c3738f790f.png

上面的regex也可以拆成多行写(此时可以加注释)

re.findall('''(?<=\nRenderExecutable) # 找到前面是换行RenderExecutable的,但是不包括在结果里

(\d+_\d) # 找到紧挨着前面,并且是数字_数字的部分

''',MayaBatchDlinitFileContent,re.X)

下面是完整例子

# coding=utf-8

from System.Collections.Specialized import *

from System.Drawing import *

from System.IO import *

from Deadline.Scripting import *

import re

import json

########################################################################

## Globals

########################################################################

scriptDialog = None

settings = None

mayaVerDict = None

########################################################################

## Main Function Called By Deadline

########################################################################

def __main__():

global scriptDialog

global settings

dialogWidth = 500

dialogHeight = 654

# dialogHeight = 600 + 16

labelWidth = 100

tabHeight = 600

scriptDialog = DeadlineScriptEngine.GetScriptDialog()

scriptDialog.ShowGroupBoxMenu()

scriptDialog.SetSize( dialogWidth+24, dialogHeight )

scriptDialog.SetTitle( "ver++ 0.1 by biubiubiu大" )

scriptDialog.SetIcon( Path.Combine( GetRootDirectory(), "scripts/General/ver++/ver++.ico" ) )

scriptDialog.AddTabControl("Example Tab Control", dialogWidth+16, tabHeight)

scriptDialog.AddTabPage("Fucker")

scriptDialog.AddControl( "Separator1", "SeparatorControl", "Version up your software !", dialogWidth - 16, -1 )

allMayaBatchVersions= getPluginsVersions()

scriptDialog.AddGroupBox( "GroupBox2", "Maya ver++", True )

scriptDialog.AddRow()

verDict={}

global mayaVerDict

for i,v in enumerate([7.0,8.0] + range(2008,2018)):

# scriptDialog.AddSelectionControl( "CheckBox_maya"+str(i), "CheckBoxControl", False, str(i), 50 , -1)

verStr = str(v).replace('.','_')

if '_' not in verStr:

verStr = '%s_0' % verStr

check = 'True' if verStr in allMayaBatchVersions else 'False'

verDict[verStr]=eval(check)

checkBoxName = 'CheckBox_MayaBatch_'+verStr

cmd='scriptDialog.AddSelectionControl("'+checkBoxName+'" , "CheckBoxControl", '+ check+', str(v), 50 , -1)'

ClientUtils.LogText(cmd)

checkBoxObj=eval(cmd)

def updateMayaSettings(checkBoxName,checkBoxObj):

ClientUtils.LogText(checkBoxName + ' -> '+ str(checkBoxObj))

key = checkBoxName.replace("CheckBox_MayaBatch_","")

ClientUtils.LogText(key + ' -> '+ str(scriptDialog.GetValue(checkBoxName)))

mayaVerDict[key]=scriptDialog.GetValue(checkBoxName)

checkBoxObj.ValueModified += lambda _,checkBoxName=checkBoxName,checkBoxObj=checkBoxObj:updateMayaSettings(checkBoxName,checkBoxObj)

if (i+1) % 8 ==0:

scriptDialog.EndRow()

scriptDialog.AddRow()

scriptDialog.EndRow()

scriptDialog.AddRow()

scriptDialog.AddControl( "mayaVerRangeLabel", "LabelControl", "Add a new Verson", labelWidth, -1 )

scriptDialog.AddRangeControl( "mayaVerSliderBox", "SliderControl", 2018, 2018, 2023, 0, 1, dialogWidth - labelWidth - 24 -100, -1 )

mayaVerAddBtn = scriptDialog.AddControl( "mayaVerAddBtn", "ButtonControl", "Add",40,-1)

mayaVerRemoveBtn = scriptDialog.AddControl( "mayaVerRemoveBtn", "ButtonControl", "Del",40,-1)

def updateMayaVer(mode,verRangeControl):

newVer=scriptDialog.GetValue(verRangeControl)

newVer = '%s_0'% str(newVer)

mode = True if mode else False

mayaVerDict[newVer]=mode

ClientUtils.LogText(json.dumps(mayaVerDict))

mayaVerAddBtn.ValueModified += lambda _,verRangeControl='mayaVerSliderBox':updateMayaVer(1,verRangeControl)

mayaVerRemoveBtn.ValueModified += lambda _,verRangeControl='mayaVerSliderBox':updateMayaVer(0,verRangeControl)

scriptDialog.EndRow()

mayaVerApplyBtn = scriptDialog.AddControl( "mayaVerApplyBtn", "ButtonControl", "Apply",80,-1 )

mayaVerApplyBtn.ValueModified += setMayaPluginsVersions

# setattr(mayaVerApplyBtn,'x',"9527")

# mayaVerApplyBtn.ValueModified += test

mayaVerDict = verDict

scriptDialog.EndGroupBox( False )

scriptDialog.AddGroupBox( "GroupBox3", "Max ver++", True )

scriptDialog.EndGroupBox( False )

scriptDialog.EndTabPage()

scriptDialog.AddTabPage("About This Shit")

scriptDialog.AddControl( "Separator3", "SeparatorControl", "Seriously ?!!", dialogWidth - 16, -1 )

scriptDialog.AddRow()

scriptDialog.AddControl( "MultiLineTextLabel", "LabelControl", "Multi Line", labelWidth, -1 )

scriptDialog.AddControl( "MultiLineTextBox", "MultilineTextControl", "环球数码整个就一大傻B\r\n不同意的举手", dialogWidth - labelWidth - 24, 100 )

scriptDialog.EndRow()

scriptDialog.EndTabPage()

scriptDialog.EndTabControl()

scriptDialog.AddRow()

scriptDialog.AddControl( "DummyLabel1", "LabelControl", "", dialogWidth - 232, -1 )

popupButton = scriptDialog.AddControl( "PopupButton", "ButtonControl", "Restart", 100, -1 )

popupButton.ValueModified += PopupButtonPressed

closeButton = scriptDialog.AddControl( "CloseButton", "ButtonControl", "Close", 100, -1 )

closeButton.ValueModified += CloseButtonPressed

scriptDialog.EndRow()

scriptDialog.ShowDialog( False )

########################################################################

## Helper Functions

########################################################################

def ProgressButtonPressed( *args ):

global scriptDialog

currentProgress = scriptDialog.GetValue( "ProgressBox" )

currentProgress = currentProgress + 5

if currentProgress > 100:

currentProgress = 1

scriptDialog.SetValue( "ProgressBox", currentProgress )

def CloseButtonPressed( *args ):

global scriptDialog

scriptDialog.CloseDialog()

def PopupButtonPressed( *args ):

global scriptDialog

# scriptDialog.ShowMessageBox( "This is a popup!", "Popup" )

# scriptDialog.CloseDialog()

# ExecuteScript(__file__,'')

ExecuteScript(Path.Combine( GetRootDirectory(), "scripts/General/ver++/ver++.py" ),'')

scriptDialog.CloseDialog()

def mayaPlusButtonPressed (*args):

global scriptDialog

currentProgress = scriptDialog.GetValue( "ProgressBox" )

def getPluginsVersions(*args):

global scriptDialog

pluginsDir = GetPluginsDirectory()

mayaBatchPluginsDir = Path.Combine(pluginsDir,'MayaBatch')

ClientUtils.LogText('CRAP!!! ' +mayaBatchPluginsDir)

initFile = Path.Combine(mayaBatchPluginsDir,'MayaBatch.dlinit')

import os

if os.path.isfile(initFile):

ClientUtils.LogText(initFile+' exists')

else:

ClientUtils.LogText(initFile+' not exists')

allVersions=[]

with open(initFile) as f:

# for line in f:

# ClientUtils.LogText(line)

initFileContent = f.read()

ClientUtils.LogText(initFileContent)

allVersions = re.findall('(?<=\nRenderExecutable)(\d+_\d)',initFileContent)

ClientUtils.LogText(','.join(allVersions))

return allVersions

def setMayaPluginsVersions(*args):

global scriptDialog

pluginsDir = GetPluginsDirectory()

mayaBatchPluginsDir = Path.Combine(pluginsDir,'MayaBatch')

initFile = Path.Combine(mayaBatchPluginsDir,'MayaBatch.dlinit')

ClientUtils.LogText(str(len(args)))

global mayaVerDict

import json

ClientUtils.LogText(json.dumps(mayaVerDict))

initFileContent= ''

with open(initFile) as f:

initFileContent = f.read()

for v,enabled in mayaVerDict.items():

exists = re.search('\nRenderExecutable'+v,initFileContent)

if enabled:

if exists:

pass

else:

# Add

verInt=v.replace('_','.')

newConfig = r'RenderExecutable%s=C:\Program Files\Alias\Maya%s\bin\Render.exe;C:\Program Files (x86)\Alias\Maya%s\bin\Render.exe' % (v,verInt,verInt) +'\n'

initFileContent+=newConfig

pass

else:

if exists:

ClientUtils.LogText('RenderExecutable'+v+'.*\n')

initFileContent = re.sub('RenderExecutable'+v+'.*','',initFileContent)

# delete

else:

pass

# with open(r'E:\DeadlineRepository\plugins\MayaBatch\MayaBatch_test.dlinit','w') as f:

with open(initFile,'w') as f:

f.write(initFileContent)

# def test(*args):

# ClientUtils.LogText(str(len(args)))

# ClientUtils.LogText(str(args[0]))

# ClientUtils.LogText(','.join(dir(args[0])))

上面的例子中,因为不知道如何才能将当前有哪些checkbox勾选了的信息传给按下Apply按钮后的function,所以使用了一个global变量(这是测试…),实现了

当ui开启时从MayaBatch.dlinit用regex读取已经有哪些版本的maya在了,然后使相应的checkbox们被勾上

当加勾或者去勾checbox时,global变量mayaVerDict会被更新,他看起来是像这个样子的

{"2010_0": true, "2015_0": false, "2013_0": true, "2016_0": false, "2008_0": true, "2011_0": true, "7_0": false, "2014_0": true, "2012_0": true, "2009_0": true, "8_0": false, "2017_0": false}

当按下apply按钮时,按照global变量mayaVerDict里的各个版本的值去修改MayaBatch.dlinit文件,已经有的就跳过,没有的就加进去(到文件最底部,显然这样属性就乱了,但由于这里是个简单的可行性测试,所以请忽略)

当按下add/del按钮时,把左边滑条所显示的版本号从global变量mayaVerDict中加入/或删除(所以你还得再按apply)

注:

ls的脑残script只是个简单测试,所以没有去改MayaBatch.param也没有改MayaSubmission.py,而且也没有去关心添加/删除后的顺序,只是纯粹想乱搞试下这样看可不可以

以上是脑残的technical artist的写法,显然你不可能把所有的plugins都这么写一遍,这样相当于把要改哪些地方hardcode进了代码文件里,而且把ui的代码和逻辑部分(修改文件)的代码混在了一起,如果是以写代码为生的td也来这么写,那估计绝b马上就要失业了(所以lz快失业了), 所以lz之后准备尝试用”程序员的写法再来写试一下”

因为不知道怎么print, 不方便调试,只看到doc里有个ClientUtils.LogText(‘oh yeah , fuck idmt !’)可以把信息输出到log里,为了方便的查看log,lz在cygwin里用了如下命令

tail -f "deadlinemonitor(Oglop-pc)-2014-06-22-0000.log"

91059580b64754d4de53eb0f2e7d9864.png如果不用这个,lz不知道windows下如何”即时”的显示一个log文件的最后几行.log文件们默认位于 C:\ProgramData\Thinkbox\Deadline\logs , 如果你没改的话。如果不知道在哪的话可以选monitor的Help菜单里的Explore Log Folder

以上…… 如果有谁觉得这个脑残想法有用的话,可以接着写,或是想写deadline的monitor script的话,这个也可以作为一个额外的例子来参考下.

方法3 高逼格+1

高逼格就是简单问题复杂化,请看下面的脑抽成果 …

0b93e3c4b440a18a1cf0b4112bf73326.png

可以从deadline里启动

332150c1de1fa628690bfbc05b4e606d.png

其原理就是写了个package专门用于搜索替换相应字符串(使用regex)

赞过:

赞 正在加载……

相关

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值