1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

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

Тема в разделе "MAXScript", создана пользователем Di_di_0, 29 июл 2011.

Модераторы: Savin Denis
  1. Di_di_0

    Di_di_0 Активный участник

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

    Di_di_0 Активный участник

    С нами с:
    08.12.2007
    Сообщения:
    64
    Симпатии:
    0
    Баллы:
    5
    Опять она вылезла, ошибка эта. Хочу извиниться не совсем верно прописал ее в первом сообщении. В листенере она вообще не видна оказывается, а видно ее в окне 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, то начинает рендерить следующую камеру.
    Жду советов.
     
  3. JBond

    JBond Знаток

    С нами с:
    17.06.2009
    Сообщения:
    451
    Симпатии:
    5
    Баллы:
    37
    А если в настройках снять эту галочку?
     

    Вложения:

    • 2393547.jpg
      2393547.jpg
      Размер файла:
      84,2 КБ
      Просмотров:
      227
  4. Di_di_0

    Di_di_0 Активный участник

    С нами с:
    08.12.2007
    Сообщения:
    64
    Симпатии:
    0
    Баллы:
    5
    Спасибо, про эту галочку не знал! Попробую, вдруг получится.
     
  5. Di_di_0

    Di_di_0 Активный участник

    С нами с:
    08.12.2007
    Сообщения:
    64
    Симпатии:
    0
    Баллы:
    5
    Не спасло!
    Опять поставил с вечера 12 камер, с утра прихожу, стоит камера 02, и опять эта ошибка. Нажал cancel начала рендерить камеру03, и так до конца.
    Что интересно, когда рендеришь в ручном режиме, не через скрипт, эта ошибка не вылезет никогда, а через скрипт - можно ждать в любую секунду.


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

    JBond Знаток

    С нами с:
    17.06.2009
    Сообщения:
    451
    Симпатии:
    5
    Баллы:
    37
    Может сам скрипт тогда ошибку провоцирует?
    Надо его тогда смотреть
     
  7. iVAt

    iVAt Знаток

    С нами с:
    03.08.2006
    Сообщения:
    1.138
    Симпатии:
    1
    Баллы:
    46
    не проще использовать одну анимированную камеру?...
     
  8. Di_di_0

    Di_di_0 Активный участник

    С нами с:
    08.12.2007
    Сообщения:
    64
    Симпатии:
    0
    Баллы:
    5
    Гляньте сам скрипт, где он там может ошибку спровоцировать, ума не приложу. Вроде проще не бывает. Кстати пробовал на разных компиках, Такое случается везде, даже при искользовании другого скрипта, "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 часа, то обрывать его и начинать заново?
     
  9. JBond

    JBond Знаток

    С нами с:
    17.06.2009
    Сообщения:
    451
    Симпатии:
    5
    Баллы:
    37
    Несколько вариантов можно пробовать:
    первое - переменные лучше переименовать не брать постоянно "С" для всех камер . А взять другие буквы 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()
     
  10. JBond

    JBond Знаток

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

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

    Di_di_0 Активный участник

    С нами с:
    08.12.2007
    Сообщения:
    64
    Симпатии:
    0
    Баллы:
    5
    Спасибо за совет! Потестирую. Про try()catch() интересная задумка.


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

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

    JBond Знаток

    С нами с:
    17.06.2009
    Сообщения:
    451
    Симпатии:
    5
    Баллы:
    37
    Вариант закрытия окна через 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 лучше всего прописывать в основном коде.
     
  13. Di_di_0

    Di_di_0 Активный участник

    С нами с:
    08.12.2007
    Сообщения:
    64
    Симпатии:
    0
    Баллы:
    5
    Огого! Спасибо! Крутой код получился. Буду тестить, Имеется ввиду "quiet:true" прописать после каждой камеры?
     
  14. JBond

    JBond Знаток

    С нами с:
    17.06.2009
    Сообщения:
    451
    Симпатии:
    5
    Баллы:
    37
    Да.

    Я пробовал с messageBox окно самозакрывается если мониторинг запущен.
     
  15. Di_di_0

    Di_di_0 Активный участник

    С нами с:
    08.12.2007
    Сообщения:
    64
    Симпатии:
    0
    Баллы:
    5
    Извиняюсь за назойливость, но у меня он почему-то не работает. Если запускаешь скрипт то ничего не происходит, и камеры прописаные на рендер не пускаются, а после этого вообще максскрипт отключается, т.е. любые комманды прописываешь в листенере, либо в новом скрипте, и ничего не работает. До тех пор пока макс не перезапустишь. Может у тебя версия макса другая? У меня 2010, операционка windows7.
     
  16. JBond

    JBond Знаток

    С нами с:
    17.06.2009
    Сообщения:
    451
    Симпатии:
    5
    Баллы:
    37
    Скобку забыл в функции закрыть :( Попробуй так . 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
     
  17. Di_di_0

    Di_di_0 Активный участник

    С нами с:
    08.12.2007
    Сообщения:
    64
    Симпатии:
    0
    Баллы:
    5
    Затестил! Вроде все работает! Закрывает даже сами окна рендера. Спасибо за труды надеюсь еще кому-нибудь пригодится.

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

    JBond Знаток

    С нами с:
    17.06.2009
    Сообщения:
    451
    Симпатии:
    5
    Баллы:
    37
    Ошибка сама по себе потому, что это ошибка конкретно вирея, а не макса в целом.
    Он просто как модуль отваливается, а макс может быть работоспособен.Хотя часто он грохается вместе с плагином инициатором ошибки.

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

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

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

    Di_di_0 Активный участник

    С нами с:
    08.12.2007
    Сообщения:
    64
    Симпатии:
    0
    Баллы:
    5
    Долго тестировал, такое ощущение было даже, что вообще перестал этот глюк происходить, как данный скрипт применил. Но вот наконец то и произошло.
    Он на самом деле не делит на чужих и своих, закрывает все подряд. Но видимо нажимает всетаки "ок", потому что макс сразу вырубается. Хотя прописано "cancel".
    Буду думать.
     
Модераторы: Savin Denis

Поделиться этой страницей