Домой › Форумы › Общие вопросы › Не запускается проект на IOS
- В этой теме 17 ответов, 6 участников, последнее обновление 2 года, 5 месяцев назад сделано kdv.
-
АвторСообщения
-
11 ноября, 2020 в 15:06 #16625vladimirmCustomer
Доходит до 100% и грузится по новой, тестил на iphone 6,7,11 только на SE запустилась
19 ноября, 2020 в 16:21 #16632Yuri KovelenovStaff20 ноября, 2020 в 12:39 #16646dili71УчастникНаблюдал ту же проблему. Сейчас тестирую подгрузку объектов в сцену с небольшим интервалом времени. Задумка такая: первая загрузка ложиться на основные геометрические объекты, после загрузки через 3 сек грузятся мелкие элементы и текстуры. Юрий правильно сказал, т.к. сцена и текстуры в совокупности могут весить более 100мб, возможно не хватает памяти.
28 декабря, 2020 в 09:13 #16797vladimirmCustomerРешено! Проблема была в одной текстуре сжатой с индексированными цветами.
24 апреля, 2022 в 15:11 #17789kdvУчастнику меня тоже возникла проблема, когда не загружалось с айфона SE (старого), при этом на 12м айфоне норм работало. ios 15.4.1. доходило до 100% и крашилось. решил довольно странным способом: подключил паззл checkPerfomance и проблема ушла. по факту проверки ничего не делается, но вероятность запуска приложения на SE стала 100%. но осталась другая проблема. тут поподробнее…
имеется сцена, в которой отображается набор объектов (назовем этот набор вагоном). по сути, вагонов в сцене 5, но 4 скрыто, а 1 показан. каждый вагон – это примерно 250-300 тыс. полигонов. при нажатии на кнопку с моделью вагона текущий вагон скрывается, а вместо него показывается выбранный (паззлы hide и show). и вроде, все норм работает, но на iPhone SE приложение крашится после 5й смены hide-show. не важно, в каком порядке выбирать вагоны, на 5м крашится. пробовал версии v3d.js от 3.7.1 до 3.9.1. результат один и тот же. получше работает в 3.5.0 и 3.6.1 (смена hide-show происходит быстрее и крашится реже). собсно, вопрос: можно как-то после каждого скрытия-показа группы объектов очищать память до исходного состояния, как будто приложение только что загрузилось?
Puzzles and JS coding. Fast and expensive.
If you don’t see the meaning in something it primarily means that you just don’t see it but not the absence of the meaning at all.
29 апреля, 2022 в 18:49 #17795kdvУчастникв функцию changeVis добавил строки
if (!bool) { var meshArray = obj.resolveMultiMaterial(); for (var j = 0; j < meshArray.length; j++) { meshArray[j].geometry.dispose(); meshArray[j].material.dispose(); } }
и, вроде как, от невидимой геометрии избавляется исправно (количество Geometry Buffers не растет, а для каждой сцены постоянное). уже в плюс. мож кто подскажет, как еще текстуры из материалов у невидимых объектов выкидывать из памяти? как из объекта получить переменную типа Texture? еще бы количество текстур в памяти контролировать )))
Puzzles and JS coding. Fast and expensive.
If you don’t see the meaning in something it primarily means that you just don’t see it but not the absence of the meaning at all.
5 мая, 2022 в 17:54 #17800Ivan LyubovnikovStaffмож кто подскажет, как еще текстуры из материалов у невидимых объектов выкидывать из памяти?
Для этого есть метод API: MaterialUtils.disposeTextures.
Попробуйте в цикл по meshArray добавить такую строчку:
v3d.MaterialUtils.disposeTextures(meshArray[j].material);
как из объекта получить переменную типа Texture?
В материалах есть ряд отдельных свойств, в которых могут находиться текстуры:
material.alphaMap
,material.aoMap
,material.bumpMap
,material.displacementMap
,material.emissiveMap
,material.envMap
,material.gradientMap
,material.lightMap
,material.map
,material.metalnessMap
,material.normalMap
,material.roughnessMap
,material.specularMap
.
И ещё есть объектmaterial.nodeTextures
, в котором лежат текстуры используемые именно в нодах материала.еще бы количество текстур в памяти контролировать )))
Ну, здесь можно посмотреть результаты профайлера в консоли браузера по комбинации клавиш
PPP
– там в списке в самом конце будут перечислены текстуры приложения, правда, без указания загружены/выгружены ли они из видеопамяти:
Вложения:
Вы должны войти для просмотра вложений.Co-founder and lead developer at Soft8Soft.
7 мая, 2022 в 00:00 #17827kdvУчастникДля этого есть метод API: MaterialUtils.disposeTextures.
Попробуйте в цикл по meshArray добавить такую строчку:
v3d.MaterialUtils.disposeTextures(meshArray[j].material);
отлично! огромное спасибо! то, что нужно!
И ещё есть объект material.nodeTextures, в котором лежат текстуры используемые именно в нодах материала.
да, находил я этот объект. но там не нашлось переменной типа Texture, чтоб можно было применить метод Texture.dispose() (точнее, я не смог найти подходящий способ таковую переменную вытащить оттуда), поэтому ничего не вышло )))
еще раз спасибо за наводку! теперь вот эта презентация может работать и не вылетать из-за переполнения памяти почти на любом калькуляторе типа Redmi 7a)))
жаль, не удаляет мусор типа такого
N/A - Texture - 256x1
который генерится материалами, где используются ноды ColorRamp или RGB Curves, но судя по размеру текстуры, памяти это занимает очень малоPuzzles and JS coding. Fast and expensive.
If you don’t see the meaning in something it primarily means that you just don’t see it but not the absence of the meaning at all.
7 мая, 2022 в 18:32 #17829Ivan LyubovnikovStaffда, находил я этот объект. но там не нашлось переменной типа Texture, чтоб можно было применить метод Texture.dispose() (точнее, я не смог найти подходящий способ таковую переменную вытащить оттуда), поэтому ничего не вышло )))
А там как раз и должны быть текстуры, вроде Texture или DataTexture. Как раз ColorRamp текстура (и другие, генерируемые материалами) кладется именно туда. Вот она как обычно выглядит:
MaterialUtils.disposeTextures зачищает nodeTextures, поэтому и все такие текстуры тоже будут удаляться.
Вложения:
Вы должны войти для просмотра вложений.Co-founder and lead developer at Soft8Soft.
7 мая, 2022 в 18:46 #17831kdvУчастникда, да, я уже выяснил. просто надо было еще в функции assignMaterial подшаманить ))) в changeVis “зачищаются” материалы у мешей, которые скрываются, а в assignMaterial идет “зачистка” меша, который видимость не меняет, но меняет материал (и текстуру, соответственно).
в changeVis
if (!bool) { var meshArray = obj.resolveMultiMaterial(); for (var j = 0; j < meshArray.length; j++) { meshArray[j].geometry.dispose(); } var firstMeshMat = meshArray[0].material; for (var name in firstMeshMat.nodeTextures) { firstMeshMat.nodeTextures[name].dispose(); } }
в assignMaterial
for (var name in firstSubmesh.material.nodeTextures) { firstSubmesh.material.nodeTextures[name].dispose(); }
при таком раскладе работает, как задумано только видимая геометрия и только видимые текстуры. и больше нет зависимости от того, сколько всего текстур мне понадобится в дальнейшем (когда их количество недавно превысило 65, в телефоне начались вылеты. почему так много? потому что АО в каждом вагоне разное). еще раз огромное спасибо за помощь!
Puzzles and JS coding. Fast and expensive.
If you don’t see the meaning in something it primarily means that you just don’t see it but not the absence of the meaning at all.
7 мая, 2022 в 20:34 #17832kdvУчастникстранная штука… пока редактировал и сохранял (несколько раз) развернутый и благодарственный ответ, он куда то исчез и теперь его не видно ))) спам-бот сожрал? в любом случае, очень спасибо за помощь!
Puzzles and JS coding. Fast and expensive.
If you don’t see the meaning in something it primarily means that you just don’t see it but not the absence of the meaning at all.
7 мая, 2022 в 20:55 #17833Ivan LyubovnikovStaffДействительно, странно, потому что мне вот на почту приходило оповещение с форума с комментарием:
kdv77kdv replied:
да, да, я уже выяснил. просто надо было еще в функции assignMaterial подшаманить ))) в changeVis “зачищаются” материалы у мешей, которые скрываются, а в assignMaterial идет “зачистка” меша, который видимость не меняет, но меняет материал. при таком раскладе работает, как задумано
Раньше такое у нас бывало из-за каких-то слишком агрессивных анти-спам фильтров, надо будет проверить ещё раз. Ну, главное, что проблема разрешилась
Co-founder and lead developer at Soft8Soft.
8 мая, 2022 в 22:42 #17834kdvУчастникв версии движка 3.9.1+ на айфоне SE (и на других не особо мощных телефонах) сильно портится изображение, как будто разрешение занижено (хотя, проверка показывает что PixelRatio = 1px). в 3.9.0 и ранее такого не наблюдается. как то можно исправить?
Puzzles and JS coding. Fast and expensive.
If you don’t see the meaning in something it primarily means that you just don’t see it but not the absence of the meaning at all.
13 мая, 2022 в 14:22 #17852Alexander KovelenovStaff16 мая, 2022 в 06:38 #17857kdvУчастникспасибо за ответ.
от себя отмечу, что в последней версии iOS 15.4.1 при использовании v3d.js от 3.5.0 до 3.9.0 никаких багов со сглаживанием не замечено. а дело точно в iOS, а не в Verge3D? ))) в 3.5.0-3.9.0 все нормально со сглаживанием…
Puzzles and JS coding. Fast and expensive.
If you don’t see the meaning in something it primarily means that you just don’t see it but not the absence of the meaning at all.
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.