2016-04-12 12 views
5

У меня есть две основных проблемы, с Unity (5.3.4p1) на GearVR с Samsung S6:Бесшовной асинхронная сцена и текстура загрузки - Unity & GearVR

1) асинхронной загрузкой сцены. Есть ли какие-либо изменения, что я могу загрузить новую сцену в фоновом режиме, не видя маленьких зависаний? Сцена имеет ~ 60k треугольников и использует пару текстур 4k и ~ 10 других текстур 2k. Когда эта сцена загружается, есть несколько коротких заморозок. Я знаю, что могу избежать этого, угасая до черного, а затем начиная уровень загрузки. Но это занимает ~ 10 секунд, и пользователь может быть замечен, увидев черный экран в течение столь длительного времени с помощью гарнитуры VR.

2) Создание текстур из изображений, загруженных с использованием WWW-класса. Я использую 360 4k изображение, отображаемое на куполе в другой сцене. Когда я пытаюсь загрузить текстуру (4k, PNG или JPG) во время выполнения, она выполняется асинхронно. Но единство замерзает в течение 2-3 секунд, когда я использую:

Texture2D myTexture = www.texture; 

Есть ли возможность избежать этого, кроме использования загруженных байт и распаковывать JPG или PNG с использованием алгоритма без единства на фоне, а затем загрузить созданные значения RGB к новой текстуре? Хороший пример плавной загрузки текстур можно увидеть в приложении Flickr VR, но я сомневаюсь, что они использовали Unity для создания этого приложения.

Эти две проблемы возникают и на Oculus Rift, но менее заметны из-за гораздо более высокой производительности ПК.

Как правило, я хочу добиться плавного нагружения в Gear VR, используя Unity. Это возможно?

ответ

3

Этот вопрос должен был быть размещен в виде двух отдельных вопросов, но все же:

AD 1: Добавьте небольшое загрузчиком сцену, делают, что для пользователя и их загрузку основной сцены. Timewarp все равно должен работать, поэтому изменения ориентации на голове будут видны.

AD 2: устройства Android не могут отображать jpeg или png. Они должны распаковывать их до очень больших несжатых текстур, загружать в память снова и только затем визуализировать. Это берет и много RAM и время.

Что вы можете сделать, это иметь текстуры в родном формате DXT или ETC и загружать их как текстуру самостоятельно. У меня была такая же проблема, и это ускорило загрузку моих текстур почти в 10 раз. Они также используют меньше памяти.

Будьте уверены, что размер загрузки будет больше, и в зависимости от формата текстуры вам могут потребоваться разные файлы для разных платформ.

+0

ad 1: Я делаю это так, но при загрузке сцены все еще много мелких зависаний, и она немного «прыгает». ad 2: графический процессор Samsung S6 не поддерживает DXT (проверял его раньше), но я попытался сделать это с текстурой ASTC. Проблема в том, что игра зависает в течение 3-5 секунд, когда я применяю байты texure. Я делаю это вот так: 'byte [] bytes = www.bytes;' 'tex.LoadRawTextureData (bytes); ' ' tex.Apply (false, false); ' –

+0

Как этого избежать? Есть ли другой способ загрузить изображение и загрузить его в Unity texture? –

+0

Это должно работать, но я никогда не делал этого с текстурами ASTC. Возможно, происходит некоторое преобразование времени выполнения? Попробуйте ETC1, они ограничены, но должны работать на каждом устройстве Android без дополнительной обработки. Также может быть полезно установить второй аргумент 'tex.Apply' (' makeNoLongerReadable') в true. Что касается моего примера с ускоряющимися вещами в 10 раз, это было на больших наборах текстур 2048x2048 и 1024x1024, загруженных по одному на кадр, на Samsung Galaxy S II. Конечно, это заняло некоторое время, но несколько текстур заняли менее секунды, чтобы загрузить. –