LoadRawTextureData [РЕШЕНО]

Программирование на Юнити.

Re: LoadRawTextureData

Сообщение Neyl 24 янв 2014, 16:24

По поводу сдвига текстуры, тут есть решение.
Аватара пользователя
Neyl
UNIверсал
 
Сообщения: 404
Зарегистрирован: 20 июн 2010, 10:17

Re: LoadRawTextureData

Сообщение seaman 24 янв 2014, 21:38

Спасибо. Помогло. Теперь более ясно что делает эта функция.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: LoadRawTextureData

Сообщение seaman 24 янв 2014, 21:57

Так. Еще проблема. Если в текстуре недостаточно уровней mip - возникает ошибка
UnityException: LoadRawTextureData: not enough data provided (will result in overread).

Например есть две текстуры 1024*1024. У которой в текстуре присутствуют все 11 уровней - загружается, У которой всего 6 уровней выдает ошибку.
Количество mip уровней лежит по смещению 0x1c. Теперь сообразить бы как указать функции сколько уровней загружать.
Можно, конечно mip вообще не грузить, но часто это ж не очень хорошо - вообще не иметь mipmap
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: LoadRawTextureData

Сообщение Neyl 24 янв 2014, 22:43

seaman писал(а):Можно, конечно mip вообще не грузить, но часто это ж не очень хорошо - вообще не иметь mipmap

Так ведь при вызове Texture2D.Apply() мипы заново генерируются. Что бы избавиться от эксепшена, теоретически, можно размер массива байтов увеличивать в зависимости от количества недостающих мипов, но это уже костыли. Может проще пересохранить dds с полным набором mipmap?
Аватара пользователя
Neyl
UNIверсал
 
Сообщения: 404
Зарегистрирован: 20 июн 2010, 10:17

Re: LoadRawTextureData

Сообщение seaman 25 янв 2014, 00:08

Так ведь при вызове Texture2D.Apply() мипы заново генерируются.

Если при создании
Texture2D(int width, int height, TextureFormat format, bool mipmap);
указать mipmap = false - не генерируются. Их нет у текстуры - зачем им генериться.
А только так - указав false можно загрузить текстуру с недостаточным числом уровней.
можно размер массива байтов увеличивать в зависимости от количества недостающих мипов

Да, костыли. Тем более я пока не знаю - как рассчитать сколько байт добавлять.
Есть еще один костыль.
Синтаксис:
Используется csharp
        Texture2D tex = new Texture2D(__info.width, __info.height, fmt, false);
        byte[] buf = new byte[__buf.Length - OFFSET];
        Buffer.BlockCopy(__buf, OFFSET, buf, 0, __buf.Length - OFFSET);
       
        tex.LoadRawTextureData(buf);
        tex.Apply(false);

        Color32[] cols = tex.GetPixels32();
        texture = new Texture2D(__info.width, __info.height, TextureFormat.ARGB32, true);
        texture.SetPixels32(cols);
        texture.Apply(true);

Может проще пересохранить dds с полным набором mipmap?

Проще, но не в моем случае...
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: LoadRawTextureData [РЕШЕНО]

Сообщение [bm] 28 фев 2014, 13:39

Провел еще один тест загрузки raw текстуры прямо из запароленного zip архива, который показал что он в 3-4 раза быстрее бандлов. Перехожу на zip. А вот с моделями, как я понимаю придется остаться при бандлах :(
Mafia Rush: universal iOS game _https://goo.gl/CKq4D Android _https://goo.gl/slFLXx
Shooter Ball: Android _https://goo.gl/21QyPw
skype: bmindfield
Аватара пользователя
[bm]
UNIверсал
 
Сообщения: 426
Зарегистрирован: 11 май 2010, 22:33
Откуда: Россия, Ижевск

Re: LoadRawTextureData [РЕШЕНО]

Сообщение Diab10 28 фев 2014, 14:04

[bm] писал(а):Провел еще один тест загрузки raw текстуры прямо из запароленного zip архива, который показал что он в 3-4 раза быстрее бандлов. Перехожу на zip. А вот с моделями, как я понимаю придется остаться при бандлах :(


Если не сложно, то выложите этот тест(исходники) с загрузкой текстур из зип архивов, пригодится :)
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

Re: LoadRawTextureData [РЕШЕНО]

Сообщение [bm] 28 фев 2014, 14:06

Пожалуйста. Это для библиотеки DotNetZip. Как работать с этой библиотекой https://dotnetzip.codeplex.com/wikipage ... S-Examples

Синтаксис:
Используется csharp
public static byte[] GetPVRFromZip(ZipFile zipFile, string fileName, out int w, out int h)
        {
                byte[] buffer = null;
                ZipEntry ze = zipFile[fileName];
                int headerSize = 52;

                if (ze != null)
                {
                        Stream stream = ze.OpenReader();
                        buffer = new byte[ze.UncompressedSize];
                        stream.Read(buffer, 0, buffer.Length);
                        stream.Close();
                }
                else throw new System.IO.FileNotFoundException();

                byte[] buffer2 = new byte[buffer.Length - headerSize];
                System.Buffer.BlockCopy(buffer, headerSize, buffer2, 0, buffer.Length - headerSize);

                w = System.BitConverter.ToInt32(buffer, 4);
                h = System.BitConverter.ToInt32(buffer, 8);
               
                return buffer2;
        }
 
Mafia Rush: universal iOS game _https://goo.gl/CKq4D Android _https://goo.gl/slFLXx
Shooter Ball: Android _https://goo.gl/21QyPw
skype: bmindfield
Аватара пользователя
[bm]
UNIверсал
 
Сообщения: 426
Зарегистрирован: 11 май 2010, 22:33
Откуда: Россия, Ижевск

Re: LoadRawTextureData [РЕШЕНО]

Сообщение Diab10 28 фев 2014, 15:05

Спасибо :)

Скорость в 3-4 раза лучше, а сжатие где лучше?
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

Re: LoadRawTextureData [РЕШЕНО]

Сообщение [bm] 28 фев 2014, 15:38

Diab10 писал(а):Спасибо :)

Скорость в 3-4 раза лучше, а сжатие где лучше?


Сжатие конечно у бандлов, тк там 7zip используется, но разница не значительная. Мне размер не так важен, как скорость загрузки и потребление памяти.
Mafia Rush: universal iOS game _https://goo.gl/CKq4D Android _https://goo.gl/slFLXx
Shooter Ball: Android _https://goo.gl/21QyPw
skype: bmindfield
Аватара пользователя
[bm]
UNIверсал
 
Сообщения: 426
Зарегистрирован: 11 май 2010, 22:33
Откуда: Россия, Ижевск

Re: LoadRawTextureData [РЕШЕНО]

Сообщение Neyl 28 фев 2014, 18:36

А по сравнению с несжатыми assetbundle скорость загрузки не сравнивали? Там она должна быть значительно выше. Что касается мешей, их ведь тоже можно "сериализовать" в бинарник и засунуть в архив. В этой написали нечто подобное.
Аватара пользователя
Neyl
UNIверсал
 
Сообщения: 404
Зарегистрирован: 20 июн 2010, 10:17

Re: LoadRawTextureData [РЕШЕНО]

Сообщение [bm] 03 мар 2014, 08:45

Neyl писал(а):А по сравнению с несжатыми assetbundle скорость загрузки не сравнивали? Там она должна быть значительно выше. Что касается мешей, их ведь тоже можно "сериализовать" в бинарник и засунуть в архив. В этой написали нечто подобное.


C не сжатыми бандлами конечно так же не медленно, но нельзя поставить пароль на бандл + размер файлов больше, а это трафик. В моем случае приходилось шифровать, а для расшифровки надо загрузить бандл в память, расшифровать, и создать бандл из памяти, что требует процессорное время и память. А с зипами проще, хоть гиговый архив дай, в память ничего не надо загружать, вытягивай прямо из архива, предоставив пароль хоть для отдельного файла в архиве.

Но это не главное, а главное то, что с выходом новой юньки, не надо будет перебандливать десятки тысяч текстур для каждой платформы отдельно. Почему-то наши бандлы текстур версии 4.2 не совместимы с версией 4.3 Оо

Терпение лопнуло.

Спасибо за ссылку на сериализацию меша. Будем пробовать.
Mafia Rush: universal iOS game _https://goo.gl/CKq4D Android _https://goo.gl/slFLXx
Shooter Ball: Android _https://goo.gl/21QyPw
skype: bmindfield
Аватара пользователя
[bm]
UNIверсал
 
Сообщения: 426
Зарегистрирован: 11 май 2010, 22:33
Откуда: Россия, Ижевск

Пред.

Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7