Мы используем файлы cookie, чтобы упростить навигацию на этом сайте. Если вы даете свое согласие на использование файлов cookie и обработку ваших персональных данных, нажмите «Принимаю».

Не запускается проект на IOS

Домой Форумы Общие вопросы Не запускается проект на IOS

Просмотр 15 сообщений - с 1 по 15 (из 16 всего)
  • Автор
    Сообщения
  • #16625
    vladimirm
    Customer

    Доходит до 100% и грузится по новой, тестил на iphone 6,7,11 только на SE запустилась

    #16632

    Скорее всего крашит из-за недостатка памяти. Попробуйте уменьшить размер текстур.

    Chief 3D Verger | LinkedIn | Twitter

    #16646
    dili71
    Участник

    Наблюдал ту же проблему. Сейчас тестирую подгрузку объектов в сцену с небольшим интервалом времени. Задумка такая: первая загрузка ложиться на основные геометрические объекты, после загрузки через 3 сек грузятся мелкие элементы и текстуры. Юрий правильно сказал, т.к. сцена и текстуры в совокупности могут весить более 100мб, возможно не хватает памяти.

    #16797
    vladimirm
    Customer

    Решено! Проблема была в одной текстуре сжатой с индексированными цветами.

    #17789
    kdv
    Участник

    у меня тоже возникла проблема, когда не загружалось с айфона 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. 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 meaning at all.

    #17795
    kdv
    Участник

    в функцию 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. 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 meaning at all.

    #17800

    мож кто подскажет, как еще текстуры из материалов у невидимых объектов выкидывать из памяти?

    Для этого есть метод 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 – там в списке в самом конце будут перечислены текстуры приложения, правда, без указания загружены/выгружены ли они из видеопамяти:
    ppp.png

    Вложения:
    Вы должны войти для просмотра вложений.

    Co-founder and lead developer at Soft8Soft.

    #17827
    kdv
    Участник

    Для этого есть метод 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. 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 meaning at all.

    #17829

    да, находил я этот объект. но там не нашлось переменной типа Texture, чтоб можно было применить метод Texture.dispose() (точнее, я не смог найти подходящий способ таковую переменную вытащить оттуда), поэтому ничего не вышло )))

    А там как раз и должны быть текстуры, вроде Texture или DataTexture. Как раз ColorRamp текстура (и другие, генерируемые материалами) кладется именно туда. Вот она как обычно выглядит:
    color_ramp.png

    MaterialUtils.disposeTextures зачищает nodeTextures, поэтому и все такие текстуры тоже будут удаляться.

    Вложения:
    Вы должны войти для просмотра вложений.

    Co-founder and lead developer at Soft8Soft.

    #17831
    kdv
    Участник

    да, да, я уже выяснил. просто надо было еще в функции 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();
                }

    при таком раскладе работает, как задумано :good: только видимая геометрия и только видимые текстуры. и больше нет зависимости от того, сколько всего текстур мне понадобится в дальнейшем (когда их количество недавно превысило 65, в телефоне начались вылеты. почему так много? потому что АО в каждом вагоне разное). еще раз огромное спасибо за помощь! :good:

    Puzzles and JS. 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 meaning at all.

    #17832
    kdv
    Участник

    странная штука… пока редактировал и сохранял (несколько раз) развернутый и благодарственный ответ, он куда то исчез и теперь его не видно ))) спам-бот сожрал? в любом случае, очень спасибо за помощь!

    Puzzles and JS. 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 meaning at all.

    #17833

    Действительно, странно, потому что мне вот на почту приходило оповещение с форума с комментарием:

    kdv77kdv replied:

    да, да, я уже выяснил. просто надо было еще в функции assignMaterial подшаманить ))) в changeVis “зачищаются” материалы у мешей, которые скрываются, а в assignMaterial идет “зачистка” меша, который видимость не меняет, но меняет материал. при таком раскладе работает, как задумано :good:

    Раньше такое у нас бывало из-за каких-то слишком агрессивных анти-спам фильтров, надо будет проверить ещё раз. Ну, главное, что проблема разрешилась :good:

    Co-founder and lead developer at Soft8Soft.

    #17834
    kdv
    Участник

    в версии движка 3.9.1+ на айфоне SE (и на других не особо мощных телефонах) сильно портится изображение, как будто разрешение занижено (хотя, проверка показывает что PixelRatio = 1px). в 3.9.0 и ранее такого не наблюдается. как то можно исправить?

    Puzzles and JS. 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 meaning at all.

    #17852

    Добрый день! В последней версии iOS замечены баги с аппаратным антиалиасингом (MSAA), поэтому мы его временно отключили. В качестве временной меры для борьбы с этой проблемой вы можете включить FXAA-антиаласинг в настройках экспорта.

    Soft8Soft Tech Chief
    X | FB | LinkedIn

    #17857
    kdv
    Участник

    спасибо за ответ.

    от себя отмечу, что в последней версии iOS 15.4.1 при использовании v3d.js от 3.5.0 до 3.9.0 никаких багов со сглаживанием не замечено. а дело точно в iOS, а не в Verge3D? ))) в 3.5.0-3.9.0 все нормально со сглаживанием…

    Puzzles and JS. 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 meaning at all.

Просмотр 15 сообщений - с 1 по 15 (из 16 всего)
  • Для ответа в этой теме необходимо авторизоваться.