Render.ru

Закрытие окна ошибки через максскрипт

Di_di_0

Активный участник
Рейтинг
5
#1
Здравствуйте, все!
Часто пользуюсь максскриптом для рендера своих сцен. Т.е. прописываю поочередно камеры положение светильника, потом оставляю рендериться на ночь. Но часто бывает так что на одной из камер выскакивает ошибка, и с этой ошибкой он простаивает до утра, ждет пока я приду и нажму ок или cancel. Причем если нажать ок то макс просто выключается, а если cancel, то начинает рендерить следующую камеру.
Так вот можно ли прописать, что при возникновении ошибки нажать отмену? Так бы с утра один ракурс перерендерить и все ок. Скрин ошибки пока не делал, но помню что в листенере она прописавается как UNKNOWN SYSTEM EXCEPTION. Подскажите пожалуйста, а то реально напрягает, думаешь что все готово, а он стоит ,сабака, ждет пока нажмешь.
 

Di_di_0

Активный участник
Рейтинг
5
#2
Опять она вылезла, ошибка эта. Хочу извиниться не совсем верно прописал ее в первом сообщении. В листенере она вообще не видна оказывается, а видно ее в окне VrayLog. Заметил что эта табличка как бы отдельно от макса выскакивает, т.е. макс просто останавливается, все окошки двигаются мышкой, и при выделении окна макса, табличка с ошибкой уходит на задний план как будто вообще не причем. Ну неужели нельзя ничего сделать?
Блин чего-то скрины не получается прикрепить.
На табличке написано следующее:

UNHANDLE EXCEPTION: Rendering image
Last marker is at? \src\globillummap. cpp, line 1580:
GlobalIllumMap::BuildLightMap() {5}
Please note that although this error is generated by V-Ray, it may not be
V-Ray that caused it.
If you feel it is V-Ray that caused this error, please send the file c:/vraylog,txt
and, if possible, (a part of) your scene to vray@chaosgroup.com
Press Cancel to abort rendering or Ok to continue


И дальше как я уже говорил 2 кнопки ок и сancel, причем если нажать ок то макс вырубается, а если cancel, то начинает рендерить следующую камеру.
Жду советов.
 

Di_di_0

Активный участник
Рейтинг
5
#4
Спасибо, про эту галочку не знал! Попробую, вдруг получится.
 

Di_di_0

Активный участник
Рейтинг
5
#5
Не спасло!
Опять поставил с вечера 12 камер, с утра прихожу, стоит камера 02, и опять эта ошибка. Нажал cancel начала рендерить камеру03, и так до конца.
Что интересно, когда рендеришь в ручном режиме, не через скрипт, эта ошибка не вылезет никогда, а через скрипт - можно ждать в любую секунду.


У кого нибудь есть предположения?
 

JBond

Знаток
Рейтинг
33
#6
Может сам скрипт тогда ошибку провоцирует?
Надо его тогда смотреть
 

Di_di_0

Активный участник
Рейтинг
5
#8
Гляньте сам скрипт, где он там может ошибку спровоцировать, ума не приложу. Вроде проще не бывает. Кстати пробовал на разных компиках, Такое случается везде, даже при искользовании другого скрипта, "utility camera render". И еще помню выскакивала такая-же ошибка при рендере через backburner, но он при обрыве рендера повторяет попытку автоматически, а со второй попытки она нормально дорендеривается.

-------------------------------------------------------
dimx=1600
dimy=1200
vkl = on
dirr = "d:/script_render/"
rn = "enlik_spalnya_N1_newvar1_"
frm = ".jpg"

c= $camera01
render camera:c outputwidth:dimx outputheight:dimy outputfile:(dirr+rn+c.name+frm) vfb:vkl
c= $camera02
render camera:c outputwidth:dimx outputheight:dimy outputfile:(dirr+rn+c.name+frm) vfb:vkl
c= $camera03
render camera:c outputwidth:dimx outputheight:dimy outputfile:(dirr+rn+c.name+frm) vfb:vkl
c= $camera04
render camera:c outputwidth:dimx outputheight:dimy outputfile:(dirr+rn+c.name+frm) vfb:vkl
c= $camera05
render camera:c outputwidth:dimx outputheight:dimy outputfile:(dirr+rn+c.name+frm) vfb:vkl

quitMAX (#noPrompt)
--DOSCommand "shutdown -s -f"
----------------------------------------------------

Про анимированную камеру думал, но никак руки не дойдут пока, Попробую в ближайшее время. Но лучше все-таки придумать как эту ошибку отловить.


Вообще я так понял, что либо это невозможно, либо нереально сложно?
Еще такая мысль - можно ли прописать время рендера. Допустим если рендер не закончился за 3 часа, то обрывать его и начинать заново?
 

JBond

Знаток
Рейтинг
33
#9
Несколько вариантов можно пробовать:
первое - переменные лучше переименовать не брать постоянно "С" для всех камер . А взять другие буквы a,b,c,d ... необязательно конечно но лучше в разных переменных хранить данные, а не перезаписывать.

1. Напрямую через рендер команду (буду писать к одной камере) :
c= $camera01
render camera:c outputwidth:dimx outputheight:dimy outputfile:(dirr+rn+c.name+frm) vfb:vkl quiet:true

2.Через try() catch() :

try (
c= $camera01
render camera:c outputwidth:dimx outputheight:dimy outputfile:(dirr+rn+c.name+frm) vfb:vkl quiet:true
)
catch()
 

JBond

Знаток
Рейтинг
33
#10
Еще такой момент нужно скрины глянуть настроек Mode: для примари и секондари баунс.
Потомучто в ошибке он жалуется на
Last marker is at? \src\globillummap. cpp, line 1580:
GlobalIllumMap::BuildLightMap() {5}

Если так не получится попробуем закрывать окно напрямую вроде есть Callback который это может делать.
 

Di_di_0

Активный участник
Рейтинг
5
#11
Спасибо за совет! Потестирую. Про try()catch() интересная задумка.


По настройкам рендера.
В Primary стоит Irradiance map, vеry low, single frame
В Secondary - Ligthcash, single frame
И dinamic memory limit - 50000
Все остальное стандартные настройки. ничего больше не трогал.

Но кажется настройки здесь не причем, потому что иногда рендер при помощи фотонов тем же заканчивается.
 

JBond

Знаток
Рейтинг
33
#12
Вариант закрытия окна через hwnd :
-------------------------------------------------------------------------------------------------------------
--начало

fn ErrorHandle = (

local windowHandle = DialogMonitorOPS.GetWindowHandle()
if (windowHandle!=0)
then (
UIAccessor.PressButtonByName windowHandle "(ТУТ НАЗВАНИЕ КНОПКИ КОТОРУЮ НУЖНО ЗАКРЫТЬ "OK" , "CANCEL" и в т.п.)"
)
DialogMonitorOPS.Enabled =true
DialogMonitorOPS.RegisterNotification ErrorHandle id:#dyeError
-- начало твоего кода ------------------------------------------------------------------------
dimx=1600
dimy=1200
vkl = on
dirr = "d:/script_render/"
rn = "enlik_spalnya_N1_newvar1_"
frm = ".jpg"
c= $camera01
render camera:c outputwidth:dimx outputheight:dimy outputfile:(dirr+rn+c.name+frm) vfb:vkl
c= $camera02
render camera:c outputwidth:dimx outputheight:dimy outputfile:(dirr+rn+c.name+frm) vfb:vkl
c= $camera03
render camera:c outputwidth:dimx outputheight:dimy outputfile:(dirr+rn+c.name+frm) vfb:vkl
c= $camera04
render camera:c outputwidth:dimx outputheight:dimy outputfile:(dirr+rn+c.name+frm) vfb:vkl
c= $camera05
render camera:c outputwidth:dimx outputheight:dimy outputfile:(dirr+rn+c.name+frm) vfb:vkl
--конец твоего кода --------------------------------------------------------------------------------
DialogMonitorOPS.UnRegisterNotification id:#dyeError --внизу про них
DialogMonitorOPS.Enabled =false
-- начало твоего кода --------------------------------------------------------------------------------
quitMAX (#noPrompt)
--DOSCommand "shutdown -s -f"
--конец твоего кода--------------------------------------------------------------------------------

P.S. Сразу предупреждаю, что пока эти строки(пометка вверху) не запустятся будут все окна обрабатываться даже полезные, там где кнопка будет с таким именем которое задано.
Поэтому quiet:true лучше всего прописывать в основном коде.
 

Di_di_0

Активный участник
Рейтинг
5
#13
Огого! Спасибо! Крутой код получился. Буду тестить, Имеется ввиду "quiet:true" прописать после каждой камеры?
 

Di_di_0

Активный участник
Рейтинг
5
#15
Извиняюсь за назойливость, но у меня он почему-то не работает. Если запускаешь скрипт то ничего не происходит, и камеры прописаные на рендер не пускаются, а после этого вообще максскрипт отключается, т.е. любые комманды прописываешь в листенере, либо в новом скрипте, и ничего не работает. До тех пор пока макс не перезапустишь. Может у тебя версия макса другая? У меня 2010, операционка windows7.
 

JBond

Знаток
Рейтинг
33
#16
Скобку забыл в функции закрыть :( Попробуй так . yesNoCancelBox "BoxYES" messageBox "OK" эти можешь потом убрать я так для теста оставил.Тестил в 2011. Файлы рендерятся сохраняются , все поп-ап окна закрываются в процессе.

--------------------------------------------------------------------------------------------------
DialogMonitorOPS.UnRegisterNotification id:#dyeError
fn ErrorHandle = ( local windowHandle = DialogMonitorOPS.GetWindowHandle()
if (windowHandle!=0) then ( UIAccessor.PressButtonByName windowHandle "cancel" ) )

DialogMonitorOPS.RegisterNotification ErrorHandle id:#dyeError
DialogMonitorOPS.Enabled =true
dimx=1600
dimy=1200
vkl = on
dirr = "K:/"
rn = "enlik_spalnya_N1_newvar1_"
frm = ".jpg"
c= $camera001
render camera:c outputwidth:dimx outputheight:dimy outputfile:(dirr+rn+c.name+frm) vfb:eek:n quiet:true
d= $camera002
render camera:d outputwidth:dimx outputheight:dimy outputfile:(dirr+rn+d.name+frm) vfb:eek:n quiet:true
yesNoCancelBox "BoxYES"
messageBox "OK"

DialogMonitorOPS.UnRegisterNotification id:#dyeError
DialogMonitorOPS.Enabled =false
 

Di_di_0

Активный участник
Рейтинг
5
#17
Затестил! Вроде все работает! Закрывает даже сами окна рендера. Спасибо за труды надеюсь еще кому-нибудь пригодится.

Одно смущает, когда вылазит мессаджбокс, он находится сверху окна макса, т.е. пытаешься нажать где-то кроме кнопки ок, он пикает и табличка мигает. А когда та ошибка вылазит она как будто сама по себе, можно выделить окно макса, и сообщение об ошибке уходит на задний план, можно подвигать окна с рендерами, что-нибудь сворачить или закрывать. Пока не нажмешь что-нибудь на той табличке. В любом случает потестирую еще, глядишь в ближайшее время узнаю результат.
 

JBond

Знаток
Рейтинг
33
#18
Ошибка сама по себе потому, что это ошибка конкретно вирея, а не макса в целом.
Он просто как модуль отваливается, а макс может быть работоспособен.Хотя часто он грохается вместе с плагином инициатором ошибки.

UNHANDLE EXCEPTION: Rendering image
Last marker is at? \src\globillummap. cpp, line 1580:
GlobalIllumMap::BuildLightMap() {5}

Чтото с методом в С++ файле происходит. По какимто причинам он не может построить лайтмап после первого рендера.

Как скрипт будет окна закрывать нужно пробовать, надеюсь что мониторинг не будет делить на "чужих" "своих".
 

Di_di_0

Активный участник
Рейтинг
5
#19
Долго тестировал, такое ощущение было даже, что вообще перестал этот глюк происходить, как данный скрипт применил. Но вот наконец то и произошло.
Он на самом деле не делит на чужих и своих, закрывает все подряд. Но видимо нажимает всетаки "ок", потому что макс сразу вырубается. Хотя прописано "cancel".
Буду думать.
 
Сверху