-
Notifications
You must be signed in to change notification settings - Fork 0
/
MultiCamSubmitter_905.2.ms
3671 lines (3118 loc) · 127 KB
/
MultiCamSubmitter_905.2.ms
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
-------------------------------------------------------------------------------
-- MultiCamSubmitter_905.ms
-- By Ilya Floussov (ilya@conceptfarm.ca)
-- Dec 16th 2018
-- Submits jobs to Deadline
-- Requires: Deadline functions and Attribute
-------------------------------------------------------------------------------
--to do:
-- split camera option
-- Add checking for deadline installation
-- add checking for ffmpeg
-- Strange bug with create camera from view when submitter and lister are open, something about passing Scene Explorer as a variable
-- probably something to do with layer hidding in the attribute
-- Reset vray frame buffer to old res
-- Reset region to old region
-- Very large resolution settings
-- Look at different systemTools options for screen scaling
-- systemScale = (sysInfo.DesktopSizeUnscaled)/(sysInfo.desktopSize)
-- systemScale = (systemTools.GetScreenWidth applyUIScaling:false) / (systemTools.GetScreenWidth applyUIScaling:true)
--ver.902
----------------------------------------------------
-- Esc. to cancel preview
-- Esc. to cancel submission (needs testing)
-- ffmpeg camera parameters and frame numbers
-- consolidate all submission functions into one FA and SA functions with case for types
-- Submission resolution is now 1/10th for max resolution and vray resolution is always used
-- Parent cancel dialog to the submitter window so that it always stays on top of it
-- Bugs:
-- Esc. to cancel for submission
-- check if ffmpeg exists before preview
-- check if ffmpeg exists in deadline, somehow access plugin paths and check those?
-- escape/cancel dialog doesn't work
-- on open reset vp layout and convert to #layout_1, enable safe frame view
-- Cancel window doesn't disappear after submission when using checkboxes
-- Post submission bug:
-- After submission - max resolution doesn't return to previous - seems to work on close but not after submission
-- Error on selected camera submission
-- Error old animation doesn't set back when using single camera submission from drop down, works on checkbox and fully automatic
-- ^ Error appears after using the camera chooser dropdown
-- SetOldRPS function is the issue, vrayRend variable gets lost and no settings can be set after that function runs
-- getoldprs grabs settings before submission and restores them that why vfb gets the correct settings but since no changes can be made after setoldrps those settings stay
-- Turns out vray settings could be stored by making a *copy* of the renderers.current, when vrayRend variable get assigned back to rend.curr the settings from the previous submission get restored as well
-- Test at work:
-- Find out about shaded camera view for all video graphics options
-- check paths with special characters, works in 2016 , check in 2018
-- DR Issues:
-- when using DR need to create a new identical camera and delete attribute holder modifier
-- need to find out if prerender callback fires before DR assets are transfered - can only test with a dr machine at work
--ver.901
----------------------------------------------------
-- Sunpoints are no longer stored as helpers but rather in submitter attribute
-- Move sun to sunpoint function needs rewritting
-- cameras are passed as strings as opposed to objects, needs to be fixed
--ver.900
----------------------------------------------------
-- Removing dependency on framerange.txt
-- Integrating submitter attributes per camera
-- HDRI per camera
--ver.879
----------------------------------------------------
-- Attempt to submit DR jobs to Deadline, still in progress
-- Issues with copying vrayconfig file to userprofile
-- Prerender script needs work
--ver.878
----------------------------------------------------
-- 4K screen support for preview functions
--ver.877
----------------------------------------------------
-- Brute force with spheres now hides all geometry but spheres
-- Strict enforcement of sphere mask to jpg format, less space
-- Deadline 10
--ver.876
----------------------------------------------------
-- Hide everything but geometry for preview
-- Don't do sanity check
--ver.875
----------------------------------------------------
-- Removed Dirty Pass GI, replaced with AS IS setting
--ver.874
----------------------------------------------------
-- Removed Quicktime submission, replaced with ffmpeg
--ver.873
----------------------------------------------------
-- Added override frame range txt
-- Removed avid mov option from preview
--ver.872
----------------------------------------------------
-- Preview functions now test for codecs
--ver.871
----------------------------------------------------
-- New mov/avi compression using ffmpeg
--ver.870
----------------------------------------------------
-- New Deadline 8 submission function integration
--ver.868
----------------------------------------------------
-- New Folder structure revision
-- Preview with single frame fix
--ver.867
----------------------------------------------------
-- Layer handling function revision
-- defaultVFB() disables VFB colour correction
--ver.866
----------------------------------------------------
-- Deadline version 8
--ver.865
----------------------------------------------------
-- Fixed get res from max bug
--ver.86
----------------------------------------------------
-- Fixed preview bug , wrong scaling/cropping
--ver.85.5
----------------------------------------------------
-- Fixed preview bug when framerange.txt exists but no camera entry
-- Added submission groups "frames" + "irmap"
-- Changed tempPreset file location to system temp folder
--ver.85
----------------------------------------------------
-- Fixed preview dib copy pasteBitmap bug
--ver.84
----------------------------------------------------
-- Fixed preview SA function not to ask to explore C; after every camera
--ver.83
----------------------------------------------------
-- Fixed Nth frame bug, only used to apply to IR Submission
--ver.82
----------------------------------------------------
-- Fixed callback bug (not removing copyJpg callback between cam submissions)s
--ver.81
----------------------------------------------------
-- exr + jpg option for render extension now works
-- Latest using vbfsave , same as exr -> jpg, only saves last rendered frame
-- When choosing compress to mov, jpg conversion will happen regardless of ext
-- When render is a single frame disable mov compression, needs testing
-- fixed single frame submission bug
-- rpsindex fix
-- task time out for QT job
-- Fixed dot in exr frame names
--ver.80
----------------------------------------------------
-- exr + jpg option for render extension
-- single image mix bug fixed
--ver.79
----------------------------------------------------
-- jpg support added
-- rewrite latest image function, now max opens the image files and saves it, no external xcopy command
-- frame nth frame added
-- set/get rps preset rework, no need for vray versions, needs testing
-- single image mixed with frame range bug in parsing FrameRange.txt needs fixing
--ver.78
----------------------------------------------------
--Latest folder option is now using an xcopy callback script
--Integrate Deadline7 batch
--ver.77
----------------------------------------------------
--Camera list bug fixes
--Region render warning on opening the script
--Latest folder option
--Fix Suspension bug
--ver.76
----------------------------------------------------
--Region Render deadline bug fix
--ver.75
----------------------------------------------------
--Custom attributes to store scene default data
--ver.74
----------------------------------------------------
--Added:
--Sphere render added
--Set save requirement
--Added mov exporter using QT local deadline cmd
--ver.73
----------------------------------------------------
--Added:
--Output Root chooser
--Took out the extra rollout now just a single dialogue
--Need to do update fn for frameout
--ver.72
----------------------------------------------------
--Added:
--Deadline Submitter
--ver.71
----------------------------------------------------
--Added:
--nra submitter
--ver.70G
----------------------------------------------------
-- Added:
-- Animated Brute Force Button
-- New Set old get old using temp preset file
--ver.70F
----------------------------------------------------
--Added
-- Full Auto Animation Pass
-- Preview Button bug fixed
-- Fixed setting not going back to old settings after submission of Ani frames
--ver.70
----------------------------------------------------
--Done needs testing:
-- Vray buffer no matter what
-- sequential submittion
-- use new file parsing option instead of filterstring option
-- layers option added, listed layers will be hidden
-- fixed layer bug
-- fixed single frame submission
--ver.68
----------------------------------------------------
--submitting without framerange.txt will default to single frame of the current time
--preview buttons interaction remaped to prevent user errors
--ver.67
----------------------------------------------------
--callback option for automated unsuspension of frames jobs
--ver.66
----------------------------------------------------
--fixed leading zero problem in preview
--localtime fixed
--connection is automatic
--ver.65
----------------------------------------------------
--to do:
--split camera option
--integrate camera setup
--preview camera option to be refined with custom frame size
--file "localtime" bug by using getlocaltime instead
--use new file parsing option instead of filterstring option
--Connection is faster since there is no need to get q control
--zdepth exr should work for mult entries
--ver.64
----------------------------------------------------
--no save replaced with job.name ="" function instead
--to do: make z-depth as exr work for mult entries
-- ignore sunpoints
--old setting
--ver.63
----------------------------------------------------
-- new interface
--v3 has custom frame format
--v3 camera selection dropdown added "no camera"
--v4 cleaned up code
--ver.62
----------------------------------------------------
--enabled and disabled button options to minimize user error
--ver.61
----------------------------------------------------
--sorted cameras in the dropdown
--extention selection
--ver.6
----------------------------------------------------
--added new interface and usage section
--clear now clears all render paths
--ver.53
----------------------------------------------------
--added single cam function
--ver.52
----------------------------------------------------
--added NoGI button for Sky and Z-depth passes
--tested ver.51 with Tunis project - it works
--FrameRange.txt warning box added
--Connection status works
--ver.51
----------------------------------------------------
--implementing pass type into folder structure
--moved srv_list to top function
--moved frameout to top
macroScript MultiCamSubmitter
category:"ilya_s Scripts"
tooltip:"v.905.20"
buttontext:"v.905.20"
Icon:#("MultiCamSq",2)
(
global SMTDSettings
global SMTDFunctions
global SMTDPaths
global DeadlineSlaves
global multiCamSubmitter
global camChecklistRO
global cancelProcessRO
global SubmitterNodeEventCallback
local vrayRend = undefined
local vrayRendPreSubmission = undefined
local updateMultiCamSubmitterRollout = false
local begframe = 0
local endframe = 1
local sceneCams = #()
local vraySuns = #()
local sceneCamsNames = #()
local currentCameraName = undefined
local currentCamera = undefined
local SingleFrame = false
local OverrideSingleFrame = false
local disableVFB = false
local ignoreVFB = true
local extensions = #(".tga", ".exr", ".exr", ".exr",".jpg")
local extensionsList = #(".tga", ".exr", ".exr + .jpg", ".exr (split)", ".jpg")
local zdeptharray = #()
local view_size = [1920,1080]
local projectName = "Project Noname"
local outputPaths = #("X:\\ProjectName\\07_Production\\02_RawImageRender\\", "Z:\\Project\\01_Frames\\", "Z:\\Project\\03_Previews\\", "Custom")
local oldRenderRes = #()
local oldHideLayers = #()
local oldNonRenderLayers = #()
local oldAnimationSettings = #()
local oldRenderTimeType = rendTimeType
local oldRenderNthFrame = rendNThFrame
local oldEnvSettings = #()
local oldHideCats = #()
local oldViewportLayout = undefined
local oldRenderRegion = #()
local as_is_diag_settings = undefined
local envLighting = undefined
local utvideoDir = @"C:\Program Files\utvideo\unins000.exe"
local avidDir = @"C:\Program Files (x86)\QuickTime\QTComponents\AvidAVdnCodec.qtx"
local FFmpegExe = ""
local UnixDeadlineRoot = ""
local OCIOconfig = "Y:\\Resources\\23_OCIO\\aces_1.2\\config.ocio"
--########################--
--GENERAL FUNCTIONS
--########################--
fn getMaxVer = (return ("20" + (((substring ((maxVersion())[1] as string) 1 2) as integer) - 2) as string))
--List is a string of comma separated entries
fn checkWindowsLegalPath str =
(
--https://docs.microsoft.com/en-gb/windows/win32/fileio/naming-a-file
--not allowed as part of name < > : " / \ ' | ? * .
--not allowed as name CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9
--not allowed space at beginning or end
local result = undefined
local legalCharsSet = "1234567890-=!@#$%^&*()_+[]{}ABCDEFGHIJKLMNOPQRSTUVWXYZ "
local illegalCharsSet = #("<",">",":","\"","/","\\","'","|",".") -- can use with matchpattern
local illegalCharsSet2 = #("?","*") --reserved chars for matchpattern need to use findstring instead
local illegalNameSet = #("CON", "PRN", "AUX", "NUL", "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9")
for i=1 to str.count while result == undefined do
(
if ((matchpattern legalCharsSet pattern:("*"+str[i]+"*") caseSensitive:false) == false) then (result = #(str,("bad character " + (substring str 1 (i-1)) + "<bad>" + (substring str (i+1) -1))))
)
for char in illegalCharsSet while result == undefined do
(
if ((matchpattern str pattern:("*"+char+"*")) == true) then (result = #(str,("illegal character " + char)))
)
for char in illegalCharsSet2 while result == undefined do
(
if ((findstring str char) != undefined) then (result = #(str,("illegal character " + char)))
)
for n in illegalNameSet while result == undefined do
(
if (toUpper str == n) then (result = #(str,("illegal name " + n)))
)
if (str[1] == " ") then (result = #(str,"space at beginning"))
if (str[str.count] == " ") then (result = #(str,"space at end"))
result
)
fn setBitmapIOClasses =
(
targa.itgaio.setColorDepth 32
targa.itgaio.setCompressed true
targa.itgaio.setAlphaSplit false
targa.itgaio.setPreMultAlpha false
targa.itgaio.setAuthor "Cicada Design Inc."
--TODO: exr settings here--
--needs testing for best settings--
--http://help.autodesk.com/view/3DSMAX/2017/ENU/?guid=__files_GUID_FDECDBDE_C741_4CD8_9DE4_F3355490C796_htm
fopenexr.setLayerOutputFormat 0 1 -- set Main Render to 0: FLOAT32 1: FLOAT16
fopenexr.setLayerOutputType 0 0 -- set Main Render to RGBA
fopenexr.setSaveRegion false -- save full image
fopenexr.setSaveScanline true -- save as scanline
fopenexr.SetCompression 2 -- 2:single line , 3:line 16
)
fn getDrServers =
(
local drServers = ""
local drSettings = #("restart_slaves","list_in_scene","max_servers","use_local_machine","transfer_missing_assets","use_cached_assets","cache_limit_type","cache_limit","render_region_warning")
local drFile = openFile (getdir (#plugcfg) + "\\vray_dr.cfg")
if drFile != undefined then
(
seek drFile 0
try while not eof drFile do
(
parsedLine = readline drFile
filterLine = filterString parsedLine " "
if ((filterLine[2] == "1") and (findItem drSettings filterLine[1]) == 0) then
(
drServers = drServers + "," + filterLine[1]
)
)
catch()
close drFile
free drFile
)
else (print "ERRO: Distributed Settings file does not exist")
return (substring drServers 2 drServers.count)
)
fn compareByObjectName v1 v2 =
(
local d = (v1.name < v2.name)
case of
(
(d == true ): -1
(d == false ): 1
default: 0
)
)
fn padNumber nr padLen = (local n = (nr as string) for x = 1 to (padLen - n.count) do n = "0" + n return n)
fn useToday addTime:false =
(
local todayDate = ""
local timenow = getlocaltime()
todayDate = timenow[1] as string + "_" + (padnumber timenow[2] 2) as string + "_" + (padnumber timenow[4] 2) as string
if addTime == true then
(
todayDate = todayDate + "_" + (padnumber timenow[5] 2) as string + "_" + (padnumber timenow[6] 2) as string
)
todayDate
)
fn getProjectName =
(
local result = "Project Noname"
if (maxfilepath != "" and (filterstring maxfilepath "\\")[1] == "X:") then
(
result = (filterstring maxfilepath "\\")[2]
)
result
)
fn getCamFocalLength cam =
(
local result =
case (classof cam) of
(
VRayPhysicalCamera: (cam.focal_length) as integer
Targetcamera: (cameraFOV.FOVtoMM cam.curFOV) as integer
Freecamera: (cameraFOV.FOVtoMM cam.curFOV) as integer
Physical: (cam.focal_length_mm) as integer
default:0
)
result
)
fn IFLwriter f =
(
for i = begframe to endframe do
(
camstring = currentCameraName + "_.SphereMask_." + (padNumber i 4) as string + ".tga" + "\n"
format camstring to: f
)
close f
)
fn defaultVFB =
(
if vrayRend.options_rgbColorSpace == 2 and OCIOconfig != undefined and doesFileExist OCIOconfig then
(
vfbControl #ocio true -- possible issue in the future with OCIOconfig
)
else
(
vfbControl #srgb true -- possible issue in the future with OCIOconfig
)
vfbControl #trackmouse false
vfbControl #clamp true
vfbControl #info false
vfbcontrol #testresolution false
--vray 5 moved to a layer based colour correction
local vfbLayers=(vfbControl #getLayerMgr)[1]
local displayLayer = vfbLayers.displayCorrectionLayer
for i=1 to displayLayer.numChildren do
(
local thisLayer = displayLayer.getChild i
if thisLayer.class != "chaos.ref.sourcefolder" or thisLayer.class != "chaos.pe.denoiser" then
(
thisLayer.enabled = false
)
)
vfbLayers.stamplayer.enabled = false
vfbLayers.lensEffectsLayer.enabled = false
vfbLayers.lightMixLayer.enabled = false
)
-- Doesn't really work well
/*
global renderParamsFN
fn renderParamsFN =
(
print ("Dialog is open = " + renderSceneDialog.isOpen() as string )
MessageBox ("Changing render parameters with Submitter open will screw things up - closing Submitter window.")
destroydialog multiCamSubmitter
)
*/
fn AddCallbackLatest denoise:true =
(
makedir (rootnode.CA_frameOutput + "Latest")
local outputFile = ""
if extensionsList[rootnode.CA_extensionType] == ".exr" or extensionsList[rootnode.CA_extensionType] == ".exr + .jpg" then
(
outputFile = vrayRend.output_rawfilename
)
else
(
outputFile = vrayRend.output_splitfilename
)
--outFileRGB = getFilenamePath outputFile + getFilenameFile outputFile + ".jpg"
outFileRGB = rootnode.CA_frameOutput +"Latest" + "\\" + getFilenameFile outputFile + ".jpg"
tempFile = (getDir #downloads)+ "\\Temp_.jpg"
local setChannel = ""
if not denoise then (setChannel = "vfbControl #setchannel 0;")
a = "vfbControl #srgb true;"+setChannel+"vfbControl #rgb true; vfbControl #saveimage ((sysInfo.tempdir ) + \"" + "Temp_.jpg" +"\"); tempb = openBitMap ((sysInfo.tempdir ) + \"" + "Temp_.jpg" +"\"); newtemp = copy tempb; newtemp.filename = \"" + outFileRGB +"\"; save newtemp frame:slidertime quiet:true; close tempb; close newtemp; free tempb; free newtemp; deleteFile ((sysInfo.tempdir ) + \"" + "Temp_.jpg" +"\")"
--a = "vfbControl #srgb true; vfbControl #setchannel 0; vfbControl #rgb true; vfbControl #saveimage \"" + tempFile +"\"; tempb = openBitMap \"" + tempFile +"\"; newtemp = copy tempb; newtemp.filename = \"" + outFileRGB +"\"; save newtemp frame:slidertime quiet:true; close tempb; close newtemp; free tempb; free newtemp; deleteFile \"" + tempFile +"\""
callbacks.addscript #postRender a persistent:true id:#copyLatest_callback
)
fn AddCallbackJPG denoise:true =
(
local outputFile = ""
if extensionsList[rootnode.CA_extensionType] == ".exr" or extensionsList[rootnode.CA_extensionType] == ".exr + .jpg" then
(
outputFile = vrayRend.output_rawfilename
)
else
(
outputFile = vrayRend.output_splitfilename
)
outFileRGB = getFilenamePath outputFile + getFilenameFile outputFile + "..jpg" --the extra dot is for dot-delimited frame number for exr
tempFile = (getDir #downloads)+ "\\Temp_.jpg"
local setChannel = ""
if not denoise then (setChannel = "vfbControl #setchannel 0;")
local setDisplay = "vfbControl #srgb true;"
if vrayRend.options_rgbColorSpace == 2 and OCIOconfig != undefined and doesFileExist OCIOconfig then
(
setDisplay = "vfbControl #ocio true; vfbControl #loadocio \""+ OCIOconfig+"\"; vfbControl #ocioinputcolorspace \"ACES - ACEScg\"; vfbControl #ociodisplaydevice \"ACES\"; vfbControl #ocioviewtransform \"sRGB\" "
)
--a = "vfbControl #srgb true; vfbControl #setchannel 0; vfbControl #rgb true; vfbControl #saveimage \"" + tempFile +"\"; tempb = openBitMap \"" + tempFile +"\"; newtemp = copy tempb; newtemp.filename = \"" + outFileRGB +"\"; save newtemp frame:slidertime quiet:true; close tempb; close newtemp; free tempb; free newtemp; deleteFile \"" + tempFile +"\""
a = setDisplay+setChannel+"vfbControl #rgb true; vfbControl #saveimage ((sysInfo.tempdir) + \"" \
+ "Temp_.jpg" +"\"); tempb = openBitMap ((sysInfo.tempdir ) + \"" + "Temp_.jpg" +"\"); newtemp = copy tempb; newtemp.filename = \"" \
+ outFileRGB +"\"; save newtemp frame:slidertime quiet:true; close tempb; close newtemp; free tempb; free newtemp; deleteFile ((sysInfo.tempdir ) + \"" \
+ "Temp_.jpg" +"\")"
callbacks.addscript #postRenderFrame a persistent:true id:#copyJPG_callback
)
-- this should be a rollout update function, update dropdown and updata LV_ITEMS, triggers when the submitter is open and user changes the name of the camera or adds or subtracts one.
fn SubmitterNodeEventFN ev nd =
(
if updateMultiCamSubmitterRollout == true then
(
try(destroydialog multiCamSubmitter; destroydialog camChecklistRO )catch()
macros.run "ilya_s Scripts" "MultiCamSubmitter"
--createdialog multiCamSubmitter
)
updateMultiCamSubmitterRollout = false
)
fn SubmitterNodeEventSetUpdate ev nd =
(
updateMultiCamSubmitterRollout = true
)
fn gwActiveSettings =
(
rect = (box2 13 47 96 97)
eRect = rect -- enlargeUpdateRect 1 pixel too small in either direction?
eRect.right += 1
eRect.bottom += 1
local displayText = ("Submitter is OPEN!\nChanges made to Environment, Frame Range or Resolution will not be stored.")
local ext = gw.getTextExtent displayText
gw.wtext [rect.left + 15 ,rect.top+20,0] displayText color:white
gw.wrect (box2 (rect.left + 15 ) (rect.top+25+ ext.y/2) ext.x 5) red
gw.enlargeUpdateRect eRect
gw.updateScreen()
--if ((refs.dependentNodes this).count == 0) then
--(
-- unregisterRedrawViewsCallback gwActiveSettings
--)
)
------------------------------------
--Layer Fuctions
------------------------------------
fn layersHideAll = ( for i = 0 to (LayerManager.count - 1) do (b = LayerManager.getLayer i; b.on = false ))
fn layersShowAll = ( for i = 0 to (LayerManager.count - 1) do (b = LayerManager.getLayer i; b.on = true ))
fn getHiddenLayers =
(
local result = #()
local n = LayerManager.count
for i = 0 to n-1 do
(
if (layermanager.getlayer i).on == false then
(
appendifunique result (layermanager.getlayer i).name
)
)
result
)
fn getNonRenderLayers =
(
local result = #()
local n = LayerManager.count
for i = 0 to n-1 do
(
if (layermanager.getlayer i).renderable == false then
(
appendifunique result (layermanager.getlayer i).name
)
)
result
)
fn setHiddenLayers arr =
(
for i = 0 to (LayerManager.count - 1 ) do
(
local thisLayerName = (layermanager.getlayer i).name
if ((findItem arr thisLayerName) != 0) then
(
layer = layerManager.getLayer i
layer.on = false
layer.renderable = false
print ("INFO: Hiding layer: " + thisLayerName)
)
else
(
layer = layerManager.getLayer i
layer.on = true
layer.renderable = true
)
)
)
fn setNonRenderLayers arr =
(
for i = 0 to (LayerManager.count - 1 ) do
(
local thisLayerName = (layermanager.getlayer i).name
if ((findItem arr thisLayerName) != 0) then
(
layer = layerManager.getLayer i
layer.renderable = false
print ("INFO: NonRender layer: " + thisLayerName)
)
else
(
layer = layerManager.getLayer i
layer.renderable = true
)
)
)
-------------------------------------------
--Get and Set Old Settings Functions
-------------------------------------------
fn getAnimation =
(
print ("INFO: Getting animation " + #(rendTimeType,rendNThFrame,animationRange) as string)
return #(rendTimeType,rendNThFrame,animationRange)
)
fn setAnimation arr =
(
print ("INFO: Setting animation " + arr as string)
rendTimeType = arr[1]
rendNThFrame = arr[2]
animationRange = arr[3]
print animationRange
)
fn getOldRPS =
(
vrayRendPreSubmission = copy vrayRend
oldRenderTimeType = rendTimeType
oldRenderNthFrame = rendNThFrame
)
fn setOldRPS =
(
renderers.current = vrayRendPreSubmission
vrayRend = renderers.current
rendTimeType = oldRenderTimeType
rendNThFrame = oldRenderNthFrame
)
fn disableVrayLog =
(
vrayrend.system_vrayLog_show = 0
vrayrend.system_vrayLog_level = 1
vrayrend.system_vrayLog_file = ""
)
fn hideCatsForPreview =
(
hideByCategory.geometry = false
hideByCategory.shapes = true
hideByCategory.lights = true
hideByCategory.cameras = true
local animaHelpers = for o in objects where classof o == animaScene collect o
if animaHelpers.count > 0 then
(
hideByCategory.helpers = false
)
else
(
hideByCategory.helpers = true
)
hideByCategory.spacewarps = true
hideByCategory.particles = true
hideByCategory.bones = true
)
fn getOldHideCats =
(
oldHideCats[1] = hideByCategory.geometry
oldHideCats[2] = hideByCategory.shapes
oldHideCats[3] = hideByCategory.lights
oldHideCats[4] = hideByCategory.cameras
oldHideCats[5] = hideByCategory.helpers
oldHideCats[6] = hideByCategory.spacewarps
oldHideCats[7] = hideByCategory.particles
oldHideCats[8] = hideByCategory.bones
hideCatsForPreview()
)
fn setOldHideCats =
(
hideByCategory.geometry = oldHideCats[1]
hideByCategory.shapes = oldHideCats[2]
hideByCategory.lights = oldHideCats[3]
hideByCategory.cameras = oldHideCats[4]
hideByCategory.helpers = oldHideCats[5]
hideByCategory.spacewarps = oldHideCats[6]
hideByCategory.particles = oldHideCats[7]
hideByCategory.bones = oldHideCats[8]
)
fn getRenderResolution =
(
-- max w, max h, vrayRes bol, vray w, vray h
result = #()
result[1] = renderWidth
result[2] = renderHeight
result[3] = vrayRend.output_getsetsfrommax
result[4] = vrayRend.output_width
result[5] = vrayRend.output_height
return result
)
fn setRenderResolution arr submission:false=
(
if renderSceneDialog.isOpen() then renderSceneDialog.close()
if arr.count < 3 then
(
arr[3] = false
arr[4] = arr[1]
arr[5] = arr[2]
)
renderWidth = arr[1]
renderHeight = arr[2]
vrayRend.output_getsetsfrommax = arr[3]
vrayRend.output_width = arr[4]
vrayRend.output_height = arr[5]
if submission == true then
(
if arr[3] == true then
(
vrayRend.output_getsetsfrommax = false
vrayRend.output_width = arr[1]
vrayRend.output_height = arr[2]
renderWidth = arr[1]/10
renderHeight = arr[2]/10
)
else
(
vrayRend.output_getsetsfrommax = false
vrayRend.output_width = arr[4]
vrayRend.output_height = arr[5]
renderWidth = arr[4]/10
renderHeight = arr[5]/10
)
)
)
fn setEnvSettings arr =
(
environmentMap = arr[1]
useEnvironmentMap = arr[2]
vrayRend.environment_gi_on = arr[3]
vrayRend.environment_gi_color_multiplier = arr[4]
vrayRend.environment_gi_map = arr[5]
vrayRend.environment_gi_map_on = arr[6]
vrayRend.environment_rr_on = arr[7]
vrayRend.environment_rr_color_multiplier = arr[8]
vrayRend.environment_rr_map = arr[9]
vrayRend.environment_rr_map_on = arr[10]
vrayRend.environment_refract_on = arr[11]
vrayRend.environment_refract_color_multiplier = arr[12]
vrayRend.environment_refract_map = arr[13]
vrayRend.environment_refract_map_on = arr[14]
)
fn getEnvSettings =
(
local arr = #()
arr[1] = environmentMap
arr[2] = useEnvironmentMap
arr[3] = vrayRend.environment_gi_on
arr[4] = vrayRend.environment_gi_color_multiplier
arr[5] = vrayRend.environment_gi_map
arr[6] = vrayRend.environment_gi_map_on
arr[7] = vrayRend.environment_rr_on
arr[8] = vrayRend.environment_rr_color_multiplier
arr[9] = vrayRend.environment_rr_map
arr[10] = vrayRend.environment_rr_map_on
arr[11] = vrayRend.environment_refract_on
arr[12] = vrayRend.environment_refract_color_multiplier
arr[13] = vrayRend.environment_refract_map
arr[14] = vrayRend.environment_refract_map_on
arr
)
fn getOldEnvLayers =
(
oldRenderRes = getRenderResolution()
oldHideLayers = getHiddenLayers()
oldNonRenderLayers = getNonRenderLayers()
oldEnvSettings = getEnvSettings()
print ("Old resolution is " + oldRenderRes as string)
print ("Old environmet is " + oldEnvSettings as string)
)
fn setOldEnvLayers =
(
)
fn resetViewports =
(
disableSceneRedraw()
local layout = viewport.getLayout()
local activeViewportType = undefined
local activeViewportCamera = undefined
local activeViewportTm = undefined
local activeViewportRegion = undefined
if layout == #layout_1 then
(
activeViewportType = viewport.getType()
activeViewportCamera = getActiveCamera()
activeViewportTm = viewport.getTM()
activeViewportRegion = viewport.getRegionRect viewport.activeViewport
viewport.ResetAllViews()
try(viewport.activeViewport = 4)catch("Viewport out of index range")
max tool maximize
if activeViewportType == #view_camera then viewport.setCamera activeViewportCamera
else if activeViewportType == #view_persp_user then viewport.setTM activeViewportTm
viewport.setRegionRect viewport.activeViewport activeViewportRegion
)
else
(
if viewport.getType() != #view_camera then
(
local viewportIndex = 0
for i = 1 to viewport.numViews do
(
case (viewport.getType index:i) of
(
#view_camera: (
viewportIndex = i
activeViewportType = viewport.getType index:i
activeViewportCamera = viewport.getCamera index:i
activeViewportRegion = viewport.getRegionRect i
exit
)