Я отредактировал свой код, используя предложения Swordslayer; сбор информации о мешах теперь происходит вне цикла, и я использую getpolygonCount, чтобы получить как poly-, так и vertcount.
Сцена, упомянутая в моем исходном вопросе, содержащая стандартные примитивные объекты 4051, больше не вызывает сбоев (и значительно быстрее), однако другая сцена, содержащая импортированные объекты, теперь вызывает «ошибку переполнения стека» внутри 3ds max … Странно то, что эта ошибка возникает только при первом запуске скрипта после запуска 3ds max. При запуске сценария через секунду (или третий и т. Д.) После того, как произошла ошибка переполнения стека, сценарий выполняется без ошибок (для его завершения требуется около 10-20 секунд), и сценарий функционирует так, как должен (как при его удалении). дубликаты объектов). Ошибка переполнения стека возникает каждый раз, когда я запускаю скрипт на исходной сцене ПОСЛЕ только что запущенного 3ds max.
Еще одна странная вещь (для меня) заключается в том, что даже при возникновении ошибки переполнения стека сценарий действительно удаляет нужные объекты (дубликаты объектов) перед выдачей указанной ошибки.
Использование ОЗУ не более 3ds max до / после системной ошибки: Открыта сцена 3ds max, перед запуском сценария: использование оперативной памяти = около 1800 МБ во время выполнения скрипта, до появления сообщения об ошибке: использование ОЗУ увеличилось с начальных 1800 до конечного значения 2132,6 МБ Появилось окно с сообщением об ошибке системного исключения: использование ОЗУ = 2132,6 МБ после нажатия OK в окне сообщения об ошибке: использование ОЗУ = 2132,6 МБ (примечание: как уже упоминалось в моем первоначальном вопросе, у меня есть 16 ГБ оперативной памяти)
Мой текущий код:
checked_objs_list; items_to_delete_from_objs; theMeshes; equal_pos_bool ; mesh_data
fn construct_arrays x =(
max select none ; select geometry ; deselect helpers
theMeshes = selection as array
mesh_info = for theMesh in theMeshes collect ( #(theMesh, getpolygoncount theMesh, theMesh.pos) ) --collects #(tricount, vertcount) for all meshes in 'getpolycount_meshes'
max select none
--Declare initial values of array variables
checked_objs_list = #()
items_to_delete_from_objs = #()
return mesh_info
)--end fn construct_arrays
fn delete_duplicates equal_pos_bool =(
obj_dups = #()
appendifunique items_to_delete_from_objs mesh_data[1]
if i <= mesh_data.count and i != 1 do(
if(mesh_data[i][2][1] == mesh_data[1][2][1] and mesh_data[i][2][2] == mesh_data[1][2][2] and ( if equal_pos_bool then( mesh_data[i][3] == mesh_data[1][3])else(true) )) do(
if((finditem checked_objs_list (mesh_data[i]) == 0) ) do(
appendifunique obj_dups mesh_data[i][1] ; --print "||||||||||||||||||||| FOUND DUPLICATE OBJECT |||||||||||||||||||||| n"
appendifunique checked_objs_list mesh_data[i]
appendifunique items_to_delete_from_objs mesh_data[i]
)-- end if(finditem checked_objs_array objs[i] == 0 ) do(
)-- end if(Tricount == Tricount_src and PolyCount == PolyCount_src and VertCount == VertCount_src and ( if equal_pos_boolean then( Position == Position_src)else(true) )) do(
)-- end if i <= objs.count(
) --end for i in 1 to mesh_data[1].count do(
for item in items_to_delete_from_objs do(
deleteitem mesh_data (finditem mesh_data item)
)
items_to_delete_from_objs = #()
for duplicate in obj_dups do(delete duplicate)
if mesh_data.count > 0 do (
delete_duplicates equal_pos_bool
)
)
mesh_data = construct_arrays 1 --call construct_arrays function and save returned data in variable 'mesh_data'
delete_duplicates false --function call
Проблема не связана с количеством объектов / полигонов в сцене; Я запустил сценарий на сцене, содержащей 16204 стандартных примитивных объекта. Эта сцена состоит из 11 418 736 полигонов и 5 780 404 вершин, в то время как сцена с импортированными объектами, вызывающая ошибку переполнения стека, состоит всего из 703 737 полигонов и 769 886 вершин (что значительно ниже).
Я допускаю, чтобы ошибка переполнения стека возникала несколько раз, каждый из которых выдает немного другое сообщение об ошибке, все из которых можно увидеть ниже:
Ошибка, возникшая при первом сбое:
Ошибка, возникшая при втором сбое:
Произошла ошибка при третьем сбое:
Ошибка, отображаемая в окне прослушивателя, говорит мне об ошибке, возникшей в Macro_SceneExplorer.mcr в строке 1001, эта строка содержит следующий код: sceneexplorermanager.ExplorerIsOpen ~SE_SCENE_EXPLORER_NAME~
Это также говорит мне, что эта строка кода была вызвана из строки 44 моего скрипта ‘delete_duplicates.ms’, которая содержит следующий код: for duplicate in obj_dups do(delete duplicate)
Вот часть сообщения об ошибке, созданного в окне прослушивателя после того, как произошла ошибка переполнения стека (полную ошибку и трассировку стека можно найти здесь: https://drive.google.com/open?id=1s-BplnpiM_sz3yfN4XVySmhcsK5zraeX:
-- Error occurred in anonymous codeblock; filename: C:Program FilesAutodesk3ds Max 2018MacroScriptsMacro_SceneExplorer.mcr; position: 29880; line: 1001
-- MAXScript MacroScript Error Exception:
-- Known system exception
-- ########################################################################
-- Address: 0x6745e920; nCode: 0x00000000C00000FD
-- Desc: EXCEPTION_STACK_OVERFLOW The thread used up its stack.
-- ########################################################################
-- MAXScript callstack:
-- thread data: threadID:5300
-- ------------------------------------------------------
-- [stack level: 0]
-- In isChecked(); filename: C:Program FilesAutodesk3ds Max 2018MacroScriptsMacro_SceneExplorer.mcr; position: 29881; line: 1001
-- member of: codeblock macroScript: Scene Explorer_SESceneExplorer
-- Locals:
-- Externals:
-- owner: <CodeBlock:Scene Explorer_SESceneExplorer>
-- Scene Explorer_SESceneExplorer: <CodeBlock:Scene Explorer_SESceneExplorer>
-- ------------------------------------------------------
-- [stack level: 1]
-- called from codeblock macroScript: Scene Explorer_SESceneExplorer; filename: C:UsersPhilipsDesktopninjaripper1.7.1tools 3dmax_maxscript_importer000_delete duplicates (pre-construct_arrays) 9 (noprint) 2.ms; position: 2755; line: 44
-- Locals:
-- Externals:
-- ------------------------------------------------------
-- [stack level: 2]
-- called from duplicate loop; filename: C:UsersPhilipsDesktopninjaripper1.7.1tools3dmax_maxscript_importer000_delete duplicates (pre-construct_arrays) 9 (noprint) 2.ms; position: 2755; line: 44
-- Parameters:
-- duplicate: <Deleted scene node>
-- Locals:
-- duplicate: <Deleted scene node>
-- Externals:
-- owner: undefined
-- ------------------------------------------------------
-- [stack level: 3]
-- called from delete_duplicates(); filename: C:UsersPhilipsDesktopninjaripper1.7.1tools3dmax_maxscript_importer000_delete duplicates (pre-construct_arrays) 9 (noprint) 2.ms; position: 2755; line: 44
-- Parameters:
-- equal_pos_bool: false
-- Locals:
-- equal_pos_bool: false
-- obj_dups: #(<Deleted scene node>)
-- Externals:
-- owner: undefined
-- delete_duplicates: Global:delete_duplicates : delete_duplicates()
-- mesh_data: Global:mesh_data : #(#($Editable_Mesh:Mesh_2184 @ [0.000000,0.000000,0.000000], #(128, 28), [0,0,0]), #($Editable_Mesh:Mesh_2185 @ [0.000000,0.000000,0.000000], #(128, 28), [0,0,0]), #($Editable_Mesh:Mesh_2256 @ [0.000000,0.000000,0.000000], #(256, 768), [0,0,0]), #($Editable_Mesh:Mesh_2258 @ [0.000000,0.000000,0.000000], #(2048, 1057), [0,0,0]), #($Editable_Mesh:Mesh_2261 @ [0.000000,0.000000,0.000000], #(512, 273), [0,0,0]), #($Editable_Mesh:Mesh_2262 @ [0.000000,0.000000,0.000000], #(512, 281), [0,0,0]), #($Editable_Mesh:Mesh_2263 @ [0.000000,0.000000,0.000000], #(2048, 1057), [0,0,0]), #($Editable_Mesh:Mesh_2265 @ [0.000000,0.000000,0.000000], #(32, 23), [0,0,0]), #($Editable_Mesh:Mesh_2266 @ [0.000000,0.000000,0.000000], #(32, 23), [0,0,0]), #($Editable_Mesh:Mesh_2267 @ [0.000000,0.000000,0.000000], #(128, 73), [0,0,0]), #($Editable_Mesh:Mesh_2268 @ [0.000000,0.000000,0.000000], #(128, 77), [0,0,0]), #($Editable_Mesh:Mesh_2269 @ [0.000000,0.000000,0.000000], #(512, 273), [0,0,0]), #($Editable_Mesh:Mesh_2270 @ [0.000000,0.000000,0.000000], #(2048, 1041), [0,0,0]), #($Editable_Mesh:Mesh_2271 @ [0.000000,0.000000,0.000000], #(32, 21), [0,0,0]), #($Editable_Mesh:Mesh_2272 @ [0.000000,0.000000,0.000000], #(32, 23), [0,0,0]), #($Editable_Mesh:Mesh_2273 @ [0.000000,0.000000,0.000000], #(128, 73), [0,0,0]), #($Editable_Mesh:Mesh_2274 @ [0.000000,0.000000,0.000000], #(512, 265), [0,0,0]), #($Editable_Mesh:Mesh_2276 @ [0.000000,0.000000,0.000000], #(32, 23), [0,0,0]), #($Editable_Mesh:Mesh_2277 @ [0.000000,0.000000,0.000000], #(128, 73), [0,0,0]), #($Editable_Mesh:Mesh_2278 @ [0.000000,0.000000,0.000000], #(50, 60), [0,0,0]), ...)
-- items_to_delete_from_objs: Global:items_to_delete_from_objs : #()
-- ------------------------------------------------------
-- [stack level: 4]
-- called from delete_duplicates(); filename: C:UsersPhilipsDesktopninjaripper1.7.1tools3dmax_maxscript_importer000_delete duplicates (pre-construct_arrays) 9 (noprint) 2.ms; position: 2958; line: 49
-- Parameters:
-- equal_pos_bool: false
-- Locals:
-- equal_pos_bool: false
-- obj_dups: #()
-- Externals:
-- owner: undefined
-- delete_duplicates: Global:delete_duplicates : delete_duplicates()
-- mesh_data: Global:mesh_data : #(#($Editable_Mesh:Mesh_2184 @ [0.000000,0.000000,0.000000], #(128, 28), [0,0,0]), #($Editable_Mesh:Mesh_2185 @ [0.000000,0.000000,0.000000], #(128, 28), [0,0,0]), #($Editable_Mesh:Mesh_2256 @ [0.000000,0.000000,0.000000], #(256, 768), [0,0,0]), #($Editable_Mesh:Mesh_2258 @ [0.000000,0.000000,0.000000], #(2048, 1057), [0,0,0]), #($Editable_Mesh:Mesh_2261 @ [0.000000,0.000000,0.000000], #(512, 273), [0,0,0]), #($Editable_Mesh:Mesh_2262 @ [0.000000,0.000000,0.000000], #(512, 281), [0,0,0]), #($Editable_Mesh:Mesh_2263 @ [0.000000,0.000000,0.000000], #(2048, 1057), [0,0,0]), #($Editable_Mesh:Mesh_2265 @ [0.000000,0.000000,0.000000], #(32, 23), [0,0,0]), #($Editable_Mesh:Mesh_2266 @ [0.000000,0.000000,0.000000], #(32, 23), [0,0,0]), #($Editable_Mesh:Mesh_2267 @ [0.000000,0.000000,0.000000], #(128, 73), [0,0,0]), #($Editable_Mesh:Mesh_2268 @ [0.000000,0.000000,0.000000], #(128, 77), [0,0,0]), #($Editable_Mesh:Mesh_2269 @ [0.000000,0.000000,0.000000], #(512, 273), [0,0,0]), #($Editable_Mesh:Mesh_2270 @ [0.000000,0.000000,0.000000], #(2048, 1041), [0,0,0]), #($Editable_Mesh:Mesh_2271 @ [0.000000,0.000000,0.000000], #(32, 21), [0,0,0]), #($Editable_Mesh:Mesh_2272 @ [0.000000,0.000000,0.000000], #(32, 23), [0,0,0]), #($Editable_Mesh:Mesh_2273 @ [0.000000,0.000000,0.000000], #(128, 73), [0,0,0]), #($Editable_Mesh:Mesh_2274 @ [0.000000,0.000000,0.000000], #(512, 265), [0,0,0]), #($Editable_Mesh:Mesh_2276 @ [0.000000,0.000000,0.000000], #(32, 23), [0,0,0]), #($Editable_Mesh:Mesh_2277 @ [0.000000,0.000000,0.000000], #(128, 73), [0,0,0]), #($Editable_Mesh:Mesh_2278 @ [0.000000,0.000000,0.000000], #(50, 60), [0,0,0]), ...)
-- items_to_delete_from_objs: Global:items_to_delete_from_objs : #()
Ошибка продолжается до тех пор, пока уровень стека не станет равным 386 … остальная часть ошибки выглядит аналогично разделу, показанному ниже (еще раз ошибка продолжается в течение длительного времени, для полной ошибки см. Ранее упомянутый файл .txt) :
-- [stack level: 387]
-- called from top-level
-- ########################################################################
-- C++ callstack:
-- (ucrtbase): (filename not available): malloc_base
-- (maxutil): (filename not available): GetWindowTextW
-- (MAXScrpt): (filename not available): InterfaceFunction::val_to_FPValue
-- (MAXScrpt): (filename not available): Generic::apply
-- (MAXScrpt): (filename not available): CodeTree::eval
-- (MAXScrpt): (filename not available): Generic::apply
-- (MAXScrpt): (filename not available): SourceFileWrapper::apply
-- (MAXScrpt): (filename not available): SourcePositionWrapper::apply_no_alloc_frame
-- (MAXScrpt): (filename not available): MacroEntry::DisableCompileGuard::DisableCompileGuard
-- (MAXScrpt): (filename not available): InitMacroScriptDir
-- (core): (filename not available): MacroButtonData::SetLabel
-- (core): (filename not available): MaxSDK::QMaxMultiResIconManager::trUtf8
-- (Qt5Core): (filename not available): QMetaObject::activate
-- (core): (filename not available): MaxSDK::QMaxMacroButtonUpdater::qt_static_metacall
-- (core): (filename not available): MaxSDK::QMaxMacroButtonUpdater::updateAll
-- (MAXScrpt): (filename not available): collect_nodes
-- (MAXScrpt): (filename not available): Primitive::apply
-- (MAXScrpt): (filename not available): CodeTree::eval
-- (MAXScrpt): (filename not available): Primitive::apply
-- (MAXScrpt): (filename not available): Array::map
-- (MAXScrpt): (filename not available): clear_error_source_data
-- (MAXScrpt): (filename not available): Primitive::apply
-- (MAXScrpt): (filename not available): CodeTree::eval
-- (MAXScrpt): (filename not available): Primitive::apply
-- (MAXScrpt): (filename not available): CodeTree::eval
-- (MAXScrpt): (filename not available): SourceFileWrapper::eval
-- (MAXScrpt): (filename not available): Generic::apply
-- (MAXScrpt): (filename not available): CodeTree::eval
-- (MAXScrpt): (filename not available): clear_error_source_data
-- (MAXScrpt): (filename not available): Primitive::apply
-- (MAXScrpt): (filename not available): CodeTree::eval
-- (MAXScrpt): (filename not available): Primitive::apply
-- (MAXScrpt): (filename not available): CodeTree::eval
-- (MAXScrpt): (filename not available): SourceFileWrapper::eval
-- (MAXScrpt): (filename not available): Generic::apply
-- (MAXScrpt): (filename not available): CodeTree::eval
-- (MAXScrpt): (filename not available): clear_error_source_data
-- (MAXScrpt): (filename not available): Primitive::apply
-- (MAXScrpt): (filename not available): CodeTree::eval
-- (MAXScrpt): (filename not available): Primitive::apply
-- (MAXScrpt): (filename not available): CodeTree::eval
-- (MAXScrpt): (filename not available): SourceFileWrapper::eval
-- (MAXScrpt): (filename not available): Generic::apply
-- (MAXScrpt): (filename not available): CodeTree::eval
-- (MAXScrpt): (filename not available): clear_error_source_data
-- (MAXScrpt): (filename not available): Primitive::apply
-- (MAXScrpt): (filename not available): CodeTree::eval
Иногда вместо сообщения об ошибке «Ошибка переполнения стека» я получаю сообщение об ошибке «Неизвестное системное исключение» (большую часть времени я получаю окно с сообщением об ошибке переполнения стека, мне не удается найти причину, по которой один из других происходят пока). В других случаях 3ds max не генерирует никаких сообщений об ошибках, а в отчете о проблемах Windows появляется сообщение о том, что 3ds max перестал работать.
Я попытался найти дополнительную информацию об ошибке «3ds Max перестал работать», используя окно просмотра событий:
< Сильный > Файлы :
Сцена, содержащая более 4000 стандартных примитивных объектов, с которыми скрипт работает отлично: .google.com / открыть ? ID = 1ittqWwvqgJjrsNcNkbhM_mOHUnz1W — SH
Сцена, содержащая импортированные объекты, которая вызывает вышеупомянутое переполнение стека / неизвестные системные ошибки: https://drive.google.com/open?id=1JpncS9pJmUI_9&j_Ij
Вывод слушателя (ошибка) после появления сообщения об ошибке переполнения стека: https://drive.google.com/open?id=1s-BplnpiM_sxyrazrav >
Выход слушателя (ошибка) после появления сообщения об ошибке неизвестного системного исключения: https://drive.google.com/open?id=1QP00e0RMorgjjRjRK >
Код maxscript для delete_duplicates.ms: https://drive.google.com/open?id=1FCpJNlgII6ouLYshWEK/aXXXufx
Еще одна сценарий .max, которую я использовал для тестирования и которая выдает похожие ошибки: https://drive.google.com/open?id=142JOth12rATD3sWm2szmlzlmlzl
Будем весьма благодарны за любые предложения о том, что я делаю неправильно / что может быть причиной этих ошибок, спасибо!
0
Maarten -Monica for president
1 Апр 2018 в 08:40
Автор |
Сообщение |
|
---|---|---|
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
- Главная
- Статьи
- Autodesk 3Ds Max
- Ошибка Unexpected end of script
Откуда появляется данная ошибка
Иногда, при запуске 3Ds Max, по непонятным причинам может возникать ошибка «MacroScript Compile» с текстом «— Compile Error: Unexpected end-of-script — In Line: — This check …»
Эта ошибка возникает вследствие, того, что некоторые плагины, такие как V-Ray Renderer или Corona Renderer, могут записывать свои скрипты в определенные системные папки 3Ds Max и при попытке такой записи возникает сбой. Поэтому скрипты могут не создаваться или быть частично записаны.
Пример такого скрипта с ошибкой, вы можете видеть на скриншоте ниже:
Loading…
Решение проблемы
Нажмите кнопку F11 для открытия Maxscript Listener (лог ошибок компиляции), вы увидите ошибку связанную с временным скриптом __temp***.mcr.
Необходимо скопировать данный путь и вставить в файловом менеджере, затем просто найти и удалить забагованный файл.
Loading…
Внимание!
Ни в коем случае не пытайтесь удалить целую папку ENU, как пишут на многих форумах! Это может привести к потери многих настроек и прервет ваш рабочий процесс! Необходимо удалить только один файл, который вызывает проблему!
Готово! Попробуйте перезапустить 3Ds Max, ошибки теперь быть не должно! 🙅
Top
Автор
Гость Dazent
8 апреля, 2005 в Графика
Поделиться
Подписчики
0
-
Ответить
-
Создать новую тему
Рекомендуемые сообщения
Гость Dazent
Опубликовано 8 апреля, 2005
-
- Жалоба
- Поделиться
Опубликовано 8 апреля, 2005
После установки 3d max, я его запускаю и немогу зарегистрировать, появляется ошибка сценария написано, что имеются ошибки на страницах в папке webdepot. Подскажите в чём проблема!!!
Заранее спасибо!.!.!
- Цитата
Ссылка на комментарий
Поделиться на другие сайты
gvozd
Опубликовано 9 апреля, 2005
-
- Жалоба
- Поделиться
Опубликовано 9 апреля, 2005
Dazent: Пытайся регать с учетки простого пользователя, а не админа.
- Цитата
Ссылка на комментарий
Поделиться на другие сайты
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже.
Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Ответить в этой теме…
×
Вставлено с форматированием. Вставить как обычный текст
Разрешено использовать не более 75 эмодзи.
×
Ваша ссылка была автоматически встроена. Отображать как обычную ссылку
×
Ваш предыдущий контент был восстановлен. Очистить редактор
×
Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.
- Указать URL изображения
×
- Компьютер
- Планшет
- Смартфон
Поделиться
Подписчики
0
Перейти к списку тем
-
Последние посетители
0 пользователей онлайн
- Ни одного зарегистрированного пользователя не просматривает данную страницу
Купил 3 диска на Савеловском 3dsmax 6. После инсталяции и запуска программы нажал на авторизацию. Возникает окно «На этой странице произошла ошибка сценария (ошибка processtage)» — «продолжить вып. сценариев на этой странице?» и на что не нажмешь возникает снова.
Cистема Windows XP SP1. Как выполнить авторизацию и ввести номер?
Хе хе, зайдите на майский форум и там частенько возникает подобный вопрос- не могу поставить майю 5 или в таком духе.
Странно, у меня всё сразу в ХР заработало. Вышлю по e-mail свои кряки.